1 /* $NetBSD: sockio.h,v 1.10 2010/11/14 15:36:47 uebayasi Exp $ */ 2 3 /*- 4 * Copyright (c) 1982, 1986, 1990, 1993, 1994 5 * The Regents of the University of California. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. Neither the name of the University nor the names of its contributors 16 * may be used to endorse or promote products derived from this software 17 * without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 */ 31 32 #ifndef _COMPAT_SYS_SOCKIO_H_ 33 #define _COMPAT_SYS_SOCKIO_H_ 34 35 #ifdef _KERNEL_OPT 36 37 #include "opt_compat_netbsd.h" 38 #include "opt_modular.h" 39 40 #include <sys/ioccom.h> 41 42 #if defined(COMPAT_09) || defined(COMPAT_10) || defined(COMPAT_11) || \ 43 defined(COMPAT_12) || defined(COMPAT_13) || defined(COMPAT_14) || \ 44 defined(COMPAT_15) || defined(COMPAT_16) || defined(COMPAT_20) || \ 45 defined(COMPAT_30) || defined(COMPAT_40) || defined(MODULAR) 46 #define COMPAT_OIFREQ 47 #endif 48 49 #if defined(COMPAT_09) || defined(COMPAT_10) || defined(COMPAT_11) || \ 50 defined(COMPAT_12) || defined(COMPAT_13) || defined(COMPAT_14) || \ 51 defined(COMPAT_15) || defined(COMPAT_16) || defined(COMPAT_20) || \ 52 defined(COMPAT_30) || defined(COMPAT_40) || defined(COMPAT_50) || \ 53 defined(MODULAR) 54 #define COMPAT_OIFDATA 55 #endif 56 57 #endif /* _KERNEL_OPT */ 58 59 struct oifreq { 60 char ifr_name[IFNAMSIZ]; /* if name, e.g. "en0" */ 61 union { 62 struct sockaddr ifru_addr; 63 struct sockaddr ifru_dstaddr; 64 struct sockaddr ifru_broadaddr; 65 short ifru_flags; 66 int ifru_metric; 67 int ifru_mtu; 68 int ifru_dlt; 69 u_int ifru_value; 70 void * ifru_data; 71 struct { 72 uint32_t b_buflen; 73 void *b_buf; 74 } ifru_b; 75 } ifr_ifru; 76 }; 77 struct oifconf { 78 int ifc_len; /* size of associated buffer */ 79 union { 80 void * ifcu_buf; 81 struct oifreq *ifcu_req; 82 } ifc_ifcu; 83 #define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */ 84 #define ifc_req ifc_ifcu.ifcu_req /* array of structures returned */ 85 }; 86 87 #include <compat/sys/time.h> 88 /* 89 * Structure defining statistics and other data kept regarding a network 90 * interface. 91 */ 92 struct oif_data { 93 /* generic interface information */ 94 u_char ifi_type; /* ethernet, tokenring, etc. */ 95 u_char ifi_addrlen; /* media address length */ 96 u_char ifi_hdrlen; /* media header length */ 97 int ifi_link_state; /* current link state */ 98 u_quad_t ifi_mtu; /* maximum transmission unit */ 99 u_quad_t ifi_metric; /* routing metric (external only) */ 100 u_quad_t ifi_baudrate; /* linespeed */ 101 /* volatile statistics */ 102 u_quad_t ifi_ipackets; /* packets received on interface */ 103 u_quad_t ifi_ierrors; /* input errors on interface */ 104 u_quad_t ifi_opackets; /* packets sent on interface */ 105 u_quad_t ifi_oerrors; /* output errors on interface */ 106 u_quad_t ifi_collisions; /* collisions on csma interfaces */ 107 u_quad_t ifi_ibytes; /* total number of octets received */ 108 u_quad_t ifi_obytes; /* total number of octets sent */ 109 u_quad_t ifi_imcasts; /* packets received via multicast */ 110 u_quad_t ifi_omcasts; /* packets sent via multicast */ 111 u_quad_t ifi_iqdrops; /* dropped on input, this interface */ 112 u_quad_t ifi_noproto; /* destined for unsupported protocol */ 113 struct timeval50 ifi_lastchange;/* last operational state change */ 114 }; 115 116 struct oifdatareq { 117 char ifdr_name[IFNAMSIZ]; /* if name, e.g. "en0" */ 118 struct oif_data ifdr_data; 119 }; 120 121 #define OSIOCSIFADDR _IOW('i', 12, struct oifreq) /* set ifnet address */ 122 #define OOSIOCGIFADDR _IOWR('i', 13, struct oifreq) /* get ifnet address */ 123 #define OSIOCSIFDSTADDR _IOW('i', 14, struct oifreq) /* set p-p address */ 124 #define OOSIOCGIFDSTADDR _IOWR('i', 15, struct oifreq) /* get p-p address */ 125 #define OSIOCSIFFLAGS _IOW('i', 16, struct oifreq) /* set ifnet flags */ 126 #define OSIOCGIFFLAGS _IOWR('i', 17, struct oifreq) /* get ifnet flags */ 127 #define OOSIOCGIFBRDADDR _IOWR('i', 18, struct oifreq) /* get bcast addr */ 128 #define OSIOCSIFBRDADDR _IOW('i', 19, struct oifreq) /* set bcast addr */ 129 #define OOSIOCGIFCONF _IOWR('i', 20, struct ifconf) /* get ifnet list */ 130 #define OOSIOCGIFNETMASK _IOWR('i', 21, struct oifreq) /* get net addr mask */ 131 #define OSIOCSIFNETMASK _IOW('i', 22, struct oifreq) /* set net addr mask */ 132 #define OSIOCGIFCONF _IOWR('i', 36, struct ifconf) /* get ifnet list */ 133 #define OSIOCADDMULTI _IOW('i', 49, struct oifreq) /* add m'cast addr */ 134 #define OSIOCDELMULTI _IOW('i', 50, struct oifreq) /* del m'cast addr */ 135 #define OSIOCSIFMEDIA _IOWR('i', 53, struct oifreq) /* set net media */ 136 #define OSIOCGIFMTU _IOWR('i', 126, struct oifreq) /* get ifnet mtu */ 137 #define OSIOCGIFDATA _IOWR('i', 128, struct oifdatareq) /* get if_data */ 138 #define OSIOCZIFDATA _IOWR('i', 129, struct oifdatareq) /* get if_data then 139 zero ctrs*/ 140 141 142 143 144 #define OBIOCGETIF _IOR('B', 107, struct oifreq) 145 #define OBIOCSETIF _IOW('B', 108, struct oifreq) 146 #define OTAPGIFNAME _IOR('e', 0, struct oifreq) 147 148 #define ifreqn2o(oi, ni) \ 149 do { \ 150 (void)memcpy((oi)->ifr_name, (ni)->ifr_name, \ 151 sizeof((oi)->ifr_name)); \ 152 (void)memcpy(&(oi)->ifr_ifru, &(ni)->ifr_ifru, \ 153 sizeof((oi)->ifr_ifru)); \ 154 } while (/*CONSTCOND*/0) 155 156 #define ifreqo2n(oi, ni) \ 157 do { \ 158 (void)memcpy((ni)->ifr_name, (oi)->ifr_name, \ 159 sizeof((oi)->ifr_name)); \ 160 (void)memcpy(&(ni)->ifr_ifru, &(oi)->ifr_ifru, \ 161 sizeof((oi)->ifr_ifru)); \ 162 } while (/*CONSTCOND*/0) 163 164 #define ifdatan2o(oi, ni) \ 165 do { \ 166 (void)memcpy((oi), (ni), sizeof(*(oi))); \ 167 (oi)->ifi_lastchange.tv_sec = \ 168 (int32_t)(ni)->ifi_lastchange.tv_sec; \ 169 (oi)->ifi_lastchange.tv_usec = \ 170 (ni)->ifi_lastchange.tv_nsec / 1000; \ 171 } while (/*CONSTCOND*/0) 172 173 #define ifdatao2n(oi, ni) \ 174 do { \ 175 (void)memcpy((ni), (oi), sizeof(*(oi))); \ 176 sizeof((oi)->ifr_name)); \ 177 (ni)->ifi_lastchange.tv_sec = (oi)->ifi_lastchange.tv_sec; \ 178 (ni)->ifi_lastchange.tv_nsec = \ 179 (oi)->ifi_lastchange.tv_usec * 1000; \ 180 } while (/*CONSTCOND*/0) 181 #ifdef _KERNEL 182 __BEGIN_DECLS 183 int compat_ifconf(u_long, void *); 184 int compat_ifdatareq(struct lwp *, u_long, void *); 185 __END_DECLS 186 #endif 187 #endif /* _COMPAT_SYS_SOCKIO_H_ */ 188