Module Name: src Committed By: matt Date: Tue Feb 1 00:53:23 UTC 2011
Modified Files: src/sys/compat/netbsd32: netbsd32_ioctl.c netbsd32_ioctl.h Log Message: Define 32bit version of SIOC[GS]IFADDRPREF32. We wouldn't need this to if i386 actually aligned a uint64_t on a 64bit boundary but it doesn't. So all that work in sockaddr_storage goes for naught. To generate a diff of this commit: cvs rdiff -u -r1.53 -r1.54 src/sys/compat/netbsd32/netbsd32_ioctl.c cvs rdiff -u -r1.29 -r1.30 src/sys/compat/netbsd32/netbsd32_ioctl.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/compat/netbsd32/netbsd32_ioctl.c diff -u src/sys/compat/netbsd32/netbsd32_ioctl.c:1.53 src/sys/compat/netbsd32/netbsd32_ioctl.c:1.54 --- src/sys/compat/netbsd32/netbsd32_ioctl.c:1.53 Sat Jan 22 20:51:21 2011 +++ src/sys/compat/netbsd32/netbsd32_ioctl.c Tue Feb 1 00:53:22 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_ioctl.c,v 1.53 2011/01/22 20:51:21 matt Exp $ */ +/* $NetBSD: netbsd32_ioctl.c,v 1.54 2011/02/01 00:53:22 matt Exp $ */ /* * Copyright (c) 1998, 2001 Matthew R. Green @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_ioctl.c,v 1.53 2011/01/22 20:51:21 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_ioctl.c,v 1.54 2011/02/01 00:53:22 matt Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -85,6 +85,8 @@ u_long cmd); static inline void netbsd32_to_ifreq(struct netbsd32_ifreq *, struct ifreq *, u_long cmd); +static inline void netbsd32_to_if_addrprefreq( + const struct netbsd32_if_addrprefreq *, struct if_addrprefreq *, u_long); static inline void netbsd32_to_ifconf(struct netbsd32_ifconf *, struct ifconf *, u_long); static inline void netbsd32_to_ifmediareq(struct netbsd32_ifmediareq *, @@ -102,6 +104,9 @@ struct netbsd32_format_op *, u_long); #endif +static inline void netbsd32_from_if_addrprefreq(const struct if_addrprefreq *, + struct netbsd32_if_addrprefreq *, + u_long); static inline void netbsd32_from_ifreq(struct ifreq *, struct netbsd32_ifreq *, u_long); static inline void netbsd32_from_oifreq(struct oifreq *, @@ -173,6 +178,16 @@ } static inline void +netbsd32_to_if_addrprefreq(const struct netbsd32_if_addrprefreq *ifap32, + struct if_addrprefreq *ifap, u_long cmd) +{ + strlcpy(ifap->ifap_name, ifap32->ifap_name, sizeof(ifap->ifap_name)); + ifap->ifap_preference = ifap32->ifap_preference; + memcpy(&ifap->ifap_addr, &ifap32->ifap_addr, + max(ifap32->ifap_addr.ss_len, _SS_MAXSIZE)); +} + +static inline void netbsd32_to_ifconf(struct netbsd32_ifconf *s32p, struct ifconf *p, u_long cmd) { @@ -322,6 +337,16 @@ } static inline void +netbsd32_from_if_addrprefreq(const struct if_addrprefreq *ifap, + struct netbsd32_if_addrprefreq *ifap32, u_long cmd) +{ + strlcpy(ifap32->ifap_name, ifap->ifap_name, sizeof(ifap32->ifap_name)); + ifap32->ifap_preference = ifap->ifap_preference; + memcpy(&ifap32->ifap_addr, &ifap->ifap_addr, + max(ifap->ifap_addr.ss_len, _SS_MAXSIZE)); +} + +static inline void netbsd32_from_ifconf(struct ifconf *p, struct netbsd32_ifconf *s32p, u_long cmd) { @@ -674,6 +699,12 @@ case SIOCSIFFLAGS32: IOCTL_STRUCT_CONV_TO(SIOCSIFFLAGS, ifreq); + case SIOCGIFADDRPREF32: + IOCTL_STRUCT_CONV_TO(SIOCGIFADDRPREF, if_addrprefreq); + case SIOCSIFADDRPREF32: + IOCTL_STRUCT_CONV_TO(SIOCSIFADDRPREF, if_addrprefreq); + + case OSIOCGIFFLAGS32: IOCTL_STRUCT_CONV_TO(OSIOCGIFFLAGS, oifreq); case OSIOCSIFFLAGS32: Index: src/sys/compat/netbsd32/netbsd32_ioctl.h diff -u src/sys/compat/netbsd32/netbsd32_ioctl.h:1.29 src/sys/compat/netbsd32/netbsd32_ioctl.h:1.30 --- src/sys/compat/netbsd32/netbsd32_ioctl.h:1.29 Fri Sep 24 13:12:53 2010 +++ src/sys/compat/netbsd32/netbsd32_ioctl.h Tue Feb 1 00:53:22 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_ioctl.h,v 1.29 2010/09/24 13:12:53 njoly Exp $ */ +/* $NetBSD: netbsd32_ioctl.h,v 1.30 2011/02/01 00:53:22 matt Exp $ */ /* * Copyright (c) 1998, 2001 Matthew R. Green @@ -208,6 +208,19 @@ } ifru_b; } ifr_ifru; }; + +struct netbsd32_if_addrprefreq { + char ifap_name[IFNAMSIZ]; + uint16_t ifap_preference; + struct { + __uint8_t ss_len; /* address length */ + sa_family_t ss_family; /* address family */ + char __ss_pad1[_SS_PAD1SIZE]; + __int32_t __ss_align[2]; + char __ss_pad2[_SS_PAD2SIZE]; + } ifap_addr; +}; + /* from <dev/pci/if_devar.h> */ #define SIOCGADDRROM32 _IOW('i', 240, struct netbsd32_ifreq) /* get 128 bytes of ROM */ #define SIOCGCHIPID32 _IOWR('i', 241, struct netbsd32_ifreq) /* get chipid */ @@ -257,6 +270,9 @@ #define SIOCDIFADDR32 _IOW('i', 25, struct netbsd32_ifreq) /* delete IF addr */ #define OSIOCDIFADDR32 _IOW('i', 25, struct netbsd32_oifreq) /* delete IF addr */ +#define SIOCSIFADDRPREF32 _IOW('i', 31, struct netbsd32_if_addrprefreq) +#define SIOCGIFADDRPREF32 _IOWR('i', 32, struct netbsd32_if_addrprefreq) + #define SIOCADDMULTI32 _IOW('i', 49, struct netbsd32_ifreq) /* add m'cast addr */ #define OSIOCADDMULTI32 _IOW('i', 49, struct netbsd32_oifreq) /* add m'cast addr */