From 0fd22e1dda9b79ec36f542abf20d5053101175cf Mon Sep 17 00:00:00 2001 From: sarita patra Date: Wed, 16 Mar 2022 03:08:53 -0700 Subject: [PATCH] pim6d: add pimv6 support for bsmmsg_rpinfo Signed-off-by: sarita patra --- pimd/pim_bsm.c | 19 +++++++------------ pimd/pim_bsm.h | 4 ++++ pimd/pim_cmd.c | 20 +++++++++++--------- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/pimd/pim_bsm.c b/pimd/pim_bsm.c index 19e377e3c4..d0c6811891 100644 --- a/pimd/pim_bsm.c +++ b/pimd/pim_bsm.c @@ -130,11 +130,7 @@ int pim_bsm_rpinfo_cmp(const struct bsm_rpinfo *node1, return 1; if (node1->hash > node2->hash) return -1; - if (pim_addr_cmp(node1->rp_address, node2->rp_address) < 0) - return 1; - if (pim_addr_cmp(node1->rp_address, node2->rp_address) > 0) - return -1; - return 0; + return pim_addr_cmp(node2->rp_address, node1->rp_address); } static struct bsgrp_node *pim_bsm_new_bsgrp_node(struct route_table *rt, @@ -1056,6 +1052,7 @@ static uint32_t hash_calc_on_grp_rp(struct prefix group, struct in_addr rp, grpaddr = grpaddr & ((mask << (32 - hashmasklen))); else grpaddr = grpaddr & mask; + rp_add = ntohl(rp.s_addr); temp = 1103515245 * ((1103515245 * (uint64_t)grpaddr + 12345) ^ rp_add) + 12345; @@ -1075,8 +1072,7 @@ static bool pim_install_bsm_grp_rp(struct pim_instance *pim, bsm_rpinfo->rp_prio = rp->rp_pri; bsm_rpinfo->rp_holdtime = rp->rp_holdtime; - memcpy(&bsm_rpinfo->rp_address, &rp->rpaddr.addr, - sizeof(struct in_addr)); + bsm_rpinfo->rp_address = rp->rpaddr.addr; bsm_rpinfo->elapse_time = 0; /* Back pointer to the group node. */ @@ -1241,13 +1237,12 @@ static bool pim_bsm_parse_install_g2rp(struct bsm_scope *scope, uint8_t *buf, offset += sizeof(struct bsmmsg_rpinfo); if (PIM_DEBUG_BSM) { - char rp_str[INET_ADDRSTRLEN]; + pim_addr rp_addr; - pim_inet4_dump("", rpinfo.rpaddr.addr, - rp_str, sizeof(rp_str)); + rp_addr = rpinfo.rpaddr.addr; zlog_debug( - "%s, Rp address - %s; pri:%d hold:%d", - __func__, rp_str, rpinfo.rp_pri, + "%s, Rp address - %pPAs; pri:%d hold:%d", + __func__, &rp_addr, rpinfo.rp_pri, rpinfo.rp_holdtime); } diff --git a/pimd/pim_bsm.h b/pimd/pim_bsm.h index 6d1cbf7efd..04c9c20067 100644 --- a/pimd/pim_bsm.h +++ b/pimd/pim_bsm.h @@ -200,7 +200,11 @@ struct bsmmsg_grpinfo { } __attribute__((packed)); struct bsmmsg_rpinfo { +#if PIM_IPV == 4 struct pim_encoded_ipv4_unicast rpaddr; +#else + struct pim_encoded_ipv6_unicast rpaddr; +#endif uint16_t rp_holdtime; uint8_t rp_pri; uint8_t reserved; diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 3ee376b8a3..0d77ed1d7e 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -1045,7 +1045,7 @@ static void pim_show_bsm_db(struct pim_instance *pim, struct vty *vty, bool uj) char grp_str[PREFIX_STRLEN]; char rp_str[INET_ADDRSTRLEN]; struct bsmmsg_grpinfo *group; - struct bsmmsg_rpinfo *rpaddr; + struct bsmmsg_rpinfo *bsm_rpinfo; struct prefix grp; struct bsm_hdr *hdr; uint32_t offset = 0; @@ -1136,14 +1136,16 @@ static void pim_show_bsm_db(struct pim_instance *pim, struct vty *vty, bool uj) "RpAddress HoldTime Priority\n"); while (frag_rp_cnt--) { - rpaddr = (struct bsmmsg_rpinfo *)buf; + pim_addr rp_addr; + + bsm_rpinfo = (struct bsmmsg_rpinfo *)buf; buf += sizeof(struct bsmmsg_rpinfo); offset += sizeof(struct bsmmsg_rpinfo); - pim_inet4_dump("", - rpaddr->rpaddr.addr, rp_str, - sizeof(rp_str)); + rp_addr = bsm_rpinfo->rpaddr.addr; + snprintfrr(rp_str, sizeof(rp_str), "%pPAs", + &rp_addr); if (uj) { json_row = json_object_new_object(); @@ -1151,16 +1153,16 @@ static void pim_show_bsm_db(struct pim_instance *pim, struct vty *vty, bool uj) json_row, "Rp Address", rp_str); json_object_int_add( json_row, "Rp HoldTime", - ntohs(rpaddr->rp_holdtime)); + ntohs(bsm_rpinfo->rp_holdtime)); json_object_int_add(json_row, "Rp Priority", - rpaddr->rp_pri); + bsm_rpinfo->rp_pri); json_object_object_add( json_group, rp_str, json_row); } else { vty_out(vty, "%-15s %-12d %d\n", rp_str, - ntohs(rpaddr->rp_holdtime), - rpaddr->rp_pri); + ntohs(bsm_rpinfo->rp_holdtime), + bsm_rpinfo->rp_pri); } } vty_out(vty, "\n"); -- 2.39.5