summaryrefslogtreecommitdiffstats
path: root/pimd/pim_neighbor.c
diff options
context:
space:
mode:
authorLeonard Herve <leonard.herve@yahoo.fr>2009-08-11 15:51:52 -0300
committerEverton Marques <everton.marques@gmail.com>2009-10-02 10:44:31 -0300
commit834200830bd0a27c09465b6e23941364a149b9a3 (patch)
treeb2e849b56035fee771c7e0f841c184093658a4e4 /pimd/pim_neighbor.c
parent077339fc42d51afb3e936171d112b1da8519220a (diff)
downloadquagga-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.c34
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);