From 608105a73eb8f24ad8f6124dfcc82ac62bd99bff Mon Sep 17 00:00:00 2001 From: David Lamparter Date: Mon, 28 Aug 2017 04:39:18 +0200 Subject: [PATCH] zebra: drop IPv6 "broadcast" and "peer" addr code There is no such thing as an IPv6 "broadcast" or "peer" address. Signed-off-by: David Lamparter --- zebra/connected.c | 28 ++-------------------------- zebra/connected.h | 5 ++--- zebra/if_ioctl.c | 27 ++------------------------- zebra/if_ioctl_solaris.c | 3 +-- zebra/if_netlink.c | 6 ++---- zebra/kernel_socket.c | 4 +--- 6 files changed, 10 insertions(+), 63 deletions(-) diff --git a/zebra/connected.c b/zebra/connected.c index 1368a12289..387ad9c41d 100644 --- a/zebra/connected.c +++ b/zebra/connected.c @@ -463,8 +463,7 @@ void connected_up_ipv6(struct interface *ifp, struct connected *ifc) /* Add connected IPv6 route to the interface. */ void connected_add_ipv6(struct interface *ifp, int flags, struct in6_addr *addr, - u_char prefixlen, struct in6_addr *broad, - const char *label) + u_char prefixlen, const char *label) { struct prefix_ipv6 *p; struct connected *ifc; @@ -487,29 +486,6 @@ void connected_add_ipv6(struct interface *ifp, int flags, struct in6_addr *addr, p->prefixlen = prefixlen; ifc->address = (struct prefix *)p; - /* If there is broadcast or peer address. */ - if (broad) { - if (IN6_IS_ADDR_UNSPECIFIED(broad)) - zlog_warn( - "warning: %s called for interface %s with unspecified " - "destination address; ignoring!", - __func__, ifp->name); - else { - p = prefix_ipv6_new(); - p->family = AF_INET6; - IPV6_ADDR_COPY(&p->prefix, broad); - p->prefixlen = prefixlen; - ifc->destination = (struct prefix *)p; - } - } - if (CHECK_FLAG(ifc->flags, ZEBRA_IFA_PEER) && !ifc->destination) { - zlog_warn( - "warning: %s called for interface %s " - "with peer flag set, but no peer address supplied", - __func__, ifp->name); - UNSET_FLAG(ifc->flags, ZEBRA_IFA_PEER); - } - /* Label of this address. */ if (label) ifc->label = XSTRDUP(MTYPE_CONNECTED_LABEL, label); @@ -562,7 +538,7 @@ void connected_down_ipv6(struct interface *ifp, struct connected *ifc) } void connected_delete_ipv6(struct interface *ifp, struct in6_addr *address, - u_char prefixlen, struct in6_addr *broad) + u_char prefixlen) { struct prefix_ipv6 p; struct connected *ifc; diff --git a/zebra/connected.h b/zebra/connected.h index b67442fa3b..c6da36956d 100644 --- a/zebra/connected.h +++ b/zebra/connected.h @@ -43,10 +43,9 @@ extern void connected_down_ipv4(struct interface *, struct connected *); extern void connected_add_ipv6(struct interface *ifp, int flags, struct in6_addr *address, u_char prefixlen, - struct in6_addr *broad, const char *label); + const char *label); extern void connected_delete_ipv6(struct interface *ifp, - struct in6_addr *address, u_char prefixlen, - struct in6_addr *broad); + struct in6_addr *address, u_char prefixlen); extern void connected_up_ipv6(struct interface *, struct connected *); extern void connected_down_ipv6(struct interface *ifp, struct connected *); diff --git a/zebra/if_ioctl.c b/zebra/if_ioctl.c index a65fcb2b8c..6396911e1b 100644 --- a/zebra/if_ioctl.c +++ b/zebra/if_ioctl.c @@ -214,7 +214,7 @@ static int if_getaddrs(void) dest_pnt = NULL; - if (ifap->ifa_dstaddr + if (if_is_pointopoint(ifp) && ifap->ifa_dstaddr && !IPV4_ADDR_SAME(&addr->sin_addr, &((struct sockaddr_in *) ifap->ifa_dstaddr) @@ -239,35 +239,12 @@ static int if_getaddrs(void) if (ifap->ifa_addr->sa_family == AF_INET6) { struct sockaddr_in6 *addr; struct sockaddr_in6 *mask; - struct sockaddr_in6 *dest; - struct in6_addr *dest_pnt; int flags = 0; addr = (struct sockaddr_in6 *)ifap->ifa_addr; mask = (struct sockaddr_in6 *)ifap->ifa_netmask; prefixlen = ip6_masklen(mask->sin6_addr); - dest_pnt = NULL; - - if (ifap->ifa_dstaddr - && !IPV6_ADDR_SAME(&addr->sin6_addr, - &((struct sockaddr_in6 *) - ifap->ifa_dstaddr) - ->sin6_addr)) { - dest = (struct sockaddr_in6 *)ifap->ifa_dstaddr; - dest_pnt = &dest->sin6_addr; - flags = ZEBRA_IFA_PEER; - } else if (ifap->ifa_broadaddr - && !IPV6_ADDR_SAME( - &addr->sin6_addr, - &((struct sockaddr_in6 *) - ifap->ifa_broadaddr) - ->sin6_addr)) { - dest = (struct sockaddr_in6 *) - ifap->ifa_broadaddr; - dest_pnt = &dest->sin6_addr; - } - #if defined(KAME) if (IN6_IS_ADDR_LINKLOCAL(&addr->sin6_addr)) { addr->sin6_scope_id = @@ -279,7 +256,7 @@ static int if_getaddrs(void) #endif connected_add_ipv6(ifp, flags, &addr->sin6_addr, - prefixlen, dest_pnt, NULL); + prefixlen, NULL); } } diff --git a/zebra/if_ioctl_solaris.c b/zebra/if_ioctl_solaris.c index 3d53194593..9ec575b5b0 100644 --- a/zebra/if_ioctl_solaris.c +++ b/zebra/if_ioctl_solaris.c @@ -317,8 +317,7 @@ static int if_get_addr(struct interface *ifp, struct sockaddr *addr, (struct in_addr *)dest_pnt, label); else if (af == AF_INET6) connected_add_ipv6(ifp, flags, &SIN6(addr)->sin6_addr, - prefixlen, (struct in6_addr *)dest_pnt, - label); + prefixlen, label); return 0; } diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c index 329f7ee578..9aa560bfa1 100644 --- a/zebra/if_netlink.c +++ b/zebra/if_netlink.c @@ -1001,12 +1001,10 @@ int netlink_interface_addr(struct sockaddr_nl *snl, struct nlmsghdr *h, & (IFA_F_DADFAILED | IFA_F_TENTATIVE))) connected_add_ipv6( ifp, flags, (struct in6_addr *)addr, - ifa->ifa_prefixlen, - (struct in6_addr *)broad, label); + ifa->ifa_prefixlen, label); } else connected_delete_ipv6(ifp, (struct in6_addr *)addr, - ifa->ifa_prefixlen, - (struct in6_addr *)broad); + ifa->ifa_prefixlen); } return 0; diff --git a/zebra/kernel_socket.c b/zebra/kernel_socket.c index e2a1deb9ac..c6fb34562f 100644 --- a/zebra/kernel_socket.c +++ b/zebra/kernel_socket.c @@ -762,12 +762,10 @@ int ifam_read(struct ifa_msghdr *ifam) if (ifam->ifam_type == RTM_NEWADDR) connected_add_ipv6(ifp, flags, &addr.sin6.sin6_addr, ip6_masklen(mask.sin6.sin6_addr), - &brd.sin6.sin6_addr, (isalias ? ifname : NULL)); else connected_delete_ipv6(ifp, &addr.sin6.sin6_addr, - ip6_masklen(mask.sin6.sin6_addr), - &brd.sin6.sin6_addr); + ip6_masklen(mask.sin6.sin6_addr)); break; default: /* Unsupported family silently ignore... */ -- 2.39.5