Line data Source code
1 : /* 2 : * Copyright (c) 2015 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 : * hdlc.h: types/functions for hdlc. 17 : * 18 : * Copyright (c) 2008 Eliot Dresselhaus 19 : * 20 : * Permission is hereby granted, free of charge, to any person obtaining 21 : * a copy of this software and associated documentation files (the 22 : * "Software"), to deal in the Software without restriction, including 23 : * without limitation the rights to use, copy, modify, merge, publish, 24 : * distribute, sublicense, and/or sell copies of the Software, and to 25 : * permit persons to whom the Software is furnished to do so, subject to 26 : * the following conditions: 27 : * 28 : * The above copyright notice and this permission notice shall be 29 : * included in all copies or substantial portions of the Software. 30 : * 31 : * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 32 : * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 33 : * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 34 : * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 35 : * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 36 : * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 37 : * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 38 : */ 39 : 40 : #ifndef included_hdlc_h 41 : #define included_hdlc_h 42 : 43 : #include <vnet/vnet.h> 44 : #include <vnet/hdlc/packet.h> 45 : 46 : extern vnet_hw_interface_class_t hdlc_hw_interface_class; 47 : 48 : typedef enum 49 : { 50 : #define hdlc_error(n,s) HDLC_ERROR_##n, 51 : #include <vnet/hdlc/error.def> 52 : #undef hdlc_error 53 : HDLC_N_ERROR, 54 : } hdlc_error_t; 55 : 56 : typedef struct 57 : { 58 : /* Name (a c string). */ 59 : char *name; 60 : 61 : /* HDLC protocol type in host byte order. */ 62 : hdlc_protocol_t protocol; 63 : 64 : /* Node which handles this type. */ 65 : u32 node_index; 66 : 67 : /* Next index for this type. */ 68 : u32 next_index; 69 : } hdlc_protocol_info_t; 70 : 71 : typedef struct 72 : { 73 : vlib_main_t *vlib_main; 74 : 75 : hdlc_protocol_info_t *protocol_infos; 76 : 77 : /* Hash tables mapping name/protocol to protocol info index. */ 78 : uword *protocol_info_by_name, *protocol_info_by_protocol; 79 : } hdlc_main_t; 80 : 81 : always_inline hdlc_protocol_info_t * 82 1725 : hdlc_get_protocol_info (hdlc_main_t * em, hdlc_protocol_t protocol) 83 : { 84 1725 : uword *p = hash_get (em->protocol_info_by_protocol, protocol); 85 1725 : return p ? vec_elt_at_index (em->protocol_infos, p[0]) : 0; 86 : } 87 : 88 : extern hdlc_main_t hdlc_main; 89 : 90 : /* Register given node index to take input for given hdlc type. */ 91 : void 92 : hdlc_register_input_type (vlib_main_t * vm, 93 : hdlc_protocol_t protocol, u32 node_index); 94 : 95 : format_function_t format_hdlc_protocol; 96 : format_function_t format_hdlc_header; 97 : format_function_t format_hdlc_header_with_length; 98 : 99 : /* Parse hdlc protocol as 0xXXXX or protocol name. 100 : In either host or network byte order. */ 101 : unformat_function_t unformat_hdlc_protocol_host_byte_order; 102 : unformat_function_t unformat_hdlc_protocol_net_byte_order; 103 : 104 : /* Parse hdlc header. */ 105 : unformat_function_t unformat_hdlc_header; 106 : unformat_function_t unformat_pg_hdlc_header; 107 : 108 : void 109 : hdlc_register_input_protocol (vlib_main_t * vm, 110 : hdlc_protocol_t protocol, u32 node_index); 111 : 112 : #endif /* included_hdlc_h */ 113 : 114 : /* 115 : * fd.io coding-style-patch-verification: ON 116 : * 117 : * Local Variables: 118 : * eval: (c-set-style "gnu") 119 : * End: 120 : */