From 04338e85ae4979222029d18c314a9cc09d723572 Mon Sep 17 00:00:00 2001 From: Ole Troan Date: Fri, 6 Dec 2019 14:23:10 +0100 Subject: pppoe: use explicit types in api Type: fix Signed-off-by: Ole Troan Change-Id: Ifd1e1907740e55420dc040eb2afbbbf9887aea3c --- src/plugins/pppoe/pppoe.api | 29 +++++++++++++-------------- src/plugins/pppoe/pppoe_api.c | 12 +++++------ src/plugins/pppoe/pppoe_test.c | 13 +++++++----- src/plugins/pppoe/test/vpp_pppoe_interface.py | 8 ++------ 4 files changed, 30 insertions(+), 32 deletions(-) (limited to 'src/plugins/pppoe') diff --git a/src/plugins/pppoe/pppoe.api b/src/plugins/pppoe/pppoe.api index 5f0423384eb..fcbbf8a2f97 100644 --- a/src/plugins/pppoe/pppoe.api +++ b/src/plugins/pppoe/pppoe.api @@ -13,13 +13,15 @@ * limitations under the License. */ -option version = "1.0.0"; +option version = "2.0.0"; +import "vnet/interface_types.api"; +import "vnet/ethernet/ethernet_types.api"; +import "vnet/ip/ip_types.api"; /** \brief Set or delete an PPPOE session @param client_index - opaque cookie to identify the sender @param context - sender context, to match reply w/ request @param is_add - add address if non-zero, else delete - @param is_ipv6 - client_ip and dst_address is ipv6 or not @param session_id - PPPoE session ID @param client_ip - PPPOE session's client address. @param decap_vrf_id - the vrf index for pppoe decaped packet @@ -29,12 +31,11 @@ define pppoe_add_del_session { u32 client_index; u32 context; - u8 is_add; - u8 is_ipv6; + bool is_add; u16 session_id; - u8 client_ip[16]; + vl_api_address_t client_ip; u32 decap_vrf_id; - u8 client_mac[6]; + vl_api_mac_address_t client_mac; option vat_help = "client-addr session-id [encap-if-index ] [decap-next [ip4|ip6|node ]] local-mac client-mac [del]"; }; @@ -47,7 +48,7 @@ define pppoe_add_del_session_reply { u32 context; i32 retval; - u32 sw_if_index; + vl_api_interface_index_t sw_if_index; }; /** \brief Dump PPPOE session @@ -59,14 +60,13 @@ define pppoe_session_dump { u32 client_index; u32 context; - u32 sw_if_index; + vl_api_interface_index_t sw_if_index; option vat_help = "[ | sw_if_index ]"; }; /** \brief dump details of an PPPOE session @param context - sender context, to match reply w/ request @param sw_if_index - software index of the interface - @param is_ipv6 - client_ip and dst_address is ipv6 or not @param session_id - PPPoE session ID @param client_ip - PPPOE session's client address. @param encap_if_index - the index of tx interface for pppoe encaped packet @@ -77,14 +77,13 @@ define pppoe_session_dump define pppoe_session_details { u32 context; - u32 sw_if_index; - u8 is_ipv6; + vl_api_interface_index_t sw_if_index; u16 session_id; - u8 client_ip[16]; - u32 encap_if_index; + vl_api_address_t client_ip; + vl_api_interface_index_t encap_if_index; u32 decap_vrf_id; - u8 local_mac[6]; - u8 client_mac[6]; + vl_api_mac_address_t local_mac; + vl_api_mac_address_t client_mac; }; /* diff --git a/src/plugins/pppoe/pppoe_api.c b/src/plugins/pppoe/pppoe_api.c index ccff405c677..ca9223779de 100644 --- a/src/plugins/pppoe/pppoe_api.c +++ b/src/plugins/pppoe/pppoe_api.c @@ -21,13 +21,14 @@ #include #include #include - +#include #include #include #include +#include #include #include @@ -53,11 +54,10 @@ static void vl_api_pppoe_add_del_session_t_handler vnet_pppoe_add_del_session_args_t a = { .is_add = mp->is_add, - .is_ip6 = mp->is_ipv6, .decap_fib_index = decap_fib_index, .session_id = ntohs (mp->session_id), - .client_ip = to_ip46 (mp->is_ipv6, mp->client_ip), }; + ip_address_decode (&mp->client_ip, &a.client_ip); clib_memcpy (a.client_mac, mp->client_mac, 6); u32 sw_if_index = ~0; @@ -83,14 +83,15 @@ static void send_pppoe_session_details rmp = vl_msg_api_alloc (sizeof (*rmp)); clib_memset (rmp, 0, sizeof (*rmp)); rmp->_vl_msg_id = ntohs (VL_API_PPPOE_SESSION_DETAILS); + ip_address_encode (&t->client_ip, is_ipv6 ? IP46_TYPE_IP6 : IP46_TYPE_IP4, + &rmp->client_ip); + if (is_ipv6) { - memcpy (rmp->client_ip, t->client_ip.ip6.as_u8, 16); rmp->decap_vrf_id = htonl (im6->fibs[t->decap_fib_index].ft_table_id); } else { - memcpy (rmp->client_ip, t->client_ip.ip4.as_u8, 4); rmp->decap_vrf_id = htonl (im4->fibs[t->decap_fib_index].ft_table_id); } rmp->session_id = htons (t->session_id); @@ -98,7 +99,6 @@ static void send_pppoe_session_details clib_memcpy (rmp->local_mac, t->local_mac, 6); clib_memcpy (rmp->client_mac, t->client_mac, 6); rmp->sw_if_index = htonl (t->sw_if_index); - rmp->is_ipv6 = is_ipv6; rmp->context = context; vl_api_send_msg (reg, (u8 *) rmp); diff --git a/src/plugins/pppoe/pppoe_test.c b/src/plugins/pppoe/pppoe_test.c index 72d186546e7..d66eab1ba63 100644 --- a/src/plugins/pppoe/pppoe_test.c +++ b/src/plugins/pppoe/pppoe_test.c @@ -19,6 +19,9 @@ #include #include +#include + +#include #define __plugin_msg_base pppoe_test_main.msg_id_base #include @@ -158,19 +161,19 @@ api_pppoe_add_del_session (vat_main_t * vam) M (PPPOE_ADD_DEL_SESSION, mp); + if (ipv6_set) { - clib_memcpy (mp->client_ip, &client_ip.ip6, sizeof (client_ip.ip6)); + ip_address_encode(&client_ip, IP46_TYPE_IP6, &mp->client_ip); } else { - clib_memcpy (mp->client_ip, &client_ip.ip4, sizeof (client_ip.ip4)); + ip_address_encode(&client_ip, IP46_TYPE_IP4, &mp->client_ip); } mp->decap_vrf_id = ntohl (decap_vrf_id); mp->session_id = ntohl (session_id); mp->is_add = is_add; - mp->is_ipv6 = ipv6_set; memcpy (mp->client_mac, client_mac, 6); S (mp); @@ -182,8 +185,8 @@ static void vl_api_pppoe_session_details_t_handler (vl_api_pppoe_session_details_t * mp) { vat_main_t *vam = &vat_main; - ip46_address_t client_ip = to_ip46 (mp->is_ipv6, mp->client_ip); - + ip46_address_t client_ip; + ip_address_decode(&mp->client_ip, &client_ip); print (vam->ofp, "%11d%14d%24U%14d%14d%30U%30U", ntohl (mp->sw_if_index), ntohl (mp->session_id), format_ip46_address, &client_ip, IP46_TYPE_ANY, diff --git a/src/plugins/pppoe/test/vpp_pppoe_interface.py b/src/plugins/pppoe/test/vpp_pppoe_interface.py index 9be92327dcf..3767aa1d086 100644 --- a/src/plugins/pppoe/test/vpp_pppoe_interface.py +++ b/src/plugins/pppoe/test/vpp_pppoe_interface.py @@ -19,21 +19,17 @@ class VppPppoeInterface(VppInterface): self.decap_vrf_id = decap_vrf_id def add_vpp_config(self): - cip = socket.inet_pton(socket.AF_INET, self.client_ip) - cmac = mac_pton(self.client_mac) r = self.test.vapi.pppoe_add_del_session( - cip, cmac, + self.client_ip, self.client_mac, session_id=self.session_id, decap_vrf_id=self.decap_vrf_id) self.set_sw_if_index(r.sw_if_index) self.generate_remote_hosts() def remove_vpp_config(self): - cip = socket.inet_pton(socket.AF_INET, self.client_ip) - cmac = mac_pton(self.client_mac) self.unconfig() self.test.vapi.pppoe_add_del_session( - cip, cmac, + self.client_ip, self.client_mac, session_id=self.session_id, decap_vrf_id=self.decap_vrf_id, is_add=0) -- cgit 1.2.3-korg