X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip_types_api.c;h=0343d2001ade4c14db603b2a60a425a0e0e766aa;hb=08ac303e43492c8b25911340fb62811289dd3935;hp=d84c1ff912641b4e5f02eecf83a8951f24fd1a74;hpb=50f0ac0f097e5495da1f2b1816106e3d420ff34b;p=vpp.git diff --git a/src/vnet/ip/ip_types_api.c b/src/vnet/ip/ip_types_api.c index d84c1ff9126..0343d2001ad 100644 --- a/src/vnet/ip/ip_types_api.c +++ b/src/vnet/ip/ip_types_api.c @@ -65,16 +65,16 @@ ip_address_family_encode (ip_address_family_t af) int ip_proto_decode (int _ipp, ip_protocol_t * out) { - vl_api_ip_proto_t ipp = clib_host_to_net_u32 (_ipp); + ip_protocol_t ipp = clib_host_to_net_u32 (_ipp); switch (ipp) { - case IP_API_PROTO_TCP: - *out = IP_PROTOCOL_TCP; - return (0); - case IP_API_PROTO_UDP: - *out = IP_PROTOCOL_UDP; - return (0); +#define ip_protocol(n,s) \ + case IP_PROTOCOL_##s: \ + *out = IP_PROTOCOL_##s; \ + return (0); +#include "protocols.def" +#undef ip_protocol } return (-1); } @@ -84,12 +84,11 @@ ip_proto_encode (ip_protocol_t ipp) { switch (ipp) { - case IP_PROTOCOL_UDP: - return (clib_host_to_net_u32 (IP_API_PROTO_UDP)); - case IP_PROTOCOL_TCP: - return (clib_host_to_net_u32 (IP_API_PROTO_TCP)); - default: - break; +#define ip_protocol(n,s) \ + case IP_PROTOCOL_##s: \ + return (clib_host_to_net_u32 (IP_PROTOCOL_##s)); +#include "protocols.def" +#undef ip_protocol } ASSERT (0); @@ -197,7 +196,7 @@ ip_prefix_decode (const vl_api_prefix_t * in, fib_prefix_t * out) out->fp_proto = FIB_PROTOCOL_IP6; break; } - out->fp_len = in->address_length; + out->fp_len = in->len; out->___fp___pad = 0; ip_address_decode (&in->address, &out->fp_addr); } @@ -205,7 +204,7 @@ ip_prefix_decode (const vl_api_prefix_t * in, fib_prefix_t * out) void ip_prefix_encode (const fib_prefix_t * in, vl_api_prefix_t * out) { - out->address_length = in->fp_len; + out->len = in->fp_len; ip_address_encode (&in->fp_addr, fib_proto_to_ip46 (in->fp_proto), &out->address); } @@ -230,6 +229,9 @@ ip_mprefix_decode (const vl_api_mprefix_t * in, mfib_prefix_t * out) ip_address_union_decode (&in->grp_address, in->af, &out->fp_grp_addr); ip_address_union_decode (&in->src_address, in->af, &out->fp_src_addr); + + if (!ip46_address_is_zero (&out->fp_src_addr)) + out->fp_len = (out->fp_proto == FIB_PROTOCOL_IP6 ? 256 : 64); } /*