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 | |