mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 01:37:53 +00:00
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:
parent
4f52e9a685
commit
f3fe004780
14
vrrpd/vrrp.c
14
vrrpd/vrrp.c
@ -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) = {
|
||||||
|
@ -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"
|
||||||
|
@ -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 */
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user