mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 09:30:30 +00:00
Merge pull request #9708 from mobash-rasool/new_b
pimd: hello sent stats counter change and new flag addition to decide hello send
This commit is contained in:
commit
d047ba78d2
@ -545,7 +545,7 @@ void pim_hello_require(struct interface *ifp)
|
|||||||
|
|
||||||
assert(pim_ifp);
|
assert(pim_ifp);
|
||||||
|
|
||||||
if (pim_ifp->pim_ifstat_hello_sent)
|
if (PIM_IF_FLAG_TEST_HELLO_SENT(pim_ifp->flags))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pim_hello_restart_now(ifp); /* Send hello and restart timer */
|
pim_hello_restart_now(ifp); /* Send hello and restart timer */
|
||||||
|
@ -289,7 +289,7 @@ static void pim_addr_change(struct interface *ifp)
|
|||||||
HoldTime should be sent immediately.
|
HoldTime should be sent immediately.
|
||||||
-- FIXME See TODO T31
|
-- FIXME See TODO T31
|
||||||
*/
|
*/
|
||||||
pim_ifp->pim_ifstat_hello_sent = 0; /* reset hello counter */
|
PIM_IF_FLAG_UNSET_HELLO_SENT(pim_ifp->flags);
|
||||||
if (pim_ifp->pim_sock_fd < 0)
|
if (pim_ifp->pim_sock_fd < 0)
|
||||||
return;
|
return;
|
||||||
pim_hello_restart_now(ifp); /* send hello and restart timer */
|
pim_hello_restart_now(ifp); /* send hello and restart timer */
|
||||||
@ -1674,8 +1674,10 @@ int pim_ifp_down(struct interface *ifp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ifp->info)
|
if (ifp->info) {
|
||||||
pim_if_del_vif(ifp);
|
pim_if_del_vif(ifp);
|
||||||
|
pim_ifstat_reset(ifp);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -61,6 +61,20 @@
|
|||||||
#define PIM_I_am_DR(pim_ifp) (pim_ifp)->pim_dr_addr.s_addr == (pim_ifp)->primary_address.s_addr
|
#define PIM_I_am_DR(pim_ifp) (pim_ifp)->pim_dr_addr.s_addr == (pim_ifp)->primary_address.s_addr
|
||||||
#define PIM_I_am_DualActive(pim_ifp) (pim_ifp)->activeactive == true
|
#define PIM_I_am_DualActive(pim_ifp) (pim_ifp)->activeactive == true
|
||||||
|
|
||||||
|
/* Macros for interface flags */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PIM needs to know if hello is required to send before other PIM messages
|
||||||
|
* like Join, prune, assert would go out
|
||||||
|
*/
|
||||||
|
#define PIM_IF_FLAG_HELLO_SENT (1 << 0)
|
||||||
|
|
||||||
|
#define PIM_IF_FLAG_TEST_HELLO_SENT(flags) ((flags)&PIM_IF_FLAG_HELLO_SENT)
|
||||||
|
|
||||||
|
#define PIM_IF_FLAG_SET_HELLO_SENT(flags) ((flags) |= PIM_IF_FLAG_HELLO_SENT)
|
||||||
|
|
||||||
|
#define PIM_IF_FLAG_UNSET_HELLO_SENT(flags) ((flags) &= ~PIM_IF_FLAG_HELLO_SENT)
|
||||||
|
|
||||||
struct pim_iface_upstream_switch {
|
struct pim_iface_upstream_switch {
|
||||||
struct in_addr address;
|
struct in_addr address;
|
||||||
struct list *us;
|
struct list *us;
|
||||||
@ -161,6 +175,7 @@ struct pim_interface {
|
|||||||
uint32_t pim_ifstat_bsm_cfg_miss;
|
uint32_t pim_ifstat_bsm_cfg_miss;
|
||||||
uint32_t pim_ifstat_ucast_bsm_cfg_miss;
|
uint32_t pim_ifstat_ucast_bsm_cfg_miss;
|
||||||
uint32_t pim_ifstat_bsm_invalid_sz;
|
uint32_t pim_ifstat_bsm_invalid_sz;
|
||||||
|
uint8_t flags;
|
||||||
bool bsm_enable; /* bsm processing enable */
|
bool bsm_enable; /* bsm processing enable */
|
||||||
bool ucast_bsm_accept; /* ucast bsm processing */
|
bool ucast_bsm_accept; /* ucast bsm processing */
|
||||||
|
|
||||||
|
@ -341,7 +341,7 @@ pim_neighbor_new(struct interface *ifp, struct in_addr source_addr,
|
|||||||
* reset the value so that we can know to hurry up and
|
* reset the value so that we can know to hurry up and
|
||||||
* hello
|
* hello
|
||||||
*/
|
*/
|
||||||
pim_ifp->pim_ifstat_hello_sent = 0;
|
PIM_IF_FLAG_UNSET_HELLO_SENT(pim_ifp->flags);
|
||||||
|
|
||||||
pim_inet4_dump("<src?>", source_addr, src_str, sizeof(src_str));
|
pim_inet4_dump("<src?>", source_addr, src_str, sizeof(src_str));
|
||||||
|
|
||||||
|
@ -454,6 +454,21 @@ void pim_ifstat_reset(struct interface *ifp)
|
|||||||
pim_ifp->pim_ifstat_hello_sendfail = 0;
|
pim_ifp->pim_ifstat_hello_sendfail = 0;
|
||||||
pim_ifp->pim_ifstat_hello_recv = 0;
|
pim_ifp->pim_ifstat_hello_recv = 0;
|
||||||
pim_ifp->pim_ifstat_hello_recvfail = 0;
|
pim_ifp->pim_ifstat_hello_recvfail = 0;
|
||||||
|
pim_ifp->pim_ifstat_bsm_rx = 0;
|
||||||
|
pim_ifp->pim_ifstat_bsm_tx = 0;
|
||||||
|
pim_ifp->pim_ifstat_join_recv = 0;
|
||||||
|
pim_ifp->pim_ifstat_join_send = 0;
|
||||||
|
pim_ifp->pim_ifstat_prune_recv = 0;
|
||||||
|
pim_ifp->pim_ifstat_prune_send = 0;
|
||||||
|
pim_ifp->pim_ifstat_reg_recv = 0;
|
||||||
|
pim_ifp->pim_ifstat_reg_send = 0;
|
||||||
|
pim_ifp->pim_ifstat_reg_stop_recv = 0;
|
||||||
|
pim_ifp->pim_ifstat_reg_stop_send = 0;
|
||||||
|
pim_ifp->pim_ifstat_assert_recv = 0;
|
||||||
|
pim_ifp->pim_ifstat_assert_send = 0;
|
||||||
|
pim_ifp->pim_ifstat_bsm_cfg_miss = 0;
|
||||||
|
pim_ifp->pim_ifstat_ucast_bsm_cfg_miss = 0;
|
||||||
|
pim_ifp->pim_ifstat_bsm_invalid_sz = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void pim_sock_reset(struct interface *ifp)
|
void pim_sock_reset(struct interface *ifp)
|
||||||
@ -706,6 +721,7 @@ int pim_hello_send(struct interface *ifp, uint16_t holdtime)
|
|||||||
}
|
}
|
||||||
|
|
||||||
++pim_ifp->pim_ifstat_hello_sent;
|
++pim_ifp->pim_ifstat_hello_sent;
|
||||||
|
PIM_IF_FLAG_SET_HELLO_SENT(pim_ifp->flags);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -954,11 +954,13 @@ def test_PIM_hello_tx_rx_p1(request):
|
|||||||
tc_name, result
|
tc_name, result
|
||||||
)
|
)
|
||||||
|
|
||||||
step("verify stats not increamented on c1")
|
step("verify stats incremented on c1")
|
||||||
result = verify_state_incremented(c1_state_before, c1_state_after)
|
result = verify_state_incremented(c1_state_before, c1_state_after)
|
||||||
assert (
|
assert (
|
||||||
result is not True
|
result is True
|
||||||
), "Testcase{} : Failed Error: {}" "stats incremented".format(tc_name, result)
|
), "Testcase{} : Failed Error: {}" "stats is not incremented".format(
|
||||||
|
tc_name, result
|
||||||
|
)
|
||||||
|
|
||||||
step("verify before stats on l1")
|
step("verify before stats on l1")
|
||||||
l1_state_dict = {
|
l1_state_dict = {
|
||||||
@ -991,7 +993,7 @@ def test_PIM_hello_tx_rx_p1(request):
|
|||||||
tc_name, result
|
tc_name, result
|
||||||
)
|
)
|
||||||
|
|
||||||
step("verify stats not increamented on l1")
|
step("verify stats not incremented on l1")
|
||||||
result = verify_state_incremented(l1_state_before, l1_state_after)
|
result = verify_state_incremented(l1_state_before, l1_state_after)
|
||||||
assert (
|
assert (
|
||||||
result is not True
|
result is not True
|
||||||
@ -1041,10 +1043,10 @@ def test_PIM_hello_tx_rx_p1(request):
|
|||||||
tc_name, result
|
tc_name, result
|
||||||
)
|
)
|
||||||
|
|
||||||
step("verify stats not increamented on c1")
|
step("verify stats incremented on c1")
|
||||||
result = verify_state_incremented(c1_state_before, c1_state_after)
|
result = verify_state_incremented(c1_state_before, c1_state_after)
|
||||||
assert (
|
assert (
|
||||||
result is not True
|
result is True
|
||||||
), "Testcase{} : Failed Error: {}" "stats incremented".format(tc_name, result)
|
), "Testcase{} : Failed Error: {}" "stats incremented".format(tc_name, result)
|
||||||
|
|
||||||
write_test_footer(tc_name)
|
write_test_footer(tc_name)
|
||||||
|
Loading…
Reference in New Issue
Block a user