lb: fix that lb_add_del_vip and lb_add_del_as api doesn't work correctly 37/24237/2
authorYulong Pei <yulong.pei@intel.com>
Wed, 8 Jan 2020 17:12:43 +0000 (01:12 +0800)
committerOle Trøan <otroan@employees.org>
Fri, 17 Jan 2020 14:21:03 +0000 (14:21 +0000)
Currently if user want to set ip4 address to the api, it must convert to ip6
format, e.g. user want to ip4 "90.1.2.1" but must convert to "::5A01:0201",
it is not acceptable, this fix solved the issue.

Ticket: FDIO-753
Type: fix

Change-Id: I2ffa5a3d38400ee176cf601421074f71fc395f03
Signed-off-by: Yulong Pei <yulong.pei@intel.com>
src/plugins/lb/CMakeLists.txt
src/plugins/lb/api.c
src/plugins/lb/lb_test.c
src/vnet/CMakeLists.txt

index 69ca948..6fab329 100644 (file)
@@ -32,3 +32,4 @@ add_vpp_plugin(lb
   lb_test.c
 )
 
+target_link_libraries(lb_test_plugin vatclient)
index bef6969..0fed63f 100644 (file)
@@ -93,7 +93,7 @@ vl_api_lb_add_del_vip_t_handler
       mp->protocol = ~0;
     }
 
-  memcpy (&(args.prefix.ip6), &mp->pfx.address.un.ip6, sizeof(args.prefix.ip6));
+  ip_address_decode (&mp->pfx.address, &(args.prefix));
 
   if (mp->is_del) {
     u32 vip_index;
@@ -183,20 +183,15 @@ vl_api_lb_add_del_as_t_handler
   int rv = 0;
   u32 vip_index;
   ip46_address_t vip_ip_prefix;
+  ip46_address_t as_address;
 
   /* if port == 0, it means all-port VIP */
   if (mp->port == 0)
     {
       mp->protocol = ~0;
     }
-
-  memcpy(&vip_ip_prefix.ip6, &mp->pfx.address.un.ip6,
-              sizeof(vip_ip_prefix.ip6));
-
-  ip46_address_t as_address;
-
-  memcpy(&as_address.ip6, &mp->as_address.un.ip6,
-         sizeof(as_address.ip6));
+  ip_address_decode (&mp->pfx.address, &vip_ip_prefix);
+  ip_address_decode (&mp->as_address, &as_address);
 
   if ((rv = lb_vip_find_index(&vip_ip_prefix, mp->pfx.len,
                               mp->protocol, ntohs(mp->port), &vip_index)))
index 007303f..80fc38e 100644 (file)
@@ -16,6 +16,7 @@
 #include <vat/vat.h>
 #include <vlibapi/api.h>
 #include <vlibmemory/api.h>
+#include <vnet/ip/ip_types_api.h>
 
 #include <vppinfra/error.h>
 #include <lb/lb.h>
@@ -189,7 +190,7 @@ static int api_lb_add_del_vip (vat_main_t * vam)
     }
 
   M(LB_ADD_DEL_VIP, mp);
-  clib_memcpy (mp->pfx.address.un.ip6, &ip_prefix.ip6, sizeof (ip_prefix.ip6));
+  ip_address_encode(&ip_prefix, IP46_TYPE_ANY, &mp->pfx.address);
   mp->pfx.len = prefix_length;
   mp->protocol = (u8)protocol;
   mp->port = htons((u16)port);
@@ -264,11 +265,11 @@ static int api_lb_add_del_as (vat_main_t * vam)
   }
 
   M(LB_ADD_DEL_AS, mp);
-  clib_memcpy (mp->pfx.address.un.ip6, &vip_prefix.ip6, sizeof (vip_prefix.ip6));
+  ip_address_encode(&vip_prefix, IP46_TYPE_ANY, &mp->pfx.address);
   mp->pfx.len = vip_plen;
   mp->protocol = (u8)protocol;
   mp->port = htons((u16)port);
-  clib_memcpy (&mp->as_address.un.ip6, &as_addr.ip6, sizeof (as_addr.ip6));
+  ip_address_encode(&as_addr, IP46_TYPE_ANY, &mp->as_address);
   mp->is_del = is_del;
   mp->is_flush = is_flush;
 
index c2a0dd5..04a8b1d 100644 (file)
@@ -1587,3 +1587,12 @@ add_vpp_library(vnet
 )
 
 ##############################################################################
+# vpp api test client library
+##############################################################################
+
+add_vpp_library (vatclient
+  SOURCES ip/ip_types_api.c
+  DEPENDS api_headers
+)
+
+##############################################################################