VPP-95 VXLAN add_del API intermittent failure 89/1289/1
authorChris Luke <chrisy@flirble.org>
Fri, 27 May 2016 16:11:24 +0000 (12:11 -0400)
committerChris Luke <chrisy@flirble.org>
Fri, 27 May 2016 16:13:51 +0000 (12:13 -0400)
The VXLAN add_del API sometimes rejects calls with
VNET_API_ERROR_SAME_SRC_DST when the two parameters are obviously
different. This is because the API code is checking the "is_ip6" flag in
a not-yet initialized area of memory leading to random results.

Also fix help text for vxlan_add_del_tunnel in vat.

This does not change the API; it repairs intermittent failure.

Change-Id: I41863694f478c1f669078f82f69d8cca4841c989
Signed-off-by: Chris Luke <chrisy@flirble.org>
vpp-api-test/vat/api_format.c
vpp/api/api.c

index 59da077..258e314 100644 (file)
@@ -11051,7 +11051,7 @@ _(l2tpv3_set_lookup_key,                                                \
   "lookup_v6_src | lookup_v6_dst | lookup_session_id")                  \
 _(sw_if_l2tpv3_tunnel_dump, "")                                         \
 _(vxlan_add_del_tunnel,                                                 \
-  "src <ip4-addr> dst <ip4-addr> vni <vni> [encap-vrf-id <nn>]\n"       \
+  "src <ip-addr> dst <ip-addr> vni <vni> [encap-vrf-id <nn>]\n"         \
   " [decap-next l2|ip4|ip6] [del]")                                     \
 _(vxlan_tunnel_dump, "[<intfc> | sw_if_index <nn>]")                    \
 _(gre_add_del_tunnel,                                                   \
index 8b801e5..52d0b2d 100644 (file)
@@ -4330,8 +4330,8 @@ static void vl_api_vxlan_add_del_tunnel_t_handler
     encap_fib_index = p[0];
 
     /* Check src & dst are different */
-    if ((a->is_ip6 && memcmp(mp->src_address, mp->dst_address, 16) == 0) ||
-       (!a->is_ip6 && memcmp(mp->src_address, mp->dst_address, 4) == 0)) {
+    if ((mp->is_ipv6 && memcmp(mp->src_address, mp->dst_address, 16) == 0) ||
+       (!mp->is_ipv6 && memcmp(mp->src_address, mp->dst_address, 4) == 0)) {
         rv = VNET_API_ERROR_SAME_SRC_DST;
         goto out;
     }