mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-06-15 20:22:47 +00:00
pimd: Pim hello should be sent with 0 hold time on address change on old src ip
RCA: This was todo item in current code base Fix: Hello sent with 0 hold time before we update the pim ifp primary address Signed-off-by: Saravanan K <saravanank@vmware.com>
This commit is contained in:
parent
7f2ccbe562
commit
b279f95c70
@ -275,7 +275,7 @@ static void pim_addr_change(struct interface *ifp)
|
|||||||
1) Before an interface goes down or changes primary IP address, a
|
1) Before an interface goes down or changes primary IP address, a
|
||||||
Hello message with a zero HoldTime should be sent immediately
|
Hello message with a zero HoldTime should be sent immediately
|
||||||
(with the old IP address if the IP address changed).
|
(with the old IP address if the IP address changed).
|
||||||
-- FIXME See CAVEAT C13
|
-- Done at the caller of the function as new ip already updated here
|
||||||
|
|
||||||
2) After an interface has changed its IP address, it MUST send a
|
2) After an interface has changed its IP address, it MUST send a
|
||||||
Hello message with its new IP address.
|
Hello message with its new IP address.
|
||||||
@ -320,6 +320,10 @@ static int detect_primary_address_change(struct interface *ifp,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (changed) {
|
if (changed) {
|
||||||
|
/* Before updating pim_ifp send Hello time with 0 hold time */
|
||||||
|
if (PIM_IF_TEST_PIM(pim_ifp->options)) {
|
||||||
|
pim_hello_send(ifp, 0 /* zero-sec holdtime */);
|
||||||
|
}
|
||||||
pim_ifp->primary_address = new_prim_addr;
|
pim_ifp->primary_address = new_prim_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,7 +42,6 @@
|
|||||||
#include "pim_bsm.h"
|
#include "pim_bsm.h"
|
||||||
|
|
||||||
static int on_pim_hello_send(struct thread *t);
|
static int on_pim_hello_send(struct thread *t);
|
||||||
static int pim_hello_send(struct interface *ifp, uint16_t holdtime);
|
|
||||||
|
|
||||||
static const char *pim_pim_msgtype2str(enum pim_msg_type type)
|
static const char *pim_pim_msgtype2str(enum pim_msg_type type)
|
||||||
{
|
{
|
||||||
@ -662,7 +661,7 @@ static int hello_send(struct interface *ifp, uint16_t holdtime)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pim_hello_send(struct interface *ifp, uint16_t holdtime)
|
int pim_hello_send(struct interface *ifp, uint16_t holdtime)
|
||||||
{
|
{
|
||||||
struct pim_interface *pim_ifp = ifp->info;
|
struct pim_interface *pim_ifp = ifp->info;
|
||||||
|
|
||||||
|
@ -59,4 +59,5 @@ int pim_pim_packet(struct interface *ifp, uint8_t *buf, size_t len);
|
|||||||
int pim_msg_send(int fd, struct in_addr src, struct in_addr dst,
|
int pim_msg_send(int fd, struct in_addr src, struct in_addr dst,
|
||||||
uint8_t *pim_msg, int pim_msg_size, const char *ifname);
|
uint8_t *pim_msg, int pim_msg_size, const char *ifname);
|
||||||
|
|
||||||
|
int pim_hello_send(struct interface *ifp, uint16_t holdtime);
|
||||||
#endif /* PIM_PIM_H */
|
#endif /* PIM_PIM_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user