vrrpd: make vrrp_[add|del]_ip not insane

For some reason I made these functions require you to pass the correct
(v4 or v6) router when we could determine it from the type of address
passed; fix this

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
Quentin Young 2019-09-11 20:27:37 +00:00
parent 0dcbec72aa
commit 671fd2a318
2 changed files with 16 additions and 11 deletions

View File

@ -397,9 +397,10 @@ static bool vrrp_has_ip(struct vrrp_vrouter *vr, struct ipaddr *ip)
return false; return false;
} }
int vrrp_add_ip(struct vrrp_router *r, struct ipaddr *ip) int vrrp_add_ip(struct vrrp_vrouter *vr, struct ipaddr *ip)
{ {
int af = (ip->ipa_type == IPADDR_V6) ? AF_INET6 : AF_INET; struct vrrp_router *r = IS_IPADDR_V4(ip) ? vr->v4 : vr->v6;
int af = r->family;
assert(r->family == af); assert(r->family == af);
assert(!(r->vr->version == 2 && ip->ipa_type == IPADDR_V6)); assert(!(r->vr->version == 2 && ip->ipa_type == IPADDR_V6));
@ -443,7 +444,7 @@ int vrrp_add_ipv4(struct vrrp_vrouter *vr, struct in_addr v4)
ip.ipa_type = IPADDR_V4; ip.ipa_type = IPADDR_V4;
ip.ipaddr_v4 = v4; ip.ipaddr_v4 = v4;
return vrrp_add_ip(vr->v4, &ip); return vrrp_add_ip(vr, &ip);
} }
int vrrp_add_ipv6(struct vrrp_vrouter *vr, struct in6_addr v6) int vrrp_add_ipv6(struct vrrp_vrouter *vr, struct in6_addr v6)
@ -454,15 +455,19 @@ int vrrp_add_ipv6(struct vrrp_vrouter *vr, struct in6_addr v6)
ip.ipa_type = IPADDR_V6; ip.ipa_type = IPADDR_V6;
ip.ipaddr_v6 = v6; ip.ipaddr_v6 = v6;
return vrrp_add_ip(vr->v6, &ip); return vrrp_add_ip(vr, &ip);
} }
int vrrp_del_ip(struct vrrp_router *r, struct ipaddr *ip)
int vrrp_del_ip(struct vrrp_vrouter *vr, struct ipaddr *ip)
{ {
struct listnode *ln, *nn; struct listnode *ln, *nn;
struct ipaddr *iter; struct ipaddr *iter;
int ret = 0; int ret = 0;
struct vrrp_router *r = IS_IPADDR_V4(ip) ? vr->v4 : vr->v6;
if (!vrrp_has_ip(r->vr, ip)) if (!vrrp_has_ip(r->vr, ip))
return 0; return 0;
@ -488,7 +493,7 @@ int vrrp_del_ipv6(struct vrrp_vrouter *vr, struct in6_addr v6)
ip.ipa_type = IPADDR_V6; ip.ipa_type = IPADDR_V6;
ip.ipaddr_v6 = v6; ip.ipaddr_v6 = v6;
return vrrp_del_ip(vr->v6, &ip); return vrrp_del_ip(vr, &ip);
} }
int vrrp_del_ipv4(struct vrrp_vrouter *vr, struct in_addr v4) int vrrp_del_ipv4(struct vrrp_vrouter *vr, struct in_addr v4)
@ -497,7 +502,7 @@ int vrrp_del_ipv4(struct vrrp_vrouter *vr, struct in_addr v4)
ip.ipa_type = IPADDR_V4; ip.ipa_type = IPADDR_V4;
ip.ipaddr_v4 = v4; ip.ipaddr_v4 = v4;
return vrrp_del_ip(vr->v4, &ip); return vrrp_del_ip(vr, &ip);
} }

View File

@ -340,7 +340,7 @@ void vrrp_set_advertisement_interval(struct vrrp_vrouter *vr,
/* /*
* Add an IPvX address to a VRRP Virtual Router. * Add an IPvX address to a VRRP Virtual Router.
* *
* r * vr
* Virtual Router to add IPvx address to * Virtual Router to add IPvx address to
* *
* ip * ip
@ -354,7 +354,7 @@ void vrrp_set_advertisement_interval(struct vrrp_vrouter *vr,
* -1 on error * -1 on error
* 0 otherwise * 0 otherwise
*/ */
int vrrp_add_ip(struct vrrp_router *r, struct ipaddr *ip); int vrrp_add_ip(struct vrrp_vrouter *vr, struct ipaddr *ip);
/* /*
* Add an IPv4 address to a VRRP Virtual Router. * Add an IPv4 address to a VRRP Virtual Router.
@ -397,7 +397,7 @@ int vrrp_add_ipv6(struct vrrp_vrouter *vr, struct in6_addr v6);
/* /*
* Remove an IP address from a VRRP Virtual Router. * Remove an IP address from a VRRP Virtual Router.
* *
* r * vr
* Virtual Router to remove IP address from * Virtual Router to remove IP address from
* *
* ip * ip
@ -413,7 +413,7 @@ int vrrp_add_ipv6(struct vrrp_vrouter *vr, struct in6_addr v6);
* -1 on error * -1 on error
* 0 otherwise * 0 otherwise
*/ */
int vrrp_del_ip(struct vrrp_router *r, struct ipaddr *ip); int vrrp_del_ip(struct vrrp_vrouter *vr, struct ipaddr *ip);
/* /*
* Remove an IPv4 address from a VRRP Virtual Router. * Remove an IPv4 address from a VRRP Virtual Router.