{
iana_afi_t pkt_afi;
afi_t afi;
- safi_t pkt_safi, safi;
+ iana_safi_t pkt_safi;
+ safi_t safi;
bgp_size_t nlri_len;
size_t start;
struct stream *s;
struct stream *s;
iana_afi_t pkt_afi;
afi_t afi;
- safi_t pkt_safi, safi;
+ iana_safi_t pkt_safi;
+ safi_t safi;
u_int16_t withdraw_len;
struct peer *const peer = args->peer;
struct attr *const attr = args->attr;
{
size_t sizep;
iana_afi_t pkt_afi;
- safi_t pkt_safi;
+ iana_safi_t pkt_safi;
afi_t nh_afi;
/* Set extended bit always to encode the attribute length as 2 bytes */
{
unsigned long attrlen_pnt;
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 */
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_EXTLEN);
/* NSF delete stale route */
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])
bgp_clear_stale_route(peer, afi, safi);
/* NSF delete stale route */
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])
bgp_clear_stale_route(peer, afi, safi);
for (afi = AFI_IP; afi < AFI_MAX; afi++)
for (safi = SAFI_UNICAST;
- safi < SAFI_RESERVED_4; safi++)
+ safi <= SAFI_MPLS_VPN; safi++)
peer->nsf[afi][safi] = 0;
}
/* graceful restart */
UNSET_FLAG(peer->sflags, PEER_STATUS_NSF_WAIT);
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]
&& CHECK_FLAG(peer->cap, PEER_CAP_RESTART_ADV)
&& CHECK_FLAG(peer->af_cap[afi][safi],
u_char num;
iana_afi_t pkt_afi;
afi_t afi;
- safi_t pkt_safi, safi;
+ iana_safi_t pkt_safi;
+ safi_t safi;
u_char type;
u_char mode;
u_int16_t sm_cap = 0; /* capability send-mode receive */
afi_t afi;
safi_t safi;
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);
/* Convert AFI, SAFI to internal values, check. */
afi_t afi;
safi_t safi;
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);
if (bgp_debug_neighbor_events(peer))
while (stream_get_getp(s) + 6 <= end) {
iana_afi_t pkt_afi = stream_getw(s);
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);
afi_t nh_afi;
unsigned long numberp;
int number_of_orfs = 0;
iana_afi_t pkt_afi;
- safi_t pkt_safi;
+ iana_safi_t pkt_safi;
/* Convert AFI, SAFI to values for packet. */
bgp_map_afi_safi_int2iana(afi, safi, &pkt_afi, &pkt_safi);
unsigned long cp, capp, rcapp;
iana_afi_t pkt_afi;
afi_t afi;
- safi_t safi, pkt_safi;
+ safi_t safi;
+ iana_safi_t pkt_safi;
as_t local_as;
u_int32_t restart_time;
u_char afi_safi_count = 0;
/* Generic MP capability data */
struct capability_mp_data {
- iana_afi_t afi;
+ uint16_t afi; /* iana_afi_t */
u_char reserved;
- safi_t safi;
+ uint8_t safi; /* iana_safi_t */
};
struct capability_as4 {
{
struct stream *s;
iana_afi_t pkt_afi;
- safi_t pkt_safi;
+ iana_safi_t pkt_safi;
if (DISABLE_BGP_ANNOUNCE)
return NULL;
struct bgp_filter *filter;
int orf_refresh = 0;
iana_afi_t pkt_afi;
- safi_t pkt_safi;
+ iana_safi_t pkt_safi;
if (DISABLE_BGP_ANNOUNCE)
return;
{
struct stream *s;
iana_afi_t pkt_afi;
- safi_t pkt_safi;
+ iana_safi_t pkt_safi;
/* Convert AFI, SAFI to values for packet. */
bgp_map_afi_safi_int2iana(afi, safi, &pkt_afi, &pkt_safi);
packet);
case SAFI_EVPN:
return bgp_nlri_parse_evpn(peer, attr, packet, mp_withdraw);
+ default:
+ return -1;
}
- return -1;
}
/* Parse BGP Update packet and make attribute object. */
{
iana_afi_t pkt_afi;
afi_t afi;
- safi_t pkt_safi, safi;
+ iana_safi_t pkt_safi;
+ safi_t safi;
struct stream *s;
struct peer_af *paf;
struct update_group *updgrp;
u_char action;
iana_afi_t pkt_afi;
afi_t afi;
- safi_t pkt_safi, safi;
+ iana_safi_t pkt_safi;
+ safi_t safi;
end = pnt + length;
int always)
{
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))
return 0;
send_attr_str);
if (!stream_empty(snlri)) {
iana_afi_t pkt_afi;
- safi_t pkt_safi;
+ iana_safi_t pkt_safi;
pkt_afi = afi_int2iana(afi);
pkt_safi = safi_int2iana(safi);
/* If first time, format the MP_UNREACH header */
if (first_time) {
iana_afi_t pkt_afi;
- safi_t pkt_safi;
+ iana_safi_t pkt_safi;
pkt_afi = afi_int2iana(afi);
pkt_safi = safi_int2iana(safi);
case SAFI_MPLS_VPN:
return BGP_VPNV4_NODE;
break;
+ default:
+ /* not expected */
+ return BGP_IPV4_NODE;
+ break;
}
break;
case AFI_IP6:
case SAFI_MPLS_VPN:
return BGP_VPNV6_NODE;
break;
+ default:
+ /* not expected */
+ return BGP_IPV4_NODE;
+ break;
}
break;
case AFI_L2VPN:
json);
}
safi++;
- if (safi == SAFI_RESERVED_4
- || safi
- == SAFI_RESERVED_5) /* handle special
- cases to match
- zebra.h */
- safi++;
if (!safi_wildcard)
safi = SAFI_MAX;
}
return 0;
}
-int bgp_map_afi_safi_iana2int(iana_afi_t pkt_afi, safi_t pkt_safi, afi_t *afi,
- safi_t *safi)
+int bgp_map_afi_safi_iana2int(iana_afi_t pkt_afi, iana_safi_t pkt_safi,
+ afi_t *afi, safi_t *safi)
{
/* Map from IANA values to internal values, return error if
* values are unrecognized.
}
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
* internal values are bad (unexpected).
UNSET_FLAG(peer->sflags, PEER_STATUS_NSF_MODE);
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;
if (peer->t_gr_restart) {
stream. */
struct bgp_nlri {
/* AFI. */
- afi_t afi;
+ uint16_t afi; /* iana_afi_t */
/* SAFI. */
- safi_t safi;
+ uint8_t safi; /* iana_safi_t */
/* Pointer to NLRI byte stream. */
u_char *nlri;
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);
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_find(struct peer *, afi_t, safi_t);
case SAFI_ENCAP:
return rfapiBgpInfoFilteredImportEncap;
+
+ default:
+ /* not expected */
+ return NULL;
}
zlog_err("%s: bad safi %d", __func__, safi);
return NULL;
return "evpn";
case SAFI_LABELED_UNICAST:
return "labeled-unicast";
+ default:
+ return "unknown";
}
- return NULL;
}
/* If n includes p prefix then return 1 else return 0. */
typedef enum { AFI_IP = 1, AFI_IP6 = 2, AFI_L2VPN = 3, AFI_MAX = 4 } afi_t;
/* Subsequent Address Family Identifier. */
-#define SAFI_UNICAST 1
-#define SAFI_MULTICAST 2
-#define SAFI_MPLS_VPN 3
-#define SAFI_RESERVED_4 4
-#define SAFI_ENCAP 5
-#define SAFI_RESERVED_5 5
-#define SAFI_EVPN 6
-#define SAFI_LABELED_UNICAST 7
-#define SAFI_MAX 8
-
-#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
+typedef enum {
+ SAFI_UNICAST = 1,
+ SAFI_MULTICAST = 2,
+ SAFI_MPLS_VPN = 3,
+ SAFI_ENCAP = 4,
+ SAFI_EVPN = 5,
+ SAFI_LABELED_UNICAST = 6,
+ SAFI_MAX = 7
+} safi_t;
/*
* The above AFI and SAFI definitions are for internal use. The protocol
IANA_AFI_IP6MR = 129
} iana_afi_t;
-#define IANA_SAFI_RESERVED 0
-#define IANA_SAFI_UNICAST 1
-#define IANA_SAFI_MULTICAST 2
-#define IANA_SAFI_ENCAP 7
-#define IANA_SAFI_EVPN 70
-#define IANA_SAFI_MPLS_VPN 128
+typedef enum {
+ IANA_SAFI_RESERVED = 0,
+ IANA_SAFI_UNICAST = 1,
+ IANA_SAFI_MULTICAST = 2,
+ IANA_SAFI_LABELED_UNICAST = 4,
+ IANA_SAFI_ENCAP = 7,
+ IANA_SAFI_EVPN = 70,
+ IANA_SAFI_MPLS_VPN = 128
+} iana_safi_t;
/* Default Administrative Distance of each protocol. */
#define ZEBRA_KERNEL_DISTANCE_DEFAULT 0
#define UNSET_FLAG(V,F) (V) &= ~(F)
#define RESET_FLAG(V) (V) = 0
-typedef u_int8_t safi_t;
-
/* Zebra types. Used in Zserv message header. */
typedef u_int16_t zebra_size_t;
typedef u_int16_t zebra_command_t;
static inline afi_t afi_iana2int(iana_afi_t afi)
{
- if (afi == IANA_AFI_IPV4)
+ switch (afi) {
+ case IANA_AFI_IPV4:
return AFI_IP;
- if (afi == IANA_AFI_IPV6)
+ case IANA_AFI_IPV6:
return AFI_IP6;
- if (afi == IANA_AFI_L2VPN)
+ case IANA_AFI_L2VPN:
return AFI_L2VPN;
- return AFI_MAX;
+ default:
+ return AFI_MAX;
+ }
}
static inline iana_afi_t afi_int2iana(afi_t afi)
{
- if (afi == AFI_IP)
+ switch (afi) {
+ case AFI_IP:
return IANA_AFI_IPV4;
- if (afi == AFI_IP6)
+ case AFI_IP6:
return IANA_AFI_IPV6;
- if (afi == AFI_L2VPN)
+ case AFI_L2VPN:
return IANA_AFI_L2VPN;
- return IANA_AFI_RESERVED;
+ default:
+ 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;
- if (safi == IANA_SAFI_MULTICAST)
+ case IANA_SAFI_MULTICAST:
return SAFI_MULTICAST;
- if (safi == IANA_SAFI_MPLS_VPN)
+ case IANA_SAFI_MPLS_VPN:
return SAFI_MPLS_VPN;
- if (safi == IANA_SAFI_ENCAP)
+ case IANA_SAFI_ENCAP:
return SAFI_ENCAP;
- if (safi == IANA_SAFI_EVPN)
+ case IANA_SAFI_EVPN:
return SAFI_EVPN;
- if (safi == IANA_SAFI_LABELED_UNICAST)
+ case IANA_SAFI_LABELED_UNICAST:
return SAFI_LABELED_UNICAST;
- return SAFI_MAX;
+ default:
+ 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;
- if (safi == SAFI_MULTICAST)
+ case SAFI_MULTICAST:
return IANA_SAFI_MULTICAST;
- if (safi == SAFI_MPLS_VPN)
+ case SAFI_MPLS_VPN:
return IANA_SAFI_MPLS_VPN;
- if (safi == SAFI_ENCAP)
+ case SAFI_ENCAP:
return IANA_SAFI_ENCAP;
- if (safi == SAFI_EVPN)
+ case SAFI_EVPN:
return IANA_SAFI_EVPN;
- if (safi == SAFI_LABELED_UNICAST)
+ case SAFI_LABELED_UNICAST:
return IANA_SAFI_LABELED_UNICAST;
- return IANA_SAFI_RESERVED;
+ default:
+ return IANA_SAFI_RESERVED;
+ }
}
#endif /* _ZEBRA_H */
/* 8 */
{
"MP6",
- "MP IP4/MPLS-laveled VPN",
+ "MP IP4/MPLS-labeled VPN",
{CAPABILITY_CODE_MP, 0x4, 0x0, 0x1, 0x0, 0x80},
6,
SHOULD_PARSE,
TestCapability.okfail("MP2: MP IP/Multicast")
TestCapability.okfail("MP3: MP IP6/MPLS-labeled 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("MP-short: MP IP4/Unicast, length too short (< minimum)")
TestCapability.okfail("MP-overflow: MP IP4/Unicast, length too long")
parse_ret = bgp_mp_unreach_parse(&attr_args, &nlri);
if (!parse_ret) {
iana_afi_t pkt_afi;
- safi_t pkt_safi;
+ iana_safi_t pkt_safi;
/* Convert AFI, SAFI to internal values, check. */
if (bgp_map_afi_safi_int2iana(nlri.afi, nlri.safi, &pkt_afi,