vrrpd: send ND Router Advertisements

Send ND Router Advertisements when IPv6 VR is in Master state.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
Quentin Young 2019-01-28 20:15:00 +00:00
parent 4f52e9a685
commit f3fe004780
4 changed files with 19 additions and 3 deletions

View File

@ -34,6 +34,7 @@
#include "vrrp_arp.h" #include "vrrp_arp.h"
#include "vrrp_ndisc.h" #include "vrrp_ndisc.h"
#include "vrrp_packet.h" #include "vrrp_packet.h"
#include "vrrp_zebra.h"
#define VRRP_LOGPFX "[CORE] " #define VRRP_LOGPFX "[CORE] "
@ -900,7 +901,9 @@ DEFINE_HOOK(vrrp_change_state_hook, (struct vrrp_router * r, int to), (r, to));
*/ */
static void vrrp_change_state_master(struct vrrp_router *r) static void vrrp_change_state_master(struct vrrp_router *r)
{ {
/* NOTHING */ /* Enable ND Router Advertisements */
if (r->family == AF_INET6)
vrrp_zebra_radv_set(r, true);
} }
/* /*
@ -911,8 +914,9 @@ static void vrrp_change_state_master(struct vrrp_router *r)
*/ */
static void vrrp_change_state_backup(struct vrrp_router *r) static void vrrp_change_state_backup(struct vrrp_router *r)
{ {
/* Uninstall ARP entry for router MAC */ /* Disable ND Router Advertisements */
/* ... */ if (r->family == AF_INET6)
vrrp_zebra_radv_set(r, false);
} }
/* /*
@ -929,6 +933,10 @@ static void vrrp_change_state_initialize(struct vrrp_router *r)
r->vr->advertisement_interval = r->vr->advertisement_interval; r->vr->advertisement_interval = r->vr->advertisement_interval;
r->master_adver_interval = 0; r->master_adver_interval = 0;
vrrp_recalculate_timers(r); vrrp_recalculate_timers(r);
/* Disable ND Router Advertisements */
if (r->family == AF_INET6)
vrrp_zebra_radv_set(r, false);
} }
void (*vrrp_change_state_handlers[])(struct vrrp_router *vr) = { void (*vrrp_change_state_handlers[])(struct vrrp_router *vr) = {

View File

@ -34,6 +34,7 @@
/* Global definitions */ /* Global definitions */
#define VRRP_DEFAULT_ADVINT 100 #define VRRP_DEFAULT_ADVINT 100
#define VRRP_DEFAULT_PRIORITY 100 #define VRRP_DEFAULT_PRIORITY 100
#define VRRP_RADV_INT 16
#define VRRP_PRIO_MASTER 255 #define VRRP_PRIO_MASTER 255
#define VRRP_MCASTV4_GROUP_STR "224.0.0.18" #define VRRP_MCASTV4_GROUP_STR "224.0.0.18"
#define VRRP_MCASTV6_GROUP_STR "ff02:0:0:0:0:0:0:12" #define VRRP_MCASTV6_GROUP_STR "ff02:0:0:0:0:0:0:12"

View File

@ -220,6 +220,12 @@ static int vrrp_zebra_if_address_del(int command, struct zclient *client,
return 0; return 0;
} }
void vrrp_zebra_radv_set(struct vrrp_router *r, bool enable)
{
zclient_send_interface_radv_req(zclient, VRF_DEFAULT, r->mvl_ifp,
enable, VRRP_RADV_INT);
}
void vrrp_zebra_init(void) void vrrp_zebra_init(void)
{ {
/* Socket for receiving updates from Zebra daemon */ /* Socket for receiving updates from Zebra daemon */

View File

@ -21,4 +21,5 @@
#define __VRRP_ZEBRA_H__ #define __VRRP_ZEBRA_H__
extern void vrrp_zebra_init(void); extern void vrrp_zebra_init(void);
extern void vrrp_zebra_radv_set(struct vrrp_router *r, bool enable);
#endif #endif