summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@cumulusnetworks.com>2019-02-14 23:40:20 +0000
committerQuentin Young <qlyoung@cumulusnetworks.com>2019-05-17 00:27:08 +0000
commit22e4b6a73dd604c65a66a634481e4929a444b6f4 (patch)
tree93c24e095afca4ec42be548c81144f70b895d7b4
parent6e93585e6f4f837e3f1912e1877b72d7ca7544f9 (diff)
vrrpd: only bind to link locals for v6 adverts
Was missing a check to make sure that the v6 address we select as the source IP for advertisements was a link local address Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
-rw-r--r--vrrpd/vrrp.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/vrrpd/vrrp.c b/vrrpd/vrrp.c
index bf4f0f1ec9..113e42490d 100644
--- a/vrrpd/vrrp.c
+++ b/vrrpd/vrrp.c
@@ -851,8 +851,13 @@ static int vrrp_bind_to_primary_connected(struct vrrp_router *r)
struct listnode *ln;
struct connected *c = NULL;
for (ALL_LIST_ELEMENTS_RO(ifp->connected, ln, c))
- if (c->address->family == r->family)
- break;
+ if (c->address->family == r->family) {
+ if (r->family == AF_INET6
+ && IN6_IS_ADDR_LINKLOCAL(&c->address->u.prefix6))
+ break;
+ else if (r->family == AF_INET)
+ break;
+ }
if (c == NULL) {
zlog_err(VRRP_LOGPFX VRRP_LOGPFX_VRID