diff options
Diffstat (limited to 'lib/zebra.h')
| -rw-r--r-- | lib/zebra.h | 160 |
1 files changed, 92 insertions, 68 deletions
diff --git a/lib/zebra.h b/lib/zebra.h index 420f237176..760264d752 100644 --- a/lib/zebra.h +++ b/lib/zebra.h @@ -352,61 +352,6 @@ struct in_pktinfo /* default zebra TCP port for zclient */ #define ZEBRA_PORT 2600 -/* Zebra message types. */ -typedef enum { - ZEBRA_INTERFACE_ADD, - ZEBRA_INTERFACE_DELETE, - ZEBRA_INTERFACE_ADDRESS_ADD, - ZEBRA_INTERFACE_ADDRESS_DELETE, - ZEBRA_INTERFACE_UP, - ZEBRA_INTERFACE_DOWN, - ZEBRA_IPV4_ROUTE_ADD, - ZEBRA_IPV4_ROUTE_DELETE, - ZEBRA_IPV6_ROUTE_ADD, - ZEBRA_IPV6_ROUTE_DELETE, - ZEBRA_REDISTRIBUTE_ADD, - ZEBRA_REDISTRIBUTE_DELETE, - ZEBRA_REDISTRIBUTE_DEFAULT_ADD, - ZEBRA_REDISTRIBUTE_DEFAULT_DELETE, - ZEBRA_ROUTER_ID_ADD, - ZEBRA_ROUTER_ID_DELETE, - ZEBRA_ROUTER_ID_UPDATE, - ZEBRA_HELLO, - ZEBRA_NEXTHOP_REGISTER, - ZEBRA_NEXTHOP_UNREGISTER, - ZEBRA_NEXTHOP_UPDATE, - ZEBRA_INTERFACE_NBR_ADDRESS_ADD, - ZEBRA_INTERFACE_NBR_ADDRESS_DELETE, - ZEBRA_INTERFACE_BFD_DEST_UPDATE, - ZEBRA_IMPORT_ROUTE_REGISTER, - ZEBRA_IMPORT_ROUTE_UNREGISTER, - ZEBRA_IMPORT_CHECK_UPDATE, - ZEBRA_IPV4_ROUTE_IPV6_NEXTHOP_ADD, - ZEBRA_BFD_DEST_REGISTER, - ZEBRA_BFD_DEST_DEREGISTER, - ZEBRA_BFD_DEST_UPDATE, - ZEBRA_BFD_DEST_REPLAY, - ZEBRA_REDISTRIBUTE_IPV4_ADD, - ZEBRA_REDISTRIBUTE_IPV4_DEL, - ZEBRA_REDISTRIBUTE_IPV6_ADD, - ZEBRA_REDISTRIBUTE_IPV6_DEL, - ZEBRA_VRF_UNREGISTER, - ZEBRA_VRF_ADD, - ZEBRA_VRF_DELETE, - ZEBRA_INTERFACE_VRF_UPDATE, - ZEBRA_BFD_CLIENT_REGISTER, - ZEBRA_INTERFACE_ENABLE_RADV, - ZEBRA_INTERFACE_DISABLE_RADV, - ZEBRA_IPV4_NEXTHOP_LOOKUP_MRIB, - ZEBRA_INTERFACE_LINK_PARAMS, - ZEBRA_MPLS_LABELS_ADD, - ZEBRA_MPLS_LABELS_DELETE, - ZEBRA_IPV4_NEXTHOP_ADD, - ZEBRA_IPV4_NEXTHOP_DELETE, - ZEBRA_IPV6_NEXTHOP_ADD, - ZEBRA_IPV6_NEXTHOP_DELETE, -} zebra_message_types_t; - /* Marker value used in new Zserv, in the byte location corresponding * the command value in the old zserv header. To allow old and new * Zserv headers to be distinguished from each other. @@ -435,13 +380,7 @@ extern int proto_redistnum(int afi, const char *s); extern const char *zserv_command_string (unsigned int command); -/* Error codes of zebra. */ -#define ZEBRA_ERR_NOERROR 0 -#define ZEBRA_ERR_RTEXIST -1 -#define ZEBRA_ERR_RTUNREACH -2 -#define ZEBRA_ERR_EPERM -3 -#define ZEBRA_ERR_RTNOEXIST -4 -#define ZEBRA_ERR_KERNEL -5 +#define strmatch(a,b) (!strcmp((a), (b))) /* Zebra message flags */ #define ZEBRA_FLAG_INTERNAL 0x01 @@ -462,17 +401,50 @@ extern const char *zserv_command_string (unsigned int command); typedef enum { AFI_IP = 1, AFI_IP6 = 2, - AFI_ETHER = 3, /* RFC 1700 has "6" for 802.* */ - AFI_MAX = 4 + AFI_L2VPN = 4, + AFI_MAX = 5 } afi_t; /* Subsequent Address Family Identifier. */ #define SAFI_UNICAST 1 #define SAFI_MULTICAST 2 -#define SAFI_RESERVED_3 3 -#define SAFI_MPLS_VPN 4 -#define SAFI_ENCAP 7 /* per IANA */ -#define SAFI_MAX 8 +#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_MAX 7 + +#define IANA_SAFI_RESERVED 0 +#define IANA_SAFI_UNICAST 1 +#define IANA_SAFI_MULTICAST 2 +#define IANA_SAFI_ENCAP 7 +#define IANA_SAFI_MPLS_VPN 128 + +/* + * 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; + +#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 /* Default Administrative Distance of each protocol. */ #define ZEBRA_KERNEL_DISTANCE_DEFAULT 0 @@ -506,4 +478,56 @@ typedef uint32_t route_tag_t; #define ROUTE_TAG_MAX UINT32_MAX #define ROUTE_TAG_PRI PRIu32 +static inline afi_t afi_iana2int (iana_afi_t afi) +{ + if (afi == IANA_AFI_IPV4) + return AFI_IP; + if (afi == IANA_AFI_IPV6) + return AFI_IP6; + if (afi == IANA_AFI_L2VPN) + return AFI_L2VPN; + return AFI_MAX; +} + +static inline iana_afi_t afi_int2iana (afi_t afi) +{ + if (afi == AFI_IP) + return IANA_AFI_IPV4; + if (afi == AFI_IP6) + return IANA_AFI_IPV6; + if (afi == AFI_L2VPN) + return IANA_AFI_L2VPN; + return IANA_AFI_RESERVED; +} + +static inline safi_t safi_iana2int (safi_t safi) +{ + if (safi == IANA_SAFI_UNICAST) + return SAFI_UNICAST; + if (safi == IANA_SAFI_MULTICAST) + return SAFI_MULTICAST; + if (safi == IANA_SAFI_MPLS_VPN) + return SAFI_MPLS_VPN; + if (safi == IANA_SAFI_ENCAP) + return SAFI_ENCAP; + if (safi == IANA_SAFI_EVPN) + return SAFI_EVPN; + return SAFI_MAX; +} + +static inline safi_t safi_int2iana (safi_t safi) +{ + if (safi == SAFI_UNICAST) + return IANA_SAFI_UNICAST; + if (safi == SAFI_MULTICAST) + return IANA_SAFI_MULTICAST; + if (safi == SAFI_MPLS_VPN) + return IANA_SAFI_MPLS_VPN; + if (safi == SAFI_ENCAP) + return IANA_SAFI_ENCAP; + if (safi == SAFI_EVPN) + return IANA_SAFI_EVPN; + return IANA_SAFI_RESERVED; +} + #endif /* _ZEBRA_H */ |
