X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=vpp%2Fapi%2Fapi.c;h=8b801e5a5c048d6b7a5d67e9db9ed340eb5a99a0;hb=df921cc65a25f6fb71b1169db6ff004b4e45430e;hp=3bf2ed47088d3239dcf0c9b2e2e60fef1b69357f;hpb=c4cb44c05d121da2e0f0ccd39d5e1bf470731a85;p=vpp.git diff --git a/vpp/api/api.c b/vpp/api/api.c index 3bf2ed47088..8b801e5a5c0 100644 --- a/vpp/api/api.c +++ b/vpp/api/api.c @@ -4568,12 +4568,24 @@ vl_api_vxlan_gpe_add_del_tunnel_t_handler decap_fib_index = ntohl(mp->decap_vrf_id); } + /* Check src & dst are different */ + if ((a->is_ip6 && memcmp(mp->local, mp->remote, 16) == 0) || + (!a->is_ip6 && memcmp(mp->local, mp->remote, 4) == 0)) { + rv = VNET_API_ERROR_SAME_SRC_DST; + goto out; + } memset (a, 0, sizeof (*a)); a->is_add = mp->is_add; + a->is_ip6 = mp->is_ipv6; /* ip addresses sent in network byte order */ - a->local.as_u32 = ntohl(mp->local); - a->remote.as_u32 = ntohl(mp->remote); + if (a->is_ip6) { + clib_memcpy(&(a->local.ip6), mp->local, 16); + clib_memcpy(&(a->remote.ip6), mp->remote, 16); + } else { + clib_memcpy(&(a->local.ip4), mp->local, 4); + clib_memcpy(&(a->remote.ip4), mp->remote, 4); + } a->encap_fib_index = encap_fib_index; a->decap_fib_index = decap_fib_index; a->protocol = protocol;