mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-06 19:26:10 +00:00
lib: Enhance prefix dump for EVPN prefixes
This commit is also taking into account changes related to srcdes feature introduction in zebra folder. Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com> Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com> Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com> Ticket: CM-12262 Reviewed By: CCR-5065 Testing Done: Manual Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
This commit is contained in:
parent
fd6c6cb49b
commit
78b81eaa44
42
lib/prefix.c
42
lib/prefix.c
@ -859,23 +859,39 @@ str2prefix (const char *str, struct prefix *p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
prefix2str (union prefix46constptr pu, char *str, int size)
|
prefix2str (union prefixconstptr pu, char *str, int size)
|
||||||
{
|
{
|
||||||
const struct prefix *p = pu.p;
|
const struct prefix *p = pu.p;
|
||||||
|
char buf[PREFIX2STR_BUFFER];
|
||||||
|
|
||||||
if (p->family == AF_ETHERNET)
|
switch (p->family)
|
||||||
{
|
{
|
||||||
snprintf(str, size, "%02x:%02x:%02x:%02x:%02x:%02x/%d",
|
u_char family;
|
||||||
p->u.prefix_eth.octet[0], p->u.prefix_eth.octet[1],
|
|
||||||
p->u.prefix_eth.octet[2], p->u.prefix_eth.octet[3],
|
case AF_INET:
|
||||||
p->u.prefix_eth.octet[4], p->u.prefix_eth.octet[5],
|
case AF_INET6:
|
||||||
p->prefixlen);
|
snprintf (str, size, "%s/%d",
|
||||||
}
|
inet_ntop (p->family, &p->u.prefix, buf, PREFIX2STR_BUFFER),
|
||||||
else
|
p->prefixlen);
|
||||||
{
|
break;
|
||||||
char buf[PREFIX2STR_BUFFER];
|
|
||||||
inet_ntop(p->family, &p->u.prefix, buf, sizeof(buf));
|
case AF_ETHERNET:
|
||||||
snprintf(str, size, "%s/%d", buf, p->prefixlen);
|
if (p->u.prefix_evpn.route_type == 5)
|
||||||
|
{
|
||||||
|
family = (p->u.prefix_evpn.flags & (IP_ADDR_V4 | IP_PREFIX_V4)) ?
|
||||||
|
AF_INET : AF_INET6;
|
||||||
|
snprintf (str, size, "[%d]:[%u][%s]/%d",
|
||||||
|
p->u.prefix_evpn.route_type,
|
||||||
|
p->u.prefix_evpn.eth_tag,
|
||||||
|
inet_ntop (family, &p->u.prefix_evpn.ip.addr,
|
||||||
|
buf, PREFIX2STR_BUFFER),
|
||||||
|
p->prefixlen);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sprintf (str, "UNK prefix");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
|
@ -69,6 +69,7 @@ struct evpn_addr
|
|||||||
u_char ip_prefix_length;
|
u_char ip_prefix_length;
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
|
u_char addr;
|
||||||
struct in_addr v4_addr;
|
struct in_addr v4_addr;
|
||||||
struct in6_addr v6_addr;
|
struct in6_addr v6_addr;
|
||||||
} ip;
|
} ip;
|
||||||
@ -185,18 +186,20 @@ struct prefix_sg
|
|||||||
* side, which strips type safety since the cast will accept any pointer
|
* side, which strips type safety since the cast will accept any pointer
|
||||||
* type.)
|
* type.)
|
||||||
*/
|
*/
|
||||||
union prefix46ptr
|
union prefixptr
|
||||||
{
|
{
|
||||||
struct prefix *p;
|
struct prefix *p;
|
||||||
struct prefix_ipv4 *p4;
|
struct prefix_ipv4 *p4;
|
||||||
struct prefix_ipv6 *p6;
|
struct prefix_ipv6 *p6;
|
||||||
|
struct prefix_evpn *evp;
|
||||||
} __attribute__ ((transparent_union));
|
} __attribute__ ((transparent_union));
|
||||||
|
|
||||||
union prefix46constptr
|
union prefixconstptr
|
||||||
{
|
{
|
||||||
const struct prefix *p;
|
const struct prefix *p;
|
||||||
const struct prefix_ipv4 *p4;
|
const struct prefix_ipv4 *p4;
|
||||||
const struct prefix_ipv6 *p6;
|
const struct prefix_ipv6 *p6;
|
||||||
|
const struct prefix_evpn *evp;
|
||||||
} __attribute__ ((transparent_union));
|
} __attribute__ ((transparent_union));
|
||||||
|
|
||||||
#ifndef INET_ADDRSTRLEN
|
#ifndef INET_ADDRSTRLEN
|
||||||
@ -270,7 +273,7 @@ extern int str2prefix (const char *, struct prefix *);
|
|||||||
|
|
||||||
#define PREFIX2STR_BUFFER PREFIX_STRLEN
|
#define PREFIX2STR_BUFFER PREFIX_STRLEN
|
||||||
|
|
||||||
extern const char *prefix2str (union prefix46constptr, char *, int);
|
extern const char *prefix2str (union prefixconstptr, char *, int);
|
||||||
extern int prefix_match (const struct prefix *, const struct prefix *);
|
extern int prefix_match (const struct prefix *, const struct prefix *);
|
||||||
extern int prefix_same (const struct prefix *, const struct prefix *);
|
extern int prefix_same (const struct prefix *, const struct prefix *);
|
||||||
extern int prefix_cmp (const struct prefix *, const struct prefix *);
|
extern int prefix_cmp (const struct prefix *, const struct prefix *);
|
||||||
|
@ -242,7 +242,7 @@ srcdest_route_next(struct route_node *rn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct route_node *
|
struct route_node *
|
||||||
srcdest_rnode_get (struct route_table *table, union prefix46ptr dst_pu,
|
srcdest_rnode_get (struct route_table *table, union prefixptr dst_pu,
|
||||||
struct prefix_ipv6 *src_p)
|
struct prefix_ipv6 *src_p)
|
||||||
{
|
{
|
||||||
struct prefix_ipv6 *dst_p = dst_pu.p6;
|
struct prefix_ipv6 *dst_p = dst_pu.p6;
|
||||||
@ -253,7 +253,7 @@ srcdest_rnode_get (struct route_table *table, union prefix46ptr dst_pu,
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct route_node *
|
struct route_node *
|
||||||
srcdest_rnode_lookup (struct route_table *table, union prefix46ptr dst_pu,
|
srcdest_rnode_lookup (struct route_table *table, union prefixptr dst_pu,
|
||||||
struct prefix_ipv6 *src_p)
|
struct prefix_ipv6 *src_p)
|
||||||
{
|
{
|
||||||
struct prefix_ipv6 *dst_p = dst_pu.p6;
|
struct prefix_ipv6 *dst_p = dst_pu.p6;
|
||||||
|
@ -57,10 +57,10 @@ extern route_table_delegate_t _srcdest_srcnode_delegate;
|
|||||||
|
|
||||||
extern struct route_table *srcdest_table_init(void);
|
extern struct route_table *srcdest_table_init(void);
|
||||||
extern struct route_node *srcdest_rnode_get(struct route_table *table,
|
extern struct route_node *srcdest_rnode_get(struct route_table *table,
|
||||||
union prefix46ptr dst_pu,
|
union prefixptr dst_pu,
|
||||||
struct prefix_ipv6 *src_p);
|
struct prefix_ipv6 *src_p);
|
||||||
extern struct route_node *srcdest_rnode_lookup(struct route_table *table,
|
extern struct route_node *srcdest_rnode_lookup(struct route_table *table,
|
||||||
union prefix46ptr dst_pu,
|
union prefixptr dst_pu,
|
||||||
struct prefix_ipv6 *src_p);
|
struct prefix_ipv6 *src_p);
|
||||||
extern void srcdest_rnode_prefixes (struct route_node *rn, struct prefix **p,
|
extern void srcdest_rnode_prefixes (struct route_node *rn, struct prefix **p,
|
||||||
struct prefix **src_p);
|
struct prefix **src_p);
|
||||||
|
@ -314,8 +314,8 @@ extern void rib_lookup_and_dump (struct prefix_ipv4 *, vrf_id_t);
|
|||||||
extern void rib_lookup_and_pushup (struct prefix_ipv4 *, vrf_id_t);
|
extern void rib_lookup_and_pushup (struct prefix_ipv4 *, vrf_id_t);
|
||||||
#define rib_dump(prefix, src, rib) _rib_dump(__func__, prefix, src, rib)
|
#define rib_dump(prefix, src, rib) _rib_dump(__func__, prefix, src, rib)
|
||||||
extern void _rib_dump (const char *,
|
extern void _rib_dump (const char *,
|
||||||
union prefix46constptr,
|
union prefixconstptr,
|
||||||
union prefix46constptr, const struct rib *);
|
union prefixconstptr, const struct rib *);
|
||||||
extern int rib_lookup_ipv4_route (struct prefix_ipv4 *, union sockunion *,
|
extern int rib_lookup_ipv4_route (struct prefix_ipv4 *, union sockunion *,
|
||||||
vrf_id_t);
|
vrf_id_t);
|
||||||
#define ZEBRA_RIB_LOOKUP_ERROR -1
|
#define ZEBRA_RIB_LOOKUP_ERROR -1
|
||||||
|
@ -2135,8 +2135,8 @@ rib_delnode (struct route_node *rn, struct rib *rib)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void _rib_dump (const char * func,
|
void _rib_dump (const char * func,
|
||||||
union prefix46constptr pp,
|
union prefixconstptr pp,
|
||||||
union prefix46constptr src_pp,
|
union prefixconstptr src_pp,
|
||||||
const struct rib * rib)
|
const struct rib * rib)
|
||||||
{
|
{
|
||||||
const struct prefix *p = pp.p;
|
const struct prefix *p = pp.p;
|
||||||
|
Loading…
Reference in New Issue
Block a user