pimd: Modifying in_addr to pim_addr in struct pim_ifchannel for IPv6.

Changed struct in_addr ifassert_winner to pim_addr
which will be used in both IPv4 and IPv6(Both MLD and IGMP).
Reviewed-by: Sarita Patra <saritap@vmware.com>
Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
This commit is contained in:
Mobashshera Rasool 2021-12-13 22:20:37 -08:00
parent 3b37b961c1
commit b85201d5cd
3 changed files with 8 additions and 10 deletions

View File

@ -43,12 +43,11 @@ static void assert_action_a6(struct pim_ifchannel *ch,
struct pim_assert_metric winner_metric); struct pim_assert_metric winner_metric);
void pim_ifassert_winner_set(struct pim_ifchannel *ch, void pim_ifassert_winner_set(struct pim_ifchannel *ch,
enum pim_ifassert_state new_state, enum pim_ifassert_state new_state, pim_addr winner,
struct in_addr winner,
struct pim_assert_metric winner_metric) struct pim_assert_metric winner_metric)
{ {
struct pim_interface *pim_ifp = ch->interface->info; struct pim_interface *pim_ifp = ch->interface->info;
int winner_changed = (ch->ifassert_winner.s_addr != winner.s_addr); int winner_changed = !!pim_addr_cmp(ch->ifassert_winner, winner);
int metric_changed = !pim_assert_metric_match( int metric_changed = !pim_assert_metric_match(
&ch->ifassert_winner_metric, &winner_metric); &ch->ifassert_winner_metric, &winner_metric);
@ -66,9 +65,9 @@ void pim_ifassert_winner_set(struct pim_ifchannel *ch,
char was_str[INET_ADDRSTRLEN]; char was_str[INET_ADDRSTRLEN];
char winner_str[INET_ADDRSTRLEN]; char winner_str[INET_ADDRSTRLEN];
pim_inet4_dump("<was?>", ch->ifassert_winner, was_str, pim_inet4_dump("<was?>", ch->ifassert_winner, was_str,
sizeof(was_str)); sizeof(was_str));
pim_inet4_dump("<winner?>", winner, winner_str, pim_inet4_dump("<winner?>", winner, winner_str,
sizeof(winner_str)); sizeof(winner_str));
zlog_debug( zlog_debug(
"%s: (S,G)=%s assert winner changed from %s to %s on interface %s", "%s: (S,G)=%s assert winner changed from %s to %s on interface %s",
__func__, ch->sg_str, was_str, winner_str, __func__, ch->sg_str, was_str, winner_str,
@ -179,8 +178,8 @@ static int dispatch_assert(struct interface *ifp, struct in_addr source_addr,
} }
break; break;
case PIM_IFASSERT_I_AM_LOSER: case PIM_IFASSERT_I_AM_LOSER:
if (recv_metric.ip_address.s_addr if (!pim_addr_cmp(recv_metric.ip_address,
== ch->ifassert_winner.s_addr) { ch->ifassert_winner)) {
/* Assert from current winner */ /* Assert from current winner */
if (cancel_assert(&recv_metric)) { if (cancel_assert(&recv_metric)) {

View File

@ -55,8 +55,7 @@ struct pim_assert_metric {
#define PIM_ASSERT_ROUTE_METRIC_MAX (0xFFFFFFFF) #define PIM_ASSERT_ROUTE_METRIC_MAX (0xFFFFFFFF)
void pim_ifassert_winner_set(struct pim_ifchannel *ch, void pim_ifassert_winner_set(struct pim_ifchannel *ch,
enum pim_ifassert_state new_state, enum pim_ifassert_state new_state, pim_addr winner,
struct in_addr winner,
struct pim_assert_metric winner_metric); struct pim_assert_metric winner_metric);
int pim_assert_recv(struct interface *ifp, struct pim_neighbor *neigh, int pim_assert_recv(struct interface *ifp, struct pim_neighbor *neigh,

View File

@ -106,7 +106,7 @@ struct pim_ifchannel {
/* Per-interface (S,G) Assert State (Section 4.6.1 of RFC4601) */ /* Per-interface (S,G) Assert State (Section 4.6.1 of RFC4601) */
enum pim_ifassert_state ifassert_state; enum pim_ifassert_state ifassert_state;
struct thread *t_ifassert_timer; struct thread *t_ifassert_timer;
struct in_addr ifassert_winner; pim_addr ifassert_winner;
struct pim_assert_metric ifassert_winner_metric; struct pim_assert_metric ifassert_winner_metric;
int64_t ifassert_creation; /* Record uptime of ifassert state */ int64_t ifassert_creation; /* Record uptime of ifassert state */
struct pim_assert_metric ifassert_my_metric; struct pim_assert_metric ifassert_my_metric;