mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 23:53:28 +00:00
bgpd, lib: Add iana_afi2str and iana_safi2str for eye pleasing strings (#4439)
bgpd, lib: Add iana_afi2str and iana_safi2str for eye pleasing strings
This commit is contained in:
commit
0688fd81d0
@ -1664,8 +1664,9 @@ int bgp_mp_reach_parse(struct bgp_attr_parser_args *args,
|
|||||||
*/
|
*/
|
||||||
if (bgp_debug_update(peer, NULL, NULL, 0))
|
if (bgp_debug_update(peer, NULL, NULL, 0))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: MP_REACH received AFI %u or SAFI %u is unrecognized",
|
"%s: MP_REACH received AFI %s or SAFI %s is unrecognized",
|
||||||
peer->host, pkt_afi, pkt_safi);
|
peer->host, iana_afi2str(pkt_afi),
|
||||||
|
iana_safi2str(pkt_safi));
|
||||||
return BGP_ATTR_PARSE_ERROR;
|
return BGP_ATTR_PARSE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1849,8 +1850,9 @@ int bgp_mp_unreach_parse(struct bgp_attr_parser_args *args,
|
|||||||
*/
|
*/
|
||||||
if (bgp_debug_update(peer, NULL, NULL, 0))
|
if (bgp_debug_update(peer, NULL, NULL, 0))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: MP_UNREACH received AFI %u or SAFI %u is unrecognized",
|
"%s: MP_UNREACH received AFI %s or SAFI %s is unrecognized",
|
||||||
peer->host, pkt_afi, pkt_safi);
|
peer->host, iana_afi2str(pkt_afi),
|
||||||
|
iana_safi2str(pkt_safi));
|
||||||
return BGP_ATTR_PARSE_ERROR;
|
return BGP_ATTR_PARSE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -264,8 +264,9 @@ static int bgp_capability_mp(struct peer *peer, struct capability_header *hdr)
|
|||||||
bgp_capability_mp_data(s, &mpc);
|
bgp_capability_mp_data(s, &mpc);
|
||||||
|
|
||||||
if (bgp_debug_neighbor_events(peer))
|
if (bgp_debug_neighbor_events(peer))
|
||||||
zlog_debug("%s OPEN has MP_EXT CAP for afi/safi: %u/%u",
|
zlog_debug("%s OPEN has MP_EXT CAP for afi/safi: %s/%s",
|
||||||
peer->host, mpc.afi, mpc.safi);
|
peer->host, iana_afi2str(mpc.afi),
|
||||||
|
iana_safi2str(mpc.safi));
|
||||||
|
|
||||||
/* Convert AFI, SAFI to internal values, check. */
|
/* Convert AFI, SAFI to internal values, check. */
|
||||||
if (bgp_map_afi_safi_iana2int(mpc.afi, mpc.safi, &afi, &safi))
|
if (bgp_map_afi_safi_iana2int(mpc.afi, mpc.safi, &afi, &safi))
|
||||||
@ -325,8 +326,8 @@ static int bgp_capability_orf_entry(struct peer *peer,
|
|||||||
pkt_safi = mpc.safi;
|
pkt_safi = mpc.safi;
|
||||||
|
|
||||||
if (bgp_debug_neighbor_events(peer))
|
if (bgp_debug_neighbor_events(peer))
|
||||||
zlog_debug("%s ORF Cap entry for afi/safi: %u/%u", peer->host,
|
zlog_debug("%s ORF Cap entry for afi/safi: %s/%s", peer->host,
|
||||||
mpc.afi, mpc.safi);
|
iana_afi2str(mpc.afi), iana_safi2str(mpc.safi));
|
||||||
|
|
||||||
/* Convert AFI, SAFI to internal values, check. */
|
/* Convert AFI, SAFI to internal values, check. */
|
||||||
if (bgp_map_afi_safi_iana2int(pkt_afi, pkt_safi, &afi, &safi)) {
|
if (bgp_map_afi_safi_iana2int(pkt_afi, pkt_safi, &afi, &safi)) {
|
||||||
@ -407,11 +408,11 @@ static int bgp_capability_orf_entry(struct peer *peer,
|
|||||||
if (bgp_debug_neighbor_events(peer))
|
if (bgp_debug_neighbor_events(peer))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s OPEN has %s ORF capability"
|
"%s OPEN has %s ORF capability"
|
||||||
" as %s for afi/safi: %d/%d",
|
" as %s for afi/safi: %s/%s",
|
||||||
peer->host,
|
peer->host,
|
||||||
lookup_msg(orf_type_str, type, NULL),
|
lookup_msg(orf_type_str, type, NULL),
|
||||||
lookup_msg(orf_mode_str, mode, NULL), pkt_afi,
|
lookup_msg(orf_mode_str, mode, NULL),
|
||||||
pkt_safi);
|
iana_afi2str(pkt_afi), iana_safi2str(pkt_safi));
|
||||||
|
|
||||||
if (hdr->code == CAPABILITY_CODE_ORF) {
|
if (hdr->code == CAPABILITY_CODE_ORF) {
|
||||||
sm_cap = PEER_CAP_ORF_PREFIX_SM_RCV;
|
sm_cap = PEER_CAP_ORF_PREFIX_SM_RCV;
|
||||||
@ -487,15 +488,17 @@ static int bgp_capability_restart(struct peer *peer,
|
|||||||
if (bgp_map_afi_safi_iana2int(pkt_afi, pkt_safi, &afi, &safi)) {
|
if (bgp_map_afi_safi_iana2int(pkt_afi, pkt_safi, &afi, &safi)) {
|
||||||
if (bgp_debug_neighbor_events(peer))
|
if (bgp_debug_neighbor_events(peer))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s Addr-family %d/%d(afi/safi) not supported."
|
"%s Addr-family %s/%s(afi/safi) not supported."
|
||||||
" Ignore the Graceful Restart capability for this AFI/SAFI",
|
" Ignore the Graceful Restart capability for this AFI/SAFI",
|
||||||
peer->host, pkt_afi, pkt_safi);
|
peer->host, iana_afi2str(pkt_afi),
|
||||||
|
iana_safi2str(pkt_safi));
|
||||||
} else if (!peer->afc[afi][safi]) {
|
} else if (!peer->afc[afi][safi]) {
|
||||||
if (bgp_debug_neighbor_events(peer))
|
if (bgp_debug_neighbor_events(peer))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s Addr-family %d/%d(afi/safi) not enabled."
|
"%s Addr-family %s/%s(afi/safi) not enabled."
|
||||||
" Ignore the Graceful Restart capability",
|
" Ignore the Graceful Restart capability",
|
||||||
peer->host, pkt_afi, pkt_safi);
|
peer->host, iana_afi2str(pkt_afi),
|
||||||
|
iana_safi2str(pkt_safi));
|
||||||
} else {
|
} else {
|
||||||
if (bgp_debug_neighbor_events(peer))
|
if (bgp_debug_neighbor_events(peer))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
@ -564,8 +567,9 @@ static int bgp_capability_addpath(struct peer *peer,
|
|||||||
|
|
||||||
if (bgp_debug_neighbor_events(peer))
|
if (bgp_debug_neighbor_events(peer))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s OPEN has AddPath CAP for afi/safi: %u/%u%s%s",
|
"%s OPEN has AddPath CAP for afi/safi: %s/%s%s%s",
|
||||||
peer->host, pkt_afi, pkt_safi,
|
peer->host, iana_afi2str(pkt_afi),
|
||||||
|
iana_safi2str(pkt_safi),
|
||||||
(send_receive & BGP_ADDPATH_RX) ? ", receive"
|
(send_receive & BGP_ADDPATH_RX) ? ", receive"
|
||||||
: "",
|
: "",
|
||||||
(send_receive & BGP_ADDPATH_TX) ? ", transmit"
|
(send_receive & BGP_ADDPATH_TX) ? ", transmit"
|
||||||
@ -575,16 +579,18 @@ static int bgp_capability_addpath(struct peer *peer,
|
|||||||
if (bgp_map_afi_safi_iana2int(pkt_afi, pkt_safi, &afi, &safi)) {
|
if (bgp_map_afi_safi_iana2int(pkt_afi, pkt_safi, &afi, &safi)) {
|
||||||
if (bgp_debug_neighbor_events(peer))
|
if (bgp_debug_neighbor_events(peer))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s Addr-family %d/%d(afi/safi) not supported."
|
"%s Addr-family %s/%s(afi/safi) not supported."
|
||||||
" Ignore the Addpath Attribute for this AFI/SAFI",
|
" Ignore the Addpath Attribute for this AFI/SAFI",
|
||||||
peer->host, pkt_afi, pkt_safi);
|
peer->host, iana_afi2str(pkt_afi),
|
||||||
|
iana_safi2str(pkt_safi));
|
||||||
continue;
|
continue;
|
||||||
} else if (!peer->afc[afi][safi]) {
|
} else if (!peer->afc[afi][safi]) {
|
||||||
if (bgp_debug_neighbor_events(peer))
|
if (bgp_debug_neighbor_events(peer))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s Addr-family %d/%d(afi/safi) not enabled."
|
"%s Addr-family %s/%s(afi/safi) not enabled."
|
||||||
" Ignore the AddPath capability for this AFI/SAFI",
|
" Ignore the AddPath capability for this AFI/SAFI",
|
||||||
peer->host, pkt_afi, pkt_safi);
|
peer->host, iana_afi2str(pkt_afi),
|
||||||
|
iana_safi2str(pkt_safi));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -624,16 +630,18 @@ static int bgp_capability_enhe(struct peer *peer, struct capability_header *hdr)
|
|||||||
|
|
||||||
if (bgp_debug_neighbor_events(peer))
|
if (bgp_debug_neighbor_events(peer))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s Received with afi/safi/next-hop afi: %u/%u/%u",
|
"%s Received with afi/safi/next-hop afi: %s/%s/%u",
|
||||||
peer->host, pkt_afi, pkt_safi, pkt_nh_afi);
|
peer->host, iana_afi2str(pkt_afi),
|
||||||
|
iana_safi2str(pkt_safi), pkt_nh_afi);
|
||||||
|
|
||||||
/* Convert AFI, SAFI to internal values, check. */
|
/* Convert AFI, SAFI to internal values, check. */
|
||||||
if (bgp_map_afi_safi_iana2int(pkt_afi, pkt_safi, &afi, &safi)) {
|
if (bgp_map_afi_safi_iana2int(pkt_afi, pkt_safi, &afi, &safi)) {
|
||||||
if (bgp_debug_neighbor_events(peer))
|
if (bgp_debug_neighbor_events(peer))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s Addr-family %d/%d(afi/safi) not supported."
|
"%s Addr-family %s/%s(afi/safi) not supported."
|
||||||
" Ignore the ENHE Attribute for this AFI/SAFI",
|
" Ignore the ENHE Attribute for this AFI/SAFI",
|
||||||
peer->host, pkt_afi, pkt_safi);
|
peer->host, iana_afi2str(pkt_afi),
|
||||||
|
iana_safi2str(pkt_safi));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -652,9 +660,10 @@ static int bgp_capability_enhe(struct peer *peer, struct capability_header *hdr)
|
|||||||
|| safi == SAFI_LABELED_UNICAST)) {
|
|| safi == SAFI_LABELED_UNICAST)) {
|
||||||
flog_warn(
|
flog_warn(
|
||||||
EC_BGP_CAPABILITY_INVALID_DATA,
|
EC_BGP_CAPABILITY_INVALID_DATA,
|
||||||
"%s Unexpected afi/safi/next-hop afi: %u/%u/%u "
|
"%s Unexpected afi/safi/next-hop afi: %s/%s/%u "
|
||||||
"in Extended Next-hop capability, ignoring",
|
"in Extended Next-hop capability, ignoring",
|
||||||
peer->host, pkt_afi, pkt_safi, pkt_nh_afi);
|
peer->host, iana_afi2str(pkt_afi),
|
||||||
|
iana_safi2str(pkt_safi), pkt_nh_afi);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -822,12 +822,13 @@ void bgp_route_refresh_send(struct peer *peer, afi_t afi, safi_t safi,
|
|||||||
stream_putc(s, ORF_COMMON_PART_REMOVE_ALL);
|
stream_putc(s, ORF_COMMON_PART_REMOVE_ALL);
|
||||||
if (bgp_debug_neighbor_events(peer))
|
if (bgp_debug_neighbor_events(peer))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s sending REFRESH_REQ to remove ORF(%d) (%s) for afi/safi: %d/%d",
|
"%s sending REFRESH_REQ to remove ORF(%d) (%s) for afi/safi: %s/%s",
|
||||||
peer->host, orf_type,
|
peer->host, orf_type,
|
||||||
(when_to_refresh == REFRESH_DEFER
|
(when_to_refresh == REFRESH_DEFER
|
||||||
? "defer"
|
? "defer"
|
||||||
: "immediate"),
|
: "immediate"),
|
||||||
pkt_afi, pkt_safi);
|
iana_afi2str(pkt_afi),
|
||||||
|
iana_safi2str(pkt_safi));
|
||||||
} else {
|
} else {
|
||||||
SET_FLAG(peer->af_sflags[afi][safi],
|
SET_FLAG(peer->af_sflags[afi][safi],
|
||||||
PEER_STATUS_ORF_PREFIX_SEND);
|
PEER_STATUS_ORF_PREFIX_SEND);
|
||||||
@ -838,12 +839,13 @@ void bgp_route_refresh_send(struct peer *peer, afi_t afi, safi_t safi,
|
|||||||
ORF_COMMON_PART_DENY);
|
ORF_COMMON_PART_DENY);
|
||||||
if (bgp_debug_neighbor_events(peer))
|
if (bgp_debug_neighbor_events(peer))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s sending REFRESH_REQ with pfxlist ORF(%d) (%s) for afi/safi: %d/%d",
|
"%s sending REFRESH_REQ with pfxlist ORF(%d) (%s) for afi/safi: %s/%s",
|
||||||
peer->host, orf_type,
|
peer->host, orf_type,
|
||||||
(when_to_refresh == REFRESH_DEFER
|
(when_to_refresh == REFRESH_DEFER
|
||||||
? "defer"
|
? "defer"
|
||||||
: "immediate"),
|
: "immediate"),
|
||||||
pkt_afi, pkt_safi);
|
iana_afi2str(pkt_afi),
|
||||||
|
iana_safi2str(pkt_safi));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Total ORF Entry Len. */
|
/* Total ORF Entry Len. */
|
||||||
@ -856,8 +858,9 @@ void bgp_route_refresh_send(struct peer *peer, afi_t afi, safi_t safi,
|
|||||||
|
|
||||||
if (bgp_debug_neighbor_events(peer)) {
|
if (bgp_debug_neighbor_events(peer)) {
|
||||||
if (!orf_refresh)
|
if (!orf_refresh)
|
||||||
zlog_debug("%s sending REFRESH_REQ for afi/safi: %d/%d",
|
zlog_debug("%s sending REFRESH_REQ for afi/safi: %s/%s",
|
||||||
peer->host, pkt_afi, pkt_safi);
|
peer->host, iana_afi2str(pkt_afi),
|
||||||
|
iana_safi2str(pkt_safi));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add packet to the peer. */
|
/* Add packet to the peer. */
|
||||||
@ -901,11 +904,11 @@ void bgp_capability_send(struct peer *peer, afi_t afi, safi_t safi,
|
|||||||
|
|
||||||
if (bgp_debug_neighbor_events(peer))
|
if (bgp_debug_neighbor_events(peer))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s sending CAPABILITY has %s MP_EXT CAP for afi/safi: %d/%d",
|
"%s sending CAPABILITY has %s MP_EXT CAP for afi/safi: %s/%s",
|
||||||
peer->host,
|
peer->host,
|
||||||
action == CAPABILITY_ACTION_SET ? "Advertising"
|
action == CAPABILITY_ACTION_SET ? "Advertising"
|
||||||
: "Removing",
|
: "Removing",
|
||||||
pkt_afi, pkt_safi);
|
iana_afi2str(pkt_afi), iana_safi2str(pkt_safi));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set packet size. */
|
/* Set packet size. */
|
||||||
@ -1788,14 +1791,16 @@ static int bgp_route_refresh_receive(struct peer *peer, bgp_size_t size)
|
|||||||
pkt_safi = stream_getc(s);
|
pkt_safi = stream_getc(s);
|
||||||
|
|
||||||
if (bgp_debug_update(peer, NULL, NULL, 0))
|
if (bgp_debug_update(peer, NULL, NULL, 0))
|
||||||
zlog_debug("%s rcvd REFRESH_REQ for afi/safi: %d/%d",
|
zlog_debug("%s rcvd REFRESH_REQ for afi/safi: %s/%s",
|
||||||
peer->host, pkt_afi, pkt_safi);
|
peer->host, iana_afi2str(pkt_afi),
|
||||||
|
iana_safi2str(pkt_safi));
|
||||||
|
|
||||||
/* Convert AFI, SAFI to internal values and check. */
|
/* Convert AFI, SAFI to internal values and check. */
|
||||||
if (bgp_map_afi_safi_iana2int(pkt_afi, pkt_safi, &afi, &safi)) {
|
if (bgp_map_afi_safi_iana2int(pkt_afi, pkt_safi, &afi, &safi)) {
|
||||||
zlog_info(
|
zlog_info(
|
||||||
"%s REFRESH_REQ for unrecognized afi/safi: %d/%d - ignored",
|
"%s REFRESH_REQ for unrecognized afi/safi: %s/%s - ignored",
|
||||||
peer->host, pkt_afi, pkt_safi);
|
peer->host, iana_afi2str(pkt_afi),
|
||||||
|
iana_safi2str(pkt_safi));
|
||||||
return BGP_PACKET_NOOP;
|
return BGP_PACKET_NOOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2090,8 +2095,10 @@ static int bgp_capability_msg_parse(struct peer *peer, uint8_t *pnt,
|
|||||||
if (bgp_debug_neighbor_events(peer))
|
if (bgp_debug_neighbor_events(peer))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s Dynamic Capability MP_EXT afi/safi invalid "
|
"%s Dynamic Capability MP_EXT afi/safi invalid "
|
||||||
"(%u/%u)",
|
"(%s/%s)",
|
||||||
peer->host, pkt_afi, pkt_safi);
|
peer->host,
|
||||||
|
iana_afi2str(pkt_afi),
|
||||||
|
iana_safi2str(pkt_safi));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include "lib/json.h"
|
#include "lib/json.h"
|
||||||
#include "vrf.h"
|
#include "vrf.h"
|
||||||
#include "vty.h"
|
#include "vty.h"
|
||||||
|
#include "iana_afi.h"
|
||||||
|
|
||||||
/* For union sockunion. */
|
/* For union sockunion. */
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
|
133
lib/iana_afi.h
Normal file
133
lib/iana_afi.h
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
/*
|
||||||
|
* iana_afi and safi definitions.
|
||||||
|
* Copyright (C) 2018-2019 Cumulus Networks, Inc.
|
||||||
|
* Donald Sharp
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation; either version 2 of the License, or (at your option)
|
||||||
|
* any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; see the file COPYING; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
#ifndef __IANA_AFI_H__
|
||||||
|
|
||||||
|
#include <prefix.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The above AFI and SAFI definitions are for internal use. The protocol
|
||||||
|
* definitions (IANA values) as for example used in BGP protocol packets
|
||||||
|
* are defined below and these will get mapped to/from the internal values
|
||||||
|
* in the appropriate places.
|
||||||
|
* The rationale is that the protocol (IANA) values may be sparse and are
|
||||||
|
* not optimal for use in data-structure sizing.
|
||||||
|
* Note: Only useful (i.e., supported) values are defined below.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
IANA_AFI_RESERVED = 0,
|
||||||
|
IANA_AFI_IPV4 = 1,
|
||||||
|
IANA_AFI_IPV6 = 2,
|
||||||
|
IANA_AFI_L2VPN = 25,
|
||||||
|
} iana_afi_t;
|
||||||
|
|
||||||
|
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_FLOWSPEC = 133
|
||||||
|
} iana_safi_t;
|
||||||
|
|
||||||
|
static inline afi_t afi_iana2int(iana_afi_t afi)
|
||||||
|
{
|
||||||
|
switch (afi) {
|
||||||
|
case IANA_AFI_IPV4:
|
||||||
|
return AFI_IP;
|
||||||
|
case IANA_AFI_IPV6:
|
||||||
|
return AFI_IP6;
|
||||||
|
case IANA_AFI_L2VPN:
|
||||||
|
return AFI_L2VPN;
|
||||||
|
default:
|
||||||
|
return AFI_MAX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline iana_afi_t afi_int2iana(afi_t afi)
|
||||||
|
{
|
||||||
|
switch (afi) {
|
||||||
|
case AFI_IP:
|
||||||
|
return IANA_AFI_IPV4;
|
||||||
|
case AFI_IP6:
|
||||||
|
return IANA_AFI_IPV6;
|
||||||
|
case AFI_L2VPN:
|
||||||
|
return IANA_AFI_L2VPN;
|
||||||
|
default:
|
||||||
|
return IANA_AFI_RESERVED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline const char *iana_afi2str(iana_afi_t afi)
|
||||||
|
{
|
||||||
|
return afi2str(afi_iana2int(afi));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline safi_t safi_iana2int(iana_safi_t safi)
|
||||||
|
{
|
||||||
|
switch (safi) {
|
||||||
|
case IANA_SAFI_UNICAST:
|
||||||
|
return SAFI_UNICAST;
|
||||||
|
case IANA_SAFI_MULTICAST:
|
||||||
|
return SAFI_MULTICAST;
|
||||||
|
case IANA_SAFI_MPLS_VPN:
|
||||||
|
return SAFI_MPLS_VPN;
|
||||||
|
case IANA_SAFI_ENCAP:
|
||||||
|
return SAFI_ENCAP;
|
||||||
|
case IANA_SAFI_EVPN:
|
||||||
|
return SAFI_EVPN;
|
||||||
|
case IANA_SAFI_LABELED_UNICAST:
|
||||||
|
return SAFI_LABELED_UNICAST;
|
||||||
|
case IANA_SAFI_FLOWSPEC:
|
||||||
|
return SAFI_FLOWSPEC;
|
||||||
|
default:
|
||||||
|
return SAFI_MAX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline iana_safi_t safi_int2iana(safi_t safi)
|
||||||
|
{
|
||||||
|
switch (safi) {
|
||||||
|
case SAFI_UNICAST:
|
||||||
|
return IANA_SAFI_UNICAST;
|
||||||
|
case SAFI_MULTICAST:
|
||||||
|
return IANA_SAFI_MULTICAST;
|
||||||
|
case SAFI_MPLS_VPN:
|
||||||
|
return IANA_SAFI_MPLS_VPN;
|
||||||
|
case SAFI_ENCAP:
|
||||||
|
return IANA_SAFI_ENCAP;
|
||||||
|
case SAFI_EVPN:
|
||||||
|
return IANA_SAFI_EVPN;
|
||||||
|
case SAFI_LABELED_UNICAST:
|
||||||
|
return IANA_SAFI_LABELED_UNICAST;
|
||||||
|
case SAFI_FLOWSPEC:
|
||||||
|
return IANA_SAFI_FLOWSPEC;
|
||||||
|
default:
|
||||||
|
return IANA_SAFI_RESERVED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline const char *iana_safi2str(iana_safi_t safi)
|
||||||
|
{
|
||||||
|
return safi2str(safi_iana2int(safi));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -165,6 +165,7 @@ pkginclude_HEADERS += \
|
|||||||
lib/graph.h \
|
lib/graph.h \
|
||||||
lib/hash.h \
|
lib/hash.h \
|
||||||
lib/hook.h \
|
lib/hook.h \
|
||||||
|
lib/iana_afi.h \
|
||||||
lib/id_alloc.h \
|
lib/id_alloc.h \
|
||||||
lib/if.h \
|
lib/if.h \
|
||||||
lib/if_rmap.h \
|
lib/if_rmap.h \
|
||||||
|
101
lib/zebra.h
101
lib/zebra.h
@ -366,35 +366,6 @@ typedef enum {
|
|||||||
SAFI_MAX = 8
|
SAFI_MAX = 8
|
||||||
} safi_t;
|
} safi_t;
|
||||||
|
|
||||||
/*
|
|
||||||
* The above AFI and SAFI definitions are for internal use. The protocol
|
|
||||||
* definitions (IANA values) as for example used in BGP protocol packets
|
|
||||||
* are defined below and these will get mapped to/from the internal values
|
|
||||||
* in the appropriate places.
|
|
||||||
* The rationale is that the protocol (IANA) values may be sparse and are
|
|
||||||
* not optimal for use in data-structure sizing.
|
|
||||||
* Note: Only useful (i.e., supported) values are defined below.
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
IANA_AFI_RESERVED = 0,
|
|
||||||
IANA_AFI_IPV4 = 1,
|
|
||||||
IANA_AFI_IPV6 = 2,
|
|
||||||
IANA_AFI_L2VPN = 25,
|
|
||||||
IANA_AFI_IPMR = 128,
|
|
||||||
IANA_AFI_IP6MR = 129
|
|
||||||
} iana_afi_t;
|
|
||||||
|
|
||||||
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_FLOWSPEC = 133
|
|
||||||
} 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
|
||||||
#define ZEBRA_CONNECT_DISTANCE_DEFAULT 0
|
#define ZEBRA_CONNECT_DISTANCE_DEFAULT 0
|
||||||
@ -432,76 +403,4 @@ typedef uint32_t route_tag_t;
|
|||||||
#define ROUTE_TAG_MAX UINT32_MAX
|
#define ROUTE_TAG_MAX UINT32_MAX
|
||||||
#define ROUTE_TAG_PRI PRIu32
|
#define ROUTE_TAG_PRI PRIu32
|
||||||
|
|
||||||
static inline afi_t afi_iana2int(iana_afi_t afi)
|
|
||||||
{
|
|
||||||
switch (afi) {
|
|
||||||
case IANA_AFI_IPV4:
|
|
||||||
return AFI_IP;
|
|
||||||
case IANA_AFI_IPV6:
|
|
||||||
return AFI_IP6;
|
|
||||||
case IANA_AFI_L2VPN:
|
|
||||||
return AFI_L2VPN;
|
|
||||||
default:
|
|
||||||
return AFI_MAX;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline iana_afi_t afi_int2iana(afi_t afi)
|
|
||||||
{
|
|
||||||
switch (afi) {
|
|
||||||
case AFI_IP:
|
|
||||||
return IANA_AFI_IPV4;
|
|
||||||
case AFI_IP6:
|
|
||||||
return IANA_AFI_IPV6;
|
|
||||||
case AFI_L2VPN:
|
|
||||||
return IANA_AFI_L2VPN;
|
|
||||||
default:
|
|
||||||
return IANA_AFI_RESERVED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline safi_t safi_iana2int(iana_safi_t safi)
|
|
||||||
{
|
|
||||||
switch (safi) {
|
|
||||||
case IANA_SAFI_UNICAST:
|
|
||||||
return SAFI_UNICAST;
|
|
||||||
case IANA_SAFI_MULTICAST:
|
|
||||||
return SAFI_MULTICAST;
|
|
||||||
case IANA_SAFI_MPLS_VPN:
|
|
||||||
return SAFI_MPLS_VPN;
|
|
||||||
case IANA_SAFI_ENCAP:
|
|
||||||
return SAFI_ENCAP;
|
|
||||||
case IANA_SAFI_EVPN:
|
|
||||||
return SAFI_EVPN;
|
|
||||||
case IANA_SAFI_LABELED_UNICAST:
|
|
||||||
return SAFI_LABELED_UNICAST;
|
|
||||||
case IANA_SAFI_FLOWSPEC:
|
|
||||||
return SAFI_FLOWSPEC;
|
|
||||||
default:
|
|
||||||
return SAFI_MAX;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline iana_safi_t safi_int2iana(safi_t safi)
|
|
||||||
{
|
|
||||||
switch (safi) {
|
|
||||||
case SAFI_UNICAST:
|
|
||||||
return IANA_SAFI_UNICAST;
|
|
||||||
case SAFI_MULTICAST:
|
|
||||||
return IANA_SAFI_MULTICAST;
|
|
||||||
case SAFI_MPLS_VPN:
|
|
||||||
return IANA_SAFI_MPLS_VPN;
|
|
||||||
case SAFI_ENCAP:
|
|
||||||
return IANA_SAFI_ENCAP;
|
|
||||||
case SAFI_EVPN:
|
|
||||||
return IANA_SAFI_EVPN;
|
|
||||||
case SAFI_LABELED_UNICAST:
|
|
||||||
return IANA_SAFI_LABELED_UNICAST;
|
|
||||||
case SAFI_FLOWSPEC:
|
|
||||||
return IANA_SAFI_FLOWSPEC;
|
|
||||||
default:
|
|
||||||
return IANA_SAFI_RESERVED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* _ZEBRA_H */
|
#endif /* _ZEBRA_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user