diff options
| author | whitespace / reindent <invalid@invalid.invalid> | 2017-07-17 14:03:14 +0200 |
|---|---|---|
| committer | whitespace / reindent <invalid@invalid.invalid> | 2017-07-17 14:04:07 +0200 |
| commit | d62a17aedeb0eebdba98238874bb13d62c48dbf9 (patch) | |
| tree | 3b319b1d61c8b85b4d1f06adf8b844bb8a9b5107 /bgpd/rfapi/rfapi_encap_tlv.c | |
| parent | 888ac268a0077fc9ebd1218cec6ae472af0bfc40 (diff) | |
*: reindentreindent-master-after
indent.py `git ls-files | pcregrep '\.[ch]$' | pcregrep -v '^(ldpd|babeld|nhrpd)/'`
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'bgpd/rfapi/rfapi_encap_tlv.c')
| -rw-r--r-- | bgpd/rfapi/rfapi_encap_tlv.c | 1240 |
1 files changed, 589 insertions, 651 deletions
diff --git a/bgpd/rfapi/rfapi_encap_tlv.c b/bgpd/rfapi/rfapi_encap_tlv.c index 24bfb41bfa..f31342e192 100644 --- a/bgpd/rfapi/rfapi_encap_tlv.c +++ b/bgpd/rfapi/rfapi_encap_tlv.c @@ -1,4 +1,4 @@ -/* +/* * Copyright 2015-2016, LabN Consulting, L.L.C. * * This program is free software; you can redistribute it and/or @@ -37,374 +37,350 @@ #include "bgpd/rfapi/bgp_rfapi_cfg.h" #include "bgpd/rfapi/vnc_debug.h" -static void -rfapi_add_endpoint_address_to_subtlv ( - struct bgp *bgp, - struct rfapi_ip_addr *ea, - struct bgp_tea_subtlv_remote_endpoint *subtlv) +static void rfapi_add_endpoint_address_to_subtlv( + struct bgp *bgp, struct rfapi_ip_addr *ea, + struct bgp_tea_subtlv_remote_endpoint *subtlv) { - subtlv->family = ea->addr_family; - if (subtlv->family == AF_INET) - subtlv->ip_address.v4 = ea->addr.v4; - else - subtlv->ip_address.v6 = ea->addr.v6; - subtlv->as4 = htonl (bgp->as); + subtlv->family = ea->addr_family; + if (subtlv->family == AF_INET) + subtlv->ip_address.v4 = ea->addr.v4; + else + subtlv->ip_address.v6 = ea->addr.v6; + subtlv->as4 = htonl(bgp->as); } bgp_encap_types -rfapi_tunneltype_option_to_tlv ( - struct bgp *bgp, - struct rfapi_ip_addr *ea, - struct rfapi_tunneltype_option *tto, - struct attr *attr, - int always_add) +rfapi_tunneltype_option_to_tlv(struct bgp *bgp, struct rfapi_ip_addr *ea, + struct rfapi_tunneltype_option *tto, + struct attr *attr, int always_add) { -#define _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS(ttype) \ - if ((always_add || (bgp->rfapi_cfg && \ - !CHECK_FLAG(bgp->rfapi_cfg->flags, \ - BGP_VNC_CONFIG_ADV_UN_METHOD_ENCAP))) && \ - ea && !CHECK_SUBTLV_FLAG(&tto->bgpinfo.ttype, \ - BGP_TEA_SUBTLV_REMOTE_ENDPOINT)) { \ - rfapi_add_endpoint_address_to_subtlv(bgp, ea, \ - &tto->bgpinfo.ttype.st_endpoint); \ - SET_SUBTLV_FLAG(&tto->bgpinfo.ttype, BGP_TEA_SUBTLV_REMOTE_ENDPOINT); \ - } - - struct rfapi_tunneltype_option dto; - if (tto == NULL) - { /* create default type */ - tto = &dto; - memset (tto, 0, sizeof (dto)); - tto->type = RFAPI_BGP_ENCAP_TYPE_DEFAULT; - } - switch (tto->type) - { - case BGP_ENCAP_TYPE_L2TPV3_OVER_IP: - _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS (l2tpv3_ip); - bgp_encap_type_l2tpv3overip_to_tlv (&tto->bgpinfo.l2tpv3_ip, attr); - break; - - case BGP_ENCAP_TYPE_GRE: - _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS (gre); - bgp_encap_type_gre_to_tlv (&tto->bgpinfo.gre, attr); - break; - - case BGP_ENCAP_TYPE_TRANSMIT_TUNNEL_ENDPOINT: - _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS (transmit_tunnel_endpoint); - bgp_encap_type_transmit_tunnel_endpoint (&tto->bgpinfo.transmit_tunnel_endpoint, - attr); - break; - - case BGP_ENCAP_TYPE_IPSEC_IN_TUNNEL_MODE: - _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS (ipsec_tunnel); - bgp_encap_type_ipsec_in_tunnel_mode_to_tlv (&tto->bgpinfo.ipsec_tunnel, - attr); - break; - - case BGP_ENCAP_TYPE_IP_IN_IP_TUNNEL_WITH_IPSEC_TRANSPORT_MODE: - _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS (ip_ipsec); - bgp_encap_type_ip_in_ip_tunnel_with_ipsec_transport_mode_to_tlv - (&tto->bgpinfo.ip_ipsec, attr); - break; - - case BGP_ENCAP_TYPE_MPLS_IN_IP_TUNNEL_WITH_IPSEC_TRANSPORT_MODE: - _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS (mpls_ipsec); - bgp_encap_type_mpls_in_ip_tunnel_with_ipsec_transport_mode_to_tlv - (&tto->bgpinfo.mpls_ipsec, attr); - break; - - case BGP_ENCAP_TYPE_IP_IN_IP: - _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS (ip_ip); - bgp_encap_type_ip_in_ip_to_tlv (&tto->bgpinfo.ip_ip, attr); - break; - - case BGP_ENCAP_TYPE_VXLAN: - _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS (vxlan); - bgp_encap_type_vxlan_to_tlv (&tto->bgpinfo.vxlan, attr); - break; - - case BGP_ENCAP_TYPE_NVGRE: - _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS (nvgre); - bgp_encap_type_nvgre_to_tlv (&tto->bgpinfo.nvgre, attr); - break; - - case BGP_ENCAP_TYPE_MPLS: - /* nothing to do for MPLS */ - break; - - case BGP_ENCAP_TYPE_MPLS_IN_GRE: - _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS (mpls_gre); - bgp_encap_type_mpls_in_gre_to_tlv (&tto->bgpinfo.mpls_gre, attr); - break; - - case BGP_ENCAP_TYPE_VXLAN_GPE: - _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS (vxlan_gpe); - bgp_encap_type_vxlan_gpe_to_tlv (&tto->bgpinfo.vxlan_gpe, attr); - break; - - case BGP_ENCAP_TYPE_MPLS_IN_UDP: - _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS (mpls_udp); - bgp_encap_type_mpls_in_udp_to_tlv (&tto->bgpinfo.mpls_udp, attr); - break; - - case BGP_ENCAP_TYPE_PBB: - _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS (pbb); - bgp_encap_type_pbb_to_tlv (&tto->bgpinfo.pbb, attr); - break; - - default: - assert (0); - } - return tto->type; +#define _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS(ttype) \ + if ((always_add \ + || (bgp->rfapi_cfg \ + && !CHECK_FLAG(bgp->rfapi_cfg->flags, \ + BGP_VNC_CONFIG_ADV_UN_METHOD_ENCAP))) \ + && ea \ + && !CHECK_SUBTLV_FLAG(&tto->bgpinfo.ttype, \ + BGP_TEA_SUBTLV_REMOTE_ENDPOINT)) { \ + rfapi_add_endpoint_address_to_subtlv( \ + bgp, ea, &tto->bgpinfo.ttype.st_endpoint); \ + SET_SUBTLV_FLAG(&tto->bgpinfo.ttype, \ + BGP_TEA_SUBTLV_REMOTE_ENDPOINT); \ + } + + struct rfapi_tunneltype_option dto; + if (tto == NULL) { /* create default type */ + tto = &dto; + memset(tto, 0, sizeof(dto)); + tto->type = RFAPI_BGP_ENCAP_TYPE_DEFAULT; + } + switch (tto->type) { + case BGP_ENCAP_TYPE_L2TPV3_OVER_IP: + _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS(l2tpv3_ip); + bgp_encap_type_l2tpv3overip_to_tlv(&tto->bgpinfo.l2tpv3_ip, + attr); + break; + + case BGP_ENCAP_TYPE_GRE: + _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS(gre); + bgp_encap_type_gre_to_tlv(&tto->bgpinfo.gre, attr); + break; + + case BGP_ENCAP_TYPE_TRANSMIT_TUNNEL_ENDPOINT: + _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS(transmit_tunnel_endpoint); + bgp_encap_type_transmit_tunnel_endpoint( + &tto->bgpinfo.transmit_tunnel_endpoint, attr); + break; + + case BGP_ENCAP_TYPE_IPSEC_IN_TUNNEL_MODE: + _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS(ipsec_tunnel); + bgp_encap_type_ipsec_in_tunnel_mode_to_tlv( + &tto->bgpinfo.ipsec_tunnel, attr); + break; + + case BGP_ENCAP_TYPE_IP_IN_IP_TUNNEL_WITH_IPSEC_TRANSPORT_MODE: + _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS(ip_ipsec); + bgp_encap_type_ip_in_ip_tunnel_with_ipsec_transport_mode_to_tlv( + &tto->bgpinfo.ip_ipsec, attr); + break; + + case BGP_ENCAP_TYPE_MPLS_IN_IP_TUNNEL_WITH_IPSEC_TRANSPORT_MODE: + _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS(mpls_ipsec); + bgp_encap_type_mpls_in_ip_tunnel_with_ipsec_transport_mode_to_tlv( + &tto->bgpinfo.mpls_ipsec, attr); + break; + + case BGP_ENCAP_TYPE_IP_IN_IP: + _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS(ip_ip); + bgp_encap_type_ip_in_ip_to_tlv(&tto->bgpinfo.ip_ip, attr); + break; + + case BGP_ENCAP_TYPE_VXLAN: + _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS(vxlan); + bgp_encap_type_vxlan_to_tlv(&tto->bgpinfo.vxlan, attr); + break; + + case BGP_ENCAP_TYPE_NVGRE: + _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS(nvgre); + bgp_encap_type_nvgre_to_tlv(&tto->bgpinfo.nvgre, attr); + break; + + case BGP_ENCAP_TYPE_MPLS: + /* nothing to do for MPLS */ + break; + + case BGP_ENCAP_TYPE_MPLS_IN_GRE: + _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS(mpls_gre); + bgp_encap_type_mpls_in_gre_to_tlv(&tto->bgpinfo.mpls_gre, attr); + break; + + case BGP_ENCAP_TYPE_VXLAN_GPE: + _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS(vxlan_gpe); + bgp_encap_type_vxlan_gpe_to_tlv(&tto->bgpinfo.vxlan_gpe, attr); + break; + + case BGP_ENCAP_TYPE_MPLS_IN_UDP: + _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS(mpls_udp); + bgp_encap_type_mpls_in_udp_to_tlv(&tto->bgpinfo.mpls_udp, attr); + break; + + case BGP_ENCAP_TYPE_PBB: + _RTTO_MAYBE_ADD_ENDPOINT_ADDRESS(pbb); + bgp_encap_type_pbb_to_tlv(&tto->bgpinfo.pbb, attr); + break; + + default: + assert(0); + } + return tto->type; } -struct rfapi_un_option * -rfapi_encap_tlv_to_un_option (struct attr *attr) +struct rfapi_un_option *rfapi_encap_tlv_to_un_option(struct attr *attr) { - struct rfapi_un_option *uo = NULL; - struct rfapi_tunneltype_option *tto; - int rc; - struct bgp_attr_encap_subtlv *stlv; - - /* no tunnel encap attr stored */ - if (!attr->encap_tunneltype) - return NULL; - - stlv = attr->encap_subtlvs; - - uo = XCALLOC (MTYPE_RFAPI_UN_OPTION, sizeof (struct rfapi_un_option)); - assert (uo); - uo->type = RFAPI_UN_OPTION_TYPE_TUNNELTYPE; - uo->v.tunnel.type = attr->encap_tunneltype; - tto = &uo->v.tunnel; - - switch (attr->encap_tunneltype) - { - case BGP_ENCAP_TYPE_L2TPV3_OVER_IP: - rc = tlv_to_bgp_encap_type_l2tpv3overip (stlv, &tto->bgpinfo.l2tpv3_ip); - break; - - case BGP_ENCAP_TYPE_GRE: - rc = tlv_to_bgp_encap_type_gre (stlv, &tto->bgpinfo.gre); - break; - - case BGP_ENCAP_TYPE_TRANSMIT_TUNNEL_ENDPOINT: - rc = tlv_to_bgp_encap_type_transmit_tunnel_endpoint (stlv, - &tto->bgpinfo.transmit_tunnel_endpoint); - break; - - case BGP_ENCAP_TYPE_IPSEC_IN_TUNNEL_MODE: - rc = tlv_to_bgp_encap_type_ipsec_in_tunnel_mode (stlv, - &tto->bgpinfo.ipsec_tunnel); - break; - - case BGP_ENCAP_TYPE_IP_IN_IP_TUNNEL_WITH_IPSEC_TRANSPORT_MODE: - rc = - tlv_to_bgp_encap_type_ip_in_ip_tunnel_with_ipsec_transport_mode (stlv, - &tto->bgpinfo.ip_ipsec); - break; - - case BGP_ENCAP_TYPE_MPLS_IN_IP_TUNNEL_WITH_IPSEC_TRANSPORT_MODE: - rc = - tlv_to_bgp_encap_type_mpls_in_ip_tunnel_with_ipsec_transport_mode - (stlv, &tto->bgpinfo.mpls_ipsec); - break; - - case BGP_ENCAP_TYPE_IP_IN_IP: - rc = tlv_to_bgp_encap_type_ip_in_ip (stlv, &tto->bgpinfo.ip_ip); - break; - - case BGP_ENCAP_TYPE_VXLAN: - rc = tlv_to_bgp_encap_type_vxlan (stlv, &tto->bgpinfo.vxlan); - break; - - case BGP_ENCAP_TYPE_NVGRE: - rc = tlv_to_bgp_encap_type_nvgre (stlv, &tto->bgpinfo.nvgre); - break; - - case BGP_ENCAP_TYPE_MPLS: - rc = tlv_to_bgp_encap_type_mpls (stlv, &tto->bgpinfo.mpls); - break; - - case BGP_ENCAP_TYPE_MPLS_IN_GRE: - rc = tlv_to_bgp_encap_type_mpls_in_gre (stlv, &tto->bgpinfo.mpls_gre); - break; - - case BGP_ENCAP_TYPE_VXLAN_GPE: - rc = tlv_to_bgp_encap_type_vxlan_gpe (stlv, &tto->bgpinfo.vxlan_gpe); - break; - - case BGP_ENCAP_TYPE_MPLS_IN_UDP: - rc = tlv_to_bgp_encap_type_mpls_in_udp (stlv, &tto->bgpinfo.mpls_udp); - break; - - case BGP_ENCAP_TYPE_PBB: - rc = tlv_to_bgp_encap_type_pbb (stlv, &tto->bgpinfo.pbb); - break; - - default: - vnc_zlog_debug_verbose ("%s: unknown tunnel type %d", - __func__, attr->encap_tunneltype); - rc = -1; - break; - } - if (rc) - { - XFREE (MTYPE_RFAPI_UN_OPTION, uo); - uo = NULL; - } - return uo; + struct rfapi_un_option *uo = NULL; + struct rfapi_tunneltype_option *tto; + int rc; + struct bgp_attr_encap_subtlv *stlv; + + /* no tunnel encap attr stored */ + if (!attr->encap_tunneltype) + return NULL; + + stlv = attr->encap_subtlvs; + + uo = XCALLOC(MTYPE_RFAPI_UN_OPTION, sizeof(struct rfapi_un_option)); + assert(uo); + uo->type = RFAPI_UN_OPTION_TYPE_TUNNELTYPE; + uo->v.tunnel.type = attr->encap_tunneltype; + tto = &uo->v.tunnel; + + switch (attr->encap_tunneltype) { + case BGP_ENCAP_TYPE_L2TPV3_OVER_IP: + rc = tlv_to_bgp_encap_type_l2tpv3overip( + stlv, &tto->bgpinfo.l2tpv3_ip); + break; + + case BGP_ENCAP_TYPE_GRE: + rc = tlv_to_bgp_encap_type_gre(stlv, &tto->bgpinfo.gre); + break; + + case BGP_ENCAP_TYPE_TRANSMIT_TUNNEL_ENDPOINT: + rc = tlv_to_bgp_encap_type_transmit_tunnel_endpoint( + stlv, &tto->bgpinfo.transmit_tunnel_endpoint); + break; + + case BGP_ENCAP_TYPE_IPSEC_IN_TUNNEL_MODE: + rc = tlv_to_bgp_encap_type_ipsec_in_tunnel_mode( + stlv, &tto->bgpinfo.ipsec_tunnel); + break; + + case BGP_ENCAP_TYPE_IP_IN_IP_TUNNEL_WITH_IPSEC_TRANSPORT_MODE: + rc = tlv_to_bgp_encap_type_ip_in_ip_tunnel_with_ipsec_transport_mode( + stlv, &tto->bgpinfo.ip_ipsec); + break; + + case BGP_ENCAP_TYPE_MPLS_IN_IP_TUNNEL_WITH_IPSEC_TRANSPORT_MODE: + rc = tlv_to_bgp_encap_type_mpls_in_ip_tunnel_with_ipsec_transport_mode( + stlv, &tto->bgpinfo.mpls_ipsec); + break; + + case BGP_ENCAP_TYPE_IP_IN_IP: + rc = tlv_to_bgp_encap_type_ip_in_ip(stlv, &tto->bgpinfo.ip_ip); + break; + + case BGP_ENCAP_TYPE_VXLAN: + rc = tlv_to_bgp_encap_type_vxlan(stlv, &tto->bgpinfo.vxlan); + break; + + case BGP_ENCAP_TYPE_NVGRE: + rc = tlv_to_bgp_encap_type_nvgre(stlv, &tto->bgpinfo.nvgre); + break; + + case BGP_ENCAP_TYPE_MPLS: + rc = tlv_to_bgp_encap_type_mpls(stlv, &tto->bgpinfo.mpls); + break; + + case BGP_ENCAP_TYPE_MPLS_IN_GRE: + rc = tlv_to_bgp_encap_type_mpls_in_gre(stlv, + &tto->bgpinfo.mpls_gre); + break; + + case BGP_ENCAP_TYPE_VXLAN_GPE: + rc = tlv_to_bgp_encap_type_vxlan_gpe(stlv, + &tto->bgpinfo.vxlan_gpe); + break; + + case BGP_ENCAP_TYPE_MPLS_IN_UDP: + rc = tlv_to_bgp_encap_type_mpls_in_udp(stlv, + &tto->bgpinfo.mpls_udp); + break; + + case BGP_ENCAP_TYPE_PBB: + rc = tlv_to_bgp_encap_type_pbb(stlv, &tto->bgpinfo.pbb); + break; + + default: + vnc_zlog_debug_verbose("%s: unknown tunnel type %d", __func__, + attr->encap_tunneltype); + rc = -1; + break; + } + if (rc) { + XFREE(MTYPE_RFAPI_UN_OPTION, uo); + uo = NULL; + } + return uo; } /*********************************************************************** * SUBTLV PRINT ***********************************************************************/ -static void -subtlv_print_encap_l2tpv3_over_ip ( - void *stream, - int column_offset, - struct bgp_tea_subtlv_encap_l2tpv3_over_ip *st) +static void subtlv_print_encap_l2tpv3_over_ip( + void *stream, int column_offset, + struct bgp_tea_subtlv_encap_l2tpv3_over_ip *st) { - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; - - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!st) - return; - - fp (out, "%*s%s%s", column_offset, "", "SubTLV: Encap(L2TPv3 over IP)", - vty_newline); - fp (out, "%*s SessionID: %d%s", column_offset, "", st->sessionid, - vty_newline); - fp (out, "%*s Cookie: (length %d)%s", column_offset, "", st->cookie_length, - vty_newline); + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; + + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!st) + return; + + fp(out, "%*s%s%s", column_offset, "", "SubTLV: Encap(L2TPv3 over IP)", + vty_newline); + fp(out, "%*s SessionID: %d%s", column_offset, "", st->sessionid, + vty_newline); + fp(out, "%*s Cookie: (length %d)%s", column_offset, "", + st->cookie_length, vty_newline); } -static void -subtlv_print_encap_gre ( - void *stream, - int column_offset, - struct bgp_tea_subtlv_encap_gre_key *st) +static void subtlv_print_encap_gre(void *stream, int column_offset, + struct bgp_tea_subtlv_encap_gre_key *st) { - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; - - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!st) - return; - - fp (out, "%*s%s%s", column_offset, "", "SubTLV: Encap(GRE)", vty_newline); - fp (out, "%*s GRE key: %d (0x%x)%s", column_offset, "", st->gre_key, - st->gre_key, vty_newline); + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; + + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!st) + return; + + fp(out, "%*s%s%s", column_offset, "", "SubTLV: Encap(GRE)", + vty_newline); + fp(out, "%*s GRE key: %d (0x%x)%s", column_offset, "", st->gre_key, + st->gre_key, vty_newline); } -static void -subtlv_print_encap_pbb ( - void *stream, - int column_offset, - struct bgp_tea_subtlv_encap_pbb *st) +static void subtlv_print_encap_pbb(void *stream, int column_offset, + struct bgp_tea_subtlv_encap_pbb *st) { - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; - - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!st) - return; - - fp (out, "%*s%s%s", column_offset, "", "SubTLV: Encap(PBB)", vty_newline); - if (st->flag_isid) - { - fp (out, "%*s ISID: %d (0x%x)%s", column_offset, "", st->isid, - st->isid, vty_newline); - } - if (st->flag_vid) - { - fp (out, "%*s VID: %d (0x%x)%s", column_offset, "", st->vid, st->vid, - vty_newline); - } - fp (out, "%*s MACADDR %02x:%02x:%02x:%02x:%02x:%02x%s", - column_offset, "", - st->macaddr[0], - st->macaddr[1], - st->macaddr[2], - st->macaddr[3], st->macaddr[4], st->macaddr[5], vty_newline); + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; + + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!st) + return; + + fp(out, "%*s%s%s", column_offset, "", "SubTLV: Encap(PBB)", + vty_newline); + if (st->flag_isid) { + fp(out, "%*s ISID: %d (0x%x)%s", column_offset, "", st->isid, + st->isid, vty_newline); + } + if (st->flag_vid) { + fp(out, "%*s VID: %d (0x%x)%s", column_offset, "", st->vid, + st->vid, vty_newline); + } + fp(out, "%*s MACADDR %02x:%02x:%02x:%02x:%02x:%02x%s", column_offset, + "", st->macaddr[0], st->macaddr[1], st->macaddr[2], st->macaddr[3], + st->macaddr[4], st->macaddr[5], vty_newline); } -static void -subtlv_print_proto_type ( - void *stream, - int column_offset, - struct bgp_tea_subtlv_proto_type *st) +static void subtlv_print_proto_type(void *stream, int column_offset, + struct bgp_tea_subtlv_proto_type *st) { - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; - - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!st) - return; - - fp (out, "%*s%s%s", column_offset, "", "SubTLV: Encap(Proto Type)", - vty_newline); - fp (out, "%*s Proto %d (0x%x)%s", column_offset, "", st->proto, st->proto, - vty_newline); + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; + + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!st) + return; + + fp(out, "%*s%s%s", column_offset, "", "SubTLV: Encap(Proto Type)", + vty_newline); + fp(out, "%*s Proto %d (0x%x)%s", column_offset, "", st->proto, + st->proto, vty_newline); } -static void -subtlv_print_color ( - void *stream, - int column_offset, - struct bgp_tea_subtlv_color *st) +static void subtlv_print_color(void *stream, int column_offset, + struct bgp_tea_subtlv_color *st) { - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; - - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!st) - return; - - fp (out, "%*s%s%s", column_offset, "", "SubTLV: Color", vty_newline); - fp (out, "%*s Color: %d (0x%x)", column_offset, "", st->color, st->color, - vty_newline); + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; + + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!st) + return; + + fp(out, "%*s%s%s", column_offset, "", "SubTLV: Color", vty_newline); + fp(out, "%*s Color: %d (0x%x)", column_offset, "", st->color, + st->color, vty_newline); } -static void -subtlv_print_ipsec_ta ( - void *stream, - int column_offset, - struct bgp_tea_subtlv_ipsec_ta *st) +static void subtlv_print_ipsec_ta(void *stream, int column_offset, + struct bgp_tea_subtlv_ipsec_ta *st) { - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; - - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!st) - return; - - fp (out, "%*s%s%s", column_offset, "", "SubTLV: IPSEC TA", vty_newline); - fp (out, "%*s Authenticator Type: %d (0x%x)", column_offset, "", - st->authenticator_type, st->authenticator_type, vty_newline); - fp (out, "%*s Authenticator: (length %d)", column_offset, "", - st->authenticator_length, vty_newline); + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; + + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!st) + return; + + fp(out, "%*s%s%s", column_offset, "", "SubTLV: IPSEC TA", vty_newline); + fp(out, "%*s Authenticator Type: %d (0x%x)", column_offset, "", + st->authenticator_type, st->authenticator_type, vty_newline); + fp(out, "%*s Authenticator: (length %d)", column_offset, "", + st->authenticator_length, vty_newline); } /*********************************************************************** @@ -412,396 +388,358 @@ subtlv_print_ipsec_ta ( ***********************************************************************/ static void -print_encap_type_l2tpv3overip ( - void *stream, - int column_offset, - struct bgp_encap_type_l2tpv3_over_ip *bet) +print_encap_type_l2tpv3overip(void *stream, int column_offset, + struct bgp_encap_type_l2tpv3_over_ip *bet) { - const char *type = "L2TPv3 over IP"; - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; - - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!bet) - return; - - fp (out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); - - subtlv_print_encap_l2tpv3_over_ip (stream, column_offset + 2, - &bet->st_encap); - subtlv_print_proto_type (stream, column_offset + 2, &bet->st_proto); - subtlv_print_color (stream, column_offset + 2, &bet->st_color); + const char *type = "L2TPv3 over IP"; + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; + + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!bet) + return; + + fp(out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); + + subtlv_print_encap_l2tpv3_over_ip(stream, column_offset + 2, + &bet->st_encap); + subtlv_print_proto_type(stream, column_offset + 2, &bet->st_proto); + subtlv_print_color(stream, column_offset + 2, &bet->st_color); } -static void -print_encap_type_gre ( - void *stream, - int column_offset, - struct bgp_encap_type_gre *bet) +static void print_encap_type_gre(void *stream, int column_offset, + struct bgp_encap_type_gre *bet) { - const char *type = "GRE"; - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; - - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!bet) - return; - - fp (out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); - - subtlv_print_encap_gre (stream, column_offset + 2, &bet->st_encap); - subtlv_print_proto_type (stream, column_offset + 2, &bet->st_proto); - subtlv_print_color (stream, column_offset + 2, &bet->st_color); + const char *type = "GRE"; + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; + + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!bet) + return; + + fp(out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); + + subtlv_print_encap_gre(stream, column_offset + 2, &bet->st_encap); + subtlv_print_proto_type(stream, column_offset + 2, &bet->st_proto); + subtlv_print_color(stream, column_offset + 2, &bet->st_color); } -static void -print_encap_type_ip_in_ip ( - void *stream, - int column_offset, - struct bgp_encap_type_ip_in_ip *bet) +static void print_encap_type_ip_in_ip(void *stream, int column_offset, + struct bgp_encap_type_ip_in_ip *bet) { - const char *type = "IP in IP"; - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; + const char *type = "IP in IP"; + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!bet) - return; + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!bet) + return; - fp (out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); + fp(out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); - subtlv_print_proto_type (stream, column_offset + 2, &bet->st_proto); - subtlv_print_color (stream, column_offset + 2, &bet->st_color); + subtlv_print_proto_type(stream, column_offset + 2, &bet->st_proto); + subtlv_print_color(stream, column_offset + 2, &bet->st_color); } -static void -print_encap_type_transmit_tunnel_endpoint ( - void *stream, - int column_offset, - struct bgp_encap_type_transmit_tunnel_endpoint *bet) +static void print_encap_type_transmit_tunnel_endpoint( + void *stream, int column_offset, + struct bgp_encap_type_transmit_tunnel_endpoint *bet) { - const char *type = "Transmit Tunnel Endpoint"; - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; + const char *type = "Transmit Tunnel Endpoint"; + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!bet) - return; + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!bet) + return; - fp (out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); + fp(out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); - /* no subtlvs for this type */ + /* no subtlvs for this type */ } -static void -print_encap_type_ipsec_in_tunnel_mode ( - void *stream, - int column_offset, - struct bgp_encap_type_ipsec_in_tunnel_mode *bet) +static void print_encap_type_ipsec_in_tunnel_mode( + void *stream, int column_offset, + struct bgp_encap_type_ipsec_in_tunnel_mode *bet) { - const char *type = "IPSEC in Tunnel mode"; - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; - - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!bet) - return; - - fp (out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); - subtlv_print_ipsec_ta (stream, column_offset + 2, &bet->st_ipsec_ta); + const char *type = "IPSEC in Tunnel mode"; + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; + + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!bet) + return; + + fp(out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); + subtlv_print_ipsec_ta(stream, column_offset + 2, &bet->st_ipsec_ta); } -static void -print_encap_type_ip_in_ip_tunnel_with_ipsec_transport_mode ( - void *stream, - int column_offset, - struct bgp_encap_type_ip_in_ip_tunnel_with_ipsec_transport_mode *bet) +static void print_encap_type_ip_in_ip_tunnel_with_ipsec_transport_mode( + void *stream, int column_offset, + struct bgp_encap_type_ip_in_ip_tunnel_with_ipsec_transport_mode *bet) { - const char *type = "IP in IP Tunnel with IPSEC transport mode"; - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; + const char *type = "IP in IP Tunnel with IPSEC transport mode"; + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!bet) - return; + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!bet) + return; - fp (out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); + fp(out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); - subtlv_print_ipsec_ta (stream, column_offset + 2, &bet->st_ipsec_ta); + subtlv_print_ipsec_ta(stream, column_offset + 2, &bet->st_ipsec_ta); } -static void -print_encap_type_mpls_in_ip_tunnel_with_ipsec_transport_mode ( - void *stream, - int column_offset, - struct bgp_encap_type_mpls_in_ip_tunnel_with_ipsec_transport_mode *bet) +static void print_encap_type_mpls_in_ip_tunnel_with_ipsec_transport_mode( + void *stream, int column_offset, + struct bgp_encap_type_mpls_in_ip_tunnel_with_ipsec_transport_mode *bet) { - const char *type = "MPLS in IP Tunnel with IPSEC transport mode"; - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; + const char *type = "MPLS in IP Tunnel with IPSEC transport mode"; + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!bet) - return; + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!bet) + return; - fp (out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); + fp(out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); - subtlv_print_ipsec_ta (stream, column_offset + 2, &bet->st_ipsec_ta); + subtlv_print_ipsec_ta(stream, column_offset + 2, &bet->st_ipsec_ta); } -static void -print_encap_type_pbb ( - void *stream, - int column_offset, - struct bgp_encap_type_pbb *bet) +static void print_encap_type_pbb(void *stream, int column_offset, + struct bgp_encap_type_pbb *bet) { - const char *type = "PBB"; - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; + const char *type = "PBB"; + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!bet) - return; + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!bet) + return; - fp (out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); + fp(out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); - subtlv_print_encap_pbb (stream, column_offset + 2, &bet->st_encap); + subtlv_print_encap_pbb(stream, column_offset + 2, &bet->st_encap); } -static void -print_encap_type_vxlan ( - void *stream, - int column_offset, - struct bgp_encap_type_vxlan *bet) +static void print_encap_type_vxlan(void *stream, int column_offset, + struct bgp_encap_type_vxlan *bet) { - const char *type = "VXLAN"; - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; + const char *type = "VXLAN"; + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!bet) - return; + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!bet) + return; - fp (out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); + fp(out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); - /* no subtlvs for this type */ + /* no subtlvs for this type */ } -static void -print_encap_type_nvgre ( - void *stream, - int column_offset, - struct bgp_encap_type_nvgre *bet) +static void print_encap_type_nvgre(void *stream, int column_offset, + struct bgp_encap_type_nvgre *bet) { - const char *type = "NVGRE"; - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; + const char *type = "NVGRE"; + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!bet) - return; + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!bet) + return; - fp (out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); + fp(out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); - /* no subtlvs for this type */ + /* no subtlvs for this type */ } -static void -print_encap_type_mpls ( - void *stream, - int column_offset, - struct bgp_encap_type_mpls *bet) +static void print_encap_type_mpls(void *stream, int column_offset, + struct bgp_encap_type_mpls *bet) { - const char *type = "MPLS"; - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; + const char *type = "MPLS"; + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!bet) - return; + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!bet) + return; - fp (out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); + fp(out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); - /* no subtlvs for this type */ + /* no subtlvs for this type */ } -static void -print_encap_type_mpls_in_gre ( - void *stream, - int column_offset, - struct bgp_encap_type_mpls_in_gre *bet) +static void print_encap_type_mpls_in_gre(void *stream, int column_offset, + struct bgp_encap_type_mpls_in_gre *bet) { - const char *type = "MPLS in GRE"; - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; + const char *type = "MPLS in GRE"; + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!bet) - return; + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!bet) + return; - fp (out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); + fp(out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); - /* no subtlvs for this type */ + /* no subtlvs for this type */ } -static void -print_encap_type_vxlan_gpe ( - void *stream, - int column_offset, - struct bgp_encap_type_vxlan_gpe *bet) +static void print_encap_type_vxlan_gpe(void *stream, int column_offset, + struct bgp_encap_type_vxlan_gpe *bet) { - const char *type = "VXLAN GPE"; - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; + const char *type = "VXLAN GPE"; + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!bet) - return; + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!bet) + return; - fp (out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); + fp(out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); - /* no subtlvs for this type */ + /* no subtlvs for this type */ } -static void -print_encap_type_mpls_in_udp ( - void *stream, - int column_offset, - struct bgp_encap_type_mpls_in_udp *bet) +static void print_encap_type_mpls_in_udp(void *stream, int column_offset, + struct bgp_encap_type_mpls_in_udp *bet) { - const char *type = "MPLS in UDP"; - int (*fp) (void *, const char *, ...); - struct vty *vty; - void *out; - const char *vty_newline; + const char *type = "MPLS in UDP"; + int (*fp)(void *, const char *, ...); + struct vty *vty; + void *out; + const char *vty_newline; - if (rfapiStream2Vty (stream, &fp, &vty, &out, &vty_newline) == 0) - return; - if (!bet) - return; + if (rfapiStream2Vty(stream, &fp, &vty, &out, &vty_newline) == 0) + return; + if (!bet) + return; - fp (out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); + fp(out, "%*sTEA type %s%s", column_offset, "", type, vty_newline); - /* no subtlvs for this type */ + /* no subtlvs for this type */ } -void -rfapi_print_tunneltype_option ( - void *stream, - int column_offset, - struct rfapi_tunneltype_option *tto) +void rfapi_print_tunneltype_option(void *stream, int column_offset, + struct rfapi_tunneltype_option *tto) { - switch (tto->type) - { - case BGP_ENCAP_TYPE_L2TPV3_OVER_IP: - print_encap_type_l2tpv3overip (stream, column_offset, - &tto->bgpinfo.l2tpv3_ip); - break; - - case BGP_ENCAP_TYPE_GRE: - print_encap_type_gre (stream, column_offset, &tto->bgpinfo.gre); - break; - - case BGP_ENCAP_TYPE_TRANSMIT_TUNNEL_ENDPOINT: - print_encap_type_transmit_tunnel_endpoint (stream, column_offset, - &tto->bgpinfo.transmit_tunnel_endpoint); - break; - - case BGP_ENCAP_TYPE_IPSEC_IN_TUNNEL_MODE: - print_encap_type_ipsec_in_tunnel_mode (stream, column_offset, - &tto->bgpinfo.ipsec_tunnel); - break; - - case BGP_ENCAP_TYPE_IP_IN_IP_TUNNEL_WITH_IPSEC_TRANSPORT_MODE: - print_encap_type_ip_in_ip_tunnel_with_ipsec_transport_mode (stream, - column_offset, - &tto->bgpinfo.ip_ipsec); - break; - - case BGP_ENCAP_TYPE_MPLS_IN_IP_TUNNEL_WITH_IPSEC_TRANSPORT_MODE: - print_encap_type_mpls_in_ip_tunnel_with_ipsec_transport_mode (stream, - column_offset, - &tto->bgpinfo.mpls_ipsec); - break; - - case BGP_ENCAP_TYPE_IP_IN_IP: - print_encap_type_ip_in_ip (stream, column_offset, &tto->bgpinfo.ip_ip); - break; - - case BGP_ENCAP_TYPE_VXLAN: - print_encap_type_vxlan (stream, column_offset, &tto->bgpinfo.vxlan); - break; - - case BGP_ENCAP_TYPE_NVGRE: - print_encap_type_nvgre (stream, column_offset, &tto->bgpinfo.nvgre); - break; - - case BGP_ENCAP_TYPE_MPLS: - print_encap_type_mpls (stream, column_offset, &tto->bgpinfo.mpls); - break; - - case BGP_ENCAP_TYPE_MPLS_IN_GRE: - print_encap_type_mpls_in_gre (stream, column_offset, - &tto->bgpinfo.mpls_gre); - break; - - case BGP_ENCAP_TYPE_VXLAN_GPE: - print_encap_type_vxlan_gpe (stream, column_offset, - &tto->bgpinfo.vxlan_gpe); - break; - - case BGP_ENCAP_TYPE_MPLS_IN_UDP: - print_encap_type_mpls_in_udp (stream, column_offset, - &tto->bgpinfo.mpls_udp); - break; - - case BGP_ENCAP_TYPE_PBB: - print_encap_type_pbb (stream, column_offset, &tto->bgpinfo.pbb); - break; - - default: - assert (0); - } + switch (tto->type) { + case BGP_ENCAP_TYPE_L2TPV3_OVER_IP: + print_encap_type_l2tpv3overip(stream, column_offset, + &tto->bgpinfo.l2tpv3_ip); + break; + + case BGP_ENCAP_TYPE_GRE: + print_encap_type_gre(stream, column_offset, &tto->bgpinfo.gre); + break; + + case BGP_ENCAP_TYPE_TRANSMIT_TUNNEL_ENDPOINT: + print_encap_type_transmit_tunnel_endpoint( + stream, column_offset, + &tto->bgpinfo.transmit_tunnel_endpoint); + break; + + case BGP_ENCAP_TYPE_IPSEC_IN_TUNNEL_MODE: + print_encap_type_ipsec_in_tunnel_mode( + stream, column_offset, &tto->bgpinfo.ipsec_tunnel); + break; + + case BGP_ENCAP_TYPE_IP_IN_IP_TUNNEL_WITH_IPSEC_TRANSPORT_MODE: + print_encap_type_ip_in_ip_tunnel_with_ipsec_transport_mode( + stream, column_offset, &tto->bgpinfo.ip_ipsec); + break; + + case BGP_ENCAP_TYPE_MPLS_IN_IP_TUNNEL_WITH_IPSEC_TRANSPORT_MODE: + print_encap_type_mpls_in_ip_tunnel_with_ipsec_transport_mode( + stream, column_offset, &tto->bgpinfo.mpls_ipsec); + break; + + case BGP_ENCAP_TYPE_IP_IN_IP: + print_encap_type_ip_in_ip(stream, column_offset, + &tto->bgpinfo.ip_ip); + break; + + case BGP_ENCAP_TYPE_VXLAN: + print_encap_type_vxlan(stream, column_offset, + &tto->bgpinfo.vxlan); + break; + + case BGP_ENCAP_TYPE_NVGRE: + print_encap_type_nvgre(stream, column_offset, + &tto->bgpinfo.nvgre); + break; + + case BGP_ENCAP_TYPE_MPLS: + print_encap_type_mpls(stream, column_offset, + &tto->bgpinfo.mpls); + break; + + case BGP_ENCAP_TYPE_MPLS_IN_GRE: + print_encap_type_mpls_in_gre(stream, column_offset, + &tto->bgpinfo.mpls_gre); + break; + + case BGP_ENCAP_TYPE_VXLAN_GPE: + print_encap_type_vxlan_gpe(stream, column_offset, + &tto->bgpinfo.vxlan_gpe); + break; + + case BGP_ENCAP_TYPE_MPLS_IN_UDP: + print_encap_type_mpls_in_udp(stream, column_offset, + &tto->bgpinfo.mpls_udp); + break; + + case BGP_ENCAP_TYPE_PBB: + print_encap_type_pbb(stream, column_offset, &tto->bgpinfo.pbb); + break; + + default: + assert(0); + } } |
