{
switch (afi)
{
- case AFI_IP:
-#ifdef HAVE_IPV6
- case AFI_IP6:
-#endif
- switch (*safi)
- {
- /* BGP MPLS-labeled VPN SAFI isn't contigious with others, remap */
- case SAFI_MPLS_LABELED_VPN:
- *safi = SAFI_MPLS_VPN;
- case SAFI_UNICAST:
- case SAFI_MULTICAST:
- case SAFI_MPLS_VPN:
- return 1;
- }
+ case AFI_IP:
+ case AFI_IP6:
+ switch (*safi)
+ {
+ /* BGP MPLS-labeled VPN SAFI isn't contigious with others, remap */
+ case SAFI_MPLS_LABELED_VPN:
+ *safi = SAFI_MPLS_VPN;
+ case SAFI_UNICAST:
+ case SAFI_MULTICAST:
+ case SAFI_MPLS_VPN:
+ return 1;
+ }
+ break;
}
+
zlog_debug ("unknown afi/safi (%u/%u)", afi, *safi);
-
+
return 0;
}
}
/* validate number field */
- if (sizeof (struct capability_orf_entry) + (entry.num * 2) > hdr->length)
+ if (CAPABILITY_CODE_ORF_LEN + (entry.num * 2) > hdr->length)
{
zlog_info ("%s ORF Capability entry length error,"
" Cap length %u, num %u",
/* Minimum sizes for length field of each cap (so not inc. the header) */
static const size_t cap_minsizes[] =
{
- [CAPABILITY_CODE_MP] = sizeof (struct capability_mp_data),
+ [CAPABILITY_CODE_MP] = CAPABILITY_CODE_MP_LEN,
[CAPABILITY_CODE_REFRESH] = CAPABILITY_CODE_REFRESH_LEN,
- [CAPABILITY_CODE_ORF] = sizeof (struct capability_orf_entry),
- [CAPABILITY_CODE_RESTART] = sizeof (struct capability_gr),
+ [CAPABILITY_CODE_ORF] = CAPABILITY_CODE_ORF_LEN,
+ [CAPABILITY_CODE_RESTART] = 6,
[CAPABILITY_CODE_AS4] = CAPABILITY_CODE_AS4_LEN,
[CAPABILITY_CODE_ADDPATH] = CAPABILITY_CODE_ADDPATH_LEN,
[CAPABILITY_CODE_DYNAMIC] = CAPABILITY_CODE_DYNAMIC_LEN,
[CAPABILITY_CODE_DYNAMIC_OLD] = CAPABILITY_CODE_DYNAMIC_LEN,
[CAPABILITY_CODE_ENHE] = CAPABILITY_CODE_ENHE_LEN,
[CAPABILITY_CODE_REFRESH_OLD] = CAPABILITY_CODE_REFRESH_LEN,
- [CAPABILITY_CODE_ORF_OLD] = sizeof (struct capability_orf_entry),
+ [CAPABILITY_CODE_ORF_OLD] = CAPABILITY_CODE_ORF_LEN,
[CAPABILITY_CODE_FQDN] = CAPABILITY_CODE_MIN_FQDN_LEN,
};
#define CAPABILITY_CODE_AS4_LEN 4
#define CAPABILITY_CODE_ADDPATH_LEN 4
#define CAPABILITY_CODE_ENHE_LEN 6 /* NRLI AFI = 2, SAFI = 2, Nexthop AFI = 2 */
-#define CAPABILITY_CODE_MIN_FQDN_LEN 2
+#define CAPABILITY_CODE_MIN_FQDN_LEN 2
+#define CAPABILITY_CODE_ORF_LEN 5
/* Cooperative Route Filtering Capability. */
}
/* "any" is special token for matching any IPv4 addresses. */
- if (afi == AFI_IP)
+ switch (afi)
{
+ case AFI_IP:
if (strncmp ("any", prefix, strlen (prefix)) == 0)
{
ret = str2prefix_ipv4 ("0.0.0.0/0", (struct prefix_ipv4 *) &p);
vty_out (vty, "%% Malformed IPv4 prefix%s", VTY_NEWLINE);
return CMD_WARNING;
}
- }
-#ifdef HAVE_IPV6
- else if (afi == AFI_IP6)
- {
+ break;
+ case AFI_IP6:
if (strncmp ("any", prefix, strlen (prefix)) == 0)
{
ret = str2prefix_ipv6 ("::/0", (struct prefix_ipv6 *) &p);
vty_out (vty, "%% Malformed IPv6 prefix%s", VTY_NEWLINE);
return CMD_WARNING;
}
+ break;
}
-#endif /* HAVE_IPV6 */
/* ge and le check. */
if (genum && (genum <= p.prefixlen))
extern const char *zserv_command_string (unsigned int command);
-/* Zebra's family types. */
-#define ZEBRA_FAMILY_IPV4 1
-#define ZEBRA_FAMILY_IPV6 2
-#define ZEBRA_FAMILY_MAX 3
-
/* Error codes of zebra. */
#define ZEBRA_ERR_NOERROR 0
#define ZEBRA_ERR_RTEXIST -1
#endif
/* Address family numbers from RFC1700. */
-#define AFI_IP 1
-#define AFI_IP6 2
-#define AFI_MAX 3
+typedef enum {
+ AFI_IP = 1,
+ AFI_IP6 = 2,
+#define AFI_MAX 3
+} afi_t;
/* Subsequent Address Family Identifier. */
#define SAFI_UNICAST 1
#define UNSET_FLAG(V,F) (V) &= ~(F)
#define RESET_FLAG(V) (V) = 0
-/* AFI and SAFI type. */
-typedef u_int16_t afi_t;
typedef u_int8_t safi_t;
/* Zebra types. Used in Zserv message header. */