diff options
author | Leonard Herve <leonard.herve@yahoo.fr> | 2009-08-11 15:51:52 -0300 |
---|---|---|
committer | Everton Marques <everton.marques@gmail.com> | 2009-10-02 10:44:31 -0300 |
commit | 834200830bd0a27c09465b6e23941364a149b9a3 (patch) | |
tree | b2e849b56035fee771c7e0f841c184093658a4e4 /pimd/pim_neighbor.c | |
parent | 077339fc42d51afb3e936171d112b1da8519220a (diff) | |
download | quagga-834200830bd0a27c09465b6e23941364a149b9a3.tar.bz2 quagga-834200830bd0a27c09465b6e23941364a149b9a3.tar.xz |
[pim] igmpv3: specific query interval set to 1 second (RFC 3376 8.8.)
[pim] pim messages: encoded source address format with Sparse bit=1 (RFC 4601 4.9.1.)
[pim] and Mask Len MUST be equal to 32
[pim] dr election: new traces
[pim] fix triggered_hello_delay_msec randomization
Diffstat (limited to 'pimd/pim_neighbor.c')
-rw-r--r-- | pimd/pim_neighbor.c | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/pimd/pim_neighbor.c b/pimd/pim_neighbor.c index 67aa9d08..b4112edf 100644 --- a/pimd/pim_neighbor.c +++ b/pimd/pim_neighbor.c @@ -46,6 +46,10 @@ static void dr_election_by_addr(struct interface *ifp) pim_ifp->pim_dr_addr = pim_ifp->primary_address; + zlog_info("%s on interface %s", + __PRETTY_FUNCTION__, + ifp->name); + for (ALL_LIST_ELEMENTS_RO(pim_ifp->pim_neighbor_list, node, neigh)) { if (ntohl(neigh->source_addr.s_addr) > ntohl(pim_ifp->pim_dr_addr.s_addr)) { pim_ifp->pim_dr_addr = neigh->source_addr; @@ -66,7 +70,15 @@ static void dr_election_by_pri(struct interface *ifp) pim_ifp->pim_dr_addr = pim_ifp->primary_address; dr_pri = pim_ifp->pim_dr_priority; + zlog_info("%s: dr pri %u on interface %s", + __PRETTY_FUNCTION__, + dr_pri, ifp->name); + + for (ALL_LIST_ELEMENTS_RO(pim_ifp->pim_neighbor_list, node, neigh)) { + zlog_info("%s: neigh pri %u addr %x if dr addr %x", + __PRETTY_FUNCTION__, + neigh->dr_priority, ntohl(neigh->source_addr.s_addr) , ntohl(pim_ifp->pim_dr_addr.s_addr) ); if ( (neigh->dr_priority > dr_pri) || ( @@ -91,6 +103,8 @@ void pim_if_dr_election(struct interface *ifp) { struct pim_interface *pim_ifp = ifp->info; struct in_addr old_dr_addr; + char dr_old_str[100]; + char dr_new_str[100]; pim_ifp->pim_dr_election_last = pim_time_monotonic_sec(); /* timestamp */ ++pim_ifp->pim_dr_election_count; @@ -104,16 +118,22 @@ void pim_if_dr_election(struct interface *ifp) dr_election_by_pri(ifp); } - /* DR changed ? */ - if (old_dr_addr.s_addr != pim_ifp->pim_dr_addr.s_addr) { - char dr_old_str[100]; - char dr_new_str[100]; - pim_inet4_dump("<old_dr?>", old_dr_addr, dr_old_str, sizeof(dr_old_str)); - pim_inet4_dump("<new_dr?>", pim_ifp->pim_dr_addr, dr_new_str, sizeof(dr_new_str)); - zlog_info("%s: DR was %s now is %s on interface %s", + pim_inet4_dump("<old_dr?>", old_dr_addr, dr_old_str, sizeof(dr_old_str)); + pim_inet4_dump("<new_dr?>", pim_ifp->pim_dr_addr, dr_new_str, sizeof(dr_new_str)); + zlog_info("%s: DR was %s now is %s on interface %s", __PRETTY_FUNCTION__, dr_old_str, dr_new_str, ifp->name); + /* DR changed ? */ + if (old_dr_addr.s_addr != pim_ifp->pim_dr_addr.s_addr) { + /* char dr_old_str[100]; */ + /* char dr_new_str[100]; */ + /* pim_inet4_dump("<old_dr?>", old_dr_addr, dr_old_str, sizeof(dr_old_str)); */ + /* pim_inet4_dump("<new_dr?>", pim_ifp->pim_dr_addr, dr_new_str, sizeof(dr_new_str)); */ + /* zlog_info("%s: DR was %s now is %s on interface %s", */ + /* __PRETTY_FUNCTION__, */ + /* dr_old_str, dr_new_str, ifp->name); */ + pim_if_update_join_desired(pim_ifp); pim_if_update_could_assert(ifp); pim_if_update_assert_tracking_desired(ifp); |