diff options
41 files changed, 2076 insertions, 1652 deletions
diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c index 118931a4df..f45362f811 100644 --- a/bgpd/bgp_attr.c +++ b/bgpd/bgp_attr.c @@ -3596,8 +3596,8 @@ size_t bgp_packet_mpattr_start(struct stream *s, struct peer *peer, afi_t afi, struct attr *attr) { size_t sizep; - iana_afi_t pkt_afi; - iana_safi_t pkt_safi; + iana_afi_t pkt_afi = IANA_AFI_IPV4; + iana_safi_t pkt_safi = IANA_SAFI_UNICAST; afi_t nh_afi; /* Set extended bit always to encode the attribute length as 2 bytes */ @@ -4404,8 +4404,8 @@ bgp_size_t bgp_packet_attribute(struct bgp *bgp, struct peer *peer, size_t bgp_packet_mpunreach_start(struct stream *s, afi_t afi, safi_t safi) { unsigned long attrlen_pnt; - iana_afi_t pkt_afi; - iana_safi_t pkt_safi; + iana_afi_t pkt_afi = IANA_AFI_IPV4; + iana_safi_t pkt_safi = IANA_SAFI_UNICAST; /* Set extended bit always to encode the attribute length as 2 bytes */ stream_putc(s, BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_EXTLEN); diff --git a/bgpd/bgp_bmp.c b/bgpd/bgp_bmp.c index 48d3706ec5..47922985d9 100644 --- a/bgpd/bgp_bmp.c +++ b/bgpd/bgp_bmp.c @@ -761,8 +761,8 @@ static void bmp_eor(struct bmp *bmp, afi_t afi, safi_t safi, uint8_t flags) struct peer *peer; struct listnode *node; struct stream *s, *s2; - iana_afi_t pkt_afi; - iana_safi_t pkt_safi; + iana_afi_t pkt_afi = IANA_AFI_IPV4; + iana_safi_t pkt_safi = IANA_SAFI_UNICAST; frrtrace(3, frr_bgp, bmp_eor, afi, safi, flags); diff --git a/bgpd/bgp_open.c b/bgpd/bgp_open.c index 6bdefd0e9b..c2562c75d3 100644 --- a/bgpd/bgp_open.c +++ b/bgpd/bgp_open.c @@ -1324,8 +1324,8 @@ static void bgp_open_capability_orf(struct stream *s, struct peer *peer, unsigned long orfp; unsigned long numberp; int number_of_orfs = 0; - iana_afi_t pkt_afi; - iana_safi_t pkt_safi; + iana_afi_t pkt_afi = IANA_AFI_IPV4; + iana_safi_t pkt_safi = IANA_SAFI_UNICAST; /* Convert AFI, SAFI to values for packet. */ bgp_map_afi_safi_int2iana(afi, safi, &pkt_afi, &pkt_safi); @@ -1389,10 +1389,10 @@ static void bgp_peer_send_gr_capability(struct stream *s, struct peer *peer, bool ext_opt_params) { int len; - iana_afi_t pkt_afi; + iana_afi_t pkt_afi = IANA_AFI_IPV4; afi_t afi; safi_t safi; - iana_safi_t pkt_safi; + iana_safi_t pkt_safi = IANA_SAFI_UNICAST; uint32_t restart_time; unsigned long capp = 0; unsigned long rcapp = 0; @@ -1472,10 +1472,10 @@ static void bgp_peer_send_llgr_capability(struct stream *s, struct peer *peer, bool ext_opt_params) { int len; - iana_afi_t pkt_afi; + iana_afi_t pkt_afi = IANA_AFI_IPV4; afi_t afi; safi_t safi; - iana_safi_t pkt_safi; + iana_safi_t pkt_safi = IANA_SAFI_UNICAST; unsigned long capp = 0; unsigned long rcapp = 0; @@ -1523,10 +1523,10 @@ uint16_t bgp_open_capability(struct stream *s, struct peer *peer, { uint16_t len; unsigned long cp, capp, rcapp, eopl = 0; - iana_afi_t pkt_afi; + iana_afi_t pkt_afi = IANA_AFI_IPV4; afi_t afi; safi_t safi; - iana_safi_t pkt_safi; + iana_safi_t pkt_safi = IANA_SAFI_UNICAST; as_t local_as; uint8_t afi_safi_count = 0; int adv_addpath_tx = 0; diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c index b0d852ee63..5ed888f486 100644 --- a/bgpd/bgp_packet.c +++ b/bgpd/bgp_packet.c @@ -131,8 +131,8 @@ static struct stream *bgp_update_packet_eor(struct peer *peer, afi_t afi, safi_t safi) { struct stream *s; - iana_afi_t pkt_afi; - iana_safi_t pkt_safi; + iana_afi_t pkt_afi = IANA_AFI_IPV4; + iana_safi_t pkt_safi = IANA_SAFI_UNICAST; if (DISABLE_BGP_ANNOUNCE) return NULL; @@ -869,8 +869,8 @@ void bgp_route_refresh_send(struct peer *peer, afi_t afi, safi_t safi, struct stream *s; struct bgp_filter *filter; int orf_refresh = 0; - iana_afi_t pkt_afi; - iana_safi_t pkt_safi; + iana_afi_t pkt_afi = IANA_AFI_IPV4; + iana_safi_t pkt_safi = IANA_SAFI_UNICAST; if (DISABLE_BGP_ANNOUNCE) return; @@ -976,8 +976,8 @@ void bgp_capability_send(struct peer *peer, afi_t afi, safi_t safi, int capability_code, int action) { struct stream *s; - iana_afi_t pkt_afi; - iana_safi_t pkt_safi; + iana_afi_t pkt_afi = IANA_AFI_IPV4; + iana_safi_t pkt_safi = IANA_SAFI_UNICAST; /* Convert AFI, SAFI to values for packet. */ bgp_map_afi_safi_int2iana(afi, safi, &pkt_afi, &pkt_safi); diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 12d360a033..2544ea5208 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -15012,7 +15012,7 @@ static void bgp_config_write_network_evpn(struct vty *vty, struct bgp *bgp, char buf[PREFIX_STRLEN * 2]; char buf2[SU_ADDRSTRLEN]; char rdbuf[RD_ADDRSTRLEN]; - char esi_buf[ESI_BYTES]; + char esi_buf[ESI_STR_LEN]; /* Network configuration. */ for (pdest = bgp_table_top(bgp->route[afi][safi]); pdest; diff --git a/doc/developer/logging.rst b/doc/developer/logging.rst index 16d555461d..e262f6af94 100644 --- a/doc/developer/logging.rst +++ b/doc/developer/logging.rst @@ -158,7 +158,6 @@ Networking data types - :c:struct:`prefix_ls` - :c:struct:`prefix_rd` - - :c:struct:`prefix_ptr` - :c:struct:`prefix_sg` (use :frrfmt:`%pPSG4`) - :c:union:`prefixptr` (dereference to get :c:struct:`prefix`) - :c:union:`prefixconstptr` (dereference to get :c:struct:`prefix`) diff --git a/doc/user/pimv6.rst b/doc/user/pimv6.rst index f0946a13f7..0456e77b21 100644 --- a/doc/user/pimv6.rst +++ b/doc/user/pimv6.rst @@ -285,6 +285,47 @@ cause great confusion. Display upstream information for S,G's and the RPF data associated with them. +.. clicmd:: show ipv6 multicast + + Display various information about the interfaces used in this pim instance. + +.. clicmd:: show ipv6 multicast count [vrf NAME] [json] + + Display multicast data packets count per interface for a vrf. + +.. clicmd:: show ipv6 multicast count vrf all [json] + + Display multicast data packets count per interface for all vrf. + +.. clicmd:: show ipv6 mroute [vrf NAME] [X:X::X:X [X:X::X:X]] [fill] [json] + + Display information about installed into the kernel S,G mroutes. If + one address is specified we assume it is the Group we are interested + in displaying data on. If the second address is specified then it is + Source Group. The keyword ``fill`` says to fill in all assumed data + for test/data gathering purposes. + +.. clicmd:: show ipv6 mroute [vrf NAME] count [json] + + Display information about installed into the kernel S,G mroutes and in + addition display data about packet flow for the mroutes for a specific + vrf. + +.. clicmd:: show ipv6 mroute vrf all count [json] + + Display information about installed into the kernel S,G mroutes and in + addition display data about packet flow for the mroutes for all vrfs. + +.. clicmd:: show ipv6 mroute [vrf NAME] summary [json] + + Display total number of S,G mroutes and number of S,G mroutes installed + into the kernel for a specific vrf. + +.. clicmd:: show ipv6 mroute vrf all summary [json] + + Display total number of S,G mroutes and number of S,G mroutes + installed into the kernel for all vrfs. + PIMv6 Debug Commands ==================== diff --git a/lib/filter_cli.c b/lib/filter_cli.c index fb40c527dd..9a877a5704 100644 --- a/lib/filter_cli.c +++ b/lib/filter_cli.c @@ -151,28 +151,25 @@ DEFPY_YANG( * Backward compatibility: don't complain about duplicated values, * just silently accept. */ - if (seq_str == NULL) { - ada.ada_type = "ipv4"; - ada.ada_name = name; - ada.ada_action = action; - if (host_str && mask_str == NULL) { - ada.ada_xpath[0] = "./host"; - ada.ada_value[0] = host_str; - } else if (host_str && mask_str) { - ada.ada_xpath[0] = "./network/address"; - ada.ada_value[0] = host_str; - ada.ada_xpath[1] = "./network/mask"; - ada.ada_value[1] = mask_str; - } else { - ada.ada_xpath[0] = "./source-any"; - ada.ada_value[0] = ""; - } - - /* Duplicated entry without sequence, just quit. */ - if (acl_is_dup(vty->candidate_config->dnode, &ada)) - return CMD_SUCCESS; + ada.ada_type = "ipv4"; + ada.ada_name = name; + ada.ada_action = action; + if (host_str && mask_str == NULL) { + ada.ada_xpath[0] = "./host"; + ada.ada_value[0] = host_str; + } else if (host_str && mask_str) { + ada.ada_xpath[0] = "./network/address"; + ada.ada_value[0] = host_str; + ada.ada_xpath[1] = "./network/mask"; + ada.ada_value[1] = mask_str; + } else { + ada.ada_xpath[0] = "./source-any"; + ada.ada_value[0] = ""; } + if (acl_is_dup(vty->candidate_config->dnode, &ada)) + return CMD_SUCCESS; + /* * Create the access-list first, so we can generate sequence if * none given (backward compatibility). @@ -280,49 +277,46 @@ DEFPY_YANG( * Backward compatibility: don't complain about duplicated values, * just silently accept. */ - if (seq_str == NULL) { - ada.ada_type = "ipv4"; - ada.ada_name = name; - ada.ada_action = action; - if (src_str && src_mask_str == NULL) { - ada.ada_xpath[idx] = "./host"; - ada.ada_value[idx] = src_str; - idx++; - } else if (src_str && src_mask_str) { - ada.ada_xpath[idx] = "./network/address"; - ada.ada_value[idx] = src_str; - idx++; - ada.ada_xpath[idx] = "./network/mask"; - ada.ada_value[idx] = src_mask_str; - idx++; - } else { - ada.ada_xpath[idx] = "./source-any"; - ada.ada_value[idx] = ""; - idx++; - } - - if (dst_str && dst_mask_str == NULL) { - ada.ada_xpath[idx] = "./destination-host"; - ada.ada_value[idx] = dst_str; - idx++; - } else if (dst_str && dst_mask_str) { - ada.ada_xpath[idx] = "./destination-network/address"; - ada.ada_value[idx] = dst_str; - idx++; - ada.ada_xpath[idx] = "./destination-network/mask"; - ada.ada_value[idx] = dst_mask_str; - idx++; - } else { - ada.ada_xpath[idx] = "./destination-any"; - ada.ada_value[idx] = ""; - idx++; - } + ada.ada_type = "ipv4"; + ada.ada_name = name; + ada.ada_action = action; + if (src_str && src_mask_str == NULL) { + ada.ada_xpath[idx] = "./host"; + ada.ada_value[idx] = src_str; + idx++; + } else if (src_str && src_mask_str) { + ada.ada_xpath[idx] = "./network/address"; + ada.ada_value[idx] = src_str; + idx++; + ada.ada_xpath[idx] = "./network/mask"; + ada.ada_value[idx] = src_mask_str; + idx++; + } else { + ada.ada_xpath[idx] = "./source-any"; + ada.ada_value[idx] = ""; + idx++; + } - /* Duplicated entry without sequence, just quit. */ - if (acl_is_dup(vty->candidate_config->dnode, &ada)) - return CMD_SUCCESS; + if (dst_str && dst_mask_str == NULL) { + ada.ada_xpath[idx] = "./destination-host"; + ada.ada_value[idx] = dst_str; + idx++; + } else if (dst_str && dst_mask_str) { + ada.ada_xpath[idx] = "./destination-network/address"; + ada.ada_value[idx] = dst_str; + idx++; + ada.ada_xpath[idx] = "./destination-network/mask"; + ada.ada_value[idx] = dst_mask_str; + idx++; + } else { + ada.ada_xpath[idx] = "./destination-any"; + ada.ada_value[idx] = ""; + idx++; } + if (acl_is_dup(vty->candidate_config->dnode, &ada)) + return CMD_SUCCESS; + /* * Create the access-list first, so we can generate sequence if * none given (backward compatibility). @@ -466,28 +460,25 @@ DEFPY_YANG( * Backward compatibility: don't complain about duplicated values, * just silently accept. */ - if (seq_str == NULL) { - ada.ada_type = "ipv4"; - ada.ada_name = name; - ada.ada_action = action; - - if (prefix_str) { - ada.ada_xpath[0] = "./ipv4-prefix"; - ada.ada_value[0] = prefix_str; - if (exact) { - ada.ada_xpath[1] = "./ipv4-exact-match"; - ada.ada_value[1] = "true"; - } - } else { - ada.ada_xpath[0] = "./any"; - ada.ada_value[0] = ""; - } + ada.ada_type = "ipv4"; + ada.ada_name = name; + ada.ada_action = action; - /* Duplicated entry without sequence, just quit. */ - if (acl_is_dup(vty->candidate_config->dnode, &ada)) - return CMD_SUCCESS; + if (prefix_str) { + ada.ada_xpath[0] = "./ipv4-prefix"; + ada.ada_value[0] = prefix_str; + if (exact) { + ada.ada_xpath[1] = "./ipv4-exact-match"; + ada.ada_value[1] = "true"; + } + } else { + ada.ada_xpath[0] = "./any"; + ada.ada_value[0] = ""; } + if (acl_is_dup(vty->candidate_config->dnode, &ada)) + return CMD_SUCCESS; + /* * Create the access-list first, so we can generate sequence if * none given (backward compatibility). @@ -656,28 +647,25 @@ DEFPY_YANG( * Backward compatibility: don't complain about duplicated values, * just silently accept. */ - if (seq_str == NULL) { - ada.ada_type = "ipv6"; - ada.ada_name = name; - ada.ada_action = action; - - if (prefix_str) { - ada.ada_xpath[0] = "./ipv6-prefix"; - ada.ada_value[0] = prefix_str; - if (exact) { - ada.ada_xpath[1] = "./ipv6-exact-match"; - ada.ada_value[1] = "true"; - } - } else { - ada.ada_xpath[0] = "./any"; - ada.ada_value[0] = ""; - } + ada.ada_type = "ipv6"; + ada.ada_name = name; + ada.ada_action = action; - /* Duplicated entry without sequence, just quit. */ - if (acl_is_dup(vty->candidate_config->dnode, &ada)) - return CMD_SUCCESS; + if (prefix_str) { + ada.ada_xpath[0] = "./ipv6-prefix"; + ada.ada_value[0] = prefix_str; + if (exact) { + ada.ada_xpath[1] = "./ipv6-exact-match"; + ada.ada_value[1] = "true"; + } + } else { + ada.ada_xpath[0] = "./any"; + ada.ada_value[0] = ""; } + if (acl_is_dup(vty->candidate_config->dnode, &ada)) + return CMD_SUCCESS; + /* * Create the access-list first, so we can generate sequence if * none given (backward compatibility). @@ -850,24 +838,21 @@ DEFPY_YANG( * Backward compatibility: don't complain about duplicated values, * just silently accept. */ - if (seq_str == NULL) { - ada.ada_type = "mac"; - ada.ada_name = name; - ada.ada_action = action; - - if (mac_str) { - ada.ada_xpath[0] = "./mac"; - ada.ada_value[0] = mac_str; - } else { - ada.ada_xpath[0] = "./any"; - ada.ada_value[0] = ""; - } + ada.ada_type = "mac"; + ada.ada_name = name; + ada.ada_action = action; - /* Duplicated entry without sequence, just quit. */ - if (acl_is_dup(vty->candidate_config->dnode, &ada)) - return CMD_SUCCESS; + if (mac_str) { + ada.ada_xpath[0] = "./mac"; + ada.ada_value[0] = mac_str; + } else { + ada.ada_xpath[0] = "./any"; + ada.ada_value[0] = ""; } + if (acl_is_dup(vty->candidate_config->dnode, &ada)) + return CMD_SUCCESS; + /* * Create the access-list first, so we can generate sequence if * none given (backward compatibility). @@ -1272,23 +1257,20 @@ DEFPY_YANG( * Backward compatibility: don't complain about duplicated values, * just silently accept. */ - if (seq_str == NULL) { - pda.pda_type = "ipv4"; - pda.pda_name = name; - pda.pda_action = action; - if (prefix_str) { - prefix_copy(&pda.prefix, prefix); - pda.ge = ge; - pda.le = le; - } else { - pda.any = true; - } - - /* Duplicated entry without sequence, just quit. */ - if (plist_is_dup(vty->candidate_config->dnode, &pda)) - return CMD_SUCCESS; + pda.pda_type = "ipv4"; + pda.pda_name = name; + pda.pda_action = action; + if (prefix_str) { + prefix_copy(&pda.prefix, prefix); + pda.ge = ge; + pda.le = le; + } else { + pda.any = true; } + if (plist_is_dup(vty->candidate_config->dnode, &pda)) + return CMD_SUCCESS; + /* * Create the prefix-list first, so we can generate sequence if * none given (backward compatibility). @@ -1476,23 +1458,20 @@ DEFPY_YANG( * Backward compatibility: don't complain about duplicated values, * just silently accept. */ - if (seq_str == NULL) { - pda.pda_type = "ipv6"; - pda.pda_name = name; - pda.pda_action = action; - if (prefix_str) { - prefix_copy(&pda.prefix, prefix); - pda.ge = ge; - pda.le = le; - } else { - pda.any = true; - } - - /* Duplicated entry without sequence, just quit. */ - if (plist_is_dup(vty->candidate_config->dnode, &pda)) - return CMD_SUCCESS; + pda.pda_type = "ipv6"; + pda.pda_name = name; + pda.pda_action = action; + if (prefix_str) { + prefix_copy(&pda.prefix, prefix); + pda.ge = ge; + pda.le = le; + } else { + pda.any = true; } + if (plist_is_dup(vty->candidate_config->dnode, &pda)) + return CMD_SUCCESS; + /* * Create the prefix-list first, so we can generate sequence if * none given (backward compatibility). diff --git a/lib/prefix.c b/lib/prefix.c index 4db0c2478b..1a3efd32b1 100644 --- a/lib/prefix.c +++ b/lib/prefix.c @@ -177,8 +177,10 @@ const char *safi2str(safi_t safi) } /* If n includes p prefix then return 1 else return 0. */ -int prefix_match(const struct prefix *n, const struct prefix *p) +int prefix_match(union prefixconstptr unet, union prefixconstptr upfx) { + const struct prefix *n = unet.p; + const struct prefix *p = upfx.p; int offset; int shift; const uint8_t *np, *pp; @@ -274,9 +276,11 @@ int evpn_type5_prefix_match(const struct prefix *n, const struct prefix *p) } /* If n includes p then return 1 else return 0. Prefix mask is not considered */ -int prefix_match_network_statement(const struct prefix *n, - const struct prefix *p) +int prefix_match_network_statement(union prefixconstptr unet, + union prefixconstptr upfx) { + const struct prefix *n = unet.p; + const struct prefix *p = upfx.p; int offset; int shift; const uint8_t *np, *pp; @@ -472,8 +476,10 @@ int prefix_cmp(union prefixconstptr up1, union prefixconstptr up2) * address families don't match, return -1; otherwise the return value is * in range 0 ... maximum prefix length for the address family. */ -int prefix_common_bits(const struct prefix *p1, const struct prefix *p2) +int prefix_common_bits(union prefixconstptr ua, union prefixconstptr ub) { + const struct prefix *p1 = ua.p; + const struct prefix *p2 = ub.p; int pos, bit; int length = 0; uint8_t xor ; @@ -509,8 +515,10 @@ int prefix_common_bits(const struct prefix *p1, const struct prefix *p2) } /* Return prefix family type string. */ -const char *prefix_family_str(const struct prefix *p) +const char *prefix_family_str(union prefixconstptr pu) { + const struct prefix *p = pu.p; + if (p->family == AF_INET) return "inet"; if (p->family == AF_INET6) @@ -815,14 +823,16 @@ void apply_mask_ipv6(struct prefix_ipv6 *p) } } -void apply_mask(struct prefix *p) +void apply_mask(union prefixptr pu) { + struct prefix *p = pu.p; + switch (p->family) { case AF_INET: - apply_mask_ipv4((struct prefix_ipv4 *)p); + apply_mask_ipv4(pu.p4); break; case AF_INET6: - apply_mask_ipv6((struct prefix_ipv6 *)p); + apply_mask_ipv6(pu.p6); break; default: break; @@ -868,8 +878,10 @@ void prefix2sockunion(const struct prefix *p, union sockunion *su) sizeof(struct in6_addr)); } -int prefix_blen(const struct prefix *p) +int prefix_blen(union prefixconstptr pu) { + const struct prefix *p = pu.p; + switch (p->family) { case AF_INET: return IPV4_MAX_BYTELEN; diff --git a/lib/prefix.h b/lib/prefix.h index f1d6b2dc02..e043d41d30 100644 --- a/lib/prefix.h +++ b/lib/prefix.h @@ -287,13 +287,6 @@ static inline int is_evpn_prefix_ipaddr_v6(const struct prefix_evpn *evp) return 0; } -/* Prefix for a generic pointer */ -struct prefix_ptr { - uint8_t family; - uint16_t prefixlen; - uintptr_t prefix __attribute__((aligned(8))); -}; - /* Prefix for a Flowspec entry */ struct prefix_fs { uint8_t family; @@ -442,8 +435,8 @@ extern void prefix_free(struct prefix **p); * Function to handle prefix_free being used as a del function. */ extern void prefix_free_lists(void *arg); -extern const char *prefix_family_str(const struct prefix *); -extern int prefix_blen(const struct prefix *); +extern const char *prefix_family_str(union prefixconstptr pu); +extern int prefix_blen(union prefixconstptr pu); extern int str2prefix(const char *, struct prefix *); #define PREFIX2STR_BUFFER PREFIX_STRLEN @@ -454,14 +447,14 @@ extern const char *prefix_sg2str(const struct prefix_sg *sg, char *str); extern const char *prefix2str(union prefixconstptr, char *, int); extern int evpn_type5_prefix_match(const struct prefix *evpn_pfx, const struct prefix *match_pfx); -extern int prefix_match(const struct prefix *, const struct prefix *); -extern int prefix_match_network_statement(const struct prefix *, - const struct prefix *); -extern int prefix_same(union prefixconstptr, union prefixconstptr); -extern int prefix_cmp(union prefixconstptr, union prefixconstptr); -extern int prefix_common_bits(const struct prefix *, const struct prefix *); -extern void prefix_copy(union prefixptr, union prefixconstptr); -extern void apply_mask(struct prefix *); +extern int prefix_match(union prefixconstptr unet, union prefixconstptr upfx); +extern int prefix_match_network_statement(union prefixconstptr unet, + union prefixconstptr upfx); +extern int prefix_same(union prefixconstptr ua, union prefixconstptr ub); +extern int prefix_cmp(union prefixconstptr ua, union prefixconstptr ub); +extern int prefix_common_bits(union prefixconstptr ua, union prefixconstptr ub); +extern void prefix_copy(union prefixptr udst, union prefixconstptr usrc); +extern void apply_mask(union prefixptr pu); #ifdef __clang_analyzer__ /* clang-SA doesn't understand transparent unions, making it think that the diff --git a/lib/strformat.c b/lib/strformat.c index a420ba553a..d941a7f04e 100644 --- a/lib/strformat.c +++ b/lib/strformat.c @@ -361,6 +361,8 @@ static ssize_t printfrr_abstime(struct fbuf *buf, struct printfrr_eargs *ea, if (flags & TIMEFMT_SKIP) return 0; + if (!ts) + return bputch(buf, '-'); if (flags & TIMEFMT_REALTIME) *real_ts = *ts; @@ -452,6 +454,8 @@ static ssize_t printfrr_reltime(struct fbuf *buf, struct printfrr_eargs *ea, if (flags & TIMEFMT_SKIP) return 0; + if (!ts) + return bputch(buf, '-'); if (flags & TIMEFMT_ABSOLUTE) { struct timespec anchor[1]; @@ -561,8 +565,6 @@ static ssize_t printfrr_ts(struct fbuf *buf, struct printfrr_eargs *ea, { const struct timespec *ts = vptr; - if (!ts) - return bputs(buf, "(null)"); return printfrr_time(buf, ea, ts, 0); } @@ -574,7 +576,7 @@ static ssize_t printfrr_tv(struct fbuf *buf, struct printfrr_eargs *ea, struct timespec ts; if (!tv) - return bputs(buf, "(null)"); + return printfrr_time(buf, ea, NULL, 0); ts.tv_sec = tv->tv_sec; ts.tv_nsec = tv->tv_usec * 1000; @@ -589,7 +591,7 @@ static ssize_t printfrr_tt(struct fbuf *buf, struct printfrr_eargs *ea, struct timespec ts; if (!tt) - return bputs(buf, "(null)"); + return printfrr_time(buf, ea, NULL, TIMEFMT_SECONDS); ts.tv_sec = *tt; ts.tv_nsec = 0; @@ -266,6 +266,15 @@ static inline void vty_push_context(struct vty *vty, int node, uint64_t id) struct structname *ptr = VTY_GET_CONTEXT(structname); \ VTY_CHECK_CONTEXT(ptr); +#define VTY_DECLVAR_CONTEXT_VRF(vrfptr) \ + struct vrf *vrfptr; \ + if (vty->node == CONFIG_NODE) \ + vrfptr = vrf_lookup_by_id(VRF_DEFAULT); \ + else \ + vrfptr = VTY_GET_CONTEXT(vrf); \ + VTY_CHECK_CONTEXT(vrfptr); \ + MACRO_REQUIRE_SEMICOLON() /* end */ + /* XPath macros. */ #define VTY_PUSH_XPATH(nodeval, value) \ do { \ diff --git a/pimd/pim6_cmd.c b/pimd/pim6_cmd.c index f0ea4a03a1..289772260c 100644 --- a/pimd/pim6_cmd.c +++ b/pimd/pim6_cmd.c @@ -660,8 +660,11 @@ DEFPY (ipv6_mld_group_watermark, "Configure group limit for watermark warning\n" "Group count to generate watermark warning\n") { - PIM_DECLVAR_CONTEXT(vrf, pim); + PIM_DECLVAR_CONTEXT_VRF(vrf, pim); + /* TBD Depends on MLD data structure changes */ + (void)pim; + return CMD_SUCCESS; } @@ -674,8 +677,11 @@ DEFPY (no_ipv6_mld_group_watermark, "Unconfigure group limit for watermark warning\n" IGNORED_IN_NO_STR) { - PIM_DECLVAR_CONTEXT(vrf, pim); + PIM_DECLVAR_CONTEXT_VRF(vrf, pim); + /* TBD Depends on MLD data structure changes */ + (void)pim; + return CMD_SUCCESS; } @@ -1569,6 +1575,350 @@ DEFPY (show_ipv6_pim_nexthop_lookup, return CMD_SUCCESS; } +DEFPY (show_ipv6_multicast, + show_ipv6_multicast_cmd, + "show ipv6 multicast [vrf NAME]", + SHOW_STR + IPV6_STR + "Multicast global information\n" + VRF_CMD_HELP_STR) +{ + struct vrf *v; + struct pim_instance *pim; + + v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME); + + if (!v) + return CMD_WARNING; + + pim = pim_get_pim_instance(v->vrf_id); + + if (!pim) { + vty_out(vty, "%% Unable to find pim instance\n"); + return CMD_WARNING; + } + + pim_cmd_show_ip_multicast_helper(pim, vty); + + return CMD_SUCCESS; +} + +DEFPY (show_ipv6_multicast_vrf_all, + show_ipv6_multicast_vrf_all_cmd, + "show ipv6 multicast vrf all", + SHOW_STR + IPV6_STR + "Multicast global information\n" + VRF_CMD_HELP_STR) +{ + struct vrf *vrf; + + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { + vty_out(vty, "VRF: %s\n", vrf->name); + pim_cmd_show_ip_multicast_helper(vrf->info, vty); + } + + return CMD_SUCCESS; +} + +DEFPY (show_ipv6_multicast_count, + show_ipv6_multicast_count_cmd, + "show ipv6 multicast count [vrf NAME] [json$json]", + SHOW_STR + IPV6_STR + "Multicast global information\n" + "Data packet count\n" + VRF_CMD_HELP_STR + JSON_STR) +{ + struct pim_instance *pim; + struct vrf *v; + json_object *json_parent = NULL; + + v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME); + + if (!v) + return CMD_WARNING; + + pim = pim_get_pim_instance(v->vrf_id); + + if (!pim) { + vty_out(vty, "%% Unable to find pim instance\n"); + return CMD_WARNING; + } + + if (json) + json_parent = json_object_new_object(); + + show_multicast_interfaces(pim, vty, json_parent); + + if (json) + vty_json(vty, json_parent); + + return CMD_SUCCESS; +} + +DEFPY (show_ipv6_multicast_count_vrf_all, + show_ipv6_multicast_count_vrf_all_cmd, + "show ipv6 multicast count vrf all [json$json]", + SHOW_STR + IPV6_STR + "Multicast global information\n" + "Data packet count\n" + VRF_CMD_HELP_STR + JSON_STR) +{ + struct vrf *vrf; + json_object *json_parent = NULL; + json_object *json_vrf = NULL; + + if (json) + json_parent = json_object_new_object(); + + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { + if (!json) + vty_out(vty, "VRF: %s\n", vrf->name); + else + json_vrf = json_object_new_object(); + + show_multicast_interfaces(vrf->info, vty, json_vrf); + if (json) + json_object_object_add(json_parent, vrf->name, + json_vrf); + } + if (json) + vty_json(vty, json_parent); + + return CMD_SUCCESS; +} + +DEFPY (show_ipv6_mroute, + show_ipv6_mroute_cmd, + "show ipv6 mroute [vrf NAME] [X:X::X:X$s_or_g [X:X::X:X$g]] [fill$fill] [json$json]", + SHOW_STR + IPV6_STR + MROUTE_STR + VRF_CMD_HELP_STR + "The Source or Group\n" + "The Group\n" + "Fill in Assumed data\n" + JSON_STR) +{ + pim_sgaddr sg = {0}; + struct pim_instance *pim; + struct vrf *v; + json_object *json_parent = NULL; + + v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME); + + if (!v) + return CMD_WARNING; + + pim = pim_get_pim_instance(v->vrf_id); + + if (!pim) { + vty_out(vty, "%% Unable to find pim instance\n"); + return CMD_WARNING; + } + + if (json) + json_parent = json_object_new_object(); + + if (!pim_addr_is_any(s_or_g)) { + if (!pim_addr_is_any(g)) { + sg.src = s_or_g; + sg.grp = g; + } else + sg.grp = s_or_g; + } + + show_mroute(pim, vty, &sg, !!fill, json_parent); + + if (json) + vty_json(vty, json_parent); + + return CMD_SUCCESS; +} + +DEFPY (show_ipv6_mroute_vrf_all, + show_ipv6_mroute_vrf_all_cmd, + "show ipv6 mroute vrf all [fill$fill] [json$json]", + SHOW_STR + IPV6_STR + MROUTE_STR + VRF_CMD_HELP_STR + "Fill in Assumed data\n" + JSON_STR) +{ + pim_sgaddr sg = {0}; + struct vrf *vrf; + json_object *json_parent = NULL; + json_object *json_vrf = NULL; + + if (json) + json_parent = json_object_new_object(); + + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { + if (!json) + vty_out(vty, "VRF: %s\n", vrf->name); + else + json_vrf = json_object_new_object(); + show_mroute(vrf->info, vty, &sg, !!fill, json_vrf); + if (json) + json_object_object_add(json_parent, vrf->name, + json_vrf); + } + if (json) + vty_json(vty, json_parent); + + return CMD_SUCCESS; +} + +DEFPY (show_ipv6_mroute_count, + show_ipv6_mroute_count_cmd, + "show ipv6 mroute [vrf NAME] count [json$json]", + SHOW_STR + IPV6_STR + MROUTE_STR + VRF_CMD_HELP_STR + "Route and packet count data\n" + JSON_STR) +{ + struct pim_instance *pim; + struct vrf *v; + json_object *json_parent = NULL; + + v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME); + + if (!v) + return CMD_WARNING; + + pim = pim_get_pim_instance(v->vrf_id); + + if (!pim) { + vty_out(vty, "%% Unable to find pim instance\n"); + return CMD_WARNING; + } + + if (json) + json_parent = json_object_new_object(); + + show_mroute_count(pim, vty, json_parent); + + if (json) + vty_json(vty, json_parent); + + return CMD_SUCCESS; +} + +DEFPY (show_ipv6_mroute_count_vrf_all, + show_ipv6_mroute_count_vrf_all_cmd, + "show ipv6 mroute vrf all count [json$json]", + SHOW_STR + IPV6_STR + MROUTE_STR + VRF_CMD_HELP_STR + "Route and packet count data\n" + JSON_STR) +{ + struct vrf *vrf; + json_object *json_parent = NULL; + json_object *json_vrf = NULL; + + if (json) + json_parent = json_object_new_object(); + + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { + if (!json) + vty_out(vty, "VRF: %s\n", vrf->name); + else + json_vrf = json_object_new_object(); + show_mroute_count(vrf->info, vty, json_vrf); + + if (json) + json_object_object_add(json_parent, vrf->name, + json_vrf); + } + + if (json) + vty_json(vty, json_parent); + + return CMD_SUCCESS; +} + +DEFPY (show_ipv6_mroute_summary, + show_ipv6_mroute_summary_cmd, + "show ipv6 mroute [vrf NAME] summary [json$json]", + SHOW_STR + IPV6_STR + MROUTE_STR + VRF_CMD_HELP_STR + "Summary of all mroutes\n" + JSON_STR) +{ + struct pim_instance *pim; + struct vrf *v; + json_object *json_parent = NULL; + + v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME); + + if (!v) + return CMD_WARNING; + + pim = pim_get_pim_instance(v->vrf_id); + + if (!pim) { + vty_out(vty, "%% Unable to find pim instance\n"); + return CMD_WARNING; + } + + if (json) + json_parent = json_object_new_object(); + + show_mroute_summary(pim, vty, json_parent); + + if (json) + vty_json(vty, json_parent); + + return CMD_SUCCESS; +} + +DEFPY (show_ipv6_mroute_summary_vrf_all, + show_ipv6_mroute_summary_vrf_all_cmd, + "show ipv6 mroute vrf all summary [json$json]", + SHOW_STR + IPV6_STR + MROUTE_STR + VRF_CMD_HELP_STR + "Summary of all mroutes\n" + JSON_STR) +{ + struct vrf *vrf; + json_object *json_parent = NULL; + json_object *json_vrf = NULL; + + if (json) + json_parent = json_object_new_object(); + + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { + if (!json) + vty_out(vty, "VRF: %s\n", vrf->name); + else + json_vrf = json_object_new_object(); + + show_mroute_summary(vrf->info, vty, json_vrf); + + if (json) + json_object_object_add(json_parent, vrf->name, + json_vrf); + } + + if (json) + vty_json(vty, json_parent); + + return CMD_SUCCESS; +} + void pim_cmd_init(void) { if_cmd_init(pim_interface_config_write); @@ -1665,4 +2015,14 @@ void pim_cmd_init(void) install_element(VIEW_NODE, &show_ipv6_pim_neighbor_vrf_all_cmd); install_element(VIEW_NODE, &show_ipv6_pim_nexthop_cmd); install_element(VIEW_NODE, &show_ipv6_pim_nexthop_lookup_cmd); + install_element(VIEW_NODE, &show_ipv6_multicast_cmd); + install_element(VIEW_NODE, &show_ipv6_multicast_vrf_all_cmd); + install_element(VIEW_NODE, &show_ipv6_multicast_count_cmd); + install_element(VIEW_NODE, &show_ipv6_multicast_count_vrf_all_cmd); + install_element(VIEW_NODE, &show_ipv6_mroute_cmd); + install_element(VIEW_NODE, &show_ipv6_mroute_vrf_all_cmd); + install_element(VIEW_NODE, &show_ipv6_mroute_count_cmd); + install_element(VIEW_NODE, &show_ipv6_mroute_count_vrf_all_cmd); + install_element(VIEW_NODE, &show_ipv6_mroute_summary_cmd); + install_element(VIEW_NODE, &show_ipv6_mroute_summary_vrf_all_cmd); } diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 6b17c8d0e5..b58727d9b5 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -1020,29 +1020,6 @@ static void pim_show_interface_traffic_single(struct pim_instance *pim, vty_out(vty, "%% No such interface\n"); } -static void show_scan_oil_stats(struct pim_instance *pim, struct vty *vty, - time_t now) -{ - char uptime_scan_oil[10]; - char uptime_mroute_add[10]; - char uptime_mroute_del[10]; - - pim_time_uptime_begin(uptime_scan_oil, sizeof(uptime_scan_oil), now, - pim->scan_oil_last); - pim_time_uptime_begin(uptime_mroute_add, sizeof(uptime_mroute_add), now, - pim->mroute_add_last); - pim_time_uptime_begin(uptime_mroute_del, sizeof(uptime_mroute_del), now, - pim->mroute_del_last); - - vty_out(vty, - "Scan OIL - Last: %s Events: %lld\n" - "MFC Add - Last: %s Events: %lld\n" - "MFC Del - Last: %s Events: %lld\n", - uptime_scan_oil, (long long)pim->scan_oil_events, - uptime_mroute_add, (long long)pim->mroute_add_events, - uptime_mroute_del, (long long)pim->mroute_del_events); -} - /* Display the bsm database details */ static void pim_show_bsm_db(struct pim_instance *pim, struct vty *vty, bool uj) { @@ -3672,604 +3649,121 @@ DEFPY (show_ip_pim_statistics, return CMD_SUCCESS; } -static void show_multicast_interfaces(struct pim_instance *pim, struct vty *vty, - bool uj) -{ - struct interface *ifp; - char buf[PREFIX_STRLEN]; - json_object *json = NULL; - json_object *json_row = NULL; - - vty_out(vty, "\n"); - - if (uj) - json = json_object_new_object(); - else - vty_out(vty, - "Interface Address ifi Vif PktsIn PktsOut BytesIn BytesOut\n"); - - FOR_ALL_INTERFACES (pim->vrf, ifp) { - struct pim_interface *pim_ifp; - struct in_addr ifaddr; - struct sioc_vif_req vreq; - - pim_ifp = ifp->info; - - if (!pim_ifp) - continue; - - memset(&vreq, 0, sizeof(vreq)); - vreq.vifi = pim_ifp->mroute_vif_index; - - if (ioctl(pim->mroute_socket, SIOCGETVIFCNT, &vreq)) { - zlog_warn( - "ioctl(SIOCGETVIFCNT=%lu) failure for interface %s vif_index=%d: errno=%d: %s", - (unsigned long)SIOCGETVIFCNT, ifp->name, - pim_ifp->mroute_vif_index, errno, - safe_strerror(errno)); - } - - ifaddr = pim_ifp->primary_address; - if (uj) { - json_row = json_object_new_object(); - json_object_string_add(json_row, "name", ifp->name); - json_object_string_add(json_row, "state", - if_is_up(ifp) ? "up" : "down"); - json_object_string_addf(json_row, "address", "%pI4", - &pim_ifp->primary_address); - json_object_int_add(json_row, "ifIndex", ifp->ifindex); - json_object_int_add(json_row, "vif", - pim_ifp->mroute_vif_index); - json_object_int_add(json_row, "pktsIn", - (unsigned long)vreq.icount); - json_object_int_add(json_row, "pktsOut", - (unsigned long)vreq.ocount); - json_object_int_add(json_row, "bytesIn", - (unsigned long)vreq.ibytes); - json_object_int_add(json_row, "bytesOut", - (unsigned long)vreq.obytes); - json_object_object_add(json, ifp->name, json_row); - } else { - vty_out(vty, - "%-16s %-15s %3d %3d %7lu %7lu %10lu %10lu\n", - ifp->name, - inet_ntop(AF_INET, &ifaddr, buf, sizeof(buf)), - ifp->ifindex, pim_ifp->mroute_vif_index, - (unsigned long)vreq.icount, - (unsigned long)vreq.ocount, - (unsigned long)vreq.ibytes, - (unsigned long)vreq.obytes); - } - } - - if (uj) - vty_json(vty, json); -} - -static void pim_cmd_show_ip_multicast_helper(struct pim_instance *pim, - struct vty *vty) -{ - struct vrf *vrf = pim->vrf; - time_t now = pim_time_monotonic_sec(); - char uptime[10]; - char mlag_role[80]; - - pim = vrf->info; - - vty_out(vty, "Router MLAG Role: %s\n", - mlag_role2str(router->mlag_role, mlag_role, sizeof(mlag_role))); - vty_out(vty, "Mroute socket descriptor:"); - - vty_out(vty, " %d(%s)\n", pim->mroute_socket, vrf->name); - - pim_time_uptime(uptime, sizeof(uptime), - now - pim->mroute_socket_creation); - vty_out(vty, "Mroute socket uptime: %s\n", uptime); - - vty_out(vty, "\n"); - - pim_zebra_zclient_update(vty); - pim_zlookup_show_ip_multicast(vty); - - vty_out(vty, "\n"); - vty_out(vty, "Maximum highest VifIndex: %d\n", PIM_MAX_USABLE_VIFS); - - vty_out(vty, "\n"); - vty_out(vty, "Upstream Join Timer: %d secs\n", router->t_periodic); - vty_out(vty, "Join/Prune Holdtime: %d secs\n", PIM_JP_HOLDTIME); - vty_out(vty, "PIM ECMP: %s\n", pim->ecmp_enable ? "Enable" : "Disable"); - vty_out(vty, "PIM ECMP Rebalance: %s\n", - pim->ecmp_rebalance_enable ? "Enable" : "Disable"); - - vty_out(vty, "\n"); - - pim_show_rpf_refresh_stats(vty, pim, now, NULL); - - vty_out(vty, "\n"); - - show_scan_oil_stats(pim, vty, now); - - show_multicast_interfaces(pim, vty, false); -} - -DEFUN (show_ip_multicast, +DEFPY (show_ip_multicast, show_ip_multicast_cmd, "show ip multicast [vrf NAME]", SHOW_STR IP_STR - VRF_CMD_HELP_STR - "Multicast global information\n") + "Multicast global information\n" + VRF_CMD_HELP_STR) { - int idx = 2; - struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx); + struct vrf *v; + struct pim_instance *pim; - if (!vrf) + v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME); + + if (!v) + return CMD_WARNING; + + pim = pim_get_pim_instance(v->vrf_id); + + if (!pim) { + vty_out(vty, "%% Unable to find pim instance\n"); return CMD_WARNING; + } - pim_cmd_show_ip_multicast_helper(vrf->info, vty); + pim_cmd_show_ip_multicast_helper(pim, vty); return CMD_SUCCESS; } -DEFUN (show_ip_multicast_vrf_all, +DEFPY (show_ip_multicast_vrf_all, show_ip_multicast_vrf_all_cmd, "show ip multicast vrf all", SHOW_STR IP_STR - VRF_CMD_HELP_STR - "Multicast global information\n") + "Multicast global information\n" + VRF_CMD_HELP_STR) { - bool uj = use_json(argc, argv); struct vrf *vrf; - bool first = true; - if (uj) - vty_out(vty, "{ "); RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { - if (uj) { - if (!first) - vty_out(vty, ", "); - vty_out(vty, " \"%s\": ", vrf->name); - first = false; - } else - vty_out(vty, "VRF: %s\n", vrf->name); + vty_out(vty, "VRF: %s\n", vrf->name); pim_cmd_show_ip_multicast_helper(vrf->info, vty); } - if (uj) - vty_out(vty, "}\n"); return CMD_SUCCESS; } -DEFUN(show_ip_multicast_count, - show_ip_multicast_count_cmd, - "show ip multicast count [vrf NAME] [json]", - SHOW_STR IP_STR - "Multicast global information\n" - "Data packet count\n" - VRF_CMD_HELP_STR JSON_STR) +DEFPY (show_ip_multicast_count, + show_ip_multicast_count_cmd, + "show ip multicast count [vrf NAME] [json$json]", + SHOW_STR + IP_STR + "Multicast global information\n" + "Data packet count\n" + VRF_CMD_HELP_STR + JSON_STR) { - int idx = 3; - struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx); - bool uj = use_json(argc, argv); - - if (!vrf) - return CMD_WARNING; - - show_multicast_interfaces(vrf->info, vty, uj); + struct pim_instance *pim; + struct vrf *v; + json_object *json_parent = NULL; - return CMD_SUCCESS; -} + v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME); -DEFUN(show_ip_multicast_count_vrf_all, - show_ip_multicast_count_vrf_all_cmd, - "show ip multicast count vrf all [json]", - SHOW_STR IP_STR - "Multicast global information\n" - "Data packet count\n" - VRF_CMD_HELP_STR JSON_STR) -{ - bool uj = use_json(argc, argv); - struct vrf *vrf; - bool first = true; + if (!v) + return CMD_WARNING; - if (uj) - vty_out(vty, "{ "); + pim = pim_get_pim_instance(v->vrf_id); - RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { - if (uj) { - if (!first) - vty_out(vty, ", "); + if (!pim) { + vty_out(vty, "%% Unable to find pim instance\n"); + return CMD_WARNING; + } - vty_out(vty, " \"%s\": ", vrf->name); - first = false; - } else - vty_out(vty, "VRF: %s\n", vrf->name); + if (json) + json_parent = json_object_new_object(); - show_multicast_interfaces(vrf->info, vty, uj); - } + show_multicast_interfaces(pim, vty, json_parent); - if (uj) - vty_out(vty, "}\n"); + if (json) + vty_json(vty, json_parent); return CMD_SUCCESS; } -static void show_mroute(struct pim_instance *pim, struct vty *vty, - pim_sgaddr *sg, bool fill, bool uj) +DEFPY (show_ip_multicast_count_vrf_all, + show_ip_multicast_count_vrf_all_cmd, + "show ip multicast count vrf all [json$json]", + SHOW_STR + IP_STR + "Multicast global information\n" + "Data packet count\n" + VRF_CMD_HELP_STR + JSON_STR) { - struct listnode *node; - struct channel_oil *c_oil; - struct static_route *s_route; - time_t now; - json_object *json = NULL; - json_object *json_group = NULL; - json_object *json_source = NULL; - json_object *json_oil = NULL; - json_object *json_ifp_out = NULL; - int found_oif; - int first; - char grp_str[INET_ADDRSTRLEN]; - char src_str[INET_ADDRSTRLEN]; - char in_ifname[INTERFACE_NAMSIZ + 1]; - char out_ifname[INTERFACE_NAMSIZ + 1]; - int oif_vif_index; - struct interface *ifp_in; - char proto[100]; - char state_str[PIM_REG_STATE_STR_LEN]; - char mroute_uptime[10]; - - if (uj) { - json = json_object_new_object(); - } else { - vty_out(vty, "IP Multicast Routing Table\n"); - vty_out(vty, "Flags: S - Sparse, C - Connected, P - Pruned\n"); - vty_out(vty, - " R - SGRpt Pruned, F - Register flag, T - SPT-bit set\n"); - vty_out(vty, - "\nSource Group Flags Proto Input Output TTL Uptime\n"); - } - - now = pim_time_monotonic_sec(); - - /* print list of PIM and IGMP routes */ - frr_each (rb_pim_oil, &pim->channel_oil_head, c_oil) { - found_oif = 0; - first = 1; - if (!c_oil->installed) - continue; - - if (!pim_addr_is_any(sg->grp) && - pim_addr_cmp(sg->grp, c_oil->oil.mfcc_mcastgrp)) - continue; - if (!pim_addr_is_any(sg->src) && - pim_addr_cmp(sg->src, c_oil->oil.mfcc_origin)) - continue; - - pim_inet4_dump("<group?>", c_oil->oil.mfcc_mcastgrp, grp_str, - sizeof(grp_str)); - pim_inet4_dump("<source?>", c_oil->oil.mfcc_origin, src_str, - sizeof(src_str)); - - strlcpy(state_str, "S", sizeof(state_str)); - /* When a non DR receives a igmp join, it creates a (*,G) - * channel_oil without any upstream creation */ - if (c_oil->up) { - if (PIM_UPSTREAM_FLAG_TEST_SRC_IGMP(c_oil->up->flags)) - strlcat(state_str, "C", sizeof(state_str)); - if (pim_upstream_is_sg_rpt(c_oil->up)) - strlcat(state_str, "R", sizeof(state_str)); - if (PIM_UPSTREAM_FLAG_TEST_FHR(c_oil->up->flags)) - strlcat(state_str, "F", sizeof(state_str)); - if (c_oil->up->sptbit == PIM_UPSTREAM_SPTBIT_TRUE) - strlcat(state_str, "T", sizeof(state_str)); - } - if (pim_channel_oil_empty(c_oil)) - strlcat(state_str, "P", sizeof(state_str)); - - ifp_in = pim_if_find_by_vif_index(pim, c_oil->oil.mfcc_parent); - - if (ifp_in) - strlcpy(in_ifname, ifp_in->name, sizeof(in_ifname)); - else - strlcpy(in_ifname, "<iif?>", sizeof(in_ifname)); - - - pim_time_uptime(mroute_uptime, sizeof(mroute_uptime), - now - c_oil->mroute_creation); - - if (uj) { - - /* Find the group, create it if it doesn't exist */ - json_object_object_get_ex(json, grp_str, &json_group); - - if (!json_group) { - json_group = json_object_new_object(); - json_object_object_add(json, grp_str, - json_group); - } - - /* Find the source nested under the group, create it if - * it doesn't exist - */ - json_object_object_get_ex(json_group, src_str, - &json_source); - - if (!json_source) { - json_source = json_object_new_object(); - json_object_object_add(json_group, src_str, - json_source); - } - - /* Find the inbound interface nested under the source, - * create it if it doesn't exist */ - json_object_string_add(json_source, "source", - src_str); - json_object_string_add(json_source, "group", - grp_str); - json_object_int_add(json_source, "installed", - c_oil->installed); - json_object_int_add(json_source, "refCount", - c_oil->oil_ref_count); - json_object_int_add(json_source, "oilSize", - c_oil->oil_size); - json_object_int_add(json_source, "OilInheritedRescan", - c_oil->oil_inherited_rescan); - json_object_int_add(json_source, "oilInheritedRescan", - c_oil->oil_inherited_rescan); - json_object_string_add(json_source, "iif", in_ifname); - json_object_string_add(json_source, "upTime", - mroute_uptime); - json_oil = NULL; - } - - for (oif_vif_index = 0; oif_vif_index < MAXVIFS; - ++oif_vif_index) { - struct interface *ifp_out; - int ttl; - - ttl = c_oil->oil.mfcc_ttls[oif_vif_index]; - if (ttl < 1) - continue; - - /* do not display muted OIFs */ - if (c_oil->oif_flags[oif_vif_index] - & PIM_OIF_FLAG_MUTE) - continue; - - if (c_oil->oil.mfcc_parent == oif_vif_index && - !pim_mroute_allow_iif_in_oil(c_oil, - oif_vif_index)) - continue; - - ifp_out = pim_if_find_by_vif_index(pim, oif_vif_index); - found_oif = 1; - - if (ifp_out) - strlcpy(out_ifname, ifp_out->name, sizeof(out_ifname)); - else - strlcpy(out_ifname, "<oif?>", sizeof(out_ifname)); - - if (uj) { - json_ifp_out = json_object_new_object(); - json_object_string_add(json_ifp_out, "source", - src_str); - json_object_string_add(json_ifp_out, "group", - grp_str); - - if (c_oil->oif_flags[oif_vif_index] - & PIM_OIF_FLAG_PROTO_PIM) - json_object_boolean_true_add( - json_ifp_out, "protocolPim"); - - if (c_oil->oif_flags[oif_vif_index] & - PIM_OIF_FLAG_PROTO_GM) - json_object_boolean_true_add( - json_ifp_out, "protocolIgmp"); - - if (c_oil->oif_flags[oif_vif_index] - & PIM_OIF_FLAG_PROTO_VXLAN) - json_object_boolean_true_add( - json_ifp_out, "protocolVxlan"); - - if (c_oil->oif_flags[oif_vif_index] - & PIM_OIF_FLAG_PROTO_STAR) - json_object_boolean_true_add( - json_ifp_out, - "protocolInherited"); - - json_object_string_add(json_ifp_out, - "inboundInterface", - in_ifname); - json_object_int_add(json_ifp_out, "iVifI", - c_oil->oil.mfcc_parent); - json_object_string_add(json_ifp_out, - "outboundInterface", - out_ifname); - json_object_int_add(json_ifp_out, "oVifI", - oif_vif_index); - json_object_int_add(json_ifp_out, "ttl", ttl); - json_object_string_add(json_ifp_out, "upTime", - mroute_uptime); - json_object_string_add(json_source, "flags", - state_str); - if (!json_oil) { - json_oil = json_object_new_object(); - json_object_object_add(json_source, - "oil", json_oil); - } - json_object_object_add(json_oil, out_ifname, - json_ifp_out); - } else { - proto[0] = '\0'; - if (c_oil->oif_flags[oif_vif_index] - & PIM_OIF_FLAG_PROTO_PIM) { - strlcpy(proto, "PIM", sizeof(proto)); - } - - if (c_oil->oif_flags[oif_vif_index] & - PIM_OIF_FLAG_PROTO_GM) { - strlcpy(proto, "IGMP", sizeof(proto)); - } - - if (c_oil->oif_flags[oif_vif_index] - & PIM_OIF_FLAG_PROTO_VXLAN) { - strlcpy(proto, "VxLAN", sizeof(proto)); - } - - if (c_oil->oif_flags[oif_vif_index] - & PIM_OIF_FLAG_PROTO_STAR) { - strlcpy(proto, "STAR", sizeof(proto)); - } - - vty_out(vty, - "%-15s %-15s %-8s %-6s %-16s %-16s %-3d %8s\n", - src_str, grp_str, state_str, proto, - in_ifname, out_ifname, ttl, - mroute_uptime); - - if (first) { - src_str[0] = '\0'; - grp_str[0] = '\0'; - in_ifname[0] = '\0'; - state_str[0] = '\0'; - mroute_uptime[0] = '\0'; - first = 0; - } - } - } - - if (!uj && !found_oif) { - vty_out(vty, - "%-15s %-15s %-8s %-6s %-16s %-16s %-3d %8s\n", - src_str, grp_str, state_str, "none", in_ifname, - "none", 0, "--:--:--"); - } - } - - /* Print list of static routes */ - for (ALL_LIST_ELEMENTS_RO(pim->static_routes, node, s_route)) { - first = 1; - - if (!s_route->c_oil.installed) - continue; + struct vrf *vrf; + json_object *json_parent = NULL; + json_object *json_vrf = NULL; - pim_inet4_dump("<group?>", s_route->group, grp_str, - sizeof(grp_str)); - pim_inet4_dump("<source?>", s_route->source, src_str, - sizeof(src_str)); - ifp_in = pim_if_find_by_vif_index(pim, s_route->iif); - found_oif = 0; + if (json) + json_parent = json_object_new_object(); - if (ifp_in) - strlcpy(in_ifname, ifp_in->name, sizeof(in_ifname)); + RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { + if (!json) + vty_out(vty, "VRF: %s\n", vrf->name); else - strlcpy(in_ifname, "<iif?>", sizeof(in_ifname)); - - if (uj) { - - /* Find the group, create it if it doesn't exist */ - json_object_object_get_ex(json, grp_str, &json_group); - - if (!json_group) { - json_group = json_object_new_object(); - json_object_object_add(json, grp_str, - json_group); - } - - /* Find the source nested under the group, create it if - * it doesn't exist */ - json_object_object_get_ex(json_group, src_str, - &json_source); - - if (!json_source) { - json_source = json_object_new_object(); - json_object_object_add(json_group, src_str, - json_source); - } - - json_object_string_add(json_source, "iif", in_ifname); - json_oil = NULL; - } else { - strlcpy(proto, "STATIC", sizeof(proto)); - } - - for (oif_vif_index = 0; oif_vif_index < MAXVIFS; - ++oif_vif_index) { - struct interface *ifp_out; - char oif_uptime[10]; - int ttl; - - ttl = s_route->oif_ttls[oif_vif_index]; - if (ttl < 1) - continue; - - ifp_out = pim_if_find_by_vif_index(pim, oif_vif_index); - pim_time_uptime( - oif_uptime, sizeof(oif_uptime), - now - - s_route->c_oil - .oif_creation[oif_vif_index]); - found_oif = 1; - - if (ifp_out) - strlcpy(out_ifname, ifp_out->name, sizeof(out_ifname)); - else - strlcpy(out_ifname, "<oif?>", sizeof(out_ifname)); - - if (uj) { - json_ifp_out = json_object_new_object(); - json_object_string_add(json_ifp_out, "source", - src_str); - json_object_string_add(json_ifp_out, "group", - grp_str); - json_object_boolean_true_add(json_ifp_out, - "protocolStatic"); - json_object_string_add(json_ifp_out, - "inboundInterface", - in_ifname); - json_object_int_add( - json_ifp_out, "iVifI", - s_route->c_oil.oil.mfcc_parent); - json_object_string_add(json_ifp_out, - "outboundInterface", - out_ifname); - json_object_int_add(json_ifp_out, "oVifI", - oif_vif_index); - json_object_int_add(json_ifp_out, "ttl", ttl); - json_object_string_add(json_ifp_out, "upTime", - oif_uptime); - if (!json_oil) { - json_oil = json_object_new_object(); - json_object_object_add(json_source, - "oil", json_oil); - } - json_object_object_add(json_oil, out_ifname, - json_ifp_out); - } else { - vty_out(vty, - "%-15s %-15s %-8s %-6s %-16s %-16s %-3d %8s\n", - src_str, grp_str, "-", proto, in_ifname, - out_ifname, ttl, oif_uptime); - if (first && !fill) { - src_str[0] = '\0'; - grp_str[0] = '\0'; - in_ifname[0] = '\0'; - first = 0; - } - } - } + json_vrf = json_object_new_object(); - if (!uj && !found_oif) { - vty_out(vty, - "%-15s %-15s %-8s %-6s %-16s %-16s %-3d %8s\n", - src_str, grp_str, "-", proto, in_ifname, "none", - 0, "--:--:--"); - } + show_multicast_interfaces(vrf->info, vty, json_vrf); + if (json) + json_object_object_add(json_parent, vrf->name, + json_vrf); } + if (json) + vty_json(vty, json_parent); - if (uj) - vty_json(vty, json); + return CMD_SUCCESS; } DEFPY (show_ip_mroute, @@ -4287,13 +3781,13 @@ DEFPY (show_ip_mroute, pim_sgaddr sg = {0}; struct pim_instance *pim; struct vrf *v; + json_object *json_parent = NULL; v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME); - if (!v) { - vty_out(vty, "%% Vrf specified: %s does not exist\n", vrf); + if (!v) return CMD_WARNING; - } + pim = pim_get_pim_instance(v->vrf_id); if (!pim) { @@ -4301,6 +3795,9 @@ DEFPY (show_ip_mroute, return CMD_WARNING; } + if (json) + json_parent = json_object_new_object(); + if (s_or_g.s_addr != INADDR_ANY) { if (g.s_addr != INADDR_ANY) { sg.src = s_or_g; @@ -4308,13 +3805,18 @@ DEFPY (show_ip_mroute, } else sg.grp = s_or_g; } - show_mroute(pim, vty, &sg, !!fill, !!json); + + show_mroute(pim, vty, &sg, !!fill, json_parent); + + if (json) + vty_json(vty, json_parent); + return CMD_SUCCESS; } -DEFUN (show_ip_mroute_vrf_all, +DEFPY (show_ip_mroute_vrf_all, show_ip_mroute_vrf_all_cmd, - "show ip mroute vrf all [fill] [json]", + "show ip mroute vrf all [fill$fill] [json$json]", SHOW_STR IP_STR MROUTE_STR @@ -4323,29 +3825,25 @@ DEFUN (show_ip_mroute_vrf_all, JSON_STR) { pim_sgaddr sg = {0}; - bool uj = use_json(argc, argv); - int idx = 4; struct vrf *vrf; - bool first = true; - bool fill = false; + json_object *json_parent = NULL; + json_object *json_vrf = NULL; - if (argv_find(argv, argc, "fill", &idx)) - fill = true; + if (json) + json_parent = json_object_new_object(); - if (uj) - vty_out(vty, "{ "); RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { - if (uj) { - if (!first) - vty_out(vty, ", "); - vty_out(vty, " \"%s\": ", vrf->name); - first = false; - } else + if (!json) vty_out(vty, "VRF: %s\n", vrf->name); - show_mroute(vrf->info, vty, &sg, fill, uj); + else + json_vrf = json_object_new_object(); + show_mroute(vrf->info, vty, &sg, !!fill, json_vrf); + if (json) + json_object_object_add(json_parent, vrf->name, + json_vrf); } - if (uj) - vty_out(vty, "}\n"); + if (json) + vty_json(vty, json_parent); return CMD_SUCCESS; } @@ -4393,81 +3891,9 @@ DEFUN (clear_ip_mroute_count, return CMD_SUCCESS; } -static void show_mroute_count_per_channel_oil(struct channel_oil *c_oil, - json_object *json, - struct vty *vty) -{ - char group_str[INET_ADDRSTRLEN]; - char source_str[INET_ADDRSTRLEN]; - json_object *json_group = NULL; - json_object *json_source = NULL; - - if (!c_oil->installed) - return; - - pim_mroute_update_counters(c_oil); - - pim_inet4_dump("<group?>", c_oil->oil.mfcc_mcastgrp, group_str, - sizeof(group_str)); - pim_inet4_dump("<source?>", c_oil->oil.mfcc_origin, source_str, - sizeof(source_str)); - - if (json) { - json_object_object_get_ex(json, group_str, &json_group); - - if (!json_group) { - json_group = json_object_new_object(); - json_object_object_add(json, group_str, json_group); - } - - json_source = json_object_new_object(); - json_object_object_add(json_group, source_str, json_source); - json_object_int_add(json_source, "lastUsed", - c_oil->cc.lastused / 100); - json_object_int_add(json_source, "packets", c_oil->cc.pktcnt); - json_object_int_add(json_source, "bytes", c_oil->cc.bytecnt); - json_object_int_add(json_source, "wrongIf", c_oil->cc.wrong_if); - - } else { - vty_out(vty, "%-15s %-15s %-8llu %-7ld %-10ld %-7ld\n", - source_str, group_str, c_oil->cc.lastused / 100, - c_oil->cc.pktcnt - c_oil->cc.origpktcnt, - c_oil->cc.bytecnt - c_oil->cc.origbytecnt, - c_oil->cc.wrong_if - c_oil->cc.origwrong_if); - } -} - -static void show_mroute_count(struct pim_instance *pim, struct vty *vty, - bool uj) -{ - struct listnode *node; - struct channel_oil *c_oil; - struct static_route *sr; - json_object *json = NULL; - - if (uj) - json = json_object_new_object(); - else { - vty_out(vty, "\n"); - - vty_out(vty, - "Source Group LastUsed Packets Bytes WrongIf \n"); - } - - /* Print PIM and IGMP route counts */ - frr_each (rb_pim_oil, &pim->channel_oil_head, c_oil) - show_mroute_count_per_channel_oil(c_oil, json, vty); - - for (ALL_LIST_ELEMENTS_RO(pim->static_routes, node, sr)) - show_mroute_count_per_channel_oil(&sr->c_oil, json, vty); - - if (uj) - vty_json(vty, json); -} - -DEFUN (show_ip_mroute_count, +DEFPY (show_ip_mroute_count, show_ip_mroute_count_cmd, - "show ip mroute [vrf NAME] count [json]", + "show ip mroute [vrf NAME] count [json$json]", SHOW_STR IP_STR MROUTE_STR @@ -4475,20 +3901,36 @@ DEFUN (show_ip_mroute_count, "Route and packet count data\n" JSON_STR) { - int idx = 2; - bool uj = use_json(argc, argv); - struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx); + struct pim_instance *pim; + struct vrf *v; + json_object *json_parent = NULL; - if (!vrf) + v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME); + + if (!v) return CMD_WARNING; - show_mroute_count(vrf->info, vty, uj); + pim = pim_get_pim_instance(v->vrf_id); + + if (!pim) { + vty_out(vty, "%% Unable to find pim instance\n"); + return CMD_WARNING; + } + + if (json) + json_parent = json_object_new_object(); + + show_mroute_count(pim, vty, json_parent); + + if (json) + vty_json(vty, json_parent); + return CMD_SUCCESS; } -DEFUN (show_ip_mroute_count_vrf_all, +DEFPY (show_ip_mroute_count_vrf_all, show_ip_mroute_count_vrf_all_cmd, - "show ip mroute vrf all count [json]", + "show ip mroute vrf all count [json$json]", SHOW_STR IP_STR MROUTE_STR @@ -4496,112 +3938,34 @@ DEFUN (show_ip_mroute_count_vrf_all, "Route and packet count data\n" JSON_STR) { - bool uj = use_json(argc, argv); struct vrf *vrf; - bool first = true; + json_object *json_parent = NULL; + json_object *json_vrf = NULL; + + if (json) + json_parent = json_object_new_object(); - if (uj) - vty_out(vty, "{ "); RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { - if (uj) { - if (!first) - vty_out(vty, ", "); - vty_out(vty, " \"%s\": ", vrf->name); - first = false; - } else + if (!json) vty_out(vty, "VRF: %s\n", vrf->name); - show_mroute_count(vrf->info, vty, uj); - } - if (uj) - vty_out(vty, "}\n"); - - return CMD_SUCCESS; -} + else + json_vrf = json_object_new_object(); -static void show_mroute_summary(struct pim_instance *pim, struct vty *vty, - json_object *json) -{ - struct listnode *node; - struct channel_oil *c_oil; - struct static_route *s_route; - uint32_t starg_sw_mroute_cnt = 0; - uint32_t sg_sw_mroute_cnt = 0; - uint32_t starg_hw_mroute_cnt = 0; - uint32_t sg_hw_mroute_cnt = 0; - json_object *json_starg = NULL; - json_object *json_sg = NULL; - - if (!json) - vty_out(vty, "Mroute Type Installed/Total\n"); - - frr_each (rb_pim_oil, &pim->channel_oil_head, c_oil) { - if (!c_oil->installed) { - if (c_oil->oil.mfcc_origin.s_addr == INADDR_ANY) - starg_sw_mroute_cnt++; - else - sg_sw_mroute_cnt++; - } else { - if (c_oil->oil.mfcc_origin.s_addr == INADDR_ANY) - starg_hw_mroute_cnt++; - else - sg_hw_mroute_cnt++; - } - } + show_mroute_count(vrf->info, vty, json_vrf); - for (ALL_LIST_ELEMENTS_RO(pim->static_routes, node, s_route)) { - if (!s_route->c_oil.installed) { - if (s_route->c_oil.oil.mfcc_origin.s_addr == INADDR_ANY) - starg_sw_mroute_cnt++; - else - sg_sw_mroute_cnt++; - } else { - if (s_route->c_oil.oil.mfcc_origin.s_addr == INADDR_ANY) - starg_hw_mroute_cnt++; - else - sg_hw_mroute_cnt++; - } + if (json) + json_object_object_add(json_parent, vrf->name, + json_vrf); } + if (json) + vty_json(vty, json_parent); - if (!json) { - vty_out(vty, "%-20s %u/%u\n", "(*, G)", starg_hw_mroute_cnt, - starg_sw_mroute_cnt + starg_hw_mroute_cnt); - vty_out(vty, "%-20s %u/%u\n", "(S, G)", sg_hw_mroute_cnt, - sg_sw_mroute_cnt + sg_hw_mroute_cnt); - vty_out(vty, "------\n"); - vty_out(vty, "%-20s %u/%u\n", "Total", - (starg_hw_mroute_cnt + sg_hw_mroute_cnt), - (starg_sw_mroute_cnt + starg_hw_mroute_cnt - + sg_sw_mroute_cnt + sg_hw_mroute_cnt)); - } else { - /* (*,G) route details */ - json_starg = json_object_new_object(); - json_object_object_add(json, "wildcardGroup", json_starg); - - json_object_int_add(json_starg, "installed", - starg_hw_mroute_cnt); - json_object_int_add(json_starg, "total", - starg_sw_mroute_cnt + starg_hw_mroute_cnt); - - /* (S, G) route details */ - json_sg = json_object_new_object(); - json_object_object_add(json, "sourceGroup", json_sg); - - json_object_int_add(json_sg, "installed", sg_hw_mroute_cnt); - json_object_int_add(json_sg, "total", - sg_sw_mroute_cnt + sg_hw_mroute_cnt); - - json_object_int_add(json, "totalNumOfInstalledMroutes", - starg_hw_mroute_cnt + sg_hw_mroute_cnt); - json_object_int_add(json, "totalNumOfMroutes", - starg_sw_mroute_cnt + starg_hw_mroute_cnt - + sg_sw_mroute_cnt - + sg_hw_mroute_cnt); - } + return CMD_SUCCESS; } -DEFUN (show_ip_mroute_summary, +DEFPY (show_ip_mroute_summary, show_ip_mroute_summary_cmd, - "show ip mroute [vrf NAME] summary [json]", + "show ip mroute [vrf NAME] summary [json$json]", SHOW_STR IP_STR MROUTE_STR @@ -4609,27 +3973,36 @@ DEFUN (show_ip_mroute_summary, "Summary of all mroutes\n" JSON_STR) { - int idx = 2; - bool uj = use_json(argc, argv); - struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx); - json_object *json = NULL; + struct pim_instance *pim; + struct vrf *v; + json_object *json_parent = NULL; - if (uj) - json = json_object_new_object(); + v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME); - if (!vrf) + if (!v) return CMD_WARNING; - show_mroute_summary(vrf->info, vty, json); + pim = pim_get_pim_instance(v->vrf_id); + + if (!pim) { + vty_out(vty, "%% Unable to find pim instance\n"); + return CMD_WARNING; + } + + if (json) + json_parent = json_object_new_object(); + + show_mroute_summary(pim, vty, json_parent); + + if (json) + vty_json(vty, json_parent); - if (uj) - vty_json(vty, json); return CMD_SUCCESS; } -DEFUN (show_ip_mroute_summary_vrf_all, +DEFPY (show_ip_mroute_summary_vrf_all, show_ip_mroute_summary_vrf_all_cmd, - "show ip mroute vrf all summary [json]", + "show ip mroute vrf all summary [json$json]", SHOW_STR IP_STR MROUTE_STR @@ -4638,27 +4011,27 @@ DEFUN (show_ip_mroute_summary_vrf_all, JSON_STR) { struct vrf *vrf; - bool uj = use_json(argc, argv); - json_object *json = NULL; + json_object *json_parent = NULL; json_object *json_vrf = NULL; - if (uj) - json = json_object_new_object(); + if (json) + json_parent = json_object_new_object(); RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { - if (uj) - json_vrf = json_object_new_object(); - else + if (!json) vty_out(vty, "VRF: %s\n", vrf->name); + else + json_vrf = json_object_new_object(); show_mroute_summary(vrf->info, vty, json_vrf); - if (uj) - json_object_object_add(json, vrf->name, json_vrf); + if (json) + json_object_object_add(json_parent, vrf->name, + json_vrf); } - if (uj) - vty_json(vty, json); + if (json) + vty_json(vty, json_parent); return CMD_SUCCESS; } @@ -4977,7 +4350,7 @@ DEFPY (ip_igmp_group_watermark, "Configure group limit for watermark warning\n" "Group count to generate watermark warning\n") { - PIM_DECLVAR_CONTEXT(vrf, pim); + PIM_DECLVAR_CONTEXT_VRF(vrf, pim); pim->igmp_watermark_limit = limit; return CMD_SUCCESS; @@ -4992,7 +4365,7 @@ DEFPY (no_ip_igmp_group_watermark, "Unconfigure group limit for watermark warning\n" IGNORED_IN_NO_STR) { - PIM_DECLVAR_CONTEXT(vrf, pim); + PIM_DECLVAR_CONTEXT_VRF(vrf, pim); pim->igmp_watermark_limit = 0; return CMD_SUCCESS; diff --git a/pimd/pim_cmd_common.c b/pimd/pim_cmd_common.c index dfba369e5b..d69b94ab12 100644 --- a/pimd/pim_cmd_common.c +++ b/pimd/pim_cmd_common.c @@ -52,6 +52,7 @@ #include "pim_sock.h" #include "pim_ssm.h" #include "pim_addr.h" +#include "pim_static.h" /** * Get current node VRF name. @@ -2837,7 +2838,6 @@ int gm_process_no_last_member_query_interval_cmd(struct vty *vty) FRR_PIM_AF_XPATH_VAL); } - int pim_process_ssmpingd_cmd(struct vty *vty, enum nb_operation operation, const char *src_str) { @@ -2858,3 +2858,684 @@ int pim_process_ssmpingd_cmd(struct vty *vty, enum nb_operation operation, return nb_cli_apply_changes(vty, NULL); } + +static void show_scan_oil_stats(struct pim_instance *pim, struct vty *vty, + time_t now) +{ + char uptime_scan_oil[10]; + char uptime_mroute_add[10]; + char uptime_mroute_del[10]; + + pim_time_uptime_begin(uptime_scan_oil, sizeof(uptime_scan_oil), now, + pim->scan_oil_last); + pim_time_uptime_begin(uptime_mroute_add, sizeof(uptime_mroute_add), now, + pim->mroute_add_last); + pim_time_uptime_begin(uptime_mroute_del, sizeof(uptime_mroute_del), now, + pim->mroute_del_last); + + vty_out(vty, + "Scan OIL - Last: %s Events: %lld\n" + "MFC Add - Last: %s Events: %lld\n" + "MFC Del - Last: %s Events: %lld\n", + uptime_scan_oil, (long long)pim->scan_oil_events, + uptime_mroute_add, (long long)pim->mroute_add_events, + uptime_mroute_del, (long long)pim->mroute_del_events); +} + +void show_multicast_interfaces(struct pim_instance *pim, struct vty *vty, + json_object *json) +{ + struct interface *ifp; + json_object *json_row = NULL; + + vty_out(vty, "\n"); + + if (!json) + vty_out(vty, + "Interface Address ifi Vif PktsIn PktsOut BytesIn BytesOut\n"); + + FOR_ALL_INTERFACES (pim->vrf, ifp) { + struct pim_interface *pim_ifp; +#if PIM_IPV == 4 + struct sioc_vif_req vreq; +#else + struct sioc_mif_req6 vreq; +#endif + + pim_ifp = ifp->info; + + if (!pim_ifp) + continue; + + memset(&vreq, 0, sizeof(vreq)); +#if PIM_IPV == 4 + vreq.vifi = pim_ifp->mroute_vif_index; + if (ioctl(pim->mroute_socket, SIOCGETVIFCNT, &vreq)) { + zlog_warn( + "ioctl(SIOCGETVIFCNT=%lu) failure for interface %s vif_index=%d: errno=%d: %s", + (unsigned long)SIOCGETVIFCNT, ifp->name, + pim_ifp->mroute_vif_index, errno, + safe_strerror(errno)); + } +#else + vreq.mifi = pim_ifp->mroute_vif_index; + if (ioctl(pim->mroute_socket, SIOCGETMIFCNT_IN6, &vreq)) { + zlog_warn( + "ioctl(SIOCGETMIFCNT_IN6=%lu) failure for interface %s vif_index=%d: errno=%d: %s", + (unsigned long)SIOCGETMIFCNT_IN6, ifp->name, + pim_ifp->mroute_vif_index, errno, + safe_strerror(errno)); + } +#endif + + if (json) { + json_row = json_object_new_object(); + json_object_string_add(json_row, "name", ifp->name); + json_object_string_add(json_row, "state", + if_is_up(ifp) ? "up" : "down"); + json_object_string_addf(json_row, "address", "%pPA", + &pim_ifp->primary_address); + json_object_int_add(json_row, "ifIndex", ifp->ifindex); + json_object_int_add(json_row, "vif", + pim_ifp->mroute_vif_index); + json_object_int_add(json_row, "pktsIn", + (unsigned long)vreq.icount); + json_object_int_add(json_row, "pktsOut", + (unsigned long)vreq.ocount); + json_object_int_add(json_row, "bytesIn", + (unsigned long)vreq.ibytes); + json_object_int_add(json_row, "bytesOut", + (unsigned long)vreq.obytes); + json_object_object_add(json, ifp->name, json_row); + } else { + vty_out(vty, + "%-16s %-15pPAs %3d %3d %7lu %7lu %10lu %10lu\n", + ifp->name, &pim_ifp->primary_address, + ifp->ifindex, pim_ifp->mroute_vif_index, + (unsigned long)vreq.icount, + (unsigned long)vreq.ocount, + (unsigned long)vreq.ibytes, + (unsigned long)vreq.obytes); + } + } +} + +void pim_cmd_show_ip_multicast_helper(struct pim_instance *pim, struct vty *vty) +{ + struct vrf *vrf = pim->vrf; + time_t now = pim_time_monotonic_sec(); + char uptime[10]; + char mlag_role[80]; + + pim = vrf->info; + + vty_out(vty, "Router MLAG Role: %s\n", + mlag_role2str(router->mlag_role, mlag_role, sizeof(mlag_role))); + vty_out(vty, "Mroute socket descriptor:"); + + vty_out(vty, " %d(%s)\n", pim->mroute_socket, vrf->name); + + pim_time_uptime(uptime, sizeof(uptime), + now - pim->mroute_socket_creation); + vty_out(vty, "Mroute socket uptime: %s\n", uptime); + + vty_out(vty, "\n"); + + pim_zebra_zclient_update(vty); +#if PIM_IPV == 4 + pim_zlookup_show_ip_multicast(vty); +#else + /* TBD */ +#endif + + vty_out(vty, "\n"); + vty_out(vty, "Maximum highest VifIndex: %d\n", PIM_MAX_USABLE_VIFS); + + vty_out(vty, "\n"); + vty_out(vty, "Upstream Join Timer: %d secs\n", router->t_periodic); + vty_out(vty, "Join/Prune Holdtime: %d secs\n", PIM_JP_HOLDTIME); + vty_out(vty, "PIM ECMP: %s\n", pim->ecmp_enable ? "Enable" : "Disable"); + vty_out(vty, "PIM ECMP Rebalance: %s\n", + pim->ecmp_rebalance_enable ? "Enable" : "Disable"); + + vty_out(vty, "\n"); + + pim_show_rpf_refresh_stats(vty, pim, now, NULL); + + vty_out(vty, "\n"); + + show_scan_oil_stats(pim, vty, now); + + show_multicast_interfaces(pim, vty, NULL); +} + +void show_mroute(struct pim_instance *pim, struct vty *vty, pim_sgaddr *sg, + bool fill, json_object *json) +{ + struct listnode *node; + struct channel_oil *c_oil; + struct static_route *s_route; + time_t now; + json_object *json_group = NULL; + json_object *json_source = NULL; + json_object *json_oil = NULL; + json_object *json_ifp_out = NULL; + int found_oif; + int first; + char grp_str[PIM_ADDRSTRLEN]; + char src_str[PIM_ADDRSTRLEN]; + char in_ifname[INTERFACE_NAMSIZ + 1]; + char out_ifname[INTERFACE_NAMSIZ + 1]; + int oif_vif_index; + struct interface *ifp_in; + char proto[100]; + char state_str[PIM_REG_STATE_STR_LEN]; + char mroute_uptime[10]; + + if (!json) { + vty_out(vty, "IP Multicast Routing Table\n"); + vty_out(vty, "Flags: S - Sparse, C - Connected, P - Pruned\n"); + vty_out(vty, + " R - SGRpt Pruned, F - Register flag, T - SPT-bit set\n"); + vty_out(vty, + "\nSource Group Flags Proto Input Output TTL Uptime\n"); + } + + now = pim_time_monotonic_sec(); + + /* print list of PIM and IGMP routes */ + frr_each (rb_pim_oil, &pim->channel_oil_head, c_oil) { + found_oif = 0; + first = 1; + if (!c_oil->installed) + continue; + + if (!pim_addr_is_any(sg->grp) && + pim_addr_cmp(sg->grp, *oil_mcastgrp(c_oil))) + continue; + if (!pim_addr_is_any(sg->src) && + pim_addr_cmp(sg->src, *oil_origin(c_oil))) + continue; + + snprintfrr(grp_str, sizeof(grp_str), "%pPAs", + oil_mcastgrp(c_oil)); + snprintfrr(src_str, sizeof(src_str), "%pPAs", + oil_origin(c_oil)); + + strlcpy(state_str, "S", sizeof(state_str)); + /* When a non DR receives a igmp join, it creates a (*,G) + * channel_oil without any upstream creation + */ + if (c_oil->up) { + if (PIM_UPSTREAM_FLAG_TEST_SRC_IGMP(c_oil->up->flags)) + strlcat(state_str, "C", sizeof(state_str)); + if (pim_upstream_is_sg_rpt(c_oil->up)) + strlcat(state_str, "R", sizeof(state_str)); + if (PIM_UPSTREAM_FLAG_TEST_FHR(c_oil->up->flags)) + strlcat(state_str, "F", sizeof(state_str)); + if (c_oil->up->sptbit == PIM_UPSTREAM_SPTBIT_TRUE) + strlcat(state_str, "T", sizeof(state_str)); + } + if (pim_channel_oil_empty(c_oil)) + strlcat(state_str, "P", sizeof(state_str)); + + ifp_in = pim_if_find_by_vif_index(pim, *oil_parent(c_oil)); + + if (ifp_in) + strlcpy(in_ifname, ifp_in->name, sizeof(in_ifname)); + else + strlcpy(in_ifname, "<iif?>", sizeof(in_ifname)); + + + pim_time_uptime(mroute_uptime, sizeof(mroute_uptime), + now - c_oil->mroute_creation); + + if (json) { + + /* Find the group, create it if it doesn't exist */ + json_object_object_get_ex(json, grp_str, &json_group); + + if (!json_group) { + json_group = json_object_new_object(); + json_object_object_add(json, grp_str, + json_group); + } + + /* Find the source nested under the group, create it if + * it doesn't exist + */ + json_object_object_get_ex(json_group, src_str, + &json_source); + + if (!json_source) { + json_source = json_object_new_object(); + json_object_object_add(json_group, src_str, + json_source); + } + + /* Find the inbound interface nested under the source, + * create it if it doesn't exist + */ + json_object_string_add(json_source, "source", src_str); + json_object_string_add(json_source, "group", grp_str); + json_object_int_add(json_source, "installed", + c_oil->installed); + json_object_int_add(json_source, "refCount", + c_oil->oil_ref_count); + json_object_int_add(json_source, "oilSize", + c_oil->oil_size); + json_object_int_add(json_source, "OilInheritedRescan", + c_oil->oil_inherited_rescan); + json_object_int_add(json_source, "oilInheritedRescan", + c_oil->oil_inherited_rescan); + json_object_string_add(json_source, "iif", in_ifname); + json_object_string_add(json_source, "upTime", + mroute_uptime); + json_oil = NULL; + } + + for (oif_vif_index = 0; oif_vif_index < MAXVIFS; + ++oif_vif_index) { + struct interface *ifp_out; + int ttl; + + ttl = oil_if_has(c_oil, oif_vif_index); + if (ttl < 1) + continue; + + /* do not display muted OIFs */ + if (c_oil->oif_flags[oif_vif_index] & PIM_OIF_FLAG_MUTE) + continue; + + if (*oil_parent(c_oil) == oif_vif_index && + !pim_mroute_allow_iif_in_oil(c_oil, oif_vif_index)) + continue; + + ifp_out = pim_if_find_by_vif_index(pim, oif_vif_index); + found_oif = 1; + + if (ifp_out) + strlcpy(out_ifname, ifp_out->name, + sizeof(out_ifname)); + else + strlcpy(out_ifname, "<oif?>", + sizeof(out_ifname)); + + if (json) { + json_ifp_out = json_object_new_object(); + json_object_string_add(json_ifp_out, "source", + src_str); + json_object_string_add(json_ifp_out, "group", + grp_str); + + if (c_oil->oif_flags[oif_vif_index] & + PIM_OIF_FLAG_PROTO_PIM) + json_object_boolean_true_add( + json_ifp_out, "protocolPim"); + + if (c_oil->oif_flags[oif_vif_index] & + PIM_OIF_FLAG_PROTO_GM) +#if PIM_IPV == 4 + json_object_boolean_true_add( + json_ifp_out, "protocolIgmp"); +#else + json_object_boolean_true_add( + json_ifp_out, "protocolMld"); +#endif + + if (c_oil->oif_flags[oif_vif_index] & + PIM_OIF_FLAG_PROTO_VXLAN) + json_object_boolean_true_add( + json_ifp_out, "protocolVxlan"); + + if (c_oil->oif_flags[oif_vif_index] & + PIM_OIF_FLAG_PROTO_STAR) + json_object_boolean_true_add( + json_ifp_out, + "protocolInherited"); + + json_object_string_add(json_ifp_out, + "inboundInterface", + in_ifname); + json_object_int_add(json_ifp_out, "iVifI", + *oil_parent(c_oil)); + json_object_string_add(json_ifp_out, + "outboundInterface", + out_ifname); + json_object_int_add(json_ifp_out, "oVifI", + oif_vif_index); + json_object_int_add(json_ifp_out, "ttl", ttl); + json_object_string_add(json_ifp_out, "upTime", + mroute_uptime); + json_object_string_add(json_source, "flags", + state_str); + if (!json_oil) { + json_oil = json_object_new_object(); + json_object_object_add(json_source, + "oil", json_oil); + } + json_object_object_add(json_oil, out_ifname, + json_ifp_out); + } else { + proto[0] = '\0'; + if (c_oil->oif_flags[oif_vif_index] & + PIM_OIF_FLAG_PROTO_PIM) { + strlcpy(proto, "PIM", sizeof(proto)); + } + + if (c_oil->oif_flags[oif_vif_index] & + PIM_OIF_FLAG_PROTO_GM) { +#if PIM_IPV == 4 + strlcpy(proto, "IGMP", sizeof(proto)); +#else + strlcpy(proto, "MLD", sizeof(proto)); +#endif + } + + if (c_oil->oif_flags[oif_vif_index] & + PIM_OIF_FLAG_PROTO_VXLAN) { + strlcpy(proto, "VxLAN", sizeof(proto)); + } + + if (c_oil->oif_flags[oif_vif_index] & + PIM_OIF_FLAG_PROTO_STAR) { + strlcpy(proto, "STAR", sizeof(proto)); + } + + vty_out(vty, + "%-15pPAs %-15pPAs %-8s %-6s %-16s %-16s %-3d %8s\n", + oil_origin(c_oil), oil_mcastgrp(c_oil), + state_str, proto, in_ifname, out_ifname, + ttl, mroute_uptime); + + if (first) { + src_str[0] = '\0'; + grp_str[0] = '\0'; + in_ifname[0] = '\0'; + state_str[0] = '\0'; + mroute_uptime[0] = '\0'; + first = 0; + } + } + } + + if (!json && !found_oif) { + vty_out(vty, + "%-15pPAs %-15pPAs %-8s %-6s %-16s %-16s %-3d %8s\n", + oil_origin(c_oil), oil_mcastgrp(c_oil), + state_str, "none", in_ifname, "none", 0, + "--:--:--"); + } + } + + /* Print list of static routes */ + for (ALL_LIST_ELEMENTS_RO(pim->static_routes, node, s_route)) { + first = 1; + + if (!s_route->c_oil.installed) + continue; + + snprintfrr(grp_str, sizeof(grp_str), "%pPAs", &s_route->group); + snprintfrr(src_str, sizeof(src_str), "%pPAs", &s_route->source); + ifp_in = pim_if_find_by_vif_index(pim, s_route->iif); + found_oif = 0; + + if (ifp_in) + strlcpy(in_ifname, ifp_in->name, sizeof(in_ifname)); + else + strlcpy(in_ifname, "<iif?>", sizeof(in_ifname)); + + if (json) { + + /* Find the group, create it if it doesn't exist */ + json_object_object_get_ex(json, grp_str, &json_group); + + if (!json_group) { + json_group = json_object_new_object(); + json_object_object_add(json, grp_str, + json_group); + } + + /* Find the source nested under the group, create it if + * it doesn't exist + */ + json_object_object_get_ex(json_group, src_str, + &json_source); + + if (!json_source) { + json_source = json_object_new_object(); + json_object_object_add(json_group, src_str, + json_source); + } + + json_object_string_add(json_source, "iif", in_ifname); + json_oil = NULL; + } else { + strlcpy(proto, "STATIC", sizeof(proto)); + } + + for (oif_vif_index = 0; oif_vif_index < MAXVIFS; + ++oif_vif_index) { + struct interface *ifp_out; + char oif_uptime[10]; + int ttl; + + ttl = s_route->oif_ttls[oif_vif_index]; + if (ttl < 1) + continue; + + ifp_out = pim_if_find_by_vif_index(pim, oif_vif_index); + pim_time_uptime( + oif_uptime, sizeof(oif_uptime), + now - s_route->c_oil + .oif_creation[oif_vif_index]); + found_oif = 1; + + if (ifp_out) + strlcpy(out_ifname, ifp_out->name, + sizeof(out_ifname)); + else + strlcpy(out_ifname, "<oif?>", + sizeof(out_ifname)); + + if (json) { + json_ifp_out = json_object_new_object(); + json_object_string_add(json_ifp_out, "source", + src_str); + json_object_string_add(json_ifp_out, "group", + grp_str); + json_object_boolean_true_add(json_ifp_out, + "protocolStatic"); + json_object_string_add(json_ifp_out, + "inboundInterface", + in_ifname); + json_object_int_add( + json_ifp_out, "iVifI", + *oil_parent(&s_route->c_oil)); + json_object_string_add(json_ifp_out, + "outboundInterface", + out_ifname); + json_object_int_add(json_ifp_out, "oVifI", + oif_vif_index); + json_object_int_add(json_ifp_out, "ttl", ttl); + json_object_string_add(json_ifp_out, "upTime", + oif_uptime); + if (!json_oil) { + json_oil = json_object_new_object(); + json_object_object_add(json_source, + "oil", json_oil); + } + json_object_object_add(json_oil, out_ifname, + json_ifp_out); + } else { + vty_out(vty, + "%-15pPAs %-15pPAs %-8s %-6s %-16s %-16s %-3d %8s\n", + &s_route->source, &s_route->group, "-", + proto, in_ifname, out_ifname, ttl, + oif_uptime); + if (first && !fill) { + src_str[0] = '\0'; + grp_str[0] = '\0'; + in_ifname[0] = '\0'; + first = 0; + } + } + } + + if (!json && !found_oif) { + vty_out(vty, + "%-15pPAs %-15pPAs %-8s %-6s %-16s %-16s %-3d %8s\n", + &s_route->source, &s_route->group, "-", proto, + in_ifname, "none", 0, "--:--:--"); + } + } +} + +static void show_mroute_count_per_channel_oil(struct channel_oil *c_oil, + json_object *json, + struct vty *vty) +{ + json_object *json_group = NULL; + json_object *json_source = NULL; + + if (!c_oil->installed) + return; + + pim_mroute_update_counters(c_oil); + + if (json) { + char group_str[PIM_ADDRSTRLEN]; + char source_str[PIM_ADDRSTRLEN]; + + snprintfrr(group_str, sizeof(group_str), "%pPAs", + oil_mcastgrp(c_oil)); + snprintfrr(source_str, sizeof(source_str), "%pPAs", + oil_origin(c_oil)); + + json_object_object_get_ex(json, group_str, &json_group); + + if (!json_group) { + json_group = json_object_new_object(); + json_object_object_add(json, group_str, json_group); + } + + json_source = json_object_new_object(); + json_object_object_add(json_group, source_str, json_source); + json_object_int_add(json_source, "lastUsed", + c_oil->cc.lastused / 100); + json_object_int_add(json_source, "packets", c_oil->cc.pktcnt); + json_object_int_add(json_source, "bytes", c_oil->cc.bytecnt); + json_object_int_add(json_source, "wrongIf", c_oil->cc.wrong_if); + + } else { + vty_out(vty, "%-15pPAs %-15pPAs %-8llu %-7ld %-10ld %-7ld\n", + oil_origin(c_oil), oil_mcastgrp(c_oil), + c_oil->cc.lastused / 100, + c_oil->cc.pktcnt - c_oil->cc.origpktcnt, + c_oil->cc.bytecnt - c_oil->cc.origbytecnt, + c_oil->cc.wrong_if - c_oil->cc.origwrong_if); + } +} + +void show_mroute_count(struct pim_instance *pim, struct vty *vty, + json_object *json) +{ + struct listnode *node; + struct channel_oil *c_oil; + struct static_route *sr; + + if (!json) { + vty_out(vty, "\n"); + + vty_out(vty, + "Source Group LastUsed Packets Bytes WrongIf \n"); + } + + /* Print PIM and IGMP route counts */ + frr_each (rb_pim_oil, &pim->channel_oil_head, c_oil) + show_mroute_count_per_channel_oil(c_oil, json, vty); + + for (ALL_LIST_ELEMENTS_RO(pim->static_routes, node, sr)) + show_mroute_count_per_channel_oil(&sr->c_oil, json, vty); +} + +void show_mroute_summary(struct pim_instance *pim, struct vty *vty, + json_object *json) +{ + struct listnode *node; + struct channel_oil *c_oil; + struct static_route *s_route; + uint32_t starg_sw_mroute_cnt = 0; + uint32_t sg_sw_mroute_cnt = 0; + uint32_t starg_hw_mroute_cnt = 0; + uint32_t sg_hw_mroute_cnt = 0; + json_object *json_starg = NULL; + json_object *json_sg = NULL; + + if (!json) + vty_out(vty, "Mroute Type Installed/Total\n"); + + frr_each (rb_pim_oil, &pim->channel_oil_head, c_oil) { + if (!c_oil->installed) { + if (pim_addr_is_any(*oil_origin(c_oil))) + starg_sw_mroute_cnt++; + else + sg_sw_mroute_cnt++; + } else { + if (pim_addr_is_any(*oil_origin(c_oil))) + starg_hw_mroute_cnt++; + else + sg_hw_mroute_cnt++; + } + } + + for (ALL_LIST_ELEMENTS_RO(pim->static_routes, node, s_route)) { + if (!s_route->c_oil.installed) { + if (pim_addr_is_any(*oil_origin(&s_route->c_oil))) + starg_sw_mroute_cnt++; + else + sg_sw_mroute_cnt++; + } else { + if (pim_addr_is_any(*oil_origin(&s_route->c_oil))) + starg_hw_mroute_cnt++; + else + sg_hw_mroute_cnt++; + } + } + + if (!json) { + vty_out(vty, "%-20s %u/%u\n", "(*, G)", starg_hw_mroute_cnt, + starg_sw_mroute_cnt + starg_hw_mroute_cnt); + vty_out(vty, "%-20s %u/%u\n", "(S, G)", sg_hw_mroute_cnt, + sg_sw_mroute_cnt + sg_hw_mroute_cnt); + vty_out(vty, "------\n"); + vty_out(vty, "%-20s %u/%u\n", "Total", + (starg_hw_mroute_cnt + sg_hw_mroute_cnt), + (starg_sw_mroute_cnt + starg_hw_mroute_cnt + + sg_sw_mroute_cnt + sg_hw_mroute_cnt)); + } else { + /* (*,G) route details */ + json_starg = json_object_new_object(); + json_object_object_add(json, "wildcardGroup", json_starg); + + json_object_int_add(json_starg, "installed", + starg_hw_mroute_cnt); + json_object_int_add(json_starg, "total", + starg_sw_mroute_cnt + starg_hw_mroute_cnt); + + /* (S, G) route details */ + json_sg = json_object_new_object(); + json_object_object_add(json, "sourceGroup", json_sg); + + json_object_int_add(json_sg, "installed", sg_hw_mroute_cnt); + json_object_int_add(json_sg, "total", + sg_sw_mroute_cnt + sg_hw_mroute_cnt); + + json_object_int_add(json, "totalNumOfInstalledMroutes", + starg_hw_mroute_cnt + sg_hw_mroute_cnt); + json_object_int_add(json, "totalNumOfMroutes", + starg_sw_mroute_cnt + starg_hw_mroute_cnt + + sg_sw_mroute_cnt + + sg_hw_mroute_cnt); + } +} diff --git a/pimd/pim_cmd_common.h b/pimd/pim_cmd_common.h index c766d134b1..8753d1444e 100644 --- a/pimd/pim_cmd_common.h +++ b/pimd/pim_cmd_common.h @@ -104,13 +104,23 @@ int gm_process_last_member_query_interval_cmd(struct vty *vty, int gm_process_no_last_member_query_interval_cmd(struct vty *vty); int pim_process_ssmpingd_cmd(struct vty *vty, enum nb_operation operation, const char *src_str); +void pim_cmd_show_ip_multicast_helper(struct pim_instance *pim, + struct vty *vty); +void show_multicast_interfaces(struct pim_instance *pim, struct vty *vty, + json_object *json); +void show_mroute(struct pim_instance *pim, struct vty *vty, pim_sgaddr *sg, + bool fill, json_object *json); +void show_mroute_count(struct pim_instance *pim, struct vty *vty, + json_object *json); +void show_mroute_summary(struct pim_instance *pim, struct vty *vty, + json_object *json); /* * Special Macro to allow us to get the correct pim_instance; */ -#define PIM_DECLVAR_CONTEXT(A, B) \ - struct vrf *A = VTY_GET_CONTEXT(vrf); \ - struct pim_instance *B = \ - (vrf) ? vrf->info : pim_get_pim_instance(VRF_DEFAULT); \ - vrf = (vrf) ? vrf : pim->vrf +#define PIM_DECLVAR_CONTEXT_VRF(vrfptr, pimptr) \ + VTY_DECLVAR_CONTEXT_VRF(vrfptr); \ + struct pim_instance *pimptr = vrfptr->info; \ + MACRO_REQUIRE_SEMICOLON() /* end */ + #endif /* PIM_CMD_COMMON_H */ diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c index 43d05dfe9c..b7f483dbc0 100644 --- a/pimd/pim_mroute.c +++ b/pimd/pim_mroute.c @@ -1047,14 +1047,14 @@ void pim_mroute_update_counters(struct channel_oil *c_oil) memset(&sgreq, 0, sizeof(sgreq)); + pim_zlookup_sg_statistics(c_oil); + #if PIM_IPV == 4 sgreq.src = *oil_origin(c_oil); sgreq.grp = *oil_mcastgrp(c_oil); - pim_zlookup_sg_statistics(c_oil); #else sgreq.src = c_oil->oil.mf6cc_origin; sgreq.grp = c_oil->oil.mf6cc_mcastgrp; - /* TODO Zlookup_sg_statistics for V6 to be added */ #endif if (ioctl(pim->mroute_socket, PIM_SIOCGETSGCNT, &sgreq)) { pim_sgaddr sg; diff --git a/pimd/pim_zlookup.c b/pimd/pim_zlookup.c index 9e8e9cac39..a9553089c9 100644 --- a/pimd/pim_zlookup.c +++ b/pimd/pim_zlookup.c @@ -497,7 +497,6 @@ void pim_zlookup_show_ip_multicast(struct vty *vty) } } -#if PIM_IPV == 4 int pim_zlookup_sg_statistics(struct channel_oil *c_oil) { struct stream *s = zlookup->obuf; @@ -506,17 +505,16 @@ int pim_zlookup_sg_statistics(struct channel_oil *c_oil) pim_sgaddr sg; int count = 0; int ret; + pim_sgaddr more = {}; struct interface *ifp = - pim_if_find_by_vif_index(c_oil->pim, c_oil->oil.mfcc_parent); + pim_if_find_by_vif_index(c_oil->pim, *oil_parent(c_oil)); if (PIM_DEBUG_ZEBRA) { - pim_sgaddr more; - - more.src = c_oil->oil.mfcc_origin; - more.grp = c_oil->oil.mfcc_mcastgrp; - zlog_debug("Sending Request for New Channel Oil Information%pSG VIIF %d(%s)", - &more, c_oil->oil.mfcc_parent, - c_oil->pim->vrf->name); + more.src = *oil_origin(c_oil); + more.grp = *oil_mcastgrp(c_oil); + zlog_debug( + "Sending Request for New Channel Oil Information%pSG VIIF %d(%s)", + &more, *oil_parent(c_oil), c_oil->pim->vrf->name); } if (!ifp) @@ -525,8 +523,9 @@ int pim_zlookup_sg_statistics(struct channel_oil *c_oil) stream_reset(s); zclient_create_header(s, ZEBRA_IPMR_ROUTE_STATS, c_oil->pim->vrf->vrf_id); - stream_put_in_addr(s, &c_oil->oil.mfcc_origin); - stream_put_in_addr(s, &c_oil->oil.mfcc_mcastgrp); + stream_putl(s, PIM_AF); + stream_write(s, oil_origin(c_oil), sizeof(pim_addr)); + stream_write(s, oil_mcastgrp(c_oil), sizeof(pim_addr)); stream_putl(s, ifp->ifindex); stream_putw_at(s, 0, stream_get_endp(s)); @@ -560,20 +559,17 @@ int pim_zlookup_sg_statistics(struct channel_oil *c_oil) } } - sg.src.s_addr = stream_get_ipv4(s); - sg.grp.s_addr = stream_get_ipv4(s); - if (sg.src.s_addr != c_oil->oil.mfcc_origin.s_addr - || sg.grp.s_addr != c_oil->oil.mfcc_mcastgrp.s_addr) { - if (PIM_DEBUG_ZEBRA) { - pim_sgaddr more; + stream_get(&sg.src, s, sizeof(pim_addr)); + stream_get(&sg.grp, s, sizeof(pim_addr)); - more.src = c_oil->oil.mfcc_origin; - more.grp = c_oil->oil.mfcc_mcastgrp; + more.src = *oil_origin(c_oil); + more.grp = *oil_mcastgrp(c_oil); + if (pim_sgaddr_cmp(sg, more)) { + if (PIM_DEBUG_ZEBRA) flog_err( EC_LIB_ZAPI_MISSMATCH, "%s: Received wrong %pSG(%s) information requested", __func__, &more, c_oil->pim->vrf->name); - } zclient_lookup_failed(zlookup); return -3; } @@ -586,4 +582,3 @@ int pim_zlookup_sg_statistics(struct channel_oil *c_oil) return 0; } -#endif diff --git a/tests/bgpd/test_aspath.c b/tests/bgpd/test_aspath.c index 7288dc0869..3cc9a63072 100644 --- a/tests/bgpd/test_aspath.c +++ b/tests/bgpd/test_aspath.c @@ -40,7 +40,7 @@ #define FAILED VT100_RED "failed" VT100_RESET /* need these to link in libbgp */ -struct zebra_privs_t *bgpd_privs = NULL; +struct zebra_privs_t bgpd_privs = {}; struct thread_master *master = NULL; static int failed = 0; diff --git a/tests/bgpd/test_capability.c b/tests/bgpd/test_capability.c index 3568411387..44d15d6014 100644 --- a/tests/bgpd/test_capability.c +++ b/tests/bgpd/test_capability.c @@ -44,7 +44,7 @@ #define OPT_PARAM 2 /* need these to link in libbgp */ -struct zebra_privs_t *bgpd_privs = NULL; +struct zebra_privs_t bgpd_privs = {}; struct thread_master *master = NULL; static int failed = 0; diff --git a/tests/bgpd/test_ecommunity.c b/tests/bgpd/test_ecommunity.c index 317bfff8ab..7147e3faf3 100644 --- a/tests/bgpd/test_ecommunity.c +++ b/tests/bgpd/test_ecommunity.c @@ -30,7 +30,7 @@ #include "bgpd/bgp_ecommunity.h" /* need these to link in libbgp */ -struct zebra_privs_t *bgpd_privs = NULL; +struct zebra_privs_t bgpd_privs = {}; struct thread_master *master = NULL; static int failed = 0; diff --git a/tests/bgpd/test_mp_attr.c b/tests/bgpd/test_mp_attr.c index 909930d6bc..c5ce5d3cd2 100644 --- a/tests/bgpd/test_mp_attr.c +++ b/tests/bgpd/test_mp_attr.c @@ -49,7 +49,7 @@ #define OPT_PARAM 2 /* need these to link in libbgp */ -struct zebra_privs_t *bgpd_privs = NULL; +struct zebra_privs_t bgpd_privs = {}; struct thread_master *master = NULL; static int failed = 0; diff --git a/tests/bgpd/test_packet.c b/tests/bgpd/test_packet.c index 27afa6a121..2ce8b561bb 100644 --- a/tests/bgpd/test_packet.c +++ b/tests/bgpd/test_packet.c @@ -37,7 +37,7 @@ #include "bgpd/bgp_network.h" /* need these to link in libbgp */ -struct zebra_privs_t *bgpd_privs = NULL; +struct zebra_privs_t bgpd_privs = {}; struct thread_master *master = NULL; static struct bgp *bgp; diff --git a/tests/topotests/lib/pim.py b/tests/topotests/lib/pim.py index b4a6358389..1423f3fecc 100644 --- a/tests/topotests/lib/pim.py +++ b/tests/topotests/lib/pim.py @@ -960,7 +960,7 @@ def verify_join_state_and_timer( @retry(retry_timeout=120, diag_pct=0) -def verify_ip_mroutes( +def verify_mroutes( tgen, dut, src_address, @@ -973,7 +973,7 @@ def verify_ip_mroutes( ): """ Verify ip mroutes and make sure (*, G)/(S, G) is present in mroutes - by running "show ip pim upstream" cli + by running "show ip/ipv6 mroute" cli Parameters ---------- @@ -991,7 +991,7 @@ def verify_ip_mroutes( ----- dut = "r1" group_address = "225.1.1.1" - result = verify_ip_mroutes(tgen, dut, src_address, group_address) + result = verify_mroutes(tgen, dut, src_address, group_address) Returns ------- @@ -1621,10 +1621,10 @@ def verify_pim_interface( return True -def clear_ip_pim_interface_traffic(tgen, topo): +def clear_pim_interface_traffic(tgen, topo): """ - Clear ip pim interface traffice by running - "clear ip pim interface traffic" cli + Clear ip/ipv6 pim interface traffice by running + "clear ip/ipv6 pim interface traffic" cli Parameters ---------- @@ -1632,7 +1632,7 @@ def clear_ip_pim_interface_traffic(tgen, topo): Usage ----- - result = clear_ip_pim_interface_traffic(tgen, topo) + result = clear_pim_interface_traffic(tgen, topo) Returns ------- @@ -1655,10 +1655,10 @@ def clear_ip_pim_interface_traffic(tgen, topo): return True -def clear_ip_pim_interfaces(tgen, dut): +def clear_pim_interfaces(tgen, dut): """ - Clear ip pim interface by running - "clear ip pim interfaces" cli + Clear ip/ipv6 pim interface by running + "clear ip/ipv6 pim interfaces" cli Parameters ---------- @@ -1667,7 +1667,7 @@ def clear_ip_pim_interfaces(tgen, dut): Usage ----- - result = clear_ip_pim_interfaces(tgen, dut) + result = clear_pim_interfaces(tgen, dut) Returns ------- @@ -1746,10 +1746,10 @@ def clear_ip_pim_interfaces(tgen, dut): return True -def clear_ip_igmp_interfaces(tgen, dut): +def clear_igmp_interfaces(tgen, dut): """ - Clear ip igmp interfaces by running - "clear ip igmp interfaces" cli + Clear ip/ipv6 igmp interfaces by running + "clear ip/ipv6 igmp interfaces" cli Parameters ---------- @@ -1759,7 +1759,7 @@ def clear_ip_igmp_interfaces(tgen, dut): Usage ----- dut = "r1" - result = clear_ip_igmp_interfaces(tgen, dut) + result = clear_igmp_interfaces(tgen, dut) Returns ------- errormsg(str) or True @@ -1826,9 +1826,9 @@ def clear_ip_igmp_interfaces(tgen, dut): @retry(retry_timeout=20) -def clear_ip_mroute_verify(tgen, dut, expected=True): +def clear_mroute_verify(tgen, dut, expected=True): """ - Clear ip mroute by running "clear ip mroute" cli and verify + Clear ip/ipv6 mroute by running "clear ip/ipv6 mroute" cli and verify mroutes are up again after mroute clear Parameters @@ -1840,7 +1840,7 @@ def clear_ip_mroute_verify(tgen, dut, expected=True): Usage ----- - result = clear_ip_mroute_verify(tgen, dut) + result = clear_mroute_verify(tgen, dut) Returns ------- @@ -1926,9 +1926,9 @@ def clear_ip_mroute_verify(tgen, dut, expected=True): return True -def clear_ip_mroute(tgen, dut=None): +def clear_mroute(tgen, dut=None): """ - Clear ip mroute by running "clear ip mroute" cli + Clear ip/ipv6 mroute by running "clear ip mroute" cli Parameters ---------- @@ -1937,7 +1937,7 @@ def clear_ip_mroute(tgen, dut=None): Usage ----- - clear_ip_mroute(tgen, dut) + clear_mroute(tgen, dut) """ logger.debug("Entering lib API: {}".format(sys._getframe().f_code.co_name)) @@ -2352,12 +2352,12 @@ def verify_pim_bsr(tgen, topo, dut, bsr_ip, expected=True): @retry(retry_timeout=60, diag_pct=0) -def verify_ip_pim_upstream_rpf( +def verify_pim_upstream_rpf( tgen, topo, dut, interface, group_addresses, rp=None, expected=True ): """ - Verify IP PIM upstream rpf, config is verified - using "show ip pim neighbor" cli + Verify IP/IPv6 PIM upstream rpf, config is verified + using "show ip/ipv6 pim neighbor" cli Parameters ---------- @@ -2372,7 +2372,7 @@ def verify_ip_pim_upstream_rpf( Usage ----- - result = verify_ip_pim_upstream_rpf(gen, topo, dut, interface, + result = verify_pim_upstream_rpf(gen, topo, dut, interface, group_addresses, rp=None) Returns @@ -2552,11 +2552,11 @@ def enable_disable_pim_bsm(tgen, router, intf, enable=True): @retry(retry_timeout=60, diag_pct=0) -def verify_ip_pim_join( +def verify_pim_join( tgen, topo, dut, interface, group_addresses, src_address=None, expected=True ): """ - Verify ip pim join by running "show ip pim join" cli + Verify ip/ipv6 pim join by running "show ip/ipv6 pim join" cli Parameters ---------- @@ -2573,7 +2573,7 @@ def verify_ip_pim_join( dut = "r1" interface = "r1-r0-eth0" group_address = "225.1.1.1" - result = verify_ip_pim_join(tgen, dut, star, group_address, interface) + result = verify_pim_join(tgen, dut, star, group_address, interface) Returns ------- diff --git a/tests/topotests/multicast_pim_bsm_topo1/test_mcast_pim_bsmp_01.py b/tests/topotests/multicast_pim_bsm_topo1/test_mcast_pim_bsmp_01.py index 1762535cee..c0ea1b5561 100644 --- a/tests/topotests/multicast_pim_bsm_topo1/test_mcast_pim_bsmp_01.py +++ b/tests/topotests/multicast_pim_bsm_topo1/test_mcast_pim_bsmp_01.py @@ -94,16 +94,16 @@ from lib.pim import ( find_rp_from_bsrp_info, verify_pim_grp_rp_source, verify_pim_bsr, - verify_ip_mroutes, + verify_mroutes, verify_join_state_and_timer, verify_pim_state, verify_upstream_iif, verify_igmp_groups, - verify_ip_pim_upstream_rpf, + verify_pim_upstream_rpf, enable_disable_pim_unicast_bsm, enable_disable_pim_bsm, - clear_ip_mroute, - clear_ip_pim_interface_traffic, + clear_mroute, + clear_pim_interface_traffic, get_pim_interface_traffic, McastTesterHelper, ) @@ -373,9 +373,9 @@ def test_BSR_higher_prefer_ip_p0(request): pytest.skip(tgen.errors) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) reset_config_on_routers(tgen) step("pre-configure BSM packet") @@ -579,9 +579,9 @@ def test_BSR_CRP_with_blackhole_address_p1(request): pytest.skip(tgen.errors) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) reset_config_on_routers(tgen) step("pre-configure BSM packet") @@ -756,9 +756,9 @@ def test_new_router_fwd_p0(request): pytest.skip(tgen.errors) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) reset_config_on_routers(tgen) @@ -800,7 +800,7 @@ def test_new_router_fwd_p0(request): oil = "l1-r1-eth1" step("Verify mroute populated on l1") - result = verify_ip_mroutes(tgen, "l1", src_addr, GROUP_ADDRESS, iif, oil) + result = verify_mroutes(tgen, "l1", src_addr, GROUP_ADDRESS, iif, oil) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) # Reload i1 and l1 @@ -854,7 +854,7 @@ def test_new_router_fwd_p0(request): # Verify ip mroute populated again step("Verify mroute again on l1 (lhr)") - result = verify_ip_mroutes(tgen, "l1", src_addr, GROUP_ADDRESS, iif, oil) + result = verify_mroutes(tgen, "l1", src_addr, GROUP_ADDRESS, iif, oil) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("clear BSM database before moving to next case") @@ -897,9 +897,9 @@ def test_int_bsm_config_p1(request): pytest.skip(tgen.errors) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) reset_config_on_routers(tgen) @@ -937,7 +937,7 @@ def test_int_bsm_config_p1(request): src_addr = "*" oil = "i1-l1-eth1" - result = verify_ip_mroutes(tgen, "i1", src_addr, GROUP_ADDRESS, iif, oil) + result = verify_mroutes(tgen, "i1", src_addr, GROUP_ADDRESS, iif, oil) assert result is True, "Testcase {}:Failed \n Error: {}".format(tc_name, result) # wait till bsm rp age out @@ -946,7 +946,7 @@ def test_int_bsm_config_p1(request): # check if mroute uninstalled because of rp age out step("check if mroute uninstalled because of rp age out in i1") - result = verify_ip_mroutes( + result = verify_mroutes( tgen, "i1", src_addr, GROUP_ADDRESS, iif, oil, expected=False ) assert ( @@ -981,7 +981,7 @@ def test_int_bsm_config_p1(request): # check if mroute still not installed because of rp not available step("check if mroute still not installed because of rp not available") - result = verify_ip_mroutes( + result = verify_mroutes( tgen, "i1", src_addr, GROUP_ADDRESS, iif, oil, expected=False ) assert result is not True, ( @@ -1006,7 +1006,7 @@ def test_int_bsm_config_p1(request): # verify ip mroute populated step("Verify ip mroute") - result = verify_ip_mroutes(tgen, "i1", src_addr, GROUP_ADDRESS, iif, oil) + result = verify_mroutes(tgen, "i1", src_addr, GROUP_ADDRESS, iif, oil) assert result is True, "Testcase {}:Failed \n Error: {}".format(tc_name, result) # Shut/No shut the bsm rpf interface and check mroute on lhr(l1) @@ -1018,7 +1018,7 @@ def test_int_bsm_config_p1(request): iif = "l1-i1-eth0" oil = "l1-r1-eth1" - result = verify_ip_mroutes(tgen, "l1", src_addr, GROUP_ADDRESS, iif, oil) + result = verify_mroutes(tgen, "l1", src_addr, GROUP_ADDRESS, iif, oil) assert result is True, "Testcase {}:Failed \n Error: {}".format(tc_name, result) step("clear BSM database before moving to next case") @@ -1058,9 +1058,9 @@ def test_static_rp_override_p1(request): pytest.skip(tgen.errors) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) reset_config_on_routers(tgen) @@ -1111,7 +1111,7 @@ def test_static_rp_override_p1(request): iif = "l1-i1-eth0" # Verify upstream rpf for 225.1.1.1 is chosen as rp1 step("Verify upstream rpf for 225.1.1.1 is chosen as bsrp") - result = verify_ip_pim_upstream_rpf(tgen, topo, dut, iif, GROUP_ADDRESS, rp[group]) + result = verify_pim_upstream_rpf(tgen, topo, dut, iif, GROUP_ADDRESS, rp[group]) assert result is True, "Testcase {}:Failed \n Error: {}".format(tc_name, result) # Configure a static rp for the group 225.1.1.1/32 @@ -1139,7 +1139,7 @@ def test_static_rp_override_p1(request): # Verify if upstream also reflects the static rp step("Verify upstream rpf for 225.1.1.1 is chosen as static in l1") - result = verify_ip_pim_upstream_rpf(tgen, topo, dut, iif, GROUP_ADDRESS, static_rp) + result = verify_pim_upstream_rpf(tgen, topo, dut, iif, GROUP_ADDRESS, static_rp) assert result is True, "Testcase {}:Failed \n Error: {}".format(tc_name, result) # delete static rp for the group 225.1.1.1/32 @@ -1167,7 +1167,7 @@ def test_static_rp_override_p1(request): # Verify upstream rpf for 225.1.1.1 is chosen as bsrp step("Verify upstream rpf for 225.1.1.1 is chosen as bsrp in l1") - result = verify_ip_pim_upstream_rpf(tgen, topo, dut, iif, GROUP_ADDRESS, rp[group]) + result = verify_pim_upstream_rpf(tgen, topo, dut, iif, GROUP_ADDRESS, rp[group]) assert result is True, "Testcase {}:Failed \n Error: {}".format(tc_name, result) step("clear BSM database before moving to next case") @@ -1209,9 +1209,9 @@ def test_bsmp_stress_add_del_restart_p2(request): pytest.skip(tgen.errors) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) reset_config_on_routers(tgen) @@ -1339,7 +1339,7 @@ def test_bsmp_stress_add_del_restart_p2(request): iif = "l1-i1-eth0" src_addr = "*" oil = "l1-r1-eth1" - result = verify_ip_mroutes(tgen, "l1", src_addr, GROUP_ADDRESS, iif, oil) + result = verify_mroutes(tgen, "l1", src_addr, GROUP_ADDRESS, iif, oil) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) write_test_footer(tc_name) @@ -1377,9 +1377,9 @@ def test_BSM_timeout_p0(request): pytest.skip(tgen.errors) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) result = pre_config_to_bsm( tgen, topo, tc_name, "b1", "s1", "r1", "f1", "i1", "l1", "packet1" @@ -1415,7 +1415,7 @@ def test_BSM_timeout_p0(request): iif = "l1-i1-eth0" src_addr = "*" oil = "l1-r1-eth1" - result = verify_ip_mroutes(tgen, dut, src_addr, GROUP_ADDRESS, iif, oil) + result = verify_mroutes(tgen, dut, src_addr, GROUP_ADDRESS, iif, oil) assert result is True, "Testcase {}:Failed \n Error: {}".format(tc_name, result) # Verify join state and join timer @@ -1485,7 +1485,7 @@ def test_BSM_timeout_p0(request): # Verify ip mroute is not installed step("Verify mroute not installed in l1") - result = verify_ip_mroutes( + result = verify_mroutes( tgen, dut, src_addr, GROUP_ADDRESS, iif, oil, expected=False ) assert ( @@ -1534,9 +1534,9 @@ def test_iif_join_state_p0(request): pytest.skip(tgen.errors) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) reset_config_on_routers(tgen) @@ -1605,7 +1605,7 @@ def test_iif_join_state_p0(request): # Verify ip mroute src_addr = "*" step("Verify ip mroute in l1") - result = verify_ip_mroutes(tgen, dut, src_addr, GROUP_ADDRESS, iif, oil) + result = verify_mroutes(tgen, dut, src_addr, GROUP_ADDRESS, iif, oil) assert result is True, "Testcase {}:Failed \n Error: {}".format(tc_name, result) # Make RP unreachanble in LHR @@ -1642,7 +1642,7 @@ def test_iif_join_state_p0(request): # Verify mroute not installed step("Verify mroute not installed") - result = verify_ip_mroutes( + result = verify_mroutes( tgen, dut, src_addr, GROUP_ADDRESS, iif, oil, expected=False ) assert ( @@ -1668,7 +1668,7 @@ def test_iif_join_state_p0(request): # Verify that (*,G) installed in mroute again iif = "l1-i1-eth0" - result = verify_ip_mroutes(tgen, dut, src_addr, GROUP_ADDRESS, iif, oil) + result = verify_mroutes(tgen, dut, src_addr, GROUP_ADDRESS, iif, oil) assert result is True, "Testcase {}:Failed \n Error: {}".format(tc_name, result) step("clear BSM database before moving to next case") diff --git a/tests/topotests/multicast_pim_bsm_topo2/test_mcast_pim_bsmp_02.py b/tests/topotests/multicast_pim_bsm_topo2/test_mcast_pim_bsmp_02.py index 31cd8f9858..9f771b8a2b 100644 --- a/tests/topotests/multicast_pim_bsm_topo2/test_mcast_pim_bsmp_02.py +++ b/tests/topotests/multicast_pim_bsm_topo2/test_mcast_pim_bsmp_02.py @@ -77,14 +77,14 @@ from lib.pim import ( find_rp_from_bsrp_info, verify_pim_grp_rp_source, verify_pim_bsr, - verify_ip_mroutes, + verify_mroutes, verify_join_state_and_timer, verify_pim_state, verify_upstream_iif, verify_igmp_groups, - verify_ip_pim_upstream_rpf, - clear_ip_mroute, - clear_ip_pim_interface_traffic, + verify_pim_upstream_rpf, + clear_mroute, + clear_pim_interface_traffic, McastTesterHelper, ) from lib.topolog import logger @@ -331,9 +331,9 @@ def test_starg_mroute_p0(request): pytest.skip(tgen.errors) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) reset_config_on_routers(tgen) @@ -402,7 +402,7 @@ def test_starg_mroute_p0(request): # Verify ip mroute step("Verify ip mroute in l1") src_addr = "*" - result = verify_ip_mroutes(tgen, dut, src_addr, GROUP_ADDRESS, iif, oil) + result = verify_mroutes(tgen, dut, src_addr, GROUP_ADDRESS, iif, oil) assert result is True, "Testcase {}:Failed \n Error: {}".format(tc_name, result) # Remove the group rp mapping and send bsm @@ -426,7 +426,7 @@ def test_starg_mroute_p0(request): # Verify mroute not installed step("Verify mroute not installed in l1") - result = verify_ip_mroutes( + result = verify_mroutes( tgen, dut, src_addr, GROUP_ADDRESS, iif, oil, retry_timeout=20, expected=False ) assert ( @@ -442,7 +442,7 @@ def test_starg_mroute_p0(request): # Verify that (*,G) installed in mroute again iif = "l1-i1-eth0" - result = verify_ip_mroutes(tgen, dut, src_addr, GROUP_ADDRESS, iif, oil) + result = verify_mroutes(tgen, dut, src_addr, GROUP_ADDRESS, iif, oil) assert result is True, "Testcase {}:Failed \n Error: {}".format(tc_name, result) step("clear BSM database before moving to next case") @@ -483,9 +483,9 @@ def test_overlapping_group_p0(request): pytest.skip(tgen.errors) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) reset_config_on_routers(tgen) @@ -533,7 +533,7 @@ def test_overlapping_group_p0(request): iif = "l1-i1-eth0" # Verify upstream rpf for 225.1.1.1 is chosen as rp1 step("Verify upstream rpf for 225.1.1.1 is chosen as rp1 in l1") - result = verify_ip_pim_upstream_rpf(tgen, topo, dut, iif, GROUP_ADDRESS, rp1) + result = verify_pim_upstream_rpf(tgen, topo, dut, iif, GROUP_ADDRESS, rp1) assert result is True, "Testcase {}:Failed \n Error: {}".format(tc_name, result) # Send BSR packet from b1 with rp for 225.1.1.1/32 removed @@ -543,7 +543,7 @@ def test_overlapping_group_p0(request): # Verify upstream rpf for 225.1.1.1 is chosen as rp1 step("Verify upstream rpf for 225.1.1.1 is chosen as rp2 in l1") - result = verify_ip_pim_upstream_rpf(tgen, topo, dut, iif, GROUP_ADDRESS, rp2) + result = verify_pim_upstream_rpf(tgen, topo, dut, iif, GROUP_ADDRESS, rp2) assert result is True, "Testcase {}:Failed \n Error: {}".format(tc_name, result) # Verify IIF/OIL in pim state @@ -589,9 +589,9 @@ def test_RP_priority_p0(request): pytest.skip(tgen.errors) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) reset_config_on_routers(tgen) @@ -716,9 +716,9 @@ def test_BSR_election_p0(request): write_test_header(tc_name) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) # Don"t run this test if we have any failure. if tgen.routers_have_failure(): @@ -836,9 +836,9 @@ def test_RP_hash_p0(request): pytest.skip(tgen.errors) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) reset_config_on_routers(tgen) @@ -929,9 +929,9 @@ def test_BSM_fragmentation_p1(request): pytest.skip(tgen.errors) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) reset_config_on_routers(tgen) @@ -1047,9 +1047,9 @@ def test_RP_with_all_ip_octet_p1(request): pytest.skip(tgen.errors) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("pre-configure BSM packet") result = pre_config_to_bsm( diff --git a/tests/topotests/multicast_pim_dr_nondr_test/test_pim_dr_nondr_with_ospf_topo2.py b/tests/topotests/multicast_pim_dr_nondr_test/test_pim_dr_nondr_with_ospf_topo2.py index 1adc034206..cba37bfc29 100755 --- a/tests/topotests/multicast_pim_dr_nondr_test/test_pim_dr_nondr_with_ospf_topo2.py +++ b/tests/topotests/multicast_pim_dr_nondr_test/test_pim_dr_nondr_with_ospf_topo2.py @@ -69,15 +69,15 @@ from lib.common_config import ( from lib.pim import ( create_pim_config, create_igmp_config, - verify_ip_mroutes, - clear_ip_mroute, - clear_ip_pim_interface_traffic, + verify_mroutes, + clear_mroute, + clear_pim_interface_traffic, verify_pim_config, verify_upstream_iif, verify_multicast_traffic, verify_multicast_flag_state, verify_igmp_groups, - McastTesterHelper + McastTesterHelper, ) from lib.topolog import logger from lib.topojson import build_config_from_json @@ -646,10 +646,10 @@ def test_configuring_igmp_local_join_on_reciever_dr_non_dr_nodes_p1(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) check_router_status(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) # Don"t run this test if we have any failure. if tgen.routers_have_failure(): @@ -878,7 +878,7 @@ def test_configuring_igmp_local_join_on_reciever_dr_non_dr_nodes_p1(request): ] for data in input_dict_r2: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -932,7 +932,7 @@ def test_configuring_igmp_local_join_on_reciever_dr_non_dr_nodes_p1(request): ) for data in input_dict_r2: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -942,7 +942,7 @@ def test_configuring_igmp_local_join_on_reciever_dr_non_dr_nodes_p1(request): ) assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -951,9 +951,10 @@ def test_configuring_igmp_local_join_on_reciever_dr_non_dr_nodes_p1(request): data["oil"], expected=False, ) - assert result is not True, ( - "Testcase {} : Failed \n " - "mroutes are still present \n Error: {}".format(tc_name, result) + assert ( + result is not True + ), "Testcase {} : Failed \n " "mroutes are still present \n Error: {}".format( + tc_name, result ) step("Configure local join on R2 for group range (227.1.1.1)") @@ -1044,7 +1045,7 @@ def test_configuring_igmp_local_join_on_reciever_dr_non_dr_nodes_p1(request): ] for data in input_dict_r1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1053,9 +1054,10 @@ def test_configuring_igmp_local_join_on_reciever_dr_non_dr_nodes_p1(request): data["oil"], expected=False, ) - assert result is not True, ( - "Testcase {} : Failed \n " - "Mroutes are still present \n Error: {}".format(tc_name, result) + assert ( + result is not True + ), "Testcase {} : Failed \n " "mroutes are still present \n Error: {}".format( + tc_name, result ) step("Remove local join from DR and Non DR node") @@ -1098,7 +1100,7 @@ def test_configuring_igmp_local_join_on_reciever_dr_non_dr_nodes_p1(request): ) for data in input_dict_r1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1107,13 +1109,14 @@ def test_configuring_igmp_local_join_on_reciever_dr_non_dr_nodes_p1(request): data["oil"], expected=False, ) - assert result is not True, ( - "Testcase {} : Failed \n " - "Mroutes are still present \n Error: {}".format(tc_name, result) + assert ( + result is not True + ), "Testcase {} : Failed \n " "mroutes are still present \n Error: {}".format( + tc_name, result ) for data in input_dict_r2: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1122,9 +1125,10 @@ def test_configuring_igmp_local_join_on_reciever_dr_non_dr_nodes_p1(request): data["oil"], expected=False, ) - assert result is not True, ( - "Testcase {} : Failed \n " - "Mroutes are still present \n Error: {}".format(tc_name, result) + assert ( + result is not True + ), "Testcase {} : Failed \n " "mroutes are still present \n Error: {}".format( + tc_name, result ) write_test_footer(tc_name) diff --git a/tests/topotests/multicast_pim_dr_nondr_test/test_pim_dr_nondr_with_static_routes_topo1.py b/tests/topotests/multicast_pim_dr_nondr_test/test_pim_dr_nondr_with_static_routes_topo1.py index aa7448f354..afc91dd7ac 100755 --- a/tests/topotests/multicast_pim_dr_nondr_test/test_pim_dr_nondr_with_static_routes_topo1.py +++ b/tests/topotests/multicast_pim_dr_nondr_test/test_pim_dr_nondr_with_static_routes_topo1.py @@ -67,9 +67,9 @@ from lib.common_config import ( from lib.pim import ( create_pim_config, create_igmp_config, - verify_ip_mroutes, - clear_ip_mroute, - clear_ip_pim_interface_traffic, + verify_mroutes, + clear_mroute, + clear_pim_interface_traffic, verify_pim_config, verify_upstream_iif, verify_multicast_flag_state, @@ -218,6 +218,7 @@ def teardown_module(): ) logger.info("=" * 40) + ##################################################### # # Local APIs @@ -693,10 +694,10 @@ def test_pim_source_dr_functionality_while_rebooting_dr_non_dr_nodes_p1(request) # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) check_router_status(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) # Don"t run this test if we have any failure. if tgen.routers_have_failure(): @@ -752,7 +753,7 @@ def test_pim_source_dr_functionality_while_rebooting_dr_non_dr_nodes_p1(request) ] for data in input_dict_r1_r2: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -799,7 +800,7 @@ def test_pim_source_dr_functionality_while_rebooting_dr_non_dr_nodes_p1(request) step("R1 has mroute with none OIL and upstream with Not Join") for data in input_dict_r1_r2: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -849,7 +850,7 @@ def test_pim_source_dr_functionality_while_rebooting_dr_non_dr_nodes_p1(request) for data in input_dict_r1_r2: if data["dut"] == "r1": - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -883,7 +884,7 @@ def test_pim_source_dr_functionality_while_rebooting_dr_non_dr_nodes_p1(request) ) for data in input_dict_r1_r2: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -892,9 +893,10 @@ def test_pim_source_dr_functionality_while_rebooting_dr_non_dr_nodes_p1(request) data["oil"], expected=False, ) - assert result is not True, ( - "Testcase {} : Failed \n " - "mroutes are still present \n Error: {}".format(tc_name, result) + assert ( + result is not True + ), "Testcase {} : Failed \n " "mroutes are still present \n Error: {}".format( + tc_name, result ) step("start FRR for all the nodes") @@ -908,7 +910,7 @@ def test_pim_source_dr_functionality_while_rebooting_dr_non_dr_nodes_p1(request) assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) for data in input_dict_r1_r2: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], diff --git a/tests/topotests/multicast_pim_dr_nondr_test/test_pim_dr_nondr_with_transit_router_topo3.py b/tests/topotests/multicast_pim_dr_nondr_test/test_pim_dr_nondr_with_transit_router_topo3.py index 1e290a0348..a5d2730373 100755 --- a/tests/topotests/multicast_pim_dr_nondr_test/test_pim_dr_nondr_with_transit_router_topo3.py +++ b/tests/topotests/multicast_pim_dr_nondr_test/test_pim_dr_nondr_with_transit_router_topo3.py @@ -65,9 +65,9 @@ from lib.common_config import ( from lib.pim import ( create_pim_config, create_igmp_config, - verify_ip_mroutes, - clear_ip_mroute, - clear_ip_pim_interface_traffic, + verify_mroutes, + clear_mroute, + clear_pim_interface_traffic, verify_pim_config, verify_upstream_iif, verify_multicast_traffic, @@ -665,10 +665,10 @@ def test_mroute_when_transit_router_present_between_rp_and_source_dr_p1(request) # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) check_router_status(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) # Don"t run this test if we have any failure. if tgen.routers_have_failure(): @@ -707,7 +707,7 @@ def test_mroute_when_transit_router_present_between_rp_and_source_dr_p1(request) ] for data in input_dict_r1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -743,7 +743,7 @@ def test_mroute_when_transit_router_present_between_rp_and_source_dr_p1(request) ] for data in input_dict_r5: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -808,7 +808,7 @@ def test_mroute_when_transit_router_present_between_rp_and_source_dr_p1(request) ) for data in input_dict_r5: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], diff --git a/tests/topotests/multicast_pim_sm_topo1/test_multicast_pim_sm_topo1.py b/tests/topotests/multicast_pim_sm_topo1/test_multicast_pim_sm_topo1.py index 75fae6bb59..b46885c8a5 100755 --- a/tests/topotests/multicast_pim_sm_topo1/test_multicast_pim_sm_topo1.py +++ b/tests/topotests/multicast_pim_sm_topo1/test_multicast_pim_sm_topo1.py @@ -83,12 +83,12 @@ from lib.pim import ( create_pim_config, create_igmp_config, verify_igmp_groups, - verify_ip_mroutes, + verify_mroutes, get_pim_interface_traffic, verify_upstream_iif, - verify_ip_pim_join, - clear_ip_mroute, - clear_ip_pim_interface_traffic, + verify_pim_join, + clear_mroute, + clear_pim_interface_traffic, verify_igmp_config, McastTesterHelper, ) @@ -337,7 +337,7 @@ def test_multicast_data_traffic_static_RP_send_join_then_traffic_p0(request): ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], IGMP_JOIN, data["iif"], data["oil"] ) assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) @@ -369,7 +369,7 @@ def test_multicast_data_traffic_static_RP_send_join_then_traffic_p0(request): step("l1 sent PIM (S,G) join to f1 , verify using 'show ip pim join'") dut = "f1" interface = intf_f1_r2 - result = verify_ip_pim_join(tgen, topo, dut, interface, IGMP_JOIN) + result = verify_pim_join(tgen, topo, dut, interface, IGMP_JOIN) assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) write_test_footer(tc_name) @@ -392,9 +392,9 @@ def test_multicast_data_traffic_static_RP_send_traffic_then_join_p0(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("Configure RP on R2 (loopback interface) for the" " group range 225.0.0.0/8") @@ -453,7 +453,7 @@ def test_multicast_data_traffic_static_RP_send_traffic_then_join_p0(request): # previous 80 retries with 2s wait if we assume .5s per vtysh/show ip mroute runtime # (41 * (2 + .5)) == 102. for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -491,7 +491,7 @@ def test_multicast_data_traffic_static_RP_send_traffic_then_join_p0(request): step("l1 sent PIM (S,G) join to f1 , verify using 'show ip pim join'") dut = "f1" interface = "f1-r2-eth3" - result = verify_ip_pim_join(tgen, topo, dut, interface, IGMP_JOIN) + result = verify_pim_join(tgen, topo, dut, interface, IGMP_JOIN) assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) write_test_footer(tc_name) @@ -514,9 +514,9 @@ def test_clear_pim_neighbors_and_mroute_p0(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("Configure static RP on c1 for group (225.1.1.1-5)") input_dict = { @@ -558,13 +558,13 @@ def test_clear_pim_neighbors_and_mroute_p0(request): ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], IGMP_JOIN, data["iif"], data["oil"] ) assert result is True, "Testcase{} : Failed Error: {}".format(tc_name, result) step("Clear mroutes on l1") - clear_ip_mroute(tgen, "l1") + clear_mroute(tgen, "l1") step( "After clear ip mroute (*,g) entries are re-populated again" @@ -573,7 +573,7 @@ def test_clear_pim_neighbors_and_mroute_p0(request): ) for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], IGMP_JOIN, data["iif"], data["oil"] ) assert result is True, "Testcase{} : Failed Error: {}".format(tc_name, result) @@ -607,9 +607,9 @@ def test_verify_mroute_when_same_receiver_in_FHR_LHR_and_RP_p0(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("Configure RP on R2 (loopback interface) for the" " group range 225.0.0.0/8") @@ -684,7 +684,7 @@ def test_verify_mroute_when_same_receiver_in_FHR_LHR_and_RP_p0(request): {"dut": "f1", "src_address": source, "iif": "f1-i2-eth1", "oil": "f1-i8-eth2"}, ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], IGMP_JOIN, data["iif"], data["oil"] ) assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) @@ -709,9 +709,9 @@ def test_verify_mroute_when_same_receiver_joining_5_diff_sources_p0(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("Configure static RP for (226.1.1.1-5) and (232.1.1.1-5)" " in c1") @@ -837,7 +837,7 @@ def test_verify_mroute_when_same_receiver_joining_5_diff_sources_p0(request): }, ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -874,7 +874,7 @@ def test_verify_mroute_when_same_receiver_joining_5_diff_sources_p0(request): }, ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -923,7 +923,7 @@ def test_verify_mroute_when_same_receiver_joining_5_diff_sources_p0(request): }, ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -996,7 +996,7 @@ def test_verify_mroute_when_same_receiver_joining_5_diff_sources_p0(request): }, ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1026,9 +1026,9 @@ def test_verify_mroute_when_frr_is_transit_router_p2(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("Configure static RP for (226.1.1.1-5) in c2") input_dict = { @@ -1074,7 +1074,7 @@ def test_verify_mroute_when_frr_is_transit_router_p2(request): {"dut": "c2", "src_address": source, "iif": "c2-f1-eth1", "oil": "c2-c1-eth0"}, ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], IGMP_JOIN, data["iif"], data["oil"] ) assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) @@ -1100,7 +1100,7 @@ def test_verify_mroute_when_frr_is_transit_router_p2(request): " router 'show ip mroute'" ) - result = verify_ip_mroutes( + result = verify_mroutes( tgen, "c1", "*", IGMP_JOIN, "c1-c2-eth1", "c1-l1-eth0", expected=False ) assert ( @@ -1129,9 +1129,9 @@ def test_verify_mroute_when_RP_unreachable_p1(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("Configure RP on FRR2 (loopback interface) for " "the group range 225.0.0.0/8") @@ -1187,7 +1187,7 @@ def test_verify_mroute_when_RP_unreachable_p1(request): {"dut": "f1", "src_address": source, "iif": "f1-i2-eth1", "oil": "f1-i8-eth2"}, ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], IGMP_JOIN, data["iif"], data["oil"] ) assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) @@ -1201,7 +1201,7 @@ def test_verify_mroute_when_RP_unreachable_p1(request): sleep(20) step("Clear the mroute on f1") - clear_ip_mroute(tgen, "f1") + clear_mroute(tgen, "f1") step( "After Shut the RP interface and clear the mroute verify all " @@ -1209,7 +1209,7 @@ def test_verify_mroute_when_RP_unreachable_p1(request): " 'show ip mroute' " ) - result = verify_ip_mroutes( + result = verify_mroutes( tgen, "f1", "*", IGMP_JOIN, "f1-r2-eth3", "f1-i8-eth2", expected=False ) assert ( @@ -1246,9 +1246,9 @@ def test_modify_igmp_query_timer_p0(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("Enable IGMP on FRR1 interface and send IGMP join (225.1.1.1)") result = app_helper.run_join("i1", IGMP_JOIN, "l1") @@ -1290,7 +1290,7 @@ def test_modify_igmp_query_timer_p0(request): {"dut": "f1", "src_address": source, "iif": "f1-i2-eth1", "oil": "f1-r2-eth3"}, ] for data in input_dict_4: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], IGMP_JOIN, data["iif"], data["oil"] ) assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) @@ -1375,9 +1375,9 @@ def test_modify_igmp_max_query_response_timer_p0(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("Enable IGMP on FRR1 interface and send IGMP join (225.1.1.1)") result = app_helper.run_join("i1", IGMP_JOIN, "l1") @@ -1440,7 +1440,7 @@ def test_modify_igmp_max_query_response_timer_p0(request): {"dut": "f1", "src_address": source, "iif": "f1-i2-eth1", "oil": "f1-r2-eth3"}, ] for data in input_dict_5: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], IGMP_JOIN, data["iif"], data["oil"] ) assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) diff --git a/tests/topotests/multicast_pim_sm_topo2/test_multicast_pim_sm_topo2.py b/tests/topotests/multicast_pim_sm_topo2/test_multicast_pim_sm_topo2.py index c2128cbad6..9228960776 100755 --- a/tests/topotests/multicast_pim_sm_topo2/test_multicast_pim_sm_topo2.py +++ b/tests/topotests/multicast_pim_sm_topo2/test_multicast_pim_sm_topo2.py @@ -81,13 +81,13 @@ from lib.pim import ( create_pim_config, create_igmp_config, verify_igmp_groups, - verify_ip_mroutes, + verify_mroutes, get_pim_interface_traffic, verify_upstream_iif, verify_pim_neighbors, verify_pim_state, - clear_ip_mroute, - clear_ip_pim_interface_traffic, + clear_mroute, + clear_pim_interface_traffic, McastTesterHelper, ) from lib.topolog import logger @@ -273,9 +273,9 @@ def test_verify_mroute_and_traffic_when_pimd_restarted_p2(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("Configure static RP for (226.1.1.1-5) in c1") step("Configure static RP for (232.1.1.1-5) in c2") @@ -365,7 +365,7 @@ def test_verify_mroute_and_traffic_when_pimd_restarted_p2(request): {"dut": "f1", "src_address": source, "iif": "f1-i2-eth1", "oil": "f1-i8-eth2"}, ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -386,7 +386,7 @@ def test_verify_mroute_and_traffic_when_pimd_restarted_p2(request): start_router_daemons(tgen, "f1", ["pimd"]) for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -434,7 +434,7 @@ def test_verify_mroute_and_traffic_when_pimd_restarted_p2(request): {"dut": "f1", "src_address": "*", "iif": "f1-c2-eth0", "oil": "f1-i8-eth2"} ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -448,7 +448,7 @@ def test_verify_mroute_and_traffic_when_pimd_restarted_p2(request): {"dut": "f1", "src_address": source, "iif": "f1-i2-eth1", "oil": "none"} ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -483,9 +483,9 @@ def test_verify_mroute_and_traffic_when_frr_restarted_p2(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("Configure static RP for (226.1.1.1-5) in c1") step("Configure static RP for (232.1.1.1-5) in c2") @@ -575,7 +575,7 @@ def test_verify_mroute_and_traffic_when_frr_restarted_p2(request): {"dut": "f1", "src_address": source, "iif": "f1-i2-eth1", "oil": "f1-i8-eth2"}, ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -596,7 +596,7 @@ def test_verify_mroute_and_traffic_when_frr_restarted_p2(request): start_router(tgen, "f1") for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -643,7 +643,7 @@ def test_verify_mroute_and_traffic_when_frr_restarted_p2(request): {"dut": "f1", "src_address": "*", "iif": "f1-c2-eth0", "oil": "f1-i8-eth2"} ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -657,7 +657,7 @@ def test_verify_mroute_and_traffic_when_frr_restarted_p2(request): {"dut": "f1", "src_address": source, "iif": "f1-i2-eth1", "oil": "none"} ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -692,9 +692,9 @@ def test_verify_SPT_switchover_when_RPT_and_SPT_path_is_different_p0(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("Configure static RP for (226.1.1.1-5) and " "(232.1.1.1-5) in c2") @@ -746,7 +746,7 @@ def test_verify_SPT_switchover_when_RPT_and_SPT_path_is_different_p0(request): " 'show ip mroute' and mroute OIL is towards RP." ) - result = verify_ip_mroutes( + result = verify_mroutes( tgen, "f1", "10.0.5.2", @@ -756,7 +756,7 @@ def test_verify_SPT_switchover_when_RPT_and_SPT_path_is_different_p0(request): ) assert result is True, "Testcase {} : " "Failed Error: {}".format(tc_name, result) - result = verify_ip_mroutes( + result = verify_mroutes( tgen, "f1", "10.0.5.2", _IGMP_JOIN_RANGE, "f1-i2-eth1", "f1-r2-eth3" ) assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) @@ -773,7 +773,7 @@ def test_verify_SPT_switchover_when_RPT_and_SPT_path_is_different_p0(request): {"dut": "l1", "src_address": source, "iif": "l1-r2-eth4", "oil": "l1-i1-eth1"}, ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -804,7 +804,7 @@ def test_verify_SPT_switchover_when_RPT_and_SPT_path_is_different_p0(request): {"dut": "c2", "src_address": source, "iif": "c2-f1-eth1", "oil": "none"} ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -844,9 +844,9 @@ def test_verify_mroute_after_shut_noshut_of_upstream_interface_p1(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("Configure static RP for (226.1.1.1-5) in c1") step("Configure static RP for (232.1.1.1-5) in c2") @@ -939,7 +939,7 @@ def test_verify_mroute_after_shut_noshut_of_upstream_interface_p1(request): {"dut": "f1", "src_address": source, "iif": "f1-i2-eth1", "oil": "f1-i8-eth2"}, ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -968,7 +968,7 @@ def test_verify_mroute_after_shut_noshut_of_upstream_interface_p1(request): shutdown_bringup_interface(tgen, dut, intf, True) for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -991,7 +991,7 @@ def test_verify_mroute_after_shut_noshut_of_upstream_interface_p1(request): ) for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1021,8 +1021,8 @@ def test_verify_mroute_after_shut_noshut_of_upstream_interface_p1(request): intf = "f1-r2-eth3" shutdown_bringup_interface(tgen, dut, intf, True) - clear_ip_mroute(tgen, "l1") - clear_ip_mroute(tgen, "l1") + clear_mroute(tgen, "l1") + clear_mroute(tgen, "l1") step( "After no shut, verify traffic resume to all the receivers" @@ -1030,7 +1030,7 @@ def test_verify_mroute_after_shut_noshut_of_upstream_interface_p1(request): ) for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1065,7 +1065,7 @@ def test_verify_mroute_after_shut_noshut_of_upstream_interface_p1(request): shutdown_bringup_interface(tgen, dut, intf_l1_c1, True) for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1079,7 +1079,7 @@ def test_verify_mroute_after_shut_noshut_of_upstream_interface_p1(request): app_helper.stop_all_hosts() for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1114,9 +1114,9 @@ def test_verify_mroute_when_receiver_is_outside_frr_p0(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("Configure static RP on c1 for group range " "(226.1.1.1-5) and (232.1.1.1-5)") @@ -1194,7 +1194,7 @@ def test_verify_mroute_when_receiver_is_outside_frr_p0(request): {"dut": "c2", "src_address": source, "iif": "c2-f1-eth1", "oil": "c2-i5-eth2"}, ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1247,9 +1247,9 @@ def test_verify_mroute_when_FRR_is_FHR_and_LHR_p0(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("Configure static RP for group range (226.1.1.1-5) and " "(232.1.1.1-5) on c1") _GROUP_RANGE = GROUP_RANGE_2 + GROUP_RANGE_3 @@ -1344,7 +1344,7 @@ def test_verify_mroute_when_FRR_is_FHR_and_LHR_p0(request): {"dut": "l1", "src_address": source, "iif": "l1-r2-eth4", "oil": "l1-i1-eth1"}, ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1381,7 +1381,7 @@ def test_verify_mroute_when_FRR_is_FHR_and_LHR_p0(request): {"dut": "l1", "src_address": "*", "iif": "l1-c1-eth0", "oil": "l1-i1-eth1"}, ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1404,7 +1404,7 @@ def test_verify_mroute_when_FRR_is_FHR_and_LHR_p0(request): ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1436,9 +1436,9 @@ def test_verify_mroute_when_5_different_receiver_joining_same_sources_p0(request # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("Configure static RP for (226.1.1.1-5) in c1") step("Configure static RP for (232.1.1.1-5) in c2") @@ -1573,7 +1573,7 @@ def test_verify_mroute_when_5_different_receiver_joining_same_sources_p0(request {"dut": "f1", "src_address": source, "iif": "f1-r2-eth3", "oil": "f1-i8-eth2"}, ] for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1601,7 +1601,7 @@ def test_verify_mroute_when_5_different_receiver_joining_same_sources_p0(request {"dut": "l1", "src_address": source, "iif": "l1-r2-eth4", "oil": "l1-i1-eth1"} ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1625,7 +1625,7 @@ def test_verify_mroute_when_5_different_receiver_joining_same_sources_p0(request {"dut": "f1", "src_address": source, "iif": "f1-r2-eth3", "oil": "f1-i8-eth2"} ] for data in input_dict: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1645,7 +1645,7 @@ def test_verify_mroute_when_5_different_receiver_joining_same_sources_p0(request ) for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1674,9 +1674,9 @@ def test_verify_oil_iif_for_mroute_after_shut_noshut_source_interface_p1(request # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step("Configure static RP for (226.1.1.1-5) in c1") step("Configure static RP for (232.1.1.1-5) in c2") @@ -1789,7 +1789,7 @@ def test_verify_oil_iif_for_mroute_after_shut_noshut_source_interface_p1(request }, ] for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1814,7 +1814,7 @@ def test_verify_oil_iif_for_mroute_after_shut_noshut_source_interface_p1(request " 'show ip mroute' " ) - result = verify_ip_mroutes( + result = verify_mroutes( tgen, "f1", source_i2, diff --git a/tests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo3.py b/tests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo3.py index 6f3867cc2c..cbd1090648 100755 --- a/tests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo3.py +++ b/tests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo3.py @@ -84,9 +84,9 @@ from lib.pim import ( create_pim_config, create_igmp_config, verify_igmp_groups, - verify_ip_mroutes, - clear_ip_mroute, - clear_ip_pim_interface_traffic, + verify_mroutes, + clear_mroute, + clear_pim_interface_traffic, verify_igmp_config, verify_pim_config, verify_pim_interface, @@ -371,9 +371,9 @@ def test_verify_oil_when_join_prune_sent_scenario_1_p1(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) check_router_status(tgen) step("Enable the PIM on all the interfaces of FRR1, FRR2, FRR3") @@ -483,7 +483,7 @@ def test_verify_oil_when_join_prune_sent_scenario_1_p1(request): step("Verify mroutes and iff upstream") for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -562,7 +562,7 @@ def test_verify_oil_when_join_prune_sent_scenario_1_p1(request): step("Verify mroutes and iff upstream") for data in input_dict_l1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -611,7 +611,7 @@ def test_verify_oil_when_join_prune_sent_scenario_1_p1(request): step("Verify mroutes and iff upstream") for data in input_dict_f1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -685,7 +685,7 @@ def test_verify_oil_when_join_prune_sent_scenario_1_p1(request): step("Verify mroutes and iff upstream") for data in input_dict_l1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -744,9 +744,9 @@ def test_verify_oil_when_join_prune_sent_scenario_2_p1(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) check_router_status(tgen) step("Removing FRR3 to simulate topo " "FHR(FRR1)---LHR(FRR2)") @@ -835,7 +835,7 @@ def test_verify_oil_when_join_prune_sent_scenario_2_p1(request): step("Verify mroutes and iff upstream") for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -873,7 +873,7 @@ def test_verify_oil_when_join_prune_sent_scenario_2_p1(request): ] for data in input_dict_r2: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -907,7 +907,7 @@ def test_verify_oil_when_join_prune_sent_scenario_2_p1(request): step("Verify mroutes and iff upstream") for data in input_dict_l1_r2: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -937,7 +937,7 @@ def test_verify_oil_when_join_prune_sent_scenario_2_p1(request): ] for data in input_dict_l1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -989,9 +989,9 @@ def test_shut_noshut_source_interface_when_upstream_cleared_from_LHR_p1(request) # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) check_router_status(tgen) step("Enable the PIM on all the interfaces of FRR1, R2 and FRR3" " routers") @@ -1076,7 +1076,7 @@ def test_shut_noshut_source_interface_when_upstream_cleared_from_LHR_p1(request) ) for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1102,7 +1102,7 @@ def test_shut_noshut_source_interface_when_upstream_cleared_from_LHR_p1(request) ) intf_f1_r2 = topo["routers"]["f1"]["links"]["r2"]["interface"] - result = verify_ip_mroutes( + result = verify_mroutes( tgen, "f1", source_i2, IGMP_JOIN_RANGE_1, intf_f1_i2, intf_f1_r2, expected=False ) assert ( @@ -1135,7 +1135,7 @@ def test_shut_noshut_source_interface_when_upstream_cleared_from_LHR_p1(request) ) for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1161,7 +1161,7 @@ def test_shut_noshut_source_interface_when_upstream_cleared_from_LHR_p1(request) ) for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1196,9 +1196,9 @@ def test_shut_noshut_receiver_interface_when_upstream_cleared_from_LHR_p1(reques # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) check_router_status(tgen) step("Enable the PIM on all the interfaces of FRR1, R2 and FRR3" " routers") @@ -1278,7 +1278,7 @@ def test_shut_noshut_receiver_interface_when_upstream_cleared_from_LHR_p1(reques ] for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1328,7 +1328,7 @@ def test_shut_noshut_receiver_interface_when_upstream_cleared_from_LHR_p1(reques ) for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1355,7 +1355,7 @@ def test_shut_noshut_receiver_interface_when_upstream_cleared_from_LHR_p1(reques ) for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1388,9 +1388,9 @@ def test_verify_remove_add_igmp_config_to_receiver_interface_p0(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) check_router_status(tgen) step("Enable PIM on all routers") @@ -1474,7 +1474,7 @@ def test_verify_remove_add_igmp_config_to_receiver_interface_p0(request): ] for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1566,7 +1566,7 @@ def test_verify_remove_add_igmp_config_to_receiver_interface_p0(request): ) for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1684,7 +1684,7 @@ def test_verify_remove_add_igmp_config_to_receiver_interface_p0(request): ] for data in input_dict_l1_f1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -1736,7 +1736,7 @@ def test_verify_remove_add_igmp_config_to_receiver_interface_p0(request): iif = topo["routers"]["l1"]["links"]["i6"]["interface"] oil = topo["routers"]["l1"]["links"]["i1"]["interface"] source = source_i6 - result = verify_ip_mroutes( + result = verify_mroutes( tgen, dut, source, IGMP_JOIN_RANGE_1, iif, oil, expected=False ) assert ( @@ -1765,9 +1765,9 @@ def test_verify_remove_add_igmp_commands_when_pim_configured_p0(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) check_router_status(tgen) step("Enable PIM on all routers") @@ -1851,7 +1851,7 @@ def test_verify_remove_add_igmp_commands_when_pim_configured_p0(request): ] for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -2063,9 +2063,9 @@ def test_verify_remove_add_pim_commands_when_igmp_configured_p1(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) check_router_status(tgen) step("Configure 'ip pim' on receiver interface on FRR1") @@ -2253,9 +2253,9 @@ def test_pim_dr_priority_p0(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) check_router_status(tgen) step("Configure 'ip pim' on receiver interface on FRR1") @@ -2323,7 +2323,7 @@ def test_pim_dr_priority_p0(request): ] for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -2360,7 +2360,7 @@ def test_pim_dr_priority_p0(request): assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -2397,7 +2397,7 @@ def test_pim_dr_priority_p0(request): assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -2492,7 +2492,7 @@ def test_pim_dr_priority_p0(request): assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -2526,9 +2526,9 @@ def test_pim_hello_timer_p1(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) check_router_status(tgen) step("Configure 'ip pim' on receiver interface on FRR1") @@ -2641,9 +2641,9 @@ def test_mroute_after_removing_RP_sending_IGMP_prune_p2(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) check_router_status(tgen) step( @@ -2740,7 +2740,7 @@ def test_mroute_after_removing_RP_sending_IGMP_prune_p2(request): step("Verify mroutes and iff upstream") for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -2802,7 +2802,7 @@ def test_mroute_after_removing_RP_sending_IGMP_prune_p2(request): ] for data in input_dict_starg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -2819,7 +2819,7 @@ def test_mroute_after_removing_RP_sending_IGMP_prune_p2(request): logger.info("Expected Behaviour: {}".format(result)) for data in input_dict_sg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -2896,7 +2896,7 @@ def test_mroute_after_removing_RP_sending_IGMP_prune_p2(request): assert result is True, "Testcase {}: Failed Error: {}".format(tc_name, result) for data in input_dict_starg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -2915,7 +2915,7 @@ def test_mroute_after_removing_RP_sending_IGMP_prune_p2(request): source_i2 = topo["routers"]["i6"]["links"]["l1"]["ipv4"].split("/")[0] for data in input_dict_sg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -2943,9 +2943,9 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) check_router_status(tgen) step( @@ -3052,7 +3052,7 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): step("Verify mroutes and iff upstream") for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3133,7 +3133,7 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): step("Verify mroute after Shut the link from LHR to RP from RP node") for data in input_dict_starg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3150,7 +3150,7 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): logger.info("Expected Behaviour: {}".format(result)) for data in input_dict_sg_i1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3206,7 +3206,7 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): step("Verify mroute after No shut the link from LHR to RP from RP node") for data in input_dict_starg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3217,7 +3217,7 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) for data in input_dict_sg_i2: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3228,7 +3228,7 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) for data in input_dict_sg_i1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3282,7 +3282,7 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): step("Verify mroute after Shut the link from FHR to RP from RP node") for data in input_dict_starg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3293,7 +3293,7 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) for data in input_dict_sg_i1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3355,7 +3355,7 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): step("Verify mroute after Noshut the link from FHR to RP from RP node") for data in input_dict_starg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3366,7 +3366,7 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) for data in input_dict_sg_i2: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3377,7 +3377,7 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) for data in input_dict_sg_i1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3432,7 +3432,7 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): step("Verify mroute after Shut the link from FHR to RP from FHR node") for data in input_dict_starg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3443,7 +3443,7 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) for data in input_dict_sg_i1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3503,7 +3503,7 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): step("Verify mroute after No Shut the link from FHR to RP from FHR node") for data in input_dict_starg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3514,7 +3514,7 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) for data in input_dict_sg_i2: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3525,7 +3525,7 @@ def test_prune_sent_to_LHR_and_FHR_when_PIMnbr_down_p2(request): assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) for data in input_dict_sg_i1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3579,9 +3579,9 @@ def test_mroute_flags_p1(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) check_router_status(tgen) step( @@ -3688,7 +3688,7 @@ def test_mroute_flags_p1(request): step("Verify mroutes and iff upstream") for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3740,9 +3740,9 @@ def test_verify_multicast_traffic_when_LHR_connected_to_RP_p1(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) check_router_status(tgen) step( @@ -3859,7 +3859,7 @@ def test_verify_multicast_traffic_when_LHR_connected_to_RP_p1(request): ] for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3918,7 +3918,7 @@ def test_verify_multicast_traffic_when_LHR_connected_to_RP_p1(request): ] for data in input_dict_r2: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3944,7 +3944,7 @@ def test_verify_multicast_traffic_when_LHR_connected_to_RP_p1(request): ) for data in input_dict_r2: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -3988,7 +3988,7 @@ def test_verify_multicast_traffic_when_LHR_connected_to_RP_p1(request): ] for data in input_dict_l1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -4013,7 +4013,7 @@ def test_verify_multicast_traffic_when_LHR_connected_to_RP_p1(request): ) for data in input_dict_l1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -4063,7 +4063,7 @@ def test_verify_multicast_traffic_when_LHR_connected_to_RP_p1(request): ] for data in input_dict_r2_f1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -4088,7 +4088,7 @@ def test_verify_multicast_traffic_when_LHR_connected_to_RP_p1(request): ) for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -4130,14 +4130,14 @@ def test_verify_multicast_traffic_when_LHR_connected_to_RP_p1(request): iif = topo["routers"]["r2"]["links"]["f1"]["interface"] oil = topo["routers"]["r2"]["links"]["i3"]["interface"] - result = verify_ip_mroutes(tgen, dut, src_address, _IGMP_JOIN_RANGE, iif, oil) + result = verify_mroutes(tgen, dut, src_address, _IGMP_JOIN_RANGE, iif, oil) assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) src_address = source_i1 iif = topo["routers"]["r2"]["links"]["l1"]["interface"] oil = topo["routers"]["r2"]["links"]["i3"]["interface"] - result = verify_ip_mroutes( + result = verify_mroutes( tgen, dut, src_address, _IGMP_JOIN_RANGE, iif, oil, expected=False ) assert ( @@ -4156,7 +4156,7 @@ def test_verify_multicast_traffic_when_LHR_connected_to_RP_p1(request): ) for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -4200,9 +4200,9 @@ def test_verify_multicast_traffic_when_FHR_connected_to_RP_p1(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) check_router_status(tgen) step( @@ -4289,7 +4289,7 @@ def test_verify_multicast_traffic_when_FHR_connected_to_RP_p1(request): ] for data in input_dict_all: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -4333,7 +4333,7 @@ def test_verify_multicast_traffic_when_FHR_connected_to_RP_p1(request): ] for data in input_dict_l1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -4360,7 +4360,7 @@ def test_verify_multicast_traffic_when_FHR_connected_to_RP_p1(request): ) for data in input_dict_l1: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -4399,7 +4399,7 @@ def test_verify_multicast_traffic_when_FHR_connected_to_RP_p1(request): ] for data in input_dict_r2: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -4426,7 +4426,7 @@ def test_verify_multicast_traffic_when_FHR_connected_to_RP_p1(request): ) for data in input_dict_r2: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -4471,7 +4471,7 @@ def test_verify_multicast_traffic_when_FHR_connected_to_RP_p1(request): ] for data in input_dict_all_star: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], diff --git a/tests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo4.py b/tests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo4.py index b255bddcef..e7551094ee 100755 --- a/tests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo4.py +++ b/tests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo4.py @@ -73,10 +73,10 @@ from lib.common_config import ( from lib.pim import ( create_pim_config, create_igmp_config, - verify_ip_mroutes, - clear_ip_pim_interface_traffic, + verify_mroutes, + clear_pim_interface_traffic, verify_upstream_iif, - clear_ip_mroute, + clear_mroute, verify_pim_rp_info, get_pim_interface_traffic, McastTesterHelper, @@ -273,9 +273,9 @@ def test_mroute_when_RP_reachable_default_route_p2(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step( "Remove c1-c2 connected link to simulate topo " @@ -357,7 +357,7 @@ def test_mroute_when_RP_reachable_default_route_p2(request): step("Verify mroutes and iff upstream") for data in input_dict_sg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -373,7 +373,7 @@ def test_mroute_when_RP_reachable_default_route_p2(request): assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) for data in input_dict_starg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -416,7 +416,7 @@ def test_mroute_when_RP_reachable_default_route_p2(request): step("Verify mroute not present after Delete of static routes on c1") for data in input_dict_sg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -448,7 +448,7 @@ def test_mroute_when_RP_reachable_default_route_p2(request): ) for data in input_dict_starg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -510,7 +510,7 @@ def test_mroute_when_RP_reachable_default_route_p2(request): step("Verify (s,g) populated after adding default route ") for data in input_dict_sg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -528,7 +528,7 @@ def test_mroute_when_RP_reachable_default_route_p2(request): step("Verify (*,g) populated after adding default route ") for data in input_dict_starg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -562,9 +562,9 @@ def test_mroute_with_RP_default_route_all_nodes_p2(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step( "Remove c1-c2 connected link to simulate topo " @@ -646,7 +646,7 @@ def test_mroute_with_RP_default_route_all_nodes_p2(request): step("Verify mroutes and iff upstream") for data in input_dict_sg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -662,7 +662,7 @@ def test_mroute_with_RP_default_route_all_nodes_p2(request): assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) for data in input_dict_starg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -714,7 +714,7 @@ def test_mroute_with_RP_default_route_all_nodes_p2(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) for data in input_dict_starg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -788,7 +788,7 @@ def test_mroute_with_RP_default_route_all_nodes_p2(request): step("Verify (s,g) populated after adding default route ") for data in input_dict_sg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -806,7 +806,7 @@ def test_mroute_with_RP_default_route_all_nodes_p2(request): step("Verify (*,g) populated after adding default route ") for data in input_dict_starg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -840,9 +840,9 @@ def test_PIM_hello_tx_rx_p1(request): # Creating configuration from JSON app_helper.stop_all_hosts() - clear_ip_mroute(tgen) + clear_mroute(tgen) reset_config_on_routers(tgen) - clear_ip_pim_interface_traffic(tgen, topo) + clear_pim_interface_traffic(tgen, topo) step( "Remove c1-c2 connected link to simulate topo " @@ -923,7 +923,7 @@ def test_PIM_hello_tx_rx_p1(request): step("(*,G) and (S,G) created on f1 and node verify using 'show ip mroute'") for data in input_dict_sg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], @@ -934,7 +934,7 @@ def test_PIM_hello_tx_rx_p1(request): assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result) for data in input_dict_starg: - result = verify_ip_mroutes( + result = verify_mroutes( tgen, data["dut"], data["src_address"], diff --git a/tests/topotests/multicast_pim_static_rp_topo1/test_multicast_pim_static_rp.py b/tests/topotests/multicast_pim_static_rp_topo1/test_multicast_pim_static_rp.py index b9a7cc7cd7..eafad06e96 100755 --- a/tests/topotests/multicast_pim_static_rp_topo1/test_multicast_pim_static_rp.py +++ b/tests/topotests/multicast_pim_static_rp_topo1/test_multicast_pim_static_rp.py @@ -135,16 +135,16 @@ from lib.pim import ( verify_igmp_groups, verify_upstream_iif, verify_join_state_and_timer, - verify_ip_mroutes, + verify_mroutes, verify_pim_neighbors, get_pim_interface_traffic, verify_pim_rp_info, verify_pim_state, - clear_ip_pim_interface_traffic, - clear_ip_igmp_interfaces, - clear_ip_pim_interfaces, - clear_ip_mroute, - clear_ip_mroute_verify, + clear_pim_interface_traffic, + clear_igmp_interfaces, + clear_pim_interfaces, + clear_mroute, + clear_mroute_verify, McastTesterHelper, ) @@ -419,7 +419,7 @@ def test_add_delete_static_RP_p0(request): result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify ip mroutes") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify ip pim join") @@ -480,7 +480,7 @@ def test_add_delete_static_RP_p0(request): ) step("r1: Verify ip mroutes") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) assert ( result is not True ), "Testcase {} : Failed \n " "r1: mroutes are still present \n Error: {}".format( @@ -531,8 +531,8 @@ def test_SPT_RPT_path_same_p1(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) dut = "r1" intf = "r1-r3-eth2" @@ -585,7 +585,7 @@ def test_SPT_RPT_path_same_p1(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (*, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) upstream IIF interface") @@ -598,7 +598,7 @@ def test_SPT_RPT_path_same_p1(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (*, G) upstream IIF interface") @@ -613,7 +613,7 @@ def test_SPT_RPT_path_same_p1(request): step("r2: Verify (*, G) ip mroutes") oif = "r2-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (S, G) upstream IIF interface") @@ -626,7 +626,7 @@ def test_SPT_RPT_path_same_p1(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (S, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r3: Verify (S, G) upstream IIF interface") @@ -648,7 +648,7 @@ def test_SPT_RPT_path_same_p1(request): step("r3: Verify (S, G) ip mroutes") oif = "r3-r2-eth1" - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) # Uncomment next line for debugging @@ -683,8 +683,8 @@ def test_not_reachable_static_RP_p0(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) dut = "r1" intf = "r1-r3-eth2" @@ -741,7 +741,7 @@ def test_not_reachable_static_RP_p0(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1 :Verify ip mroutes") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Make RP un-reachable") @@ -811,7 +811,7 @@ def test_not_reachable_static_RP_p0(request): assert result is True, "Testcase{} : Failed Error: {}".format(tc_name, result) step("r1: (*, G) cleared from mroute table using show ip mroute") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) assert result is not True, ( "Testcase {} : Failed \n " "r1: (*, G) are not cleared from mroute table \n Error: {}".format( @@ -847,8 +847,8 @@ def test_add_RP_after_join_received_p1(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) step("Enable IGMP on R1 interface") step("Configure r2 loopback interface as RP") @@ -932,7 +932,7 @@ def test_add_RP_after_join_received_p1(request): ) step("r1: Verify ip mroutes") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) assert ( result is not True ), "Testcase {} : Failed \n " "r1: mroutes are still present\n Error: {}".format( @@ -975,7 +975,7 @@ def test_add_RP_after_join_received_p1(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1 : Verify ip mroutes") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) logger.info("Expected behavior: %s", result) @@ -1015,8 +1015,8 @@ def test_reachable_static_RP_after_join_p0(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) step("Enable IGMP on r1 interface and send IGMP " "join (225.1.1.1) to r1") step("Configure r2 loopback interface as RP") @@ -1084,7 +1084,7 @@ def test_reachable_static_RP_after_join_p0(request): ) step("r1 : Verify ip mroutes") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) assert ( result is not True ), "Testcase {} : Failed \n " "r1: mroutes are still present\n Error: {}".format( @@ -1118,7 +1118,7 @@ def test_reachable_static_RP_after_join_p0(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1 : Verify ip mroutes") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) logger.info("Expected behavior: %s", result) @@ -1180,8 +1180,8 @@ def test_send_join_on_higher_preffered_rp_p1(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) step("Enable IGMP on r1 interface") step("Configure RP on r2 (loopback interface) for the group range " "224.0.0.0/4") @@ -1273,7 +1273,7 @@ def test_send_join_on_higher_preffered_rp_p1(request): step("r1 : Verify ip mroutes") iif = "r1-r4-eth3" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1 : Verify PIM state") @@ -1288,7 +1288,7 @@ def test_send_join_on_higher_preffered_rp_p1(request): result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_pim_interface_traffic(tgen, TOPO) step("r1 : Verify joinTx, pruneTx count before RP gets deleted") state_dict = {"r1": {"r1-r2-eth1": ["joinTx"], "r1-r4-eth3": ["pruneTx"]}} @@ -1342,7 +1342,7 @@ def test_send_join_on_higher_preffered_rp_p1(request): "RP gets deleted" ) iif = "r1-r2-eth1" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) logger.info("Expected behavior: %s", result) @@ -1417,8 +1417,8 @@ def test_RP_configured_as_LHR_1_p1(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) step("Enable IGMP on r1 interface") step("Configure RP on r1 (loopback interface) for the group range" " 224.0.0.0/4") @@ -1560,7 +1560,7 @@ def test_RP_configured_as_LHR_1_p1(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (*, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) upstream IIF interface") @@ -1573,7 +1573,7 @@ def test_RP_configured_as_LHR_1_p1(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r3: Verify (S, G) upstream IIF interface") @@ -1594,7 +1594,7 @@ def test_RP_configured_as_LHR_1_p1(request): step("r3: Verify (S, G) ip mroutes") oif = "r3-r1-eth0" - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) # Uncomment next line for debugging @@ -1629,8 +1629,8 @@ def test_RP_configured_as_LHR_2_p1(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) step("Enable IGMP on r1 interface") step("Configure RP on r1 (loopback interface) for the group range" " 224.0.0.0/4") @@ -1765,7 +1765,7 @@ def test_RP_configured_as_LHR_2_p1(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (*, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) upstream IIF interface") @@ -1778,7 +1778,7 @@ def test_RP_configured_as_LHR_2_p1(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r3: Verify (S, G) upstream IIF interface") @@ -1800,7 +1800,7 @@ def test_RP_configured_as_LHR_2_p1(request): step("r3: Verify (S, G) ip mroutes") oif = "r3-r1-eth0" - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) # Uncomment next line for debugging @@ -1835,8 +1835,8 @@ def test_RP_configured_as_FHR_1_p1(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) step("Enable IGMP on r1 interface") step("Configure RP on r2 (loopback interface) for the group range" " 225.1.1.0/24") @@ -1972,7 +1972,7 @@ def test_RP_configured_as_FHR_1_p1(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (*, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) upstream IIF interface") @@ -1984,7 +1984,7 @@ def test_RP_configured_as_FHR_1_p1(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r3: Verify (S, G) upstream IIF interface") @@ -2006,7 +2006,7 @@ def test_RP_configured_as_FHR_1_p1(request): step("r3: Verify (S, G) ip mroutes") oif = "r3-r1-eth0" - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) # Uncomment next line for debugging @@ -2040,8 +2040,8 @@ def test_RP_configured_as_FHR_2_p2(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) step("Enable IGMP on r1 interface") step("Configure RP on r2 (loopback interface) for the group range" " 225.1.1.0/24") @@ -2178,7 +2178,7 @@ def test_RP_configured_as_FHR_2_p2(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (*, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) upstream IIF interface") @@ -2191,7 +2191,7 @@ def test_RP_configured_as_FHR_2_p2(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r3: Verify (S, G) upstream IIF interface") @@ -2213,7 +2213,7 @@ def test_RP_configured_as_FHR_2_p2(request): step("r3: Verify (S, G) ip mroutes") oif = "r3-r1-eth0" - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) # Uncomment next line for debugging @@ -2249,8 +2249,8 @@ def test_SPT_RPT_path_different_p1(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) step("Enable IGMP on r1 interface and send IGMP join (225.1.1.1) to r1") step("Configure RP on r2 (loopback interface) for the group range" " 224.0.0.0/4") @@ -2288,7 +2288,7 @@ def test_SPT_RPT_path_different_p1(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (*, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) upstream IIF interface") @@ -2301,7 +2301,7 @@ def test_SPT_RPT_path_different_p1(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (*, G) upstream IIF interface") @@ -2316,7 +2316,7 @@ def test_SPT_RPT_path_different_p1(request): step("r2: Verify (*, G) ip mroutes") oif = "r2-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r3: Verify (S, G) upstream IIF interface") @@ -2338,7 +2338,7 @@ def test_SPT_RPT_path_different_p1(request): step("r3: Verify (S, G) ip mroutes") oif = "r3-r1-eth0" - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (S, G) upstream IIF interface") @@ -2362,7 +2362,7 @@ def test_SPT_RPT_path_different_p1(request): step("r2: Verify (S, G) ip mroutes") oif = "none" - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) # Uncomment next line for debugging @@ -2400,8 +2400,8 @@ def test_clear_pim_configuration_p1(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) step("Enable IGMP on r1 interface") step("Configure RP on r2 (loopback interface) for the group range" " 224.0.0.0/4") @@ -2444,19 +2444,19 @@ def test_clear_pim_configuration_p1(request): step("r1: Verify (*, G) ip mroutes") oif = "r1-r0-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify IGMP groups timer restarted") - result = clear_ip_igmp_interfaces(tgen, dut) + result = clear_igmp_interfaces(tgen, dut) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify PIM neighbor timer restarted") - result = clear_ip_pim_interfaces(tgen, dut) + result = clear_pim_interfaces(tgen, dut) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify PIM mroute timer restarted") - result = clear_ip_mroute_verify(tgen, dut) + result = clear_mroute_verify(tgen, dut) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) # Uncomment next line for debugging @@ -2493,8 +2493,8 @@ def test_restart_pimd_process_p2(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) step("Enable IGMP on r1 interface and send IGMP join (225.1.1.1) to R1") step("Configure RP on r3 (loopback interface) for the group range" " 224.0.0.0/4") @@ -2535,7 +2535,7 @@ def test_restart_pimd_process_p2(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (*, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) upstream IIF interface") @@ -2548,7 +2548,7 @@ def test_restart_pimd_process_p2(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (*, G) upstream IIF interface") @@ -2563,7 +2563,7 @@ def test_restart_pimd_process_p2(request): step("r2: Verify (*, G) ip mroutes") oif = "r2-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r3: Verify (S, G) upstream IIF interface") @@ -2585,7 +2585,7 @@ def test_restart_pimd_process_p2(request): step("r3: Verify (S, G) ip mroutes") oif = "r3-r1-eth0" - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) dut = "r1" @@ -2594,7 +2594,7 @@ def test_restart_pimd_process_p2(request): logger.info("waiting for 10 sec to make sure old mroute time is higher") sleep(10) # Why do we then wait 60 seconds below before checking the routes? - uptime_before = verify_ip_mroutes( + uptime_before = verify_mroutes( tgen, dut, STAR, GROUP_ADDRESS, iif, oil, return_uptime=True, mwait=60 ) assert isinstance(uptime_before, dict), "Testcase{} : Failed Error: {}".format( @@ -2611,7 +2611,7 @@ def test_restart_pimd_process_p2(request): sleep(5) # Why do we then wait 10 seconds below before checking the routes? - uptime_after = verify_ip_mroutes( + uptime_after = verify_mroutes( tgen, dut, STAR, GROUP_ADDRESS, iif, oil, return_uptime=True, mwait=10 ) assert isinstance(uptime_after, dict), "Testcase{} : Failed Error: {}".format( @@ -2650,8 +2650,8 @@ def test_multiple_groups_same_RP_address_p2(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) step("Enable IGMP on r1 interface and send IGMP join (225.1.1.1) to r1") step("Configure RP on r2 (loopback interface) for the group range" "225.1.1.0/24") @@ -2701,7 +2701,7 @@ def test_multiple_groups_same_RP_address_p2(request): step("r1: Verify (*, G) ip mroutes") oif = "r1-r0-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, group_address_list, iif, oif) + result = verify_mroutes(tgen, dut, STAR, group_address_list, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) upstream IIF interface") @@ -2716,7 +2716,7 @@ def test_multiple_groups_same_RP_address_p2(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (*, G) upstream IIF interface") @@ -2731,7 +2731,7 @@ def test_multiple_groups_same_RP_address_p2(request): step("r2: Verify (*, G) ip mroutes") oif = "r2-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, group_address_list, iif, oif) + result = verify_mroutes(tgen, dut, STAR, group_address_list, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r3: Verify (S, G) upstream IIF interface") @@ -2753,7 +2753,7 @@ def test_multiple_groups_same_RP_address_p2(request): step("r3: Verify (S, G) ip mroutes") oif = "r3-r1-eth0" - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (S, G) upstream IIF interface") @@ -2777,7 +2777,7 @@ def test_multiple_groups_same_RP_address_p2(request): step("r2: Verify (S, G) ip mroutes") oif = "none" - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Delete RP configuration") @@ -2844,7 +2844,7 @@ def test_multiple_groups_same_RP_address_p2(request): step("r1: Verify (*, G) ip mroutes") oif = "r1-r0-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, group_address_list, iif, oif) + result = verify_mroutes(tgen, dut, STAR, group_address_list, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) upstream IIF interface") @@ -2859,7 +2859,7 @@ def test_multiple_groups_same_RP_address_p2(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (*, G) upstream IIF interface") @@ -2874,7 +2874,7 @@ def test_multiple_groups_same_RP_address_p2(request): step("r2: Verify (*, G) ip mroutes") oif = "r2-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, group_address_list, iif, oif) + result = verify_mroutes(tgen, dut, STAR, group_address_list, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (S, G) upstream IIF interface") @@ -2898,7 +2898,7 @@ def test_multiple_groups_same_RP_address_p2(request): step("r2: Verify (S, G) ip mroutes") oif = "none" - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r3: Verify (S, G) upstream IIF interface") @@ -2920,7 +2920,7 @@ def test_multiple_groups_same_RP_address_p2(request): step("r3: Verify (S, G) ip mroutes") oif = "r3-r1-eth0" - result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) write_test_footer(tc_name) @@ -2955,8 +2955,8 @@ def test_multiple_groups_different_RP_address_p2(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) step("Delete existing RP configuration") input_dict = { @@ -3043,7 +3043,7 @@ def test_multiple_groups_different_RP_address_p2(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (*, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_1, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_1, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) upstream IIF interface") @@ -3058,9 +3058,7 @@ def test_multiple_groups_different_RP_address_p2(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) ip mroutes") - result = verify_ip_mroutes( - tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif - ) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (*, G) upstream IIF interface") @@ -3075,7 +3073,7 @@ def test_multiple_groups_different_RP_address_p2(request): step("r2: Verify (*, G) ip mroutes") oif = "r2-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_1, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_1, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (S, G) upstream IIF interface") @@ -3098,9 +3096,7 @@ def test_multiple_groups_different_RP_address_p2(request): step("r2: Verify (S, G) ip mroutes") oif = "none" - result = verify_ip_mroutes( - tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif - ) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r3: Verify (S, G) upstream IIF interface") @@ -3122,9 +3118,7 @@ def test_multiple_groups_different_RP_address_p2(request): step("r3: Verify (S, G) ip mroutes") oif = "r3-r1-eth0" - result = verify_ip_mroutes( - tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif - ) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (*, G) upstream IIF interface") @@ -3139,7 +3133,7 @@ def test_multiple_groups_different_RP_address_p2(request): step("r1: Verify (*, G) ip mroutes") oif = "r1-r0-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_2, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_2, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) upstream IIF interface") @@ -3154,9 +3148,7 @@ def test_multiple_groups_different_RP_address_p2(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) ip mroutes") - result = verify_ip_mroutes( - tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif - ) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r4: Verify (*, G) upstream IIF interface") @@ -3171,7 +3163,7 @@ def test_multiple_groups_different_RP_address_p2(request): step("r4: Verify (*, G) ip mroutes") oif = "r4-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_2, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_2, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r4: Verify (S, G) upstream IIF interface") @@ -3194,9 +3186,7 @@ def test_multiple_groups_different_RP_address_p2(request): step("r4: Verify (S, G) ip mroutes") oif = "none" - result = verify_ip_mroutes( - tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif - ) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r3: Verify (S, G) upstream IIF interface") @@ -3215,9 +3205,7 @@ def test_multiple_groups_different_RP_address_p2(request): step("r3: Verify (S, G) ip mroutes") oif = "r3-r1-eth0" - result = verify_ip_mroutes( - tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif - ) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("Delete RP configuration") @@ -3316,7 +3304,7 @@ def test_multiple_groups_different_RP_address_p2(request): step("r1: Verify (*, G) ip mroutes") oif = "r1-r0-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_1, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_1, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) upstream IIF interface") @@ -3331,9 +3319,7 @@ def test_multiple_groups_different_RP_address_p2(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) ip mroutes") - result = verify_ip_mroutes( - tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif - ) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (*, G) upstream IIF interface") @@ -3348,7 +3334,7 @@ def test_multiple_groups_different_RP_address_p2(request): step("r2: Verify (*, G) ip mroutes") oif = "r2-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_1, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_1, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (S, G) upstream IIF interface") @@ -3371,9 +3357,7 @@ def test_multiple_groups_different_RP_address_p2(request): step("r2: Verify (S, G) ip mroutes") oif = "none" - result = verify_ip_mroutes( - tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif - ) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r3: Verify (S, G) upstream IIF interface") @@ -3395,9 +3379,7 @@ def test_multiple_groups_different_RP_address_p2(request): step("r3: Verify (S, G) ip mroutes") oif = "r3-r1-eth0" - result = verify_ip_mroutes( - tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif - ) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (*, G) upstream IIF interface") @@ -3412,7 +3394,7 @@ def test_multiple_groups_different_RP_address_p2(request): step("r1: Verify (*, G) ip mroutes") oif = "r1-r0-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_2, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_2, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) upstream IIF interface") @@ -3427,9 +3409,7 @@ def test_multiple_groups_different_RP_address_p2(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (S, G) ip mroutes") - result = verify_ip_mroutes( - tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif - ) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r4: Verify (*, G) upstream IIF interface") @@ -3444,7 +3424,7 @@ def test_multiple_groups_different_RP_address_p2(request): step("r4: Verify (*, G) ip mroutes") oif = "r4-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_2, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST_2, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r4: Verify (S, G) upstream IIF interface") @@ -3467,9 +3447,7 @@ def test_multiple_groups_different_RP_address_p2(request): step("r4: Verify (S, G) ip mroutes") oif = "none" - result = verify_ip_mroutes( - tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif - ) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r3: Verify (S, G) upstream IIF interface") @@ -3491,9 +3469,7 @@ def test_multiple_groups_different_RP_address_p2(request): step("r3: Verify (S, G) ip mroutes") oif = "r3-r1-eth0" - result = verify_ip_mroutes( - tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif - ) + result = verify_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) write_test_footer(tc_name) @@ -3522,8 +3498,8 @@ def test_shutdown_primary_path_p1(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) # Steps to execute step("Enable IGMP on r1 interface") @@ -3552,14 +3528,14 @@ def test_shutdown_primary_path_p1(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (*, G) ip mroutes") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (*, G) ip mroutes") dut = "r2" iif = "lo" oif = "r2-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Shut the interface r1-r2-eth1 from R1 to R2") @@ -3578,21 +3554,21 @@ def test_shutdown_primary_path_p1(request): dut = "r1" iif = "r1-r3-eth2" oif = "r1-r0-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (*, G) ip mroutes") dut = "r2" iif = "lo" oif = "r2-r3-eth1" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r3: Verify (*, G) ip mroutes") dut = "r3" iif = "r3-r2-eth1" oif = "r3-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r3: Shut the link from R1 to R3 from R3 node") @@ -3609,7 +3585,7 @@ def test_shutdown_primary_path_p1(request): dut = "r1" iif = "r1-r3-eth2" oif = "r1-r0-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) assert result is not True, ( "Testcase {} : Failed \n " "r1: (*,G) mroutes are not cleared after shut of R1 to R3 link\n Error: {}".format( @@ -3621,7 +3597,7 @@ def test_shutdown_primary_path_p1(request): dut = "r2" iif = "lo" oif = "r2-r3-eth1" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) assert result is not True, ( "Testcase {} : Failed \n " "r2: (*,G) mroutes are not cleared after shut of R1 to R3 link\n Error: {}".format( @@ -3633,7 +3609,7 @@ def test_shutdown_primary_path_p1(request): dut = "r3" iif = "r3-r2-eth1" oif = "r3-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) assert result is not True, ( "Testcase {} : Failed \n " "r3: (*,G) mroutes are not cleared after shut of R1 to R3 link\n Error: {}".format( @@ -3650,21 +3626,21 @@ def test_shutdown_primary_path_p1(request): dut = "r1" iif = "r1-r3-eth2" oif = "r1-r0-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (*, G) ip mroutes") dut = "r2" iif = "lo" oif = "r2-r3-eth1" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r3: Verify (*, G) ip mroutes") dut = "r3" iif = "r3-r2-eth1" oif = "r3-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: No shutdown the link from R1 to R2 from R1 node") @@ -3676,14 +3652,14 @@ def test_shutdown_primary_path_p1(request): dut = "r1" iif = "r1-r2-eth1" oif = "r1-r0-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (*, G) ip mroutes") dut = "r2" iif = "lo" oif = "r2-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) write_test_footer(tc_name) @@ -3711,8 +3687,8 @@ def test_delete_RP_shut_noshut_upstream_interface_p1(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) step("Enable IGMP on r1 interface") step("Configure RP on r2 (loopback interface) for the group range" " 224.0.0.0/4") @@ -3740,14 +3716,14 @@ def test_delete_RP_shut_noshut_upstream_interface_p1(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (*, G) ip mroutes created") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (*, G) ip mroutes created") dut = "r2" iif = "lo" oif = "r2-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Delete RP configuration") @@ -3794,7 +3770,7 @@ def test_delete_RP_shut_noshut_upstream_interface_p1(request): dut = "r1" iif = "r1-r2-eth1" oif = "r1-r0-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) assert result is not True, ( "Testcase {} : Failed \n " "r1: (*,G) mroutes are not cleared after shut of R1 to R0 link\n Error: {}".format( @@ -3806,7 +3782,7 @@ def test_delete_RP_shut_noshut_upstream_interface_p1(request): dut = "r2" iif = "lo" oif = "r2-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) assert result is not True, ( "Testcase {} : Failed \n " "r2: (*,G) mroutes are not cleared after shut of R1 to R0 link\n Error: {}".format( @@ -3840,8 +3816,8 @@ def test_delete_RP_shut_noshut_RP_interface_p1(request): step("Creating configuration from JSON") reset_config_on_routers(tgen) app_helper.stop_all_hosts() - clear_ip_mroute(tgen) - clear_ip_pim_interface_traffic(tgen, TOPO) + clear_mroute(tgen) + clear_pim_interface_traffic(tgen, TOPO) step("Enable IGMP on r1 interface") step("Configure RP on r2 (lo) for the group range" " 224.0.0.0/4") @@ -3868,14 +3844,14 @@ def test_delete_RP_shut_noshut_RP_interface_p1(request): assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r1: Verify (*, G) ip mroutes created") - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Verify (*, G) ip mroutes created") dut = "r2" iif = "lo" oif = "r2-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif) assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) step("r2: Delete RP configuration") @@ -3917,7 +3893,7 @@ def test_delete_RP_shut_noshut_RP_interface_p1(request): dut = "r1" iif = "r1-r2-eth1" oif = "r1-r0-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) assert result is not True, ( "Testcase {} : Failed \n " "r1: (*,G) mroutes are not cleared after shut of R1 to R2 and R3 link\n Error: {}".format( @@ -3929,7 +3905,7 @@ def test_delete_RP_shut_noshut_RP_interface_p1(request): dut = "r2" iif = "lo" oif = "r2-r1-eth0" - result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) + result = verify_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False) assert result is not True, ( "Testcase {} : Failed \n " "r2: (*,G) mroutes are not cleared after shut of R1 to R2 and R3 link\n Error: {}".format( diff --git a/zebra/router-id.c b/zebra/router-id.c index ea438b4367..9f56cf0e6a 100644 --- a/zebra/router-id.c +++ b/zebra/router-id.c @@ -342,7 +342,7 @@ DEFUN (ip_router_id_in_vrf, "Manually set the router-id\n" "IP address to use for router-id\n") { - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); int idx = 0; struct prefix rid; @@ -372,7 +372,7 @@ DEFUN (ipv6_router_id_in_vrf, "Manually set the IPv6 router-id\n" "IPV6 address to use for router-id\n") { - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); int idx = 0; struct prefix rid; @@ -458,7 +458,7 @@ DEFUN (no_ip_router_id_in_vrf, "Remove the manually configured router-id\n" "IP address to use for router-id\n") { - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); struct prefix rid; @@ -486,7 +486,7 @@ DEFUN (no_ipv6_router_id_in_vrf, "Remove the manually configured IPv6 router-id\n" "IPv6 address to use for router-id\n") { - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); struct prefix rid; diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index 7b377aad6d..4e97323cf6 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -1045,11 +1045,23 @@ static int netlink_route_change_read_multicast(struct nlmsghdr *h, if (tb[RTA_IIF]) iif = *(int *)RTA_DATA(tb[RTA_IIF]); - if (tb[RTA_SRC]) - m->sg.src = *(struct in_addr *)RTA_DATA(tb[RTA_SRC]); + if (tb[RTA_SRC]) { + if (rtm->rtm_family == RTNL_FAMILY_IPMR) + m->src.ipaddr_v4 = + *(struct in_addr *)RTA_DATA(tb[RTA_SRC]); + else + m->src.ipaddr_v6 = + *(struct in6_addr *)RTA_DATA(tb[RTA_SRC]); + } - if (tb[RTA_DST]) - m->sg.grp = *(struct in_addr *)RTA_DATA(tb[RTA_DST]); + if (tb[RTA_DST]) { + if (rtm->rtm_family == RTNL_FAMILY_IPMR) + m->grp.ipaddr_v4 = + *(struct in_addr *)RTA_DATA(tb[RTA_DST]); + else + m->grp.ipaddr_v6 = + *(struct in6_addr *)RTA_DATA(tb[RTA_DST]); + } if (tb[RTA_EXPIRES]) m->lastused = *(unsigned long long *)RTA_DATA(tb[RTA_EXPIRES]); @@ -1074,6 +1086,17 @@ static int netlink_route_change_read_multicast(struct nlmsghdr *h, } } + if (rtm->rtm_family == RTNL_FAMILY_IPMR) { + SET_IPADDR_V4(&m->src); + SET_IPADDR_V4(&m->grp); + } else if (rtm->rtm_family == RTNL_FAMILY_IP6MR) { + SET_IPADDR_V6(&m->src); + SET_IPADDR_V6(&m->grp); + } else { + zlog_warn("%s: Invalid rtm_family received", __func__); + return 0; + } + if (IS_ZEBRA_DEBUG_KERNEL) { struct interface *ifp = NULL; struct zebra_vrf *zvrf = NULL; @@ -1089,11 +1112,10 @@ static int netlink_route_change_read_multicast(struct nlmsghdr *h, zvrf = zebra_vrf_lookup_by_id(vrf); ifp = if_lookup_by_index(iif, vrf); zlog_debug( - "MCAST VRF: %s(%d) %s (%pI4,%pI4) IIF: %s(%d) OIF: %s jiffies: %lld", + "MCAST VRF: %s(%d) %s (%pIA,%pIA) IIF: %s(%d) OIF: %s jiffies: %lld", zvrf_name(zvrf), vrf, nl_msg_type_to_str(h->nlmsg_type), - &m->sg.src, &m->sg.grp, ifp ? ifp->name : "Unknown", - iif, oif_list, - m->lastused); + &m->src, &m->grp, ifp ? ifp->name : "Unknown", iif, + oif_list, m->lastused); } return 0; } @@ -2263,13 +2285,29 @@ int kernel_get_ipmr_sg_stats(struct zebra_vrf *zvrf, void *in) req.n.nlmsg_flags = NLM_F_REQUEST; req.n.nlmsg_pid = zns->netlink_cmd.snl.nl_pid; - req.ndm.ndm_family = RTNL_FAMILY_IPMR; req.n.nlmsg_type = RTM_GETROUTE; nl_attr_put32(&req.n, sizeof(req), RTA_IIF, mroute->ifindex); nl_attr_put32(&req.n, sizeof(req), RTA_OIF, mroute->ifindex); - nl_attr_put32(&req.n, sizeof(req), RTA_SRC, mroute->sg.src.s_addr); - nl_attr_put32(&req.n, sizeof(req), RTA_DST, mroute->sg.grp.s_addr); + + if (mroute->family == AF_INET) { + req.ndm.ndm_family = RTNL_FAMILY_IPMR; + nl_attr_put(&req.n, sizeof(req), RTA_SRC, + &mroute->src.ipaddr_v4, + sizeof(mroute->src.ipaddr_v4)); + nl_attr_put(&req.n, sizeof(req), RTA_DST, + &mroute->grp.ipaddr_v4, + sizeof(mroute->grp.ipaddr_v4)); + } else { + req.ndm.ndm_family = RTNL_FAMILY_IP6MR; + nl_attr_put(&req.n, sizeof(req), RTA_SRC, + &mroute->src.ipaddr_v6, + sizeof(mroute->src.ipaddr_v6)); + nl_attr_put(&req.n, sizeof(req), RTA_DST, + &mroute->grp.ipaddr_v6, + sizeof(mroute->grp.ipaddr_v6)); + } + /* * What? * diff --git a/zebra/zebra_mroute.c b/zebra/zebra_mroute.c index ef0f2d8924..5d38c37901 100644 --- a/zebra/zebra_mroute.c +++ b/zebra/zebra_mroute.c @@ -39,20 +39,37 @@ void zebra_ipmr_route_stats(ZAPI_HANDLER_ARGS) int suc = -1; memset(&mroute, 0, sizeof(mroute)); - STREAM_GET(&mroute.sg.src, msg, 4); - STREAM_GET(&mroute.sg.grp, msg, 4); - STREAM_GETL(msg, mroute.ifindex); + STREAM_GETL(msg, mroute.family); - if (IS_ZEBRA_DEBUG_KERNEL) { - char sbuf[40]; - char gbuf[40]; + switch (mroute.family) { + case AF_INET: + SET_IPADDR_V4(&mroute.src); + SET_IPADDR_V4(&mroute.grp); + STREAM_GET(&mroute.src.ipaddr_v4, msg, + sizeof(mroute.src.ipaddr_v4)); + STREAM_GET(&mroute.grp.ipaddr_v4, msg, + sizeof(mroute.grp.ipaddr_v4)); + break; + case AF_INET6: + SET_IPADDR_V6(&mroute.src); + SET_IPADDR_V6(&mroute.grp); + STREAM_GET(&mroute.src.ipaddr_v6, msg, + sizeof(mroute.src.ipaddr_v6)); + STREAM_GET(&mroute.grp.ipaddr_v6, msg, + sizeof(mroute.grp.ipaddr_v6)); + break; + default: + zlog_warn("%s: Invalid address family received while parsing", + __func__); + return; + } - inet_ntop(AF_INET, &mroute.sg.src, sbuf, sizeof(sbuf)); - inet_ntop(AF_INET, &mroute.sg.grp, gbuf, sizeof(gbuf)); + STREAM_GETL(msg, mroute.ifindex); - zlog_debug("Asking for (%s,%s)[%s(%u)] mroute information", - sbuf, gbuf, zvrf->vrf->name, zvrf->vrf->vrf_id); - } + if (IS_ZEBRA_DEBUG_KERNEL) + zlog_debug("Asking for (%pIA,%pIA)[%s(%u)] mroute information", + &mroute.src, &mroute.grp, zvrf->vrf->name, + zvrf->vrf->vrf_id); suc = kernel_get_ipmr_sg_stats(zvrf, &mroute); @@ -62,8 +79,19 @@ stream_failure: stream_reset(s); zclient_create_header(s, ZEBRA_IPMR_ROUTE_STATS, zvrf_id(zvrf)); - stream_put_in_addr(s, &mroute.sg.src); - stream_put_in_addr(s, &mroute.sg.grp); + + if (mroute.family == AF_INET) { + stream_write(s, &mroute.src.ipaddr_v4, + sizeof(mroute.src.ipaddr_v4)); + stream_write(s, &mroute.grp.ipaddr_v4, + sizeof(mroute.grp.ipaddr_v4)); + } else { + stream_write(s, &mroute.src.ipaddr_v6, + sizeof(mroute.src.ipaddr_v6)); + stream_write(s, &mroute.grp.ipaddr_v6, + sizeof(mroute.grp.ipaddr_v6)); + } + stream_put(s, &mroute.lastused, sizeof(mroute.lastused)); stream_putl(s, (uint32_t)suc); diff --git a/zebra/zebra_mroute.h b/zebra/zebra_mroute.h index 3c12b82da3..6c56c2e41d 100644 --- a/zebra/zebra_mroute.h +++ b/zebra/zebra_mroute.h @@ -29,7 +29,9 @@ extern "C" { #endif struct mcast_route_data { - struct prefix_sg sg; + int family; + struct ipaddr src; + struct ipaddr grp; unsigned int ifindex; unsigned long long lastused; }; diff --git a/zebra/zebra_routemap.c b/zebra/zebra_routemap.c index e99cb76119..2cc84a1f7f 100644 --- a/zebra/zebra_routemap.c +++ b/zebra/zebra_routemap.c @@ -638,7 +638,7 @@ DEFPY_YANG (ip_protocol, assert(proto); assert(rmap); - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); if (!zvrf) return CMD_WARNING; @@ -672,7 +672,7 @@ DEFPY_YANG (no_ip_protocol, assert(proto); - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); if (!zvrf) return CMD_WARNING; @@ -719,7 +719,7 @@ DEFPY_YANG (ipv6_protocol, assert(rmap); assert(proto); - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); if (!zvrf) return CMD_WARNING; @@ -753,7 +753,7 @@ DEFPY_YANG (no_ipv6_protocol, assert(proto); - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); if (!zvrf) return CMD_WARNING; @@ -801,7 +801,7 @@ DEFPY_YANG (ip_protocol_nht_rmap, assert(proto); assert(rmap); - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); if (!zvrf) return CMD_WARNING; @@ -835,7 +835,7 @@ DEFPY_YANG (no_ip_protocol_nht_rmap, assert(proto); - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); if (!zvrf) return CMD_WARNING; @@ -883,7 +883,7 @@ DEFPY_YANG (ipv6_protocol_nht_rmap, assert(rmap); assert(proto); - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); if (!zvrf) return CMD_WARNING; @@ -917,7 +917,7 @@ DEFPY_YANG (no_ipv6_protocol_nht_rmap, assert(proto); - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); if (!zvrf) return CMD_WARNING; diff --git a/zebra/zebra_vrf.h b/zebra/zebra_vrf.h index a24a008b76..21e7f286f3 100644 --- a/zebra/zebra_vrf.h +++ b/zebra/zebra_vrf.h @@ -192,14 +192,10 @@ struct zebra_vrf { /* * special macro to allow us to get the correct zebra_vrf */ -#define ZEBRA_DECLVAR_CONTEXT(A, B) \ - struct vrf *A; \ - if (vty->node == CONFIG_NODE) \ - A = vrf_lookup_by_id(VRF_DEFAULT); \ - else \ - A = VTY_GET_CONTEXT(vrf); \ - VTY_CHECK_CONTEXT(A); \ - struct zebra_vrf *B = A->info +#define ZEBRA_DECLVAR_CONTEXT_VRF(vrfptr, zvrfptr) \ + VTY_DECLVAR_CONTEXT_VRF(vrfptr); \ + struct zebra_vrf *zvrfptr = vrfptr->info; \ + MACRO_REQUIRE_SEMICOLON() /* end */ static inline vrf_id_t zvrf_id(struct zebra_vrf *zvrf) { diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c index 22c65e3c0c..b20d8daf38 100644 --- a/zebra/zebra_vty.c +++ b/zebra/zebra_vty.c @@ -1413,7 +1413,7 @@ DEFUN (ip_nht_default_route, "Filter Next Hop tracking route resolution\n" "Resolve via default route\n") { - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); if (!zvrf) return CMD_WARNING; @@ -1752,7 +1752,7 @@ DEFUN (no_ip_nht_default_route, "Filter Next Hop tracking route resolution\n" "Resolve via default route\n") { - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); if (!zvrf) return CMD_WARNING; @@ -1772,7 +1772,7 @@ DEFUN (ipv6_nht_default_route, "Filter Next Hop tracking route resolution\n" "Resolve via default route\n") { - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); if (!zvrf) return CMD_WARNING; @@ -1793,7 +1793,7 @@ DEFUN (no_ipv6_nht_default_route, "Filter Next Hop tracking route resolution\n" "Resolve via default route\n") { - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); if (!zvrf) return CMD_WARNING; @@ -2676,77 +2676,6 @@ static void vty_show_ip_route_summary_prefix(struct vty *vty, } } -/* - * Show IPv6 mroute command.Used to dump - * the Multicast routing table. - */ -DEFUN (show_ipv6_mroute, - show_ipv6_mroute_cmd, - "show ipv6 mroute [vrf NAME]", - SHOW_STR - IP_STR - "IPv6 Multicast routing table\n" - VRF_CMD_HELP_STR) -{ - struct route_table *table; - struct route_node *rn; - struct route_entry *re; - int first = 1; - vrf_id_t vrf_id = VRF_DEFAULT; - - if (argc == 5) - VRF_GET_ID(vrf_id, argv[4]->arg, false); - - table = zebra_vrf_table(AFI_IP6, SAFI_MULTICAST, vrf_id); - if (!table) - return CMD_SUCCESS; - - /* Show all IPv6 route. */ - for (rn = route_top(table); rn; rn = srcdest_route_next(rn)) - RNODE_FOREACH_RE (rn, re) { - if (first) { - vty_out(vty, SHOW_ROUTE_V6_HEADER); - first = 0; - } - vty_show_ip_route(vty, rn, re, NULL, false, false); - } - return CMD_SUCCESS; -} - -DEFUN (show_ipv6_mroute_vrf_all, - show_ipv6_mroute_vrf_all_cmd, - "show ipv6 mroute vrf all", - SHOW_STR - IP_STR - "IPv6 Multicast routing table\n" - VRF_ALL_CMD_HELP_STR) -{ - struct route_table *table; - struct route_node *rn; - struct route_entry *re; - struct vrf *vrf; - struct zebra_vrf *zvrf; - int first = 1; - - RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { - if ((zvrf = vrf->info) == NULL - || (table = zvrf->table[AFI_IP6][SAFI_MULTICAST]) == NULL) - continue; - - /* Show all IPv6 route. */ - for (rn = route_top(table); rn; rn = srcdest_route_next(rn)) - RNODE_FOREACH_RE (rn, re) { - if (first) { - vty_out(vty, SHOW_ROUTE_V6_HEADER); - first = 0; - } - vty_show_ip_route(vty, rn, re, NULL, false, - false); - } - } - return CMD_SUCCESS; -} - DEFUN (allow_external_route_update, allow_external_route_update_cmd, "allow-external-route-update", @@ -2950,7 +2879,7 @@ DEFUN (vrf_vni_mapping, { int filter = 0; - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); assert(vrf); assert(zvrf); @@ -2979,7 +2908,7 @@ DEFUN (no_vrf_vni_mapping, { int filter = 0; - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); vni_t vni = strtoul(argv[2]->arg, NULL, 10); assert(vrf); @@ -4395,7 +4324,7 @@ DEFUN(ip_table_range, ip_table_range_cmd, "Start Routing Table\n" "End Routing Table\n") { - ZEBRA_DECLVAR_CONTEXT(vrf, zvrf); + ZEBRA_DECLVAR_CONTEXT_VRF(vrf, zvrf); if (!zvrf) return CMD_WARNING; @@ -4529,11 +4458,6 @@ void zebra_vty_init(void) install_element(VRF_NODE, &no_ipv6_nht_default_route_cmd); install_element(CONFIG_NODE, &rnh_hide_backups_cmd); - install_element(VIEW_NODE, &show_ipv6_mroute_cmd); - - /* Commands for VRF */ - install_element(VIEW_NODE, &show_ipv6_mroute_vrf_all_cmd); - install_element(VIEW_NODE, &show_frr_cmd); install_element(VIEW_NODE, &show_evpn_global_cmd); install_element(VIEW_NODE, &show_evpn_vni_cmd); |
