lb: fix that lb_add_del_vip and lb_add_del_as api doesn't work correctly

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>
This commit is contained in:
Yulong Pei
2020-01-09 01:12:43 +08:00
committed by Ole Trøan
parent 720435d035
commit db43bb6af7
4 changed files with 18 additions and 12 deletions

View File

@@ -32,3 +32,4 @@ add_vpp_plugin(lb
lb_test.c
)
target_link_libraries(lb_test_plugin vatclient)

View 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)))

View 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;

View 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
)
##############################################################################