diff options
author | kib <kib@FreeBSD.org> | 2010-04-27 09:47:14 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2010-04-27 09:47:14 +0000 |
commit | 85688162953c4cf38c355bcc60c0ab181a3bfa2e (patch) | |
tree | 2fb5932b6c6480fef21b398b9810f7c567c4ba65 /sys | |
parent | 7eb24f6aa6071a123dd0d24f5e8806cf803305fa (diff) | |
download | FreeBSD-src-85688162953c4cf38c355bcc60c0ab181a3bfa2e.zip FreeBSD-src-85688162953c4cf38c355bcc60c0ab181a3bfa2e.tar.gz |
Provide 32bit compat for SIOCGDEFIFACE_IN6.
Based on submission by: pluknet gmail com
Reviewed by: emaste
MFC after: 2 weeks
Diffstat (limited to 'sys')
-rw-r--r-- | sys/netinet6/in6.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c index 74c15d5..15ff6b2 100644 --- a/sys/netinet6/in6.c +++ b/sys/netinet6/in6.c @@ -63,6 +63,7 @@ #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); +#include "opt_compat.h" #include "opt_inet.h" #include "opt_inet6.h" @@ -176,6 +177,14 @@ in6_mask2len(struct in6_addr *mask, u_char *lim0) #define ifa2ia6(ifa) ((struct in6_ifaddr *)(ifa)) #define ia62ifa(ia6) (&((ia6)->ia_ifa)) +#ifdef COMPAT_FREEBSD32 +struct in6_ndifreq32 { + char ifname[IFNAMSIZ]; + uint32_t ifindex; +}; +#define SIOCGDEFIFACE32_IN6 _IOWR('i', 86, struct in6_ndifreq32) +#endif + int in6_control(struct socket *so, u_long cmd, caddr_t data, struct ifnet *ifp, struct thread *td) @@ -226,6 +235,22 @@ in6_control(struct socket *so, u_long cmd, caddr_t data, case SIOCGNBRINFO_IN6: case SIOCGDEFIFACE_IN6: return (nd6_ioctl(cmd, data, ifp)); + +#ifdef COMPAT_FREEBSD32 + case SIOCGDEFIFACE32_IN6: + { + struct in6_ndifreq ndif; + struct in6_ndifreq32 *ndif32; + + error = nd6_ioctl(SIOCGDEFIFACE_IN6, (caddr_t)&ndif, + ifp); + if (error) + return (error); + ndif32 = (struct in6_ndifreq32 *)data; + ndif32->ifindex = ndif.ifindex; + return (0); + } +#endif } switch (cmd) { |