Line data Source code
1 : /* 2 : * Copyright (c) 2011-2016 Cisco and/or its affiliates. 3 : * Licensed under the Apache License, Version 2.0 (the "License"); 4 : * you may not use this file except in compliance with the License. 5 : * You may obtain a copy of the License at: 6 : * 7 : * http://www.apache.org/licenses/LICENSE-2.0 8 : * 9 : * Unless required by applicable law or agreed to in writing, software 10 : * distributed under the License is distributed on an "AS IS" BASIS, 11 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 : * See the License for the specific language governing permissions and 13 : * limitations under the License. 14 : */ 15 : /** 16 : * @file 17 : * @brief BFD protocol implementation 18 : */ 19 : #include <vnet/bfd/bfd_protocol.h> 20 : 21 : u8 22 903 : bfd_pkt_get_version (const bfd_pkt_t * pkt) 23 : { 24 903 : return pkt->head.vers_diag >> 5; 25 : } 26 : 27 : void 28 612 : bfd_pkt_set_version (bfd_pkt_t * pkt, int version) 29 : { 30 612 : pkt->head.vers_diag = 31 612 : (version << 5) | (pkt->head.vers_diag & ((1 << 5) - 1)); 32 612 : } 33 : 34 : u8 35 1275 : bfd_pkt_get_diag_code (const bfd_pkt_t * pkt) 36 : { 37 1275 : return pkt->head.vers_diag & ((1 << 5) - 1); 38 : } 39 : 40 : void 41 612 : bfd_pkt_set_diag_code (bfd_pkt_t * pkt, int value) 42 : { 43 612 : pkt->head.vers_diag = 44 612 : (pkt->head.vers_diag & ~((1 << 5) - 1)) | (value & ((1 << 5) - 1)); 45 612 : } 46 : 47 : u8 48 1278 : bfd_pkt_get_state (const bfd_pkt_t * pkt) 49 : { 50 1278 : return pkt->head.sta_flags >> 6; 51 : } 52 : 53 : void 54 612 : bfd_pkt_set_state (bfd_pkt_t * pkt, int value) 55 : { 56 612 : pkt->head.sta_flags = (value << 6) | (pkt->head.sta_flags & ((1 << 6) - 1)); 57 612 : } 58 : 59 : u8 60 890 : bfd_pkt_get_poll (const bfd_pkt_t * pkt) 61 : { 62 890 : return (pkt->head.sta_flags >> 5) & 1; 63 : } 64 : 65 : void 66 61 : bfd_pkt_set_poll (bfd_pkt_t * pkt) 67 : { 68 61 : pkt->head.sta_flags |= 1 << 5; 69 61 : } 70 : 71 : u8 72 892 : bfd_pkt_get_final (const bfd_pkt_t * pkt) 73 : { 74 892 : return (pkt->head.sta_flags >> 4) & 1; 75 : } 76 : 77 : void 78 0 : bfd_pkt_set_final (bfd_pkt_t * pkt) 79 : { 80 0 : pkt->head.sta_flags |= 1 << 4; 81 0 : } 82 : 83 : u8 84 383 : bfd_pkt_get_control_plane_independent (const bfd_pkt_t * pkt) 85 : { 86 383 : return (pkt->head.sta_flags >> 3) & 1; 87 : } 88 : 89 : #if 0 90 : void 91 : bfd_pkt_set_control_plane_independent (bfd_pkt_t * pkt) 92 : { 93 : pkt->head.sta_flags |= 1 << 3; 94 : } 95 : #endif 96 : 97 : u8 98 2046 : bfd_pkt_get_auth_present (const bfd_pkt_t * pkt) 99 : { 100 2046 : return (pkt->head.sta_flags >> 2) & 1; 101 : } 102 : 103 : void 104 163 : bfd_pkt_set_auth_present (bfd_pkt_t * pkt) 105 : { 106 163 : pkt->head.sta_flags |= 1 << 2; 107 163 : } 108 : 109 : u8 110 892 : bfd_pkt_get_demand (const bfd_pkt_t * pkt) 111 : { 112 892 : return (pkt->head.sta_flags >> 1) & 1; 113 : } 114 : 115 : #if 0 116 : void 117 : bfd_pkt_set_demand (bfd_pkt_t * pkt) 118 : { 119 : pkt->head.sta_flags |= 1 << 1; 120 : } 121 : #endif 122 : 123 : u8 124 903 : bfd_pkt_get_multipoint (const bfd_pkt_t * pkt) 125 : { 126 903 : return (pkt->head.sta_flags >> 0) & 1; 127 : } 128 : 129 : #if 0 130 : void 131 : bfd_pkt_set_multipoint (bfd_pkt_t * pkt) 132 : { 133 : pkt->head.sta_flags |= 1 << 0; 134 : } 135 : #endif 136 : 137 : u32 138 53 : bfd_max_key_len_for_auth_type (bfd_auth_type_e auth_type) 139 : { 140 : #define F(t, l, n, s) \ 141 : if (auth_type == t) \ 142 : { \ 143 : return l; \ 144 : } 145 53 : foreach_bfd_auth_type (F); 146 : #undef F 147 0 : return 0; 148 : } 149 : 150 : const char * 151 116 : bfd_auth_type_str (bfd_auth_type_e auth_type) 152 : { 153 : #define F(t, l, n, s) \ 154 : if (auth_type == t) \ 155 : { \ 156 : return s; \ 157 : } 158 116 : foreach_bfd_auth_type (F); 159 : #undef F 160 0 : return "UNKNOWN"; 161 : } 162 : 163 : const char * 164 491 : bfd_diag_code_string (bfd_diag_code_e diag) 165 : { 166 : #define F(n, t, s) \ 167 : case BFD_DIAG_CODE_NAME (t): \ 168 : return s; 169 491 : switch (diag) 170 : { 171 491 : foreach_bfd_diag_code (F)} 172 0 : return "UNKNOWN"; 173 : #undef F 174 : } 175 : 176 : const char * 177 1501 : bfd_state_string (bfd_state_e state) 178 : { 179 : #define F(n, t, s) \ 180 : case BFD_STATE_NAME (t): \ 181 : return s; 182 1501 : switch (state) 183 : { 184 1501 : foreach_bfd_state (F)} 185 0 : return "UNKNOWN"; 186 : #undef F 187 : } 188 : 189 : /* 190 : * fd.io coding-style-patch-verification: ON 191 : * 192 : * Local Variables: 193 : * eval: (c-set-style "gnu") 194 : * End: 195 : */