Module Name: src
Committed By: roy
Date: Wed Sep 21 10:50:23 UTC 2016
Modified Files:
src/share/man/man4: route.4
src/sys/compat/common: Makefile
src/sys/compat/net: if.h route.h
src/sys/net: if.h route.h rtsock.c
src/sys/rump/net/lib/libnet: Makefile
src/sys/sys: socket.h
Added Files:
src/sys/compat/common: rtsock_70.c
Log Message:
Add ifam_pid and ifam_addrflags to ifa_msghdr.
Re-version RTM_NEWADDR, RTM_DELADDR, RTM_CHGADDR and NET_RT_IFLIST.
Add compat code for old version.
To generate a diff of this commit:
cvs rdiff -u -r1.27 -r1.28 src/share/man/man4/route.4
cvs rdiff -u -r1.56 -r1.57 src/sys/compat/common/Makefile
cvs rdiff -u -r0 -r1.1 src/sys/compat/common/rtsock_70.c
cvs rdiff -u -r1.3 -r1.4 src/sys/compat/net/if.h
cvs rdiff -u -r1.1 -r1.2 src/sys/compat/net/route.h
cvs rdiff -u -r1.225 -r1.226 src/sys/net/if.h
cvs rdiff -u -r1.102 -r1.103 src/sys/net/route.h
cvs rdiff -u -r1.195 -r1.196 src/sys/net/rtsock.c
cvs rdiff -u -r1.28 -r1.29 src/sys/rump/net/lib/libnet/Makefile
cvs rdiff -u -r1.119 -r1.120 src/sys/sys/socket.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/share/man/man4/route.4
diff -u src/share/man/man4/route.4:1.27 src/share/man/man4/route.4:1.28
--- src/share/man/man4/route.4:1.27 Mon Apr 4 13:29:12 2016
+++ src/share/man/man4/route.4 Wed Sep 21 10:50:23 2016
@@ -1,4 +1,4 @@
-.\" $NetBSD: route.4,v 1.27 2016/04/04 13:29:12 wiz Exp $
+.\" $NetBSD: route.4,v 1.28 2016/09/21 10:50:23 roy Exp $
.\"
.\" Copyright (c) 1990, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -29,7 +29,7 @@
.\"
.\" @(#)route.4 8.6 (Berkeley) 4/19/94
.\"
-.Dd March 30, 2016
+.Dd September 15, 2016
.Dt ROUTE 4
.Os
.Sh NAME
@@ -196,13 +196,16 @@ The messages are:
#define RTM_LOSING 0x5 /* Kernel Suspects Partitioning */
#define RTM_REDIRECT 0x6 /* Told to use different route */
#define RTM_MISS 0x7 /* Lookup failed on this address */
-#define RTM_NEWADDR 0xc /* address being added to iface */
-#define RTM_DELADDR 0xd /* address being removed from iface */
+#define RTM_ONEWADDR 0xc /* Old (pre-8.0) RTM_NEWADDR message */
+#define RTM_ODELADDR 0xd /* Old (pre-8.0) RTM_DELADDR message */
#define RTM_OOIFINFO 0xe /* Old (pre-1.5) RTM_IFINFO message */
#define RTM_OIFINFO 0xf /* Old (pre-6.0) RTM_IFINFO message */
#define RTM_IFANNOUNCE 0x10 /* iface arrival/departure */
#define RTM_IFINFO 0x14 /* iface/link going up/down etc. */
-#define RTM_CHGADDR 0x15 /* address has changed on iface */
+#define RTM_OCHGADDR 0x15 /* Old (pre-8.0) RTM_CHGADDR message */
+#define RTM_NEWADDR 0x16 /* address being added to iface */
+#define RTM_DELADDR 0x17 /* address being removed from iface */
+#define RTM_CHGADDR 0x18 /* address properties changed */
.Ed
.Pp
A message header consists of one of the following:
@@ -236,9 +239,11 @@ struct ifa_msghdr {
u_short ifam_msglen; /* to skip over non-understood messages */
u_char ifam_version; /* future binary compatibility */
u_char ifam_type; /* message type */
- int ifam_addrs; /* like rtm_addrs */
- int ifam_flags; /* value of ifa_flags */
u_short ifam_index; /* index for associated ifp */
+ int ifam_flags; /* value of ifa_flags */
+ int ifam_addrs; /* like rtm_addrs */
+ pid_t ifam_pid; /* identify sender */
+ int ifam_addrflags; /* family specific address flags */
int ifam_metric; /* value of ifa_metric */
};
@@ -367,3 +372,7 @@ and
.Cm RTF_LLDATA
appeared in
.Nx 8.0 .
+.Pp
+.Vt ifa_msghdr
+gained the fields ifam_pid and ifam_addrflags in
+.Nx 8.0 .
Index: src/sys/compat/common/Makefile
diff -u src/sys/compat/common/Makefile:1.56 src/sys/compat/common/Makefile:1.57
--- src/sys/compat/common/Makefile:1.56 Wed Apr 6 19:45:45 2016
+++ src/sys/compat/common/Makefile Wed Sep 21 10:50:23 2016
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.56 2016/04/06 19:45:45 roy Exp $
+# $NetBSD: Makefile,v 1.57 2016/09/21 10:50:23 roy Exp $
LIB= compat
NOPIC= # defined
@@ -48,7 +48,7 @@ SRCS+= kern_50.c kern_time_50.c kern_sel
SRCS+= kern_sa_60.c tty_60.c kern_time_60.c
# Compatibility code for NetBSD 7.0
-SRCS+= uipc_usrreq_70.c
+SRCS+= rtsock_70.c uipc_usrreq_70.c
# really, all machines where sizeof(int) != sizeof(long) (LP64)
.if (${MACHINE_ARCH} != "alpha" && ${MACHINE_ARCH} != "sparc64" \
Index: src/sys/compat/net/if.h
diff -u src/sys/compat/net/if.h:1.3 src/sys/compat/net/if.h:1.4
--- src/sys/compat/net/if.h:1.3 Tue Feb 1 01:39:20 2011
+++ src/sys/compat/net/if.h Wed Sep 21 10:50:23 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: if.h,v 1.3 2011/02/01 01:39:20 matt Exp $ */
+/* $NetBSD: if.h,v 1.4 2016/09/21 10:50:23 roy Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -183,4 +183,28 @@ struct if_announcemsghdr50 {
u_short ifan_what; /* what type of announcement */
};
+#if !defined(_KERNEL) || !defined(COMPAT_RTSOCK)
+#define __align64 __aligned(sizeof(uint64_t))
+#else
+#define __align64
+#endif
+/*
+ * Message format for use in obtaining information about interface addresses
+ * from sysctl and the routing socket.
+ */
+struct ifa_msghdr70 {
+ u_short ifam_msglen __align64;
+ /* to skip over non-understood messages */
+ u_char ifam_version; /* future binary compatibility */
+ u_char ifam_type; /* message type */
+ int ifam_addrs; /* like rtm_addrs */
+ int ifam_flags; /* value of ifa_flags */
+ int ifam_metric; /* value of ifa_metric */
+ u_short ifam_index; /* index for associated ifp */
+};
+#undef __align64
+
+int compat_70_iflist_addr(struct rt_walkarg *, struct ifaddr *,
+ struct rt_addrinfo *);
+
#endif /* _COMPAT_NET_IF_H_ */
Index: src/sys/compat/net/route.h
diff -u src/sys/compat/net/route.h:1.1 src/sys/compat/net/route.h:1.2
--- src/sys/compat/net/route.h:1.1 Tue Feb 1 01:39:20 2011
+++ src/sys/compat/net/route.h Wed Sep 21 10:50:23 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: route.h,v 1.1 2011/02/01 01:39:20 matt Exp $ */
+/* $NetBSD: route.h,v 1.2 2016/09/21 10:50:23 roy Exp $ */
/*
* Copyright (c) 1980, 1986, 1993
@@ -88,6 +88,7 @@ void compat_50_rt_missmsg(int, const str
struct mbuf *
compat_50_rt_msg1(int, struct rt_addrinfo *, void *, int);
void compat_50_rt_newaddrmsg(int, struct ifaddr *, int, struct rtentry *);
+void compat_70_rt_newaddrmsg1(int, struct ifaddr *);
#endif
#define RTM_OVERSION 3 /* Up the ante and ignore older versions */
Index: src/sys/net/if.h
diff -u src/sys/net/if.h:1.225 src/sys/net/if.h:1.226
--- src/sys/net/if.h:1.225 Wed Aug 10 10:09:42 2016
+++ src/sys/net/if.h Wed Sep 21 10:50:22 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: if.h,v 1.225 2016/08/10 10:09:42 kre Exp $ */
+/* $NetBSD: if.h,v 1.226 2016/09/21 10:50:22 roy Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -634,10 +634,12 @@ struct ifa_msghdr {
/* to skip over non-understood messages */
u_char ifam_version; /* future binary compatibility */
u_char ifam_type; /* message type */
- int ifam_addrs; /* like rtm_addrs */
+ u_short ifam_index; /* index for associated ifp */
int ifam_flags; /* value of ifa_flags */
+ int ifam_addrs; /* like rtm_addrs */
+ pid_t ifam_pid; /* identify sender */
+ int ifam_addrflags; /* family specific address flags */
int ifam_metric; /* value of ifa_metric */
- u_short ifam_index; /* index for associated ifp */
};
/*
Index: src/sys/net/route.h
diff -u src/sys/net/route.h:1.102 src/sys/net/route.h:1.103
--- src/sys/net/route.h:1.102 Mon Aug 1 03:15:30 2016
+++ src/sys/net/route.h Wed Sep 21 10:50:22 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: route.h,v 1.102 2016/08/01 03:15:30 ozaki-r Exp $ */
+/* $NetBSD: route.h,v 1.103 2016/09/21 10:50:22 roy Exp $ */
/*
* Copyright (c) 1980, 1986, 1993
@@ -219,8 +219,8 @@ struct rt_msghdr {
#define RTM_OLDADD 0x9 /* caused by SIOCADDRT */
#define RTM_OLDDEL 0xa /* caused by SIOCDELRT */
// #define RTM_RESOLVE 0xb /* req to resolve dst to LL addr */
-#define RTM_NEWADDR 0xc /* address being added to iface */
-#define RTM_DELADDR 0xd /* address being removed from iface */
+#define RTM_ONEWADDR 0xc /* Old (pre-8.0) RTM_NEWADDR message */
+#define RTM_ODELADDR 0xd /* Old (pre-8.0) RTM_DELADDR message */
#define RTM_OOIFINFO 0xe /* Old (pre-1.5) RTM_IFINFO message */
#define RTM_OIFINFO 0xf /* Old (pre-64bit time) RTM_IFINFO message */
#define RTM_IFANNOUNCE 0x10 /* iface arrival/departure */
@@ -232,7 +232,10 @@ struct rt_msghdr {
* address has changed
*/
#define RTM_IFINFO 0x14 /* iface/link going up/down etc. */
-#define RTM_CHGADDR 0x15 /* address properties changed */
+#define RTM_OCHGADDR 0x15 /* Old (pre-8.0) RTM_CHGADDR message */
+#define RTM_NEWADDR 0x16 /* address being added to iface */
+#define RTM_DELADDR 0x17 /* address being removed from iface */
+#define RTM_CHGADDR 0x18 /* address properties changed */
#define RTV_MTU 0x1 /* init or lock _mtu */
#define RTV_HOPCOUNT 0x2 /* init or lock _hopcount */
Index: src/sys/net/rtsock.c
diff -u src/sys/net/rtsock.c:1.195 src/sys/net/rtsock.c:1.196
--- src/sys/net/rtsock.c:1.195 Thu Sep 1 19:04:30 2016
+++ src/sys/net/rtsock.c Wed Sep 21 10:50:22 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: rtsock.c,v 1.195 2016/09/01 19:04:30 roy Exp $ */
+/* $NetBSD: rtsock.c,v 1.196 2016/09/21 10:50:22 roy Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -61,7 +61,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.195 2016/09/01 19:04:30 roy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.196 2016/09/21 10:50:22 roy Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -98,12 +98,15 @@ extern void sctp_add_ip_address(struct i
extern void sctp_delete_ip_address(struct ifaddr *);
#endif
-#if defined(COMPAT_14) || defined(COMPAT_50)
+#if defined(COMPAT_14) || defined(COMPAT_50) || defined(COMPAT_70)
#include <compat/net/if.h>
#include <compat/net/route.h>
#endif
#ifdef COMPAT_RTSOCK
#define RTM_XVERSION RTM_OVERSION
+#define RTM_XNEWADDR RTM_ONEWADDR
+#define RTM_XDELADDR RTM_ODELADDR
+#define RTM_XCHGADDR RTM_OCHGADDR
#define RT_XADVANCE(a,b) RT_OADVANCE(a,b)
#define RT_XROUNDUP(n) RT_OROUNDUP(n)
#define PF_XROUTE PF_OROUTE
@@ -115,8 +118,12 @@ extern void sctp_delete_ip_address(struc
#define DOMAINNAME "oroute"
CTASSERT(sizeof(struct ifa_xmsghdr) == 20);
DOMAIN_DEFINE(compat_50_routedomain); /* forward declare and add to link set */
+#undef COMPAT_70
#else /* COMPAT_RTSOCK */
#define RTM_XVERSION RTM_VERSION
+#define RTM_XNEWADDR RTM_NEWADDR
+#define RTM_XDELADDR RTM_DELADDR
+#define RTM_XCHGADDR RTM_CHGADDR
#define RT_XADVANCE(a,b) RT_ADVANCE(a,b)
#define RT_XROUNDUP(n) RT_ROUNDUP(n)
#define PF_XROUTE PF_ROUTE
@@ -126,7 +133,7 @@ DOMAIN_DEFINE(compat_50_routedomain); /*
#define if_xannouncemsghdr if_announcemsghdr
#define COMPATNAME(x) x
#define DOMAINNAME "route"
-CTASSERT(sizeof(struct ifa_xmsghdr) == 24);
+CTASSERT(sizeof(struct ifa_xmsghdr) == 32);
#ifdef COMPAT_50
#define COMPATCALL(name, args) compat_50_ ## name args
#endif
@@ -1028,6 +1035,17 @@ rt_getlen(int type)
#endif
switch (type) {
+ case RTM_ODELADDR:
+ case RTM_ONEWADDR:
+ case RTM_OCHGADDR:
+#ifdef COMPAT_70
+ return sizeof(struct ifa_msghdr70);
+#else
+#ifdef DIAGNOSTIC
+ printf("RTM_ONEWADDR\n");
+#endif
+ return -1;
+#endif
case RTM_DELADDR:
case RTM_NEWADDR:
case RTM_CHGADDR:
@@ -1278,6 +1296,25 @@ COMPATNAME(rt_ifmsg)(struct ifnet *ifp)
#endif
}
+#ifndef COMPAT_RTSOCK
+static int
+if_addrflags(struct ifaddr *ifa)
+{
+
+ switch (ifa->ifa_addr->sa_family) {
+#ifdef INET
+ case AF_INET:
+ return ((struct in_ifaddr *)ifa)->ia4_flags;
+#endif
+#ifdef INET6
+ case AF_INET6:
+ return ((struct in6_ifaddr *)ifa)->ia6_flags;
+#endif
+ default:
+ return 0;
+ }
+}
+#endif
/*
* This is called to generate messages from the routing socket
@@ -1302,6 +1339,7 @@ COMPATNAME(rt_newaddrmsg)(int cmd, struc
int ncmd;
KASSERT(ifa != NULL);
+ KASSERT(ifa->ifa_addr != NULL);
ifp = ifa->ifa_ifp;
#ifdef SCTP
if (cmd == RTM_ADD) {
@@ -1325,17 +1363,29 @@ COMPATNAME(rt_newaddrmsg)(int cmd, struc
case cmdpass(RTM_CHGADDR, 1):
switch (cmd) {
case RTM_ADD:
- ncmd = RTM_NEWADDR;
+ ncmd = RTM_XNEWADDR;
break;
case RTM_DELETE:
- ncmd = RTM_DELADDR;
+ ncmd = RTM_XDELADDR;
break;
case RTM_CHANGE:
- ncmd = RTM_CHGADDR;
+ ncmd = RTM_XCHGADDR;
+ break;
+ case RTM_NEWADDR:
+ ncmd = RTM_XNEWADDR;
+ break;
+ case RTM_DELADDR:
+ ncmd = RTM_XDELADDR;
+ break;
+ case RTM_CHGADDR:
+ ncmd = RTM_XCHGADDR;
break;
default:
- ncmd = cmd;
+ panic("%s: unknown command %d", __func__, cmd);
}
+#ifdef COMPAT_70
+ compat_70_rt_newaddrmsg1(ncmd, ifa);
+#endif
info.rti_info[RTAX_IFA] = sa = ifa->ifa_addr;
KASSERT(ifp->if_dl != NULL);
info.rti_info[RTAX_IFP] = ifp->if_dl->ifa_addr;
@@ -1345,6 +1395,10 @@ COMPATNAME(rt_newaddrmsg)(int cmd, struc
ifam.ifam_index = ifp->if_index;
ifam.ifam_metric = ifa->ifa_metric;
ifam.ifam_flags = ifa->ifa_flags;
+#ifndef COMPAT_RTSOCK
+ ifam.ifam_pid = curproc->p_pid;
+ ifam.ifam_addrflags = if_addrflags(ifa);
+#endif
m = COMPATNAME(rt_msg1)(ncmd, &info, &ifam, sizeof(ifam));
if (m == NULL)
continue;
@@ -1379,6 +1433,7 @@ COMPATNAME(rt_newaddrmsg)(int cmd, struc
COMPATNAME(route_enqueue)(m, sa ? sa->sa_family : 0);
}
#undef cmdpass
+
}
static struct mbuf *
@@ -1530,7 +1585,7 @@ sysctl_iflist_addr(struct rt_walkarg *w,
{
int len, error;
- if ((error = rt_msg2(RTM_NEWADDR, info, 0, w, &len)))
+ if ((error = rt_msg2(RTM_XNEWADDR, info, 0, w, &len)))
return error;
if (w->w_where && w->w_tmem && w->w_needed <= 0) {
struct ifa_xmsghdr *ifam;
@@ -1540,6 +1595,10 @@ sysctl_iflist_addr(struct rt_walkarg *w,
ifam->ifam_flags = ifa->ifa_flags;
ifam->ifam_metric = ifa->ifa_metric;
ifam->ifam_addrs = info->rti_addrs;
+#ifndef COMPAT_RTSOCK
+ ifam->ifam_pid = 0;
+ ifam->ifam_addrflags = if_addrflags(ifa);
+#endif
if ((error = copyout(w->w_tmem, w->w_where, len)) == 0)
w->w_where = (char *)w->w_where + len;
}
@@ -1555,6 +1614,8 @@ sysctl_iflist(int af, struct rt_walkarg
int cmd, len, error = 0;
int (*iflist_if)(struct ifnet *, struct rt_walkarg *,
struct rt_addrinfo *, size_t);
+ int (*iflist_addr)(struct rt_walkarg *, struct ifaddr *,
+ struct rt_addrinfo *);
int s;
struct psref psref;
int bound = curlwp_bind();
@@ -1563,17 +1624,27 @@ sysctl_iflist(int af, struct rt_walkarg
case NET_RT_IFLIST:
cmd = RTM_IFINFO;
iflist_if = sysctl_iflist_if;
+ iflist_addr = sysctl_iflist_addr;
break;
#ifdef COMPAT_14
- case NET_RT_OOIFLIST:
+ case NET_RT_OOOIFLIST:
cmd = RTM_OOIFINFO;
iflist_if = compat_14_iflist;
+ iflist_addr = compat_70_iflist_addr;
break;
#endif
#ifdef COMPAT_50
- case NET_RT_OIFLIST:
+ case NET_RT_OOIFLIST:
cmd = RTM_OIFINFO;
iflist_if = compat_50_iflist;
+ iflist_addr = compat_70_iflist_addr;
+ break;
+#endif
+#ifdef COMPAT_70
+ case NET_RT_OIFLIST:
+ cmd = RTM_IFINFO;
+ iflist_if = sysctl_iflist_if;
+ iflist_addr = compat_70_iflist_addr;
break;
#endif
default:
@@ -1609,7 +1680,7 @@ sysctl_iflist(int af, struct rt_walkarg
info.rti_info[RTAX_IFA] = ifa->ifa_addr;
info.rti_info[RTAX_NETMASK] = ifa->ifa_netmask;
info.rti_info[RTAX_BRD] = ifa->ifa_dstaddr;
- if ((error = sysctl_iflist_addr(w, ifa, &info)) != 0)
+ if ((error = iflist_addr(w, ifa, &info)) != 0)
goto release_exit;
}
info.rti_info[RTAX_IFA] = info.rti_info[RTAX_NETMASK] =
@@ -1689,11 +1760,16 @@ again:
break;
#ifdef COMPAT_14
- case NET_RT_OOIFLIST:
+ case NET_RT_OOOIFLIST:
error = sysctl_iflist(af, &w, w.w_op);
break;
#endif
#ifdef COMPAT_50
+ case NET_RT_OOIFLIST:
+ error = sysctl_iflist(af, &w, w.w_op);
+ break;
+#endif
+#ifdef COMPAT_70
case NET_RT_OIFLIST:
error = sysctl_iflist(af, &w, w.w_op);
break;
Index: src/sys/rump/net/lib/libnet/Makefile
diff -u src/sys/rump/net/lib/libnet/Makefile:1.28 src/sys/rump/net/lib/libnet/Makefile:1.29
--- src/sys/rump/net/lib/libnet/Makefile:1.28 Fri Apr 15 01:35:26 2016
+++ src/sys/rump/net/lib/libnet/Makefile Wed Sep 21 10:50:23 2016
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.28 2016/04/15 01:35:26 ozaki-r Exp $
+# $NetBSD: Makefile,v 1.29 2016/09/21 10:50:23 roy Exp $
#
@@ -22,6 +22,10 @@ SRCS+= net_component.c
SRCS+= rtsock_50.c uipc_syscalls_50.c
.endif
+.if !empty(RUMP_NBCOMPAT:M70)
+SRCS+= rtsock_70.c uipc_usrreq_70.c
+.endif
+
.include "${.CURDIR}/../libnetinet/Makefile.inc"
.include "${.CURDIR}/../libnetinet6/Makefile.inc"
.include "${.CURDIR}/../libnetmpls/Makefile.inc"
Index: src/sys/sys/socket.h
diff -u src/sys/sys/socket.h:1.119 src/sys/sys/socket.h:1.120
--- src/sys/sys/socket.h:1.119 Wed Apr 6 19:45:46 2016
+++ src/sys/sys/socket.h Wed Sep 21 10:50:23 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: socket.h,v 1.119 2016/04/06 19:45:46 roy Exp $ */
+/* $NetBSD: socket.h,v 1.120 2016/09/21 10:50:23 roy Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -472,12 +472,13 @@ struct kinfo_pcb {
* Fifth: type of info, defined below
* Sixth: flag(s) to mask with for NET_RT_FLAGS
*/
-#define NET_RT_DUMP 1 /* dump; may limit to a.f. */
-#define NET_RT_FLAGS 2 /* by flags, e.g. RESOLVING */
-#define NET_RT_OOIFLIST 3 /* old NET_RT_IFLIST (pre 1.5) */
-#define NET_RT_OIFLIST 4 /* survey interface list */
-#define NET_RT_IFLIST 5
-#define NET_RT_MAXID 6
+#define NET_RT_DUMP 1 /* dump; may limit to a.f. */
+#define NET_RT_FLAGS 2 /* by flags, e.g. RESOLVING */
+#define NET_RT_OOOIFLIST 3 /* old NET_RT_IFLIST (pre 1.5) */
+#define NET_RT_OOIFLIST 4 /* old NET_RT_IFLIST (pre-64bit time) */
+#define NET_RT_OIFLIST 5 /* old NET_RT_IFLIST (pre 8.0) */
+#define NET_RT_IFLIST 6 /* survey interface list */
+#define NET_RT_MAXID 7
#define CTL_NET_RT_NAMES { \
{ 0, 0 }, \
Added files:
Index: src/sys/compat/common/rtsock_70.c
diff -u /dev/null src/sys/compat/common/rtsock_70.c:1.1
--- /dev/null Wed Sep 21 10:50:23 2016
+++ src/sys/compat/common/rtsock_70.c Wed Sep 21 10:50:23 2016
@@ -0,0 +1,115 @@
+/* $NetBSD: rtsock_70.c,v 1.1 2016/09/21 10:50:23 roy Exp $ */
+
+/*
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Roy Marples.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: rtsock_70.c,v 1.1 2016/09/21 10:50:23 roy Exp $");
+
+#ifdef _KERNEL_OPT
+#include "opt_compat_netbsd.h"
+#endif
+
+#include <sys/mbuf.h>
+#include <net/if.h>
+#include <net/route.h>
+
+#include <compat/net/if.h>
+#include <compat/net/route.h>
+
+#if defined(COMPAT_70)
+void
+compat_70_rt_newaddrmsg1(int cmd, struct ifaddr *ifa)
+{
+ struct rt_addrinfo info;
+ const struct sockaddr *sa;
+ struct mbuf *m;
+ struct ifnet *ifp;
+ struct ifa_msghdr70 ifam;
+ int ncmd;
+
+ KASSERT(ifa != NULL);
+ ifp = ifa->ifa_ifp;
+
+ switch (cmd) {
+ case RTM_NEWADDR:
+ ncmd = RTM_ONEWADDR;
+ break;
+ case RTM_DELADDR:
+ ncmd = RTM_ODELADDR;
+ break;
+ case RTM_CHGADDR:
+ ncmd = RTM_OCHGADDR;
+ break;
+ default:
+ panic("%s: called with wrong command", __func__);
+ }
+
+ memset(&info, 0, sizeof(info));
+ info.rti_info[RTAX_IFA] = sa = ifa->ifa_addr;
+ KASSERT(ifp->if_dl != NULL);
+ info.rti_info[RTAX_IFP] = ifp->if_dl->ifa_addr;
+ info.rti_info[RTAX_NETMASK] = ifa->ifa_netmask;
+ info.rti_info[RTAX_BRD] = ifa->ifa_dstaddr;
+
+ memset(&ifam, 0, sizeof(ifam));
+ ifam.ifam_index = ifp->if_index;
+ ifam.ifam_metric = ifa->ifa_metric;
+ ifam.ifam_flags = ifa->ifa_flags;
+
+ m = rt_msg1(ncmd, &info, &ifam, sizeof(ifam));
+ if (m == NULL)
+ return;
+
+ mtod(m, struct ifa_msghdr70 *)->ifam_addrs = info.rti_addrs;
+ route_enqueue(m, sa ? sa->sa_family : 0);
+}
+
+int
+compat_70_iflist_addr(struct rt_walkarg *w, struct ifaddr *ifa,
+ struct rt_addrinfo *info)
+{
+ int len, error;
+
+ if ((error = rt_msg3(RTM_ONEWADDR, info, 0, w, &len)))
+ return error;
+ if (w->w_where && w->w_tmem && w->w_needed <= 0) {
+ struct ifa_msghdr70 *ifam;
+
+ ifam = (struct ifa_msghdr70 *)w->w_tmem;
+ ifam->ifam_index = ifa->ifa_ifp->if_index;
+ ifam->ifam_flags = ifa->ifa_flags;
+ ifam->ifam_metric = ifa->ifa_metric;
+ ifam->ifam_addrs = info->rti_addrs;
+ if ((error = copyout(w->w_tmem, w->w_where, len)) == 0)
+ w->w_where = (char *)w->w_where + len;
+ }
+ return error;
+}
+#endif /* COMPAT_70 */