Merge pull request #882 from opensourcerouting/safi-cleanup

lib/bgpd: cleanup SAFI values
This commit is contained in:
Donald Sharp 2017-08-01 14:21:26 -04:00 committed by GitHub
commit ab665082fe
16 changed files with 112 additions and 91 deletions

View File

@ -1677,7 +1677,8 @@ int bgp_mp_reach_parse(struct bgp_attr_parser_args *args,
{ {
iana_afi_t pkt_afi; iana_afi_t pkt_afi;
afi_t afi; afi_t afi;
safi_t pkt_safi, safi; iana_safi_t pkt_safi;
safi_t safi;
bgp_size_t nlri_len; bgp_size_t nlri_len;
size_t start; size_t start;
struct stream *s; struct stream *s;
@ -1826,7 +1827,8 @@ int bgp_mp_unreach_parse(struct bgp_attr_parser_args *args,
struct stream *s; struct stream *s;
iana_afi_t pkt_afi; iana_afi_t pkt_afi;
afi_t afi; afi_t afi;
safi_t pkt_safi, safi; iana_safi_t pkt_safi;
safi_t safi;
u_int16_t withdraw_len; u_int16_t withdraw_len;
struct peer *const peer = args->peer; struct peer *const peer = args->peer;
struct attr *const attr = args->attr; struct attr *const attr = args->attr;
@ -2593,7 +2595,7 @@ size_t bgp_packet_mpattr_start(struct stream *s, struct peer *peer, afi_t afi,
{ {
size_t sizep; size_t sizep;
iana_afi_t pkt_afi; iana_afi_t pkt_afi;
safi_t pkt_safi; iana_safi_t pkt_safi;
afi_t nh_afi; afi_t nh_afi;
/* Set extended bit always to encode the attribute length as 2 bytes */ /* Set extended bit always to encode the attribute length as 2 bytes */
@ -3280,7 +3282,7 @@ size_t bgp_packet_mpunreach_start(struct stream *s, afi_t afi, safi_t safi)
{ {
unsigned long attrlen_pnt; unsigned long attrlen_pnt;
iana_afi_t pkt_afi; iana_afi_t pkt_afi;
safi_t pkt_safi; iana_safi_t pkt_safi;
/* Set extended bit always to encode the attribute length as 2 bytes */ /* Set extended bit always to encode the attribute length as 2 bytes */
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_EXTLEN); stream_putc(s, BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_EXTLEN);

View File

@ -488,7 +488,7 @@ static int bgp_graceful_restart_timer_expire(struct thread *thread)
/* NSF delete stale route */ /* NSF delete stale route */
for (afi = AFI_IP; afi < AFI_MAX; afi++) for (afi = AFI_IP; afi < AFI_MAX; afi++)
for (safi = SAFI_UNICAST; safi < SAFI_RESERVED_4; safi++) for (safi = SAFI_UNICAST; safi <= SAFI_MPLS_VPN; safi++)
if (peer->nsf[afi][safi]) if (peer->nsf[afi][safi])
bgp_clear_stale_route(peer, afi, safi); bgp_clear_stale_route(peer, afi, safi);
@ -521,7 +521,7 @@ static int bgp_graceful_stale_timer_expire(struct thread *thread)
/* NSF delete stale route */ /* NSF delete stale route */
for (afi = AFI_IP; afi < AFI_MAX; afi++) for (afi = AFI_IP; afi < AFI_MAX; afi++)
for (safi = SAFI_UNICAST; safi < SAFI_RESERVED_4; safi++) for (safi = SAFI_UNICAST; safi <= SAFI_MPLS_VPN; safi++)
if (peer->nsf[afi][safi]) if (peer->nsf[afi][safi])
bgp_clear_stale_route(peer, afi, safi); bgp_clear_stale_route(peer, afi, safi);
@ -1022,7 +1022,7 @@ int bgp_stop(struct peer *peer)
for (afi = AFI_IP; afi < AFI_MAX; afi++) for (afi = AFI_IP; afi < AFI_MAX; afi++)
for (safi = SAFI_UNICAST; for (safi = SAFI_UNICAST;
safi < SAFI_RESERVED_4; safi++) safi <= SAFI_MPLS_VPN; safi++)
peer->nsf[afi][safi] = 0; peer->nsf[afi][safi] = 0;
} }
@ -1425,7 +1425,7 @@ static int bgp_establish(struct peer *peer)
/* graceful restart */ /* graceful restart */
UNSET_FLAG(peer->sflags, PEER_STATUS_NSF_WAIT); UNSET_FLAG(peer->sflags, PEER_STATUS_NSF_WAIT);
for (afi = AFI_IP; afi < AFI_MAX; afi++) for (afi = AFI_IP; afi < AFI_MAX; afi++)
for (safi = SAFI_UNICAST; safi < SAFI_RESERVED_4; safi++) { for (safi = SAFI_UNICAST; safi <= SAFI_MPLS_VPN; safi++) {
if (peer->afc_nego[afi][safi] if (peer->afc_nego[afi][safi]
&& CHECK_FLAG(peer->cap, PEER_CAP_RESTART_ADV) && CHECK_FLAG(peer->cap, PEER_CAP_RESTART_ADV)
&& CHECK_FLAG(peer->af_cap[afi][safi], && CHECK_FLAG(peer->af_cap[afi][safi],

View File

@ -298,7 +298,8 @@ static int bgp_capability_orf_entry(struct peer *peer,
u_char num; u_char num;
iana_afi_t pkt_afi; iana_afi_t pkt_afi;
afi_t afi; afi_t afi;
safi_t pkt_safi, safi; iana_safi_t pkt_safi;
safi_t safi;
u_char type; u_char type;
u_char mode; u_char mode;
u_int16_t sm_cap = 0; /* capability send-mode receive */ u_int16_t sm_cap = 0; /* capability send-mode receive */
@ -466,7 +467,7 @@ static int bgp_capability_restart(struct peer *peer,
afi_t afi; afi_t afi;
safi_t safi; safi_t safi;
iana_afi_t pkt_afi = stream_getw(s); iana_afi_t pkt_afi = stream_getw(s);
safi_t pkt_safi = stream_getc(s); iana_safi_t pkt_safi = stream_getc(s);
u_char flag = stream_getc(s); u_char flag = stream_getc(s);
/* Convert AFI, SAFI to internal values, check. */ /* Convert AFI, SAFI to internal values, check. */
@ -543,7 +544,7 @@ static int bgp_capability_addpath(struct peer *peer,
afi_t afi; afi_t afi;
safi_t safi; safi_t safi;
iana_afi_t pkt_afi = stream_getw(s); iana_afi_t pkt_afi = stream_getw(s);
safi_t pkt_safi = stream_getc(s); iana_safi_t pkt_safi = stream_getc(s);
u_char send_receive = stream_getc(s); u_char send_receive = stream_getc(s);
if (bgp_debug_neighbor_events(peer)) if (bgp_debug_neighbor_events(peer))
@ -600,7 +601,8 @@ static int bgp_capability_enhe(struct peer *peer, struct capability_header *hdr)
while (stream_get_getp(s) + 6 <= end) { while (stream_get_getp(s) + 6 <= end) {
iana_afi_t pkt_afi = stream_getw(s); iana_afi_t pkt_afi = stream_getw(s);
afi_t afi; afi_t afi;
safi_t safi, pkt_safi = stream_getw(s); iana_safi_t pkt_safi = stream_getw(s);
safi_t safi;
iana_afi_t pkt_nh_afi = stream_getw(s); iana_afi_t pkt_nh_afi = stream_getw(s);
afi_t nh_afi; afi_t nh_afi;
@ -1199,7 +1201,7 @@ static void bgp_open_capability_orf(struct stream *s, struct peer *peer,
unsigned long numberp; unsigned long numberp;
int number_of_orfs = 0; int number_of_orfs = 0;
iana_afi_t pkt_afi; iana_afi_t pkt_afi;
safi_t pkt_safi; iana_safi_t pkt_safi;
/* Convert AFI, SAFI to values for packet. */ /* Convert AFI, SAFI to values for packet. */
bgp_map_afi_safi_int2iana(afi, safi, &pkt_afi, &pkt_safi); bgp_map_afi_safi_int2iana(afi, safi, &pkt_afi, &pkt_safi);
@ -1264,7 +1266,8 @@ void bgp_open_capability(struct stream *s, struct peer *peer)
unsigned long cp, capp, rcapp; unsigned long cp, capp, rcapp;
iana_afi_t pkt_afi; iana_afi_t pkt_afi;
afi_t afi; afi_t afi;
safi_t safi, pkt_safi; safi_t safi;
iana_safi_t pkt_safi;
as_t local_as; as_t local_as;
u_int32_t restart_time; u_int32_t restart_time;
u_char afi_safi_count = 0; u_char afi_safi_count = 0;

View File

@ -29,9 +29,9 @@ struct capability_header {
/* Generic MP capability data */ /* Generic MP capability data */
struct capability_mp_data { struct capability_mp_data {
iana_afi_t afi; uint16_t afi; /* iana_afi_t */
u_char reserved; u_char reserved;
safi_t safi; uint8_t safi; /* iana_safi_t */
}; };
struct capability_as4 { struct capability_as4 {

View File

@ -142,7 +142,7 @@ static struct stream *bgp_update_packet_eor(struct peer *peer, afi_t afi,
{ {
struct stream *s; struct stream *s;
iana_afi_t pkt_afi; iana_afi_t pkt_afi;
safi_t pkt_safi; iana_safi_t pkt_safi;
if (DISABLE_BGP_ANNOUNCE) if (DISABLE_BGP_ANNOUNCE)
return NULL; return NULL;
@ -671,7 +671,7 @@ void bgp_route_refresh_send(struct peer *peer, afi_t afi, safi_t safi,
struct bgp_filter *filter; struct bgp_filter *filter;
int orf_refresh = 0; int orf_refresh = 0;
iana_afi_t pkt_afi; iana_afi_t pkt_afi;
safi_t pkt_safi; iana_safi_t pkt_safi;
if (DISABLE_BGP_ANNOUNCE) if (DISABLE_BGP_ANNOUNCE)
return; return;
@ -761,7 +761,7 @@ void bgp_capability_send(struct peer *peer, afi_t afi, safi_t safi,
{ {
struct stream *s; struct stream *s;
iana_afi_t pkt_afi; iana_afi_t pkt_afi;
safi_t pkt_safi; iana_safi_t pkt_safi;
/* Convert AFI, SAFI to values for packet. */ /* Convert AFI, SAFI to values for packet. */
bgp_map_afi_safi_int2iana(afi, safi, &pkt_afi, &pkt_safi); bgp_map_afi_safi_int2iana(afi, safi, &pkt_afi, &pkt_safi);
@ -1338,8 +1338,9 @@ int bgp_nlri_parse(struct peer *peer, struct attr *attr,
packet); packet);
case SAFI_EVPN: case SAFI_EVPN:
return bgp_nlri_parse_evpn(peer, attr, packet, mp_withdraw); return bgp_nlri_parse_evpn(peer, attr, packet, mp_withdraw);
} default:
return -1; return -1;
}
} }
/* Parse BGP Update packet and make attribute object. */ /* Parse BGP Update packet and make attribute object. */
@ -1697,7 +1698,8 @@ static void bgp_route_refresh_receive(struct peer *peer, bgp_size_t size)
{ {
iana_afi_t pkt_afi; iana_afi_t pkt_afi;
afi_t afi; afi_t afi;
safi_t pkt_safi, safi; iana_safi_t pkt_safi;
safi_t safi;
struct stream *s; struct stream *s;
struct peer_af *paf; struct peer_af *paf;
struct update_group *updgrp; struct update_group *updgrp;
@ -1965,7 +1967,8 @@ static int bgp_capability_msg_parse(struct peer *peer, u_char *pnt,
u_char action; u_char action;
iana_afi_t pkt_afi; iana_afi_t pkt_afi;
afi_t afi; afi_t afi;
safi_t pkt_safi, safi; iana_safi_t pkt_safi;
safi_t safi;
end = pnt + length; end = pnt + length;

View File

@ -2288,7 +2288,7 @@ int bgp_maximum_prefix_overflow(struct peer *peer, afi_t afi, safi_t safi,
int always) int always)
{ {
iana_afi_t pkt_afi; iana_afi_t pkt_afi;
safi_t pkt_safi; iana_safi_t pkt_safi;
if (!CHECK_FLAG(peer->af_flags[afi][safi], PEER_FLAG_MAX_PREFIX)) if (!CHECK_FLAG(peer->af_flags[afi][safi], PEER_FLAG_MAX_PREFIX))
return 0; return 0;

View File

@ -845,7 +845,7 @@ struct bpacket *subgroup_update_packet(struct update_subgroup *subgrp)
send_attr_str); send_attr_str);
if (!stream_empty(snlri)) { if (!stream_empty(snlri)) {
iana_afi_t pkt_afi; iana_afi_t pkt_afi;
safi_t pkt_safi; iana_safi_t pkt_safi;
pkt_afi = afi_int2iana(afi); pkt_afi = afi_int2iana(afi);
pkt_safi = safi_int2iana(safi); pkt_safi = safi_int2iana(safi);
@ -989,7 +989,7 @@ struct bpacket *subgroup_withdraw_packet(struct update_subgroup *subgrp)
/* If first time, format the MP_UNREACH header */ /* If first time, format the MP_UNREACH header */
if (first_time) { if (first_time) {
iana_afi_t pkt_afi; iana_afi_t pkt_afi;
safi_t pkt_safi; iana_safi_t pkt_safi;
pkt_afi = afi_int2iana(afi); pkt_afi = afi_int2iana(afi);
pkt_safi = safi_int2iana(safi); pkt_safi = safi_int2iana(safi);

View File

@ -78,6 +78,10 @@ static enum node_type bgp_node_type(afi_t afi, safi_t safi)
case SAFI_MPLS_VPN: case SAFI_MPLS_VPN:
return BGP_VPNV4_NODE; return BGP_VPNV4_NODE;
break; break;
default:
/* not expected */
return BGP_IPV4_NODE;
break;
} }
break; break;
case AFI_IP6: case AFI_IP6:
@ -94,6 +98,10 @@ static enum node_type bgp_node_type(afi_t afi, safi_t safi)
case SAFI_MPLS_VPN: case SAFI_MPLS_VPN:
return BGP_VPNV6_NODE; return BGP_VPNV6_NODE;
break; break;
default:
/* not expected */
return BGP_IPV4_NODE;
break;
} }
break; break;
case AFI_L2VPN: case AFI_L2VPN:
@ -7079,12 +7087,6 @@ static void bgp_show_summary_afi_safi(struct vty *vty, struct bgp *bgp, int afi,
json); json);
} }
safi++; safi++;
if (safi == SAFI_RESERVED_4
|| safi
== SAFI_RESERVED_5) /* handle special
cases to match
zebra.h */
safi++;
if (!safi_wildcard) if (!safi_wildcard)
safi = SAFI_MAX; safi = SAFI_MAX;
} }

View File

@ -611,8 +611,8 @@ int bgp_listen_limit_unset(struct bgp *bgp)
return 0; return 0;
} }
int bgp_map_afi_safi_iana2int(iana_afi_t pkt_afi, safi_t pkt_safi, afi_t *afi, int bgp_map_afi_safi_iana2int(iana_afi_t pkt_afi, iana_safi_t pkt_safi,
safi_t *safi) afi_t *afi, safi_t *safi)
{ {
/* Map from IANA values to internal values, return error if /* Map from IANA values to internal values, return error if
* values are unrecognized. * values are unrecognized.
@ -626,7 +626,7 @@ int bgp_map_afi_safi_iana2int(iana_afi_t pkt_afi, safi_t pkt_safi, afi_t *afi,
} }
int bgp_map_afi_safi_int2iana(afi_t afi, safi_t safi, iana_afi_t *pkt_afi, int bgp_map_afi_safi_int2iana(afi_t afi, safi_t safi, iana_afi_t *pkt_afi,
safi_t *pkt_safi) iana_safi_t *pkt_safi)
{ {
/* Map from internal values to IANA values, return error if /* Map from internal values to IANA values, return error if
* internal values are bad (unexpected). * internal values are bad (unexpected).
@ -1842,7 +1842,7 @@ static void peer_nsf_stop(struct peer *peer)
UNSET_FLAG(peer->sflags, PEER_STATUS_NSF_MODE); UNSET_FLAG(peer->sflags, PEER_STATUS_NSF_MODE);
for (afi = AFI_IP; afi < AFI_MAX; afi++) for (afi = AFI_IP; afi < AFI_MAX; afi++)
for (safi = SAFI_UNICAST; safi < SAFI_RESERVED_4; safi++) for (safi = SAFI_UNICAST; safi <= SAFI_MPLS_VPN; safi++)
peer->nsf[afi][safi] = 0; peer->nsf[afi][safi] = 0;
if (peer->t_gr_restart) { if (peer->t_gr_restart) {

View File

@ -923,10 +923,10 @@ DECLARE_QOBJ_TYPE(peer)
stream. */ stream. */
struct bgp_nlri { struct bgp_nlri {
/* AFI. */ /* AFI. */
afi_t afi; uint16_t afi; /* iana_afi_t */
/* SAFI. */ /* SAFI. */
safi_t safi; uint8_t safi; /* iana_safi_t */
/* Pointer to NLRI byte stream. */ /* Pointer to NLRI byte stream. */
u_char *nlri; u_char *nlri;
@ -1382,10 +1382,10 @@ extern void bgp_route_map_terminate(void);
extern int peer_cmp(struct peer *p1, struct peer *p2); extern int peer_cmp(struct peer *p1, struct peer *p2);
extern int bgp_map_afi_safi_iana2int(iana_afi_t pkt_afi, safi_t pkt_safi, extern int bgp_map_afi_safi_iana2int(iana_afi_t pkt_afi, iana_safi_t pkt_safi,
afi_t *afi, safi_t *safi); afi_t *afi, safi_t *safi);
extern int bgp_map_afi_safi_int2iana(afi_t afi, safi_t safi, extern int bgp_map_afi_safi_int2iana(afi_t afi, safi_t safi,
iana_afi_t *pkt_afi, safi_t *pkt_safi); iana_afi_t *pkt_afi, iana_safi_t *pkt_safi);
extern struct peer_af *peer_af_create(struct peer *, afi_t, safi_t); extern struct peer_af *peer_af_create(struct peer *, afi_t, safi_t);
extern struct peer_af *peer_af_find(struct peer *, afi_t, safi_t); extern struct peer_af *peer_af_find(struct peer *, afi_t, safi_t);

View File

@ -3872,6 +3872,10 @@ rfapiBgpInfoFilteredImportFunction(safi_t safi)
case SAFI_ENCAP: case SAFI_ENCAP:
return rfapiBgpInfoFilteredImportEncap; return rfapiBgpInfoFilteredImportEncap;
default:
/* not expected */
return NULL;
} }
zlog_err("%s: bad safi %d", __func__, safi); zlog_err("%s: bad safi %d", __func__, safi);
return NULL; return NULL;

View File

@ -507,8 +507,9 @@ const char *safi2str(safi_t safi)
return "evpn"; return "evpn";
case SAFI_LABELED_UNICAST: case SAFI_LABELED_UNICAST:
return "labeled-unicast"; return "labeled-unicast";
default:
return "unknown";
} }
return NULL;
} }
/* If n includes p prefix then return 1 else return 0. */ /* If n includes p prefix then return 1 else return 0. */

View File

@ -416,22 +416,15 @@ extern const char *zserv_command_string(unsigned int command);
typedef enum { AFI_IP = 1, AFI_IP6 = 2, AFI_L2VPN = 3, AFI_MAX = 4 } afi_t; typedef enum { AFI_IP = 1, AFI_IP6 = 2, AFI_L2VPN = 3, AFI_MAX = 4 } afi_t;
/* Subsequent Address Family Identifier. */ /* Subsequent Address Family Identifier. */
#define SAFI_UNICAST 1 typedef enum {
#define SAFI_MULTICAST 2 SAFI_UNICAST = 1,
#define SAFI_MPLS_VPN 3 SAFI_MULTICAST = 2,
#define SAFI_RESERVED_4 4 SAFI_MPLS_VPN = 3,
#define SAFI_ENCAP 5 SAFI_ENCAP = 4,
#define SAFI_RESERVED_5 5 SAFI_EVPN = 5,
#define SAFI_EVPN 6 SAFI_LABELED_UNICAST = 6,
#define SAFI_LABELED_UNICAST 7 SAFI_MAX = 7
#define SAFI_MAX 8 } safi_t;
#define IANA_SAFI_RESERVED 0
#define IANA_SAFI_UNICAST 1
#define IANA_SAFI_MULTICAST 2
#define IANA_SAFI_LABELED_UNICAST 4
#define IANA_SAFI_ENCAP 7
#define IANA_SAFI_MPLS_VPN 128
/* /*
* The above AFI and SAFI definitions are for internal use. The protocol * The above AFI and SAFI definitions are for internal use. The protocol
@ -451,12 +444,15 @@ typedef enum {
IANA_AFI_IP6MR = 129 IANA_AFI_IP6MR = 129
} iana_afi_t; } iana_afi_t;
#define IANA_SAFI_RESERVED 0 typedef enum {
#define IANA_SAFI_UNICAST 1 IANA_SAFI_RESERVED = 0,
#define IANA_SAFI_MULTICAST 2 IANA_SAFI_UNICAST = 1,
#define IANA_SAFI_ENCAP 7 IANA_SAFI_MULTICAST = 2,
#define IANA_SAFI_EVPN 70 IANA_SAFI_LABELED_UNICAST = 4,
#define IANA_SAFI_MPLS_VPN 128 IANA_SAFI_ENCAP = 7,
IANA_SAFI_EVPN = 70,
IANA_SAFI_MPLS_VPN = 128
} iana_safi_t;
/* Default Administrative Distance of each protocol. */ /* Default Administrative Distance of each protocol. */
#define ZEBRA_KERNEL_DISTANCE_DEFAULT 0 #define ZEBRA_KERNEL_DISTANCE_DEFAULT 0
@ -477,8 +473,6 @@ typedef enum {
#define UNSET_FLAG(V,F) (V) &= ~(F) #define UNSET_FLAG(V,F) (V) &= ~(F)
#define RESET_FLAG(V) (V) = 0 #define RESET_FLAG(V) (V) = 0
typedef u_int8_t safi_t;
/* Zebra types. Used in Zserv message header. */ /* Zebra types. Used in Zserv message header. */
typedef u_int16_t zebra_size_t; typedef u_int16_t zebra_size_t;
typedef u_int16_t zebra_command_t; typedef u_int16_t zebra_command_t;
@ -492,58 +486,70 @@ typedef uint32_t route_tag_t;
static inline afi_t afi_iana2int(iana_afi_t afi) static inline afi_t afi_iana2int(iana_afi_t afi)
{ {
if (afi == IANA_AFI_IPV4) switch (afi) {
case IANA_AFI_IPV4:
return AFI_IP; return AFI_IP;
if (afi == IANA_AFI_IPV6) case IANA_AFI_IPV6:
return AFI_IP6; return AFI_IP6;
if (afi == IANA_AFI_L2VPN) case IANA_AFI_L2VPN:
return AFI_L2VPN; return AFI_L2VPN;
default:
return AFI_MAX; return AFI_MAX;
}
} }
static inline iana_afi_t afi_int2iana(afi_t afi) static inline iana_afi_t afi_int2iana(afi_t afi)
{ {
if (afi == AFI_IP) switch (afi) {
case AFI_IP:
return IANA_AFI_IPV4; return IANA_AFI_IPV4;
if (afi == AFI_IP6) case AFI_IP6:
return IANA_AFI_IPV6; return IANA_AFI_IPV6;
if (afi == AFI_L2VPN) case AFI_L2VPN:
return IANA_AFI_L2VPN; return IANA_AFI_L2VPN;
default:
return IANA_AFI_RESERVED; return IANA_AFI_RESERVED;
}
} }
static inline safi_t safi_iana2int(safi_t safi) static inline safi_t safi_iana2int(iana_safi_t safi)
{ {
if (safi == IANA_SAFI_UNICAST) switch (safi) {
case IANA_SAFI_UNICAST:
return SAFI_UNICAST; return SAFI_UNICAST;
if (safi == IANA_SAFI_MULTICAST) case IANA_SAFI_MULTICAST:
return SAFI_MULTICAST; return SAFI_MULTICAST;
if (safi == IANA_SAFI_MPLS_VPN) case IANA_SAFI_MPLS_VPN:
return SAFI_MPLS_VPN; return SAFI_MPLS_VPN;
if (safi == IANA_SAFI_ENCAP) case IANA_SAFI_ENCAP:
return SAFI_ENCAP; return SAFI_ENCAP;
if (safi == IANA_SAFI_EVPN) case IANA_SAFI_EVPN:
return SAFI_EVPN; return SAFI_EVPN;
if (safi == IANA_SAFI_LABELED_UNICAST) case IANA_SAFI_LABELED_UNICAST:
return SAFI_LABELED_UNICAST; return SAFI_LABELED_UNICAST;
default:
return SAFI_MAX; return SAFI_MAX;
}
} }
static inline safi_t safi_int2iana(safi_t safi) static inline iana_safi_t safi_int2iana(safi_t safi)
{ {
if (safi == SAFI_UNICAST) switch (safi) {
case SAFI_UNICAST:
return IANA_SAFI_UNICAST; return IANA_SAFI_UNICAST;
if (safi == SAFI_MULTICAST) case SAFI_MULTICAST:
return IANA_SAFI_MULTICAST; return IANA_SAFI_MULTICAST;
if (safi == SAFI_MPLS_VPN) case SAFI_MPLS_VPN:
return IANA_SAFI_MPLS_VPN; return IANA_SAFI_MPLS_VPN;
if (safi == SAFI_ENCAP) case SAFI_ENCAP:
return IANA_SAFI_ENCAP; return IANA_SAFI_ENCAP;
if (safi == SAFI_EVPN) case SAFI_EVPN:
return IANA_SAFI_EVPN; return IANA_SAFI_EVPN;
if (safi == SAFI_LABELED_UNICAST) case SAFI_LABELED_UNICAST:
return IANA_SAFI_LABELED_UNICAST; return IANA_SAFI_LABELED_UNICAST;
default:
return IANA_SAFI_RESERVED; return IANA_SAFI_RESERVED;
}
} }
#endif /* _ZEBRA_H */ #endif /* _ZEBRA_H */

View File

@ -170,7 +170,7 @@ static struct test_segment mp_segments[] = {
/* 8 */ /* 8 */
{ {
"MP6", "MP6",
"MP IP4/MPLS-laveled VPN", "MP IP4/MPLS-labeled VPN",
{CAPABILITY_CODE_MP, 0x4, 0x0, 0x1, 0x0, 0x80}, {CAPABILITY_CODE_MP, 0x4, 0x0, 0x1, 0x0, 0x80},
6, 6,
SHOULD_PARSE, SHOULD_PARSE,

View File

@ -8,7 +8,7 @@ TestCapability.okfail("MPv6: MP IPv6/Uni")
TestCapability.okfail("MP2: MP IP/Multicast") TestCapability.okfail("MP2: MP IP/Multicast")
TestCapability.okfail("MP3: MP IP6/MPLS-labeled VPN") TestCapability.okfail("MP3: MP IP6/MPLS-labeled VPN")
TestCapability.okfail("MP5: MP IP6/MPLS-VPN") TestCapability.okfail("MP5: MP IP6/MPLS-VPN")
TestCapability.okfail("MP6: MP IP4/MPLS-laveled VPN") TestCapability.okfail("MP6: MP IP4/MPLS-labeled VPN")
TestCapability.okfail("MP8: MP unknown AFI/SAFI") TestCapability.okfail("MP8: MP unknown AFI/SAFI")
TestCapability.okfail("MP-short: MP IP4/Unicast, length too short (< minimum)") TestCapability.okfail("MP-short: MP IP4/Unicast, length too short (< minimum)")
TestCapability.okfail("MP-overflow: MP IP4/Unicast, length too long") TestCapability.okfail("MP-overflow: MP IP4/Unicast, length too long")

View File

@ -1059,7 +1059,7 @@ static void parse_test(struct peer *peer, struct test_segment *t, int type)
parse_ret = bgp_mp_unreach_parse(&attr_args, &nlri); parse_ret = bgp_mp_unreach_parse(&attr_args, &nlri);
if (!parse_ret) { if (!parse_ret) {
iana_afi_t pkt_afi; iana_afi_t pkt_afi;
safi_t pkt_safi; iana_safi_t pkt_safi;
/* Convert AFI, SAFI to internal values, check. */ /* Convert AFI, SAFI to internal values, check. */
if (bgp_map_afi_safi_int2iana(nlri.afi, nlri.safi, &pkt_afi, if (bgp_map_afi_safi_int2iana(nlri.afi, nlri.safi, &pkt_afi,