summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debianpkg/Makefile.am1
-rw-r--r--zebra/if_netlink.c10
-rw-r--r--zebra/ioctl.c39
-rw-r--r--zebra/rt.h2
4 files changed, 21 insertions, 31 deletions
diff --git a/debianpkg/Makefile.am b/debianpkg/Makefile.am
index 6bb01dffba..06e5bda3d4 100644
--- a/debianpkg/Makefile.am
+++ b/debianpkg/Makefile.am
@@ -35,6 +35,7 @@ EXTRA_DIST = README.Debian README.Maintainer \
backports/ubuntu17.10/versionext \
frr-doc.docs frr-doc.info frr-doc.install \
frr-doc.lintian-overrides frr.conf \
+ frr-dbg.lintian-overrides \
frr.dirs frr.docs frr.install \
frr.lintian-overrides frr.logrotate \
frr.manpages frr.pam frr.postinst frr.postrm \
diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c
index af17e49231..f73506bf91 100644
--- a/zebra/if_netlink.c
+++ b/zebra/if_netlink.c
@@ -838,6 +838,16 @@ int kernel_address_delete_ipv4(struct interface *ifp, struct connected *ifc)
return netlink_address(RTM_DELADDR, AF_INET, ifp, ifc);
}
+int kernel_address_add_ipv6 (struct interface *ifp, struct connected *ifc)
+{
+ return netlink_address (RTM_NEWADDR, AF_INET6, ifp, ifc);
+}
+
+int kernel_address_delete_ipv6 (struct interface *ifp, struct connected *ifc)
+{
+ return netlink_address (RTM_DELADDR, AF_INET6, ifp, ifc);
+}
+
int netlink_interface_addr(struct sockaddr_nl *snl, struct nlmsghdr *h,
ns_id_t ns_id, int startup)
{
diff --git a/zebra/ioctl.c b/zebra/ioctl.c
index 58118ce006..8e3a1d1a03 100644
--- a/zebra/ioctl.c
+++ b/zebra/ioctl.c
@@ -78,6 +78,7 @@ int if_ioctl(u_long request, caddr_t buffer)
return 0;
}
+#ifndef HAVE_NETLINK
static int if_ioctl_ipv6(u_long request, caddr_t buffer)
{
int sock;
@@ -108,6 +109,7 @@ static int if_ioctl_ipv6(u_long request, caddr_t buffer)
}
return 0;
}
+#endif /* ! HAVE_NETLINK */
/*
* get interface metric
@@ -460,44 +462,19 @@ struct in6_ifreq {
int ifr6_ifindex;
};
#endif /* _LINUX_IN6_H */
-
/* Interface's address add/delete functions. */
int if_prefix_add_ipv6(struct interface *ifp, struct connected *ifc)
{
- int ret;
- struct prefix_ipv6 *p;
- struct in6_ifreq ifreq;
-
- p = (struct prefix_ipv6 *)ifc->address;
-
- memset(&ifreq, 0, sizeof(struct in6_ifreq));
-
- memcpy(&ifreq.ifr6_addr, &p->prefix, sizeof(struct in6_addr));
- ifreq.ifr6_ifindex = ifp->ifindex;
- ifreq.ifr6_prefixlen = p->prefixlen;
-
- ret = if_ioctl_ipv6(SIOCSIFADDR, (caddr_t)&ifreq);
-
- return ret;
+#ifdef HAVE_NETLINK
+ return kernel_address_add_ipv6 (ifp, ifc);
+#endif /* HAVE_NETLINK */
}
int if_prefix_delete_ipv6(struct interface *ifp, struct connected *ifc)
{
- int ret;
- struct prefix_ipv6 *p;
- struct in6_ifreq ifreq;
-
- p = (struct prefix_ipv6 *)ifc->address;
-
- memset(&ifreq, 0, sizeof(struct in6_ifreq));
-
- memcpy(&ifreq.ifr6_addr, &p->prefix, sizeof(struct in6_addr));
- ifreq.ifr6_ifindex = ifp->ifindex;
- ifreq.ifr6_prefixlen = p->prefixlen;
-
- ret = if_ioctl_ipv6(SIOCDIFADDR, (caddr_t)&ifreq);
-
- return ret;
+#ifdef HAVE_NETLINK
+ return kernel_address_delete_ipv6 (ifp, ifc);
+#endif /* HAVE_NETLINK */
}
#else /* LINUX_IPV6 */
#ifdef HAVE_STRUCT_IN6_ALIASREQ
diff --git a/zebra/rt.h b/zebra/rt.h
index 424319878d..7f5bb4dd34 100644
--- a/zebra/rt.h
+++ b/zebra/rt.h
@@ -74,6 +74,8 @@ extern void kernel_route_rib_pass_fail(struct prefix *p,
extern int kernel_address_add_ipv4(struct interface *, struct connected *);
extern int kernel_address_delete_ipv4(struct interface *, struct connected *);
+extern int kernel_address_add_ipv6 (struct interface *, struct connected *);
+extern int kernel_address_delete_ipv6 (struct interface *, struct connected *);
extern int kernel_neigh_update(int, int, uint32_t, char *, int);
extern int kernel_interface_set_master(struct interface *master,
struct interface *slave);