pppoe: use explicit types in api 41/23841/3
authorOle Troan <ot@cisco.com>
Fri, 6 Dec 2019 13:23:10 +0000 (14:23 +0100)
committerAndrew Yourtchenko <ayourtch@gmail.com>
Sat, 7 Dec 2019 11:18:58 +0000 (11:18 +0000)
Type: fix
Signed-off-by: Ole Troan <ot@cisco.com>
Change-Id: Ifd1e1907740e55420dc040eb2afbbbf9887aea3c

src/plugins/pppoe/pppoe.api
src/plugins/pppoe/pppoe_api.c
src/plugins/pppoe/pppoe_test.c
src/plugins/pppoe/test/vpp_pppoe_interface.py
test/vpp_papi_provider.py

index 5f04233..fcbbf8a 100644 (file)
  * 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 <client-addr> session-id <nn> [encap-if-index <nn>] [decap-next [ip4|ip6|node <name>]] local-mac <local-mac> client-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 = "[<intfc> | sw_if_index <nn>]";
 };
 
 /** \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;
 };
 
 /*
index ccff405..ca92237 100644 (file)
 #include <vnet/api_errno.h>
 #include <vnet/feature/feature.h>
 #include <vnet/fib/fib_table.h>
-
+#include <vnet/ip/ip_types_api.h>
 #include <vppinfra/byte_order.h>
 #include <vlibmemory/api.h>
 
 
 #include <pppoe/pppoe.h>
 
+#include <vnet/format_fns.h>
 #include <pppoe/pppoe.api_enum.h>
 #include <pppoe/pppoe.api_types.h>
 
@@ -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);
index 72d1865..d66eab1 100644 (file)
@@ -19,6 +19,9 @@
 
 #include <vppinfra/error.h>
 #include <pppoe/pppoe.h>
+#include <vnet/format_fns.h>
+
+#include <vnet/ip/ip_types_api.h>
 
 #define __plugin_msg_base pppoe_test_main.msg_id_base
 #include <vlibapi/vat_helper_macros.h>
@@ -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,
index 9be9232..3767aa1 100644 (file)
@@ -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)
index 65b58f1..109ae0e 100644 (file)
@@ -995,7 +995,6 @@ class VppPapiProvider(object):
             client_mac,
             session_id=0,
             is_add=1,
-            is_ipv6=0,
             decap_vrf_id=0):
         """
 
@@ -1009,7 +1008,6 @@ class VppPapiProvider(object):
         """
         return self.api(self.papi.pppoe_add_del_session,
                         {'is_add': is_add,
-                         'is_ipv6': is_ipv6,
                          'session_id': session_id,
                          'client_ip': client_ip,
                          'decap_vrf_id': decap_vrf_id,