From 6a999d67d6e41df0fb9f63f0a379ebd389617a7e Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Mon, 14 Dec 2020 16:50:33 +0000 Subject: [PATCH] interface: RX/TX direction type in API Type: feature Signed-off-by: Neale Ranns Change-Id: I982205b48615395f19cbb36c73854fb5c3db45e8 --- src/vnet/interface.h | 10 ++++-- src/vnet/interface_types.api | 28 ++++++++++++----- src/vnet/interface_types_api.c | 49 +++++++++++++++++++++++++++++ src/vnet/interface_types_api.h | 70 ++++++------------------------------------ 4 files changed, 87 insertions(+), 70 deletions(-) create mode 100644 src/vnet/interface_types_api.c diff --git a/src/vnet/interface.h b/src/vnet/interface.h index 88f7c88eff9..6b22bc327df 100644 --- a/src/vnet/interface.h +++ b/src/vnet/interface.h @@ -364,11 +364,17 @@ typedef enum vnet_link_t_ _link <= VNET_LINK_NSH; \ _link++) +#define FOR_EACH_VNET_IP_LINK(_link) \ + for (_link = VNET_LINK_IP4; \ + _link <= VNET_LINK_IP6; \ + _link++) + /** - * @brief Number of link types. Not part of the enum so it does not have to be included in - * switch statements + * @brief Number of link types. Not part of the enum so it does not have to be + * included in switch statements */ #define VNET_LINK_NUM (VNET_LINK_NSH+1) +#define VNET_N_LINKS VNET_LINK_NUM /** * @brief Convert a link to to an Ethertype diff --git a/src/vnet/interface_types.api b/src/vnet/interface_types.api index c40f64efdea..48783874f4f 100644 --- a/src/vnet/interface_types.api +++ b/src/vnet/interface_types.api @@ -49,7 +49,7 @@ enum sub_if_flags SUB_IF_API_FLAG_DEFAULT = 32, SUB_IF_API_FLAG_OUTER_VLAN_ID_ANY = 64, SUB_IF_API_FLAG_INNER_VLAN_ID_ANY = 128, - SUB_IF_API_FLAG_MASK_VNET = 254, /* use with vnet_sub_interface_t raw_flags */ + SUB_IF_API_FLAG_MASK_VNET = 254, /* use with vnet_sub_interface_t raw_flags */ SUB_IF_API_FLAG_DOT1AH = 256, }; @@ -64,11 +64,25 @@ enum rx_mode enum if_type { - /* A hw interface. */ - IF_API_TYPE_HARDWARE = 0, + /* A hw interface. */ + IF_API_TYPE_HARDWARE = 0, - /* A sub-interface. */ - IF_API_TYPE_SUB = 1, - IF_API_TYPE_P2P = 2, - IF_API_TYPE_PIPE = 3, + /* A sub-interface. */ + IF_API_TYPE_SUB = 1, + IF_API_TYPE_P2P = 2, + IF_API_TYPE_PIPE = 3, }; + +enum direction:u8 +{ + RX = 0, + TX, +}; + +/* + * fd.io coding-style-patch-verification: ON + * + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ diff --git a/src/vnet/interface_types_api.c b/src/vnet/interface_types_api.c new file mode 100644 index 00000000000..5aba3d632f3 --- /dev/null +++ b/src/vnet/interface_types_api.c @@ -0,0 +1,49 @@ +/* Hey Emacs use -*- mode: C -*- */ +/* + * Copyright (c) 2020 Cisco and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include + +STATIC_ASSERT_SIZEOF (vl_api_direction_t, 1); + +int +direction_decode (vl_api_direction_t _dir, vlib_dir_t * out) +{ + switch (_dir) + { + case RX: + *out = VLIB_RX; + return (0); + case TX: + *out = VLIB_TX; + return (0); + } + return (VNET_API_ERROR_INVALID_VALUE); +} + +vl_api_direction_t +direction_encode (vlib_dir_t dir) +{ + return (vl_api_direction_t) dir; +} + +/* + * fd.io coding-style-patch-verification: ON + * + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ diff --git a/src/vnet/interface_types_api.h b/src/vnet/interface_types_api.h index 37f6bad8737..f1f165d79f4 100644 --- a/src/vnet/interface_types_api.h +++ b/src/vnet/interface_types_api.h @@ -1,6 +1,6 @@ /* Hey Emacs use -*- mode: C -*- */ /* - * Copyright (c) 2018 Cisco and/or its affiliates. + * Copyright (c) 2020 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -14,70 +14,18 @@ * limitations under the License. */ -typedef u32 interface_index; +#ifndef __INTERFACE_TYPES_API_H__ +#define __INTERFACE_TYPES_API_H__ -enum if_status_flags -{ - IF_STATUS_API_FLAG_ADMIN_UP = 1, - IF_STATUS_API_FLAG_LINK_UP = 2, -}; +#include +#include -/* Per protocol MTU */ -enum mtu_proto -{ - MTU_PROTO_API_L3, /* Default payload MTU (without L2 headers) */ - MTU_PROTO_API_IP4, /* Per-protocol MTUs overriding default */ - MTU_PROTO_API_IP6, - MTU_PROTO_API_MPLS, - MTU_PROTO_API_N, -}; +#include -enum link_duplex -{ - LINK_DUPLEX_API_UNKNOWN = 0, - LINK_DUPLEX_API_HALF = 1, - LINK_DUPLEX_API_FULL = 2, -}; +extern int direction_decode (vl_api_direction_t _dir, vlib_dir_t * out); +extern vl_api_direction_t direction_encode (vlib_dir_t dir); -enum sub_if_flags -{ - SUB_IF_API_FLAG_NO_TAGS = 1, - SUB_IF_API_FLAG_ONE_TAG = 2, - SUB_IF_API_FLAG_TWO_TAGS = 4, - SUB_IF_API_FLAG_DOT1AD = 8, - SUB_IF_API_FLAG_EXACT_MATCH = 16, - SUB_IF_API_FLAG_DEFAULT = 32, - SUB_IF_API_FLAG_OUTER_VLAN_ID_ANY = 64, - SUB_IF_API_FLAG_INNER_VLAN_ID_ANY = 128, - SUB_IF_API_FLAG_MASK_VNET = 254, /* use with vnet_sub_interface_t raw_flags */ - SUB_IF_API_FLAG_DOT1AH = 256, -}; - -enum rx_mode -{ - RX_MODE_API_UNKNOWN = 0, - RX_MODE_API_POLLING, - RX_MODE_API_INTERRUPT, - RX_MODE_API_ADAPTIVE, - RX_MODE_API_DEFAULT, -}; - -enum if_type -{ - /* A hw interface. */ - IF_API_TYPE_HARDWARE, - - /* A sub-interface. */ - IF_API_TYPE_SUB, - IF_API_TYPE_P2P, - IF_API_TYPE_PIPE, -}; - -enum direction:u8 -{ - DIRECTION_RX, - DIRECTION_TX, -}; +#endif /* * fd.io coding-style-patch-verification: ON -- 2.16.6