summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--zebra/connected.c28
-rw-r--r--zebra/connected.h5
-rw-r--r--zebra/if_ioctl.c27
-rw-r--r--zebra/if_ioctl_solaris.c3
-rw-r--r--zebra/if_netlink.c6
-rw-r--r--zebra/kernel_socket.c4
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... */