pimd: Convert ifchannel to using a prefix to store (s,g)

Convert ifchannel to use a prefix to store (s,g) information.
Additionally create pim_str_sg_dump function to output
data when using debugs.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2016-07-22 08:01:43 -04:00
parent e945ee80d3
commit 99064df9e3
8 changed files with 96 additions and 153 deletions

View File

@ -56,31 +56,23 @@ void pim_ifassert_winner_set(struct pim_ifchannel *ch,
if (PIM_DEBUG_PIM_EVENTS) { if (PIM_DEBUG_PIM_EVENTS) {
if (ch->ifassert_state != new_state) { if (ch->ifassert_state != new_state) {
char src_str[100]; zlog_debug("%s: (S,G)=%s assert state changed from %s to %s on interface %s",
char grp_str[100]; __PRETTY_FUNCTION__,
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str)); pim_str_sg_dump (&ch->sg),
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str)); pim_ifchannel_ifassert_name(ch->ifassert_state),
zlog_debug("%s: (S,G)=(%s,%s) assert state changed from %s to %s on interface %s", pim_ifchannel_ifassert_name(new_state),
__PRETTY_FUNCTION__, ch->interface->name);
src_str, grp_str,
pim_ifchannel_ifassert_name(ch->ifassert_state),
pim_ifchannel_ifassert_name(new_state),
ch->interface->name);
} }
if (winner_changed) { if (winner_changed) {
char src_str[100];
char grp_str[100];
char was_str[100]; char was_str[100];
char winner_str[100]; char winner_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str));
pim_inet4_dump("<was?>", ch->ifassert_winner, was_str, sizeof(was_str)); pim_inet4_dump("<was?>", ch->ifassert_winner, was_str, sizeof(was_str));
pim_inet4_dump("<winner?>", winner, winner_str, sizeof(winner_str)); pim_inet4_dump("<winner?>", winner, winner_str, sizeof(winner_str));
zlog_debug("%s: (S,G)=(%s,%s) assert winner changed from %s to %s on interface %s", zlog_debug("%s: (S,G)=%s assert winner changed from %s to %s on interface %s",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str, pim_str_sg_dump (&ch->sg),
was_str, winner_str, ch->interface->name); was_str, winner_str, ch->interface->name);
} }
} /* PIM_DEBUG_PIM_EVENTS */ } /* PIM_DEBUG_PIM_EVENTS */
@ -140,13 +132,9 @@ static void if_could_assert_do_a1(const char *caller,
{ {
if (PIM_IF_FLAG_TEST_COULD_ASSERT(ch->flags)) { if (PIM_IF_FLAG_TEST_COULD_ASSERT(ch->flags)) {
if (assert_action_a1(ch)) { if (assert_action_a1(ch)) {
char src_str[100]; zlog_warn("%s: %s: (S,G)=%s assert_action_a1 failure on interface %s",
char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str));
zlog_warn("%s: %s: (S,G)=(%s,%s) assert_action_a1 failure on interface %s",
__PRETTY_FUNCTION__, caller, __PRETTY_FUNCTION__, caller,
src_str, grp_str, ch->interface->name); pim_str_sg_dump (&ch->sg), ch->interface->name);
/* log warning only */ /* log warning only */
} }
} }
@ -460,7 +448,7 @@ static int pim_assert_do(struct pim_ifchannel *ch,
} }
pim_msg_size = pim_assert_build_msg(pim_msg, sizeof(pim_msg), ifp, pim_msg_size = pim_assert_build_msg(pim_msg, sizeof(pim_msg), ifp,
ch->group_addr, ch->source_addr, ch->sg.u.sg.grp, ch->sg.u.sg.src,
metric.metric_preference, metric.metric_preference,
metric.route_metric, metric.route_metric,
metric.rpt_bit_flag); metric.rpt_bit_flag);
@ -482,13 +470,9 @@ static int pim_assert_do(struct pim_ifchannel *ch,
pim_hello_require(ifp); pim_hello_require(ifp);
if (PIM_DEBUG_PIM_TRACE) { if (PIM_DEBUG_PIM_TRACE) {
char source_str[100]; zlog_debug("%s: to %s: (S,G)=%s pref=%u metric=%u rpt_bit=%u",
char group_str[100];
pim_inet4_dump("<src?>", ch->source_addr, source_str, sizeof(source_str));
pim_inet4_dump("<grp?>", ch->group_addr, group_str, sizeof(group_str));
zlog_debug("%s: to %s: (S,G)=(%s,%s) pref=%u metric=%u rpt_bit=%u",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
ifp->name, source_str, group_str, ifp->name, pim_str_sg_dump (&ch->sg),
metric.metric_preference, metric.metric_preference,
metric.route_metric, metric.route_metric,
PIM_FORCE_BOOLEAN(metric.rpt_bit_flag)); PIM_FORCE_BOOLEAN(metric.rpt_bit_flag));
@ -525,7 +509,7 @@ static int pim_assert_cancel(struct pim_ifchannel *ch)
metric.rpt_bit_flag = 0; metric.rpt_bit_flag = 0;
metric.metric_preference = PIM_ASSERT_METRIC_PREFERENCE_MAX; metric.metric_preference = PIM_ASSERT_METRIC_PREFERENCE_MAX;
metric.route_metric = PIM_ASSERT_ROUTE_METRIC_MAX; metric.route_metric = PIM_ASSERT_ROUTE_METRIC_MAX;
metric.ip_address = ch->source_addr; metric.ip_address = ch->sg.u.sg.src;
return pim_assert_do(ch, metric); return pim_assert_do(ch, metric);
} }
@ -543,13 +527,9 @@ static int on_assert_timer(struct thread *t)
zassert(ifp); zassert(ifp);
if (PIM_DEBUG_PIM_TRACE) { if (PIM_DEBUG_PIM_TRACE) {
char src_str[100]; zlog_debug("%s: (S,G)=%s timer expired on interface %s",
char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str));
zlog_debug("%s: (S,G)=(%s,%s) timer expired on interface %s",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str, ifp->name); pim_str_sg_dump (&ch->sg), ifp->name);
} }
ch->t_ifassert_timer = NULL; ch->t_ifassert_timer = NULL;
@ -564,13 +544,9 @@ static int on_assert_timer(struct thread *t)
break; break;
default: default:
{ {
char source_str[100]; zlog_warn("%s: (S,G)=%s invalid assert state %d on interface %s",
char group_str[100];
pim_inet4_dump("<src?>", ch->source_addr, source_str, sizeof(source_str));
pim_inet4_dump("<grp?>", ch->group_addr, group_str, sizeof(group_str));
zlog_warn("%s: (S,G)=(%s,%s) invalid assert state %d on interface %s",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
source_str, group_str, ch->ifassert_state, ifp->name); pim_str_sg_dump (&ch->sg), ch->ifassert_state, ifp->name);
} }
} }
@ -587,13 +563,9 @@ static void assert_timer_off(struct pim_ifchannel *ch)
if (PIM_DEBUG_PIM_TRACE) { if (PIM_DEBUG_PIM_TRACE) {
if (ch->t_ifassert_timer) { if (ch->t_ifassert_timer) {
char src_str[100]; zlog_debug("%s: (S,G)=%s cancelling timer on interface %s",
char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str));
zlog_debug("%s: (S,G)=(%s,%s) cancelling timer on interface %s",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str, ifp->name); pim_str_sg_dump (&ch->sg), ifp->name);
} }
} }
THREAD_OFF(ch->t_ifassert_timer); THREAD_OFF(ch->t_ifassert_timer);
@ -612,13 +584,9 @@ static void pim_assert_timer_set(struct pim_ifchannel *ch,
assert_timer_off(ch); assert_timer_off(ch);
if (PIM_DEBUG_PIM_TRACE) { if (PIM_DEBUG_PIM_TRACE) {
char src_str[100]; zlog_debug("%s: (S,G)=%s starting %u sec timer on interface %s",
char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str));
zlog_debug("%s: (S,G)=(%s,%s) starting %u sec timer on interface %s",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str, interval, ifp->name); pim_str_sg_dump(&ch->sg), interval, ifp->name);
} }
THREAD_TIMER_ON(master, ch->t_ifassert_timer, THREAD_TIMER_ON(master, ch->t_ifassert_timer,
@ -650,13 +618,9 @@ int assert_action_a1(struct pim_ifchannel *ch)
pim_ifp = ifp->info; pim_ifp = ifp->info;
if (!pim_ifp) { if (!pim_ifp) {
char src_str[100]; zlog_warn("%s: (S,G)=%s multicast not enabled on interface %s",
char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str));
zlog_warn("%s: (S,G)=(%s,%s) multicast not enabled on interface %s",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str, ifp->name); pim_str_sg_dump (&ch->sg), ifp->name);
return -1; /* must return since pim_ifp is used below */ return -1; /* must return since pim_ifp is used below */
} }
@ -668,13 +632,9 @@ int assert_action_a1(struct pim_ifchannel *ch)
zassert(ch->ifassert_state == PIM_IFASSERT_I_AM_WINNER); /* a3 requirement */ zassert(ch->ifassert_state == PIM_IFASSERT_I_AM_WINNER); /* a3 requirement */
if (assert_action_a3(ch)) { if (assert_action_a3(ch)) {
char src_str[100]; zlog_warn("%s: (S,G)=%s assert_action_a3 failure on interface %s",
char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str));
zlog_warn("%s: (S,G)=(%s,%s) assert_action_a3 failure on interface %s",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str, ifp->name); pim_str_sg_dump (&ch->sg), ifp->name);
/* warning only */ /* warning only */
} }
@ -719,14 +679,9 @@ static int assert_action_a3(struct pim_ifchannel *ch)
pim_assert_timer_reset(ch); pim_assert_timer_reset(ch);
if (pim_assert_send(ch)) { if (pim_assert_send(ch)) {
char src_str[100]; zlog_warn("%s: (S,G)=%s failure sending assert on interface %s",
char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str));
zlog_warn("%s: (S,G)=(%s,%s) failure sending assert on interface %s",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str, ch->interface->name); pim_str_sg_dump (&ch->sg), ch->interface->name);
return -1; return -1;
} }
@ -748,13 +703,9 @@ static int assert_action_a3(struct pim_ifchannel *ch)
void assert_action_a4(struct pim_ifchannel *ch) void assert_action_a4(struct pim_ifchannel *ch)
{ {
if (pim_assert_cancel(ch)) { if (pim_assert_cancel(ch)) {
char src_str[100]; zlog_warn("%s: failure sending AssertCancel%s on interface %s",
char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str));
zlog_warn("%s: failure sending AssertCancel(%s,%s) on interface %s",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str, ch->interface->name); pim_str_sg_dump (&ch->sg), ch->interface->name);
/* log warning only */ /* log warning only */
} }

View File

@ -178,9 +178,9 @@ static void pim_show_assert(struct vty *vty)
char uptime[10]; char uptime[10];
char timer[10]; char timer[10];
pim_inet4_dump("<ch_src?>", ch->source_addr, pim_inet4_dump("<ch_src?>", ch->sg.u.sg.src,
ch_src_str, sizeof(ch_src_str)); ch_src_str, sizeof(ch_src_str));
pim_inet4_dump("<ch_grp?>", ch->group_addr, pim_inet4_dump("<ch_grp?>", ch->sg.u.sg.grp,
ch_grp_str, sizeof(ch_grp_str)); ch_grp_str, sizeof(ch_grp_str));
pim_inet4_dump("<assrt_win?>", ch->ifassert_winner, pim_inet4_dump("<assrt_win?>", ch->ifassert_winner,
winner_str, sizeof(winner_str)); winner_str, sizeof(winner_str));
@ -236,9 +236,9 @@ static void pim_show_assert_internal(struct vty *vty)
char ch_src_str[100]; char ch_src_str[100];
char ch_grp_str[100]; char ch_grp_str[100];
pim_inet4_dump("<ch_src?>", ch->source_addr, pim_inet4_dump("<ch_src?>", ch->sg.u.sg.src,
ch_src_str, sizeof(ch_src_str)); ch_src_str, sizeof(ch_src_str));
pim_inet4_dump("<ch_grp?>", ch->group_addr, pim_inet4_dump("<ch_grp?>", ch->sg.u.sg.grp,
ch_grp_str, sizeof(ch_grp_str)); ch_grp_str, sizeof(ch_grp_str));
vty_out(vty, "%-9s %-15s %-15s %-15s %-3s %-3s %-3s %-4s%s", vty_out(vty, "%-9s %-15s %-15s %-15s %-3s %-3s %-3s %-4s%s",
ifp->name, ifp->name,
@ -284,9 +284,9 @@ static void pim_show_assert_metric(struct vty *vty)
am = pim_macro_spt_assert_metric(&ch->upstream->rpf, pim_ifp->primary_address); am = pim_macro_spt_assert_metric(&ch->upstream->rpf, pim_ifp->primary_address);
pim_inet4_dump("<ch_src?>", ch->source_addr, pim_inet4_dump("<ch_src?>", ch->sg.u.sg.src,
ch_src_str, sizeof(ch_src_str)); ch_src_str, sizeof(ch_src_str));
pim_inet4_dump("<ch_grp?>", ch->group_addr, pim_inet4_dump("<ch_grp?>", ch->sg.u.sg.grp,
ch_grp_str, sizeof(ch_grp_str)); ch_grp_str, sizeof(ch_grp_str));
pim_inet4_dump("<addr?>", am.ip_address, pim_inet4_dump("<addr?>", am.ip_address,
addr_str, sizeof(addr_str)); addr_str, sizeof(addr_str));
@ -337,9 +337,9 @@ static void pim_show_assert_winner_metric(struct vty *vty)
am = &ch->ifassert_winner_metric; am = &ch->ifassert_winner_metric;
pim_inet4_dump("<ch_src?>", ch->source_addr, pim_inet4_dump("<ch_src?>", ch->sg.u.sg.src,
ch_src_str, sizeof(ch_src_str)); ch_src_str, sizeof(ch_src_str));
pim_inet4_dump("<ch_grp?>", ch->group_addr, pim_inet4_dump("<ch_grp?>", ch->sg.u.sg.grp,
ch_grp_str, sizeof(ch_grp_str)); ch_grp_str, sizeof(ch_grp_str));
pim_inet4_dump("<addr?>", am->ip_address, pim_inet4_dump("<addr?>", am->ip_address,
addr_str, sizeof(addr_str)); addr_str, sizeof(addr_str));
@ -394,9 +394,9 @@ static void pim_show_membership(struct vty *vty)
char ch_src_str[100]; char ch_src_str[100];
char ch_grp_str[100]; char ch_grp_str[100];
pim_inet4_dump("<ch_src?>", ch->source_addr, pim_inet4_dump("<ch_src?>", ch->sg.u.sg.src,
ch_src_str, sizeof(ch_src_str)); ch_src_str, sizeof(ch_src_str));
pim_inet4_dump("<ch_grp?>", ch->group_addr, pim_inet4_dump("<ch_grp?>", ch->sg.u.sg.grp,
ch_grp_str, sizeof(ch_grp_str)); ch_grp_str, sizeof(ch_grp_str));
vty_out(vty, "%-9s %-15s %-15s %-15s %-10s%s", vty_out(vty, "%-9s %-15s %-15s %-15s %-10s%s",
@ -727,9 +727,9 @@ static void pim_show_join(struct vty *vty)
char expire[10]; char expire[10];
char prune[10]; char prune[10];
pim_inet4_dump("<ch_src?>", ch->source_addr, pim_inet4_dump("<ch_src?>", ch->sg.u.sg.src,
ch_src_str, sizeof(ch_src_str)); ch_src_str, sizeof(ch_src_str));
pim_inet4_dump("<ch_grp?>", ch->group_addr, pim_inet4_dump("<ch_grp?>", ch->sg.u.sg.grp,
ch_grp_str, sizeof(ch_grp_str)); ch_grp_str, sizeof(ch_grp_str));
pim_time_uptime_begin(uptime, sizeof(uptime), now, ch->ifjoin_creation); pim_time_uptime_begin(uptime, sizeof(uptime), now, ch->ifjoin_creation);

View File

@ -126,8 +126,8 @@ void pim_ifchannel_ifjoin_switch(const char *caller,
if (PIM_DEBUG_PIM_EVENTS) { if (PIM_DEBUG_PIM_EVENTS) {
char src_str[100]; char src_str[100];
char grp_str[100]; char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str)); pim_inet4_dump("<src?>", ch->sg.u.sg.src, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str)); pim_inet4_dump("<grp?>", ch->sg.u.sg.grp, grp_str, sizeof(grp_str));
zlog_debug("PIM_IFCHANNEL_%s: (S,G)=(%s,%s) on interface %s", zlog_debug("PIM_IFCHANNEL_%s: (S,G)=(%s,%s) on interface %s",
((new_state == PIM_IFJOIN_NOINFO) ? "DOWN" : "UP"), ((new_state == PIM_IFJOIN_NOINFO) ? "DOWN" : "UP"),
src_str, grp_str, ch->interface->name); src_str, grp_str, ch->interface->name);
@ -209,8 +209,8 @@ struct pim_ifchannel *pim_ifchannel_find(struct interface *ifp,
for (ALL_LIST_ELEMENTS_RO(pim_ifp->pim_ifchannel_list, ch_node, ch)) { for (ALL_LIST_ELEMENTS_RO(pim_ifp->pim_ifchannel_list, ch_node, ch)) {
if ( if (
(source_addr.s_addr == ch->source_addr.s_addr) && (source_addr.s_addr == ch->sg.u.sg.src.s_addr) &&
(group_addr.s_addr == ch->group_addr.s_addr) (group_addr.s_addr == ch->sg.u.sg.grp.s_addr)
) { ) {
return ch; return ch;
} }
@ -228,8 +228,8 @@ static void ifmembership_set(struct pim_ifchannel *ch,
if (PIM_DEBUG_PIM_EVENTS) { if (PIM_DEBUG_PIM_EVENTS) {
char src_str[100]; char src_str[100];
char grp_str[100]; char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str)); pim_inet4_dump("<src?>", ch->sg.u.sg.src, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str)); pim_inet4_dump("<grp?>", ch->sg.u.sg.grp, grp_str, sizeof(grp_str));
zlog_debug("%s: (S,G)=(%s,%s) membership now is %s on interface %s", zlog_debug("%s: (S,G)=(%s,%s) membership now is %s on interface %s",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str, src_str, grp_str,
@ -317,8 +317,8 @@ struct pim_ifchannel *pim_ifchannel_add(struct interface *ifp,
ch->flags = 0; ch->flags = 0;
ch->upstream = up; ch->upstream = up;
ch->interface = ifp; ch->interface = ifp;
ch->source_addr = source_addr; ch->sg.u.sg.src = source_addr;
ch->group_addr = group_addr; ch->sg.u.sg.grp = group_addr;
ch->local_ifmembership = PIM_IFMEMBERSHIP_NOINFO; ch->local_ifmembership = PIM_IFMEMBERSHIP_NOINFO;
ch->ifjoin_state = PIM_IFJOIN_NOINFO; ch->ifjoin_state = PIM_IFJOIN_NOINFO;
@ -400,8 +400,8 @@ static int on_ifjoin_prune_pending_timer(struct thread *t)
send_prune_echo = (listcount(pim_ifp->pim_neighbor_list) > 1); send_prune_echo = (listcount(pim_ifp->pim_neighbor_list) > 1);
/* Save (S,G) */ /* Save (S,G) */
ch_source = ch->source_addr; ch_source = ch->sg.u.sg.src;
ch_group = ch->group_addr; ch_group = ch->sg.u.sg.grp;
ifjoin_to_noinfo(ch); ifjoin_to_noinfo(ch);
/* from here ch may have been deleted */ /* from here ch may have been deleted */
@ -759,8 +759,8 @@ void pim_ifchannel_update_could_assert(struct pim_ifchannel *ch)
if (PIM_DEBUG_PIM_EVENTS) { if (PIM_DEBUG_PIM_EVENTS) {
char src_str[100]; char src_str[100];
char grp_str[100]; char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str)); pim_inet4_dump("<src?>", ch->sg.u.sg.src, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str)); pim_inet4_dump("<grp?>", ch->sg.u.sg.grp, grp_str, sizeof(grp_str));
zlog_debug("%s: CouldAssert(%s,%s,%s) changed from %d to %d", zlog_debug("%s: CouldAssert(%s,%s,%s) changed from %d to %d",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str, ch->interface->name, src_str, grp_str, ch->interface->name,
@ -803,8 +803,8 @@ void pim_ifchannel_update_my_assert_metric(struct pim_ifchannel *ch)
char grp_str[100]; char grp_str[100];
char old_addr_str[100]; char old_addr_str[100];
char new_addr_str[100]; char new_addr_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str)); pim_inet4_dump("<src?>", ch->sg.u.sg.src, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str)); pim_inet4_dump("<grp?>", ch->sg.u.sg.grp, grp_str, sizeof(grp_str));
pim_inet4_dump("<old_addr?>", ch->ifassert_my_metric.ip_address, old_addr_str, sizeof(old_addr_str)); pim_inet4_dump("<old_addr?>", ch->ifassert_my_metric.ip_address, old_addr_str, sizeof(old_addr_str));
pim_inet4_dump("<new_addr?>", my_metric_new.ip_address, new_addr_str, sizeof(new_addr_str)); pim_inet4_dump("<new_addr?>", my_metric_new.ip_address, new_addr_str, sizeof(new_addr_str));
zlog_debug("%s: my_assert_metric(%s,%s,%s) changed from %u,%u,%u,%s to %u,%u,%u,%s", zlog_debug("%s: my_assert_metric(%s,%s,%s) changed from %u,%u,%u,%s to %u,%u,%u,%s",
@ -839,8 +839,8 @@ void pim_ifchannel_update_assert_tracking_desired(struct pim_ifchannel *ch)
if (PIM_DEBUG_PIM_EVENTS) { if (PIM_DEBUG_PIM_EVENTS) {
char src_str[100]; char src_str[100];
char grp_str[100]; char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str)); pim_inet4_dump("<src?>", ch->sg.u.sg.src, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str)); pim_inet4_dump("<grp?>", ch->sg.u.sg.grp, grp_str, sizeof(grp_str));
zlog_debug("%s: AssertTrackingDesired(%s,%s,%s) changed from %d to %d", zlog_debug("%s: AssertTrackingDesired(%s,%s,%s) changed from %d to %d",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str, ch->interface->name, src_str, grp_str, ch->interface->name,

View File

@ -26,6 +26,7 @@
#include <zebra.h> #include <zebra.h>
#include "if.h" #include "if.h"
#include "prefix.h"
#include "pim_upstream.h" #include "pim_upstream.h"
@ -73,8 +74,7 @@ struct pim_assert_metric {
Per-interface (S,G) state Per-interface (S,G) state
*/ */
struct pim_ifchannel { struct pim_ifchannel {
struct in_addr source_addr; /* (S,G) source key */ struct prefix sg;
struct in_addr group_addr; /* (S,G) group key */
struct interface *interface; /* backpointer to interface */ struct interface *interface; /* backpointer to interface */
uint32_t flags; uint32_t flags;

View File

@ -102,13 +102,9 @@ int pim_macro_ch_lost_assert(const struct pim_ifchannel *ch)
ifp = ch->interface; ifp = ch->interface;
if (!ifp) { if (!ifp) {
char src_str[100]; zlog_warn("%s: (S,G)=%s: null interface",
char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str));
zlog_warn("%s: (S,G)=(%s,%s): null interface",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str); pim_str_sg_dump (&ch->sg));
return 0; /* false */ return 0; /* false */
} }
@ -118,13 +114,9 @@ int pim_macro_ch_lost_assert(const struct pim_ifchannel *ch)
pim_ifp = ifp->info; pim_ifp = ifp->info;
if (!pim_ifp) { if (!pim_ifp) {
char src_str[100]; zlog_warn("%s: (S,G)=%s: multicast not enabled on interface %s",
char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str));
zlog_warn("%s: (S,G)=(%s,%s): multicast not enabled on interface %s",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str, ifp->name); pim_str_sg_dump (&ch->sg), ifp->name);
return 0; /* false */ return 0; /* false */
} }
@ -159,13 +151,9 @@ int pim_macro_chisin_pim_include(const struct pim_ifchannel *ch)
struct pim_interface *pim_ifp = ch->interface->info; struct pim_interface *pim_ifp = ch->interface->info;
if (!pim_ifp) { if (!pim_ifp) {
char src_str[100]; zlog_warn("%s: (S,G)=%s: multicast not enabled on interface %s",
char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str));
zlog_warn("%s: (S,G)=(%s,%s): multicast not enabled on interface %s",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str, ch->interface->name); pim_str_sg_dump (&ch->sg), ch->interface->name);
return 0; /* false */ return 0; /* false */
} }
@ -227,13 +215,9 @@ int pim_macro_ch_could_assert_eval(const struct pim_ifchannel *ch)
ifp = ch->interface; ifp = ch->interface;
if (!ifp) { if (!ifp) {
char src_str[100]; zlog_warn("%s: (S,G)=%s: null interface",
char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str));
zlog_warn("%s: (S,G)=(%s,%s): null interface",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str); pim_str_sg_dump (&ch->sg));
return 0; /* false */ return 0; /* false */
} }
@ -388,25 +372,17 @@ int pim_macro_assert_tracking_desired_eval(const struct pim_ifchannel *ch)
ifp = ch->interface; ifp = ch->interface;
if (!ifp) { if (!ifp) {
char src_str[100]; zlog_warn("%s: (S,G)=%s: null interface",
char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str));
zlog_warn("%s: (S,G)=(%s,%s): null interface",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str); pim_str_sg_dump (&ch->sg));
return 0; /* false */ return 0; /* false */
} }
pim_ifp = ifp->info; pim_ifp = ifp->info;
if (!pim_ifp) { if (!pim_ifp) {
char src_str[100]; zlog_warn("%s: (S,G)=%s: multicast not enabled on interface %s",
char grp_str[100];
pim_inet4_dump("<src?>", ch->source_addr, src_str, sizeof(src_str));
pim_inet4_dump("<grp?>", ch->group_addr, grp_str, sizeof(grp_str));
zlog_warn("%s: (S,G)=(%s,%s): multicast not enabled on interface %s",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
src_str, grp_str, ch->interface->name); pim_str_sg_dump (&ch->sg), ch->interface->name);
return 0; /* false */ return 0; /* false */
} }

View File

@ -43,3 +43,16 @@ void pim_inet4_dump(const char *onfail, struct in_addr addr, char *buf, int buf_
errno = save_errno; errno = save_errno;
} }
char *
pim_str_sg_dump (const struct prefix *sg)
{
char src_str[100];
char grp_str[100];
static char sg_str[200];
pim_inet4_dump ("<src?>", sg->u.sg.src, src_str, sizeof(src_str));
pim_inet4_dump ("<grp?>", sg->u.sg.grp, grp_str, sizeof(grp_str));
snprintf (sg_str, 200, "(%s,%s)", src_str, grp_str);
return sg_str;
}

View File

@ -27,6 +27,9 @@
#include <sys/socket.h> #include <sys/socket.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <prefix.h>
void pim_inet4_dump(const char *onfail, struct in_addr addr, char *buf, int buf_size); void pim_inet4_dump(const char *onfail, struct in_addr addr, char *buf, int buf_size);
char *pim_str_sg_dump (const struct prefix *sg);
#endif #endif

View File

@ -1130,8 +1130,8 @@ void pim_forward_start(struct pim_ifchannel *ch)
char group_str[100]; char group_str[100];
char upstream_str[100]; char upstream_str[100];
pim_inet4_dump("<source?>", ch->source_addr, source_str, sizeof(source_str)); pim_inet4_dump("<source?>", ch->sg.u.sg.src, source_str, sizeof(source_str));
pim_inet4_dump("<group?>", ch->group_addr, group_str, sizeof(group_str)); pim_inet4_dump("<group?>", ch->sg.u.sg.grp, group_str, sizeof(group_str));
pim_inet4_dump("<upstream?>", up->upstream_addr, upstream_str, sizeof(upstream_str)); pim_inet4_dump("<upstream?>", up->upstream_addr, upstream_str, sizeof(upstream_str));
zlog_debug("%s: (S,G)=(%s,%s) oif=%s(%s)", zlog_debug("%s: (S,G)=(%s,%s) oif=%s(%s)",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
@ -1175,8 +1175,8 @@ void pim_forward_stop(struct pim_ifchannel *ch)
if (PIM_DEBUG_PIM_TRACE) { if (PIM_DEBUG_PIM_TRACE) {
char source_str[100]; char source_str[100];
char group_str[100]; char group_str[100];
pim_inet4_dump("<source?>", ch->source_addr, source_str, sizeof(source_str)); pim_inet4_dump("<source?>", ch->sg.u.sg.src, source_str, sizeof(source_str));
pim_inet4_dump("<group?>", ch->group_addr, group_str, sizeof(group_str)); pim_inet4_dump("<group?>", ch->sg.u.sg.grp, group_str, sizeof(group_str));
zlog_debug("%s: (S,G)=(%s,%s) oif=%s", zlog_debug("%s: (S,G)=(%s,%s) oif=%s",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
source_str, group_str, ch->interface->name); source_str, group_str, ch->interface->name);
@ -1185,8 +1185,8 @@ void pim_forward_stop(struct pim_ifchannel *ch)
if (!up->channel_oil) { if (!up->channel_oil) {
char source_str[100]; char source_str[100];
char group_str[100]; char group_str[100];
pim_inet4_dump("<source?>", ch->source_addr, source_str, sizeof(source_str)); pim_inet4_dump("<source?>", ch->sg.u.sg.src, source_str, sizeof(source_str));
pim_inet4_dump("<group?>", ch->group_addr, group_str, sizeof(group_str)); pim_inet4_dump("<group?>", ch->sg.u.sg.grp, group_str, sizeof(group_str));
zlog_warn("%s: (S,G)=(%s,%s) oif=%s missing channel OIL", zlog_warn("%s: (S,G)=(%s,%s) oif=%s missing channel OIL",
__PRETTY_FUNCTION__, __PRETTY_FUNCTION__,
source_str, group_str, ch->interface->name); source_str, group_str, ch->interface->name);