1521fa314SDavid van Moolenbroek
2521fa314SDavid van Moolenbroek #include "inc.h"
3521fa314SDavid van Moolenbroek
4521fa314SDavid van Moolenbroek #include <sys/ioctl.h>
5521fa314SDavid van Moolenbroek #include <sys/ucred.h>
6521fa314SDavid van Moolenbroek #include <net/gen/in.h>
7521fa314SDavid van Moolenbroek #include <net/gen/ether.h>
8521fa314SDavid van Moolenbroek #include <net/gen/eth_io.h>
9521fa314SDavid van Moolenbroek #include <net/gen/arp_io.h>
10521fa314SDavid van Moolenbroek #include <net/gen/ip_io.h>
11521fa314SDavid van Moolenbroek #include <net/gen/route.h>
12521fa314SDavid van Moolenbroek #include <net/gen/tcp.h>
13521fa314SDavid van Moolenbroek #include <net/gen/tcp_io.h>
14521fa314SDavid van Moolenbroek #include <net/gen/udp.h>
15521fa314SDavid van Moolenbroek #include <net/gen/udp_io.h>
16521fa314SDavid van Moolenbroek #include <net/gen/udp_io_hdr.h>
17521fa314SDavid van Moolenbroek #include <net/gen/psip_io.h>
18521fa314SDavid van Moolenbroek #include <arpa/inet.h>
19521fa314SDavid van Moolenbroek
20*ef8d499eSDavid van Moolenbroek #include <net/route.h>
21*ef8d499eSDavid van Moolenbroek #include <netinet6/in6_var.h>
22*ef8d499eSDavid van Moolenbroek #include <netinet6/nd6.h>
23*ef8d499eSDavid van Moolenbroek #include <net80211/ieee80211_ioctl.h>
24*ef8d499eSDavid van Moolenbroek
25521fa314SDavid van Moolenbroek const char *
net_ioctl_name(unsigned long req)26521fa314SDavid van Moolenbroek net_ioctl_name(unsigned long req)
27521fa314SDavid van Moolenbroek {
28521fa314SDavid van Moolenbroek
29521fa314SDavid van Moolenbroek switch (req) {
30521fa314SDavid van Moolenbroek NAME(FIONREAD);
31*ef8d499eSDavid van Moolenbroek /* sys/sockio.h */
32*ef8d499eSDavid van Moolenbroek NAME(SIOCSHIWAT); /* TODO: print argument */
33*ef8d499eSDavid van Moolenbroek NAME(SIOCGHIWAT); /* TODO: print argument */
34*ef8d499eSDavid van Moolenbroek NAME(SIOCSLOWAT); /* TODO: print argument */
35*ef8d499eSDavid van Moolenbroek NAME(SIOCGLOWAT); /* TODO: print argument */
36*ef8d499eSDavid van Moolenbroek NAME(SIOCSPGRP); /* TODO: print argument */
37*ef8d499eSDavid van Moolenbroek NAME(SIOCGPGRP); /* TODO: print argument */
38*ef8d499eSDavid van Moolenbroek NAME(SIOCADDRT); /* TODO: print argument */
39*ef8d499eSDavid van Moolenbroek NAME(SIOCDELRT); /* TODO: print argument */
40*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFADDR); /* TODO: print argument */
41*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFADDR); /* TODO: print argument */
42*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFDSTADDR); /* TODO: print argument */
43*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFDSTADDR); /* TODO: print argument */
44*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFFLAGS); /* TODO: print argument */
45*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFFLAGS); /* TODO: print argument */
46*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFBRDADDR); /* TODO: print argument */
47*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFBRDADDR); /* TODO: print argument */
48*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFCONF); /* TODO: print argument */
49*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFNETMASK); /* TODO: print argument */
50*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFNETMASK); /* TODO: print argument */
51*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFMETRIC); /* TODO: print argument */
52*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFMETRIC); /* TODO: print argument */
53*ef8d499eSDavid van Moolenbroek NAME(SIOCDIFADDR); /* TODO: print argument */
54*ef8d499eSDavid van Moolenbroek NAME(SIOCAIFADDR); /* TODO: print argument */
55*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFALIAS); /* TODO: print argument */
56*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFAFLAG_IN); /* TODO: print argument */
57*ef8d499eSDavid van Moolenbroek NAME(SIOCALIFADDR); /* TODO: print argument */
58*ef8d499eSDavid van Moolenbroek NAME(SIOCGLIFADDR); /* TODO: print argument */
59*ef8d499eSDavid van Moolenbroek NAME(SIOCDLIFADDR); /* TODO: print argument */
60*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFADDRPREF); /* TODO: print argument */
61*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFADDRPREF); /* TODO: print argument */
62*ef8d499eSDavid van Moolenbroek NAME(SIOCADDMULTI); /* TODO: print argument */
63*ef8d499eSDavid van Moolenbroek NAME(SIOCDELMULTI); /* TODO: print argument */
64*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFMEDIA); /* TODO: print argument */
65*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFMEDIA); /* TODO: print argument */
66*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFGENERIC); /* TODO: print argument */
67*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFGENERIC); /* TODO: print argument */
68*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFPHYADDR); /* TODO: print argument */
69*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFPSRCADDR); /* TODO: print argument */
70*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFPDSTADDR); /* TODO: print argument */
71*ef8d499eSDavid van Moolenbroek NAME(SIOCDIFPHYADDR); /* TODO: print argument */
72*ef8d499eSDavid van Moolenbroek NAME(SIOCSLIFPHYADDR); /* TODO: print argument */
73*ef8d499eSDavid van Moolenbroek NAME(SIOCGLIFPHYADDR); /* TODO: print argument */
74*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFMTU); /* TODO: print argument */
75*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFMTU); /* TODO: print argument */
76*ef8d499eSDavid van Moolenbroek NAME(SIOCSDRVSPEC); /* TODO: print argument */
77*ef8d499eSDavid van Moolenbroek NAME(SIOCGDRVSPEC); /* TODO: print argument */
78*ef8d499eSDavid van Moolenbroek NAME(SIOCIFCREATE); /* TODO: print argument */
79*ef8d499eSDavid van Moolenbroek NAME(SIOCIFDESTROY); /* TODO: print argument */
80*ef8d499eSDavid van Moolenbroek NAME(SIOCIFGCLONERS); /* TODO: print argument */
81*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFDLT); /* TODO: print argument */
82*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFCAP); /* TODO: print argument */
83*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFCAP); /* TODO: print argument */
84*ef8d499eSDavid van Moolenbroek NAME(SIOCSVH); /* TODO: print argument */
85*ef8d499eSDavid van Moolenbroek NAME(SIOCGVH); /* TODO: print argument */
86*ef8d499eSDavid van Moolenbroek NAME(SIOCINITIFADDR); /* TODO: print argument */
87*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFDATA); /* TODO: print argument */
88*ef8d499eSDavid van Moolenbroek NAME(SIOCZIFDATA); /* TODO: print argument */
89*ef8d499eSDavid van Moolenbroek NAME(SIOCGLINKSTR); /* TODO: print argument */
90*ef8d499eSDavid van Moolenbroek NAME(SIOCSLINKSTR); /* TODO: print argument */
91*ef8d499eSDavid van Moolenbroek NAME(SIOCGETHERCAP); /* TODO: print argument */
92*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFINDEX); /* TODO: print argument */
93*ef8d499eSDavid van Moolenbroek NAME(SIOCSETPFSYNC); /* TODO: print argument */
94*ef8d499eSDavid van Moolenbroek NAME(SIOCGETPFSYNC); /* TODO: print argument */
95*ef8d499eSDavid van Moolenbroek /* netinet6/in6_var.h */
96*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFADDR_IN6); /* TODO: print argument */
97*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFADDR_IN6); /* TODO: print argument */
98*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFDSTADDR_IN6); /* TODO: print argument */
99*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFNETMASK_IN6); /* TODO: print argument */
100*ef8d499eSDavid van Moolenbroek NAME(SIOCDIFADDR_IN6); /* TODO: print argument */
101*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFPSRCADDR_IN6); /* TODO: print argument */
102*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFPDSTADDR_IN6); /* TODO: print argument */
103*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFAFLAG_IN6); /* TODO: print argument */
104*ef8d499eSDavid van Moolenbroek NAME(SIOCGDRLST_IN6); /* TODO: print argument */
105*ef8d499eSDavid van Moolenbroek NAME(SIOCSNDFLUSH_IN6); /* TODO: print argument */
106*ef8d499eSDavid van Moolenbroek NAME(SIOCGNBRINFO_IN6); /* TODO: print argument */
107*ef8d499eSDavid van Moolenbroek NAME(SIOCSRTRFLUSH_IN6); /* TODO: print argument */
108*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFSTAT_IN6); /* TODO: print argument */
109*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFSTAT_ICMP6); /* TODO: print argument */
110*ef8d499eSDavid van Moolenbroek NAME(SIOCSDEFIFACE_IN6); /* TODO: print argument */
111*ef8d499eSDavid van Moolenbroek NAME(SIOCGDEFIFACE_IN6); /* TODO: print argument */
112*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFINFO_FLAGS); /* TODO: print argument */
113*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFPREFIX_IN6); /* TODO: print argument */
114*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFPREFIX_IN6); /* TODO: print argument */
115*ef8d499eSDavid van Moolenbroek NAME(SIOCDIFPREFIX_IN6); /* TODO: print argument */
116*ef8d499eSDavid van Moolenbroek NAME(SIOCAIFPREFIX_IN6); /* TODO: print argument */
117*ef8d499eSDavid van Moolenbroek NAME(SIOCCIFPREFIX_IN6); /* TODO: print argument */
118*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFALIFETIME_IN6); /* TODO: print argument */
119*ef8d499eSDavid van Moolenbroek NAME(SIOCAIFADDR_IN6); /* TODO: print argument */
120*ef8d499eSDavid van Moolenbroek NAME(SIOCGIFINFO_IN6); /* TODO: print argument */
121*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFINFO_IN6); /* TODO: print argument */
122*ef8d499eSDavid van Moolenbroek NAME(SIOCSIFPHYADDR_IN6); /* TODO: print argument */
123*ef8d499eSDavid van Moolenbroek NAME(SIOCAADDRCTL_POLICY); /* TODO: print argument */
124*ef8d499eSDavid van Moolenbroek NAME(SIOCDADDRCTL_POLICY); /* TODO: print argument */
125*ef8d499eSDavid van Moolenbroek /* net80211/ieee80211_ioctl.h */
126*ef8d499eSDavid van Moolenbroek NAME(SIOCS80211NWID); /* TODO: print argument */
127*ef8d499eSDavid van Moolenbroek NAME(SIOCG80211NWID); /* TODO: print argument */
128*ef8d499eSDavid van Moolenbroek /* old MINIX inet ioctls */
129521fa314SDavid van Moolenbroek NAME(NWIOSETHOPT); /* TODO: print argument */
130521fa314SDavid van Moolenbroek NAME(NWIOGETHOPT); /* TODO: print argument */
131521fa314SDavid van Moolenbroek NAME(NWIOGETHSTAT); /* TODO: print argument */
132521fa314SDavid van Moolenbroek NAME(NWIOARPGIP); /* TODO: print argument */
133521fa314SDavid van Moolenbroek NAME(NWIOARPGNEXT); /* TODO: print argument */
134521fa314SDavid van Moolenbroek NAME(NWIOARPSIP); /* TODO: print argument */
135521fa314SDavid van Moolenbroek NAME(NWIOARPDIP); /* TODO: print argument */
136521fa314SDavid van Moolenbroek NAME(NWIOSIPCONF2); /* TODO: print argument */
137521fa314SDavid van Moolenbroek NAME(NWIOSIPCONF); /* TODO: print argument */
138521fa314SDavid van Moolenbroek NAME(NWIOGIPCONF2); /* TODO: print argument */
139521fa314SDavid van Moolenbroek NAME(NWIOGIPCONF); /* TODO: print argument */
140521fa314SDavid van Moolenbroek NAME(NWIOSIPOPT);
141521fa314SDavid van Moolenbroek NAME(NWIOGIPOPT);
142521fa314SDavid van Moolenbroek NAME(NWIOGIPOROUTE); /* TODO: print argument */
143521fa314SDavid van Moolenbroek NAME(NWIOSIPOROUTE); /* TODO: print argument */
144521fa314SDavid van Moolenbroek NAME(NWIODIPOROUTE); /* TODO: print argument */
145521fa314SDavid van Moolenbroek NAME(NWIOGIPIROUTE); /* TODO: print argument */
146521fa314SDavid van Moolenbroek NAME(NWIOSIPIROUTE); /* TODO: print argument */
147521fa314SDavid van Moolenbroek NAME(NWIODIPIROUTE); /* TODO: print argument */
148521fa314SDavid van Moolenbroek NAME(NWIOSTCPCONF);
149521fa314SDavid van Moolenbroek NAME(NWIOGTCPCONF);
150521fa314SDavid van Moolenbroek NAME(NWIOTCPCONN);
151521fa314SDavid van Moolenbroek NAME(NWIOTCPLISTEN);
152521fa314SDavid van Moolenbroek NAME(NWIOTCPATTACH); /* TODO: print argument */
153521fa314SDavid van Moolenbroek NAME(NWIOTCPSHUTDOWN); /* no argument */
154521fa314SDavid van Moolenbroek NAME(NWIOSTCPOPT);
155521fa314SDavid van Moolenbroek NAME(NWIOGTCPOPT);
156521fa314SDavid van Moolenbroek NAME(NWIOTCPPUSH); /* no argument */
157521fa314SDavid van Moolenbroek NAME(NWIOTCPLISTENQ);
158521fa314SDavid van Moolenbroek NAME(NWIOGTCPCOOKIE);
159521fa314SDavid van Moolenbroek NAME(NWIOTCPACCEPTTO);
160521fa314SDavid van Moolenbroek NAME(NWIOTCPGERROR);
161521fa314SDavid van Moolenbroek NAME(NWIOSUDPOPT);
162521fa314SDavid van Moolenbroek NAME(NWIOGUDPOPT);
163521fa314SDavid van Moolenbroek NAME(NWIOUDPPEEK); /* TODO: print argument */
164521fa314SDavid van Moolenbroek NAME(NWIOSPSIPOPT); /* TODO: print argument */
165521fa314SDavid van Moolenbroek NAME(NWIOGPSIPOPT); /* TODO: print argument */
166521fa314SDavid van Moolenbroek NAME(NWIOGUDSFADDR);
167521fa314SDavid van Moolenbroek NAME(NWIOSUDSTADDR);
168521fa314SDavid van Moolenbroek NAME(NWIOSUDSADDR);
169521fa314SDavid van Moolenbroek NAME(NWIOGUDSADDR);
170521fa314SDavid van Moolenbroek NAME(NWIOGUDSPADDR);
171521fa314SDavid van Moolenbroek NAME(NWIOSUDSTYPE);
172521fa314SDavid van Moolenbroek NAME(NWIOSUDSBLOG);
173521fa314SDavid van Moolenbroek NAME(NWIOSUDSCONN);
174521fa314SDavid van Moolenbroek NAME(NWIOSUDSSHUT);
175521fa314SDavid van Moolenbroek NAME(NWIOSUDSPAIR);
176521fa314SDavid van Moolenbroek NAME(NWIOSUDSACCEPT);
177521fa314SDavid van Moolenbroek NAME(NWIOSUDSCTRL);
178521fa314SDavid van Moolenbroek NAME(NWIOGUDSCTRL);
179521fa314SDavid van Moolenbroek NAME(NWIOGUDSSOTYPE);
180521fa314SDavid van Moolenbroek NAME(NWIOGUDSPEERCRED);
181521fa314SDavid van Moolenbroek NAME(NWIOGUDSSNDBUF);
182521fa314SDavid van Moolenbroek NAME(NWIOSUDSSNDBUF);
183521fa314SDavid van Moolenbroek NAME(NWIOGUDSRCVBUF);
184521fa314SDavid van Moolenbroek NAME(NWIOSUDSRCVBUF);
185521fa314SDavid van Moolenbroek }
186521fa314SDavid van Moolenbroek
187521fa314SDavid van Moolenbroek return NULL;
188521fa314SDavid van Moolenbroek }
189521fa314SDavid van Moolenbroek
190521fa314SDavid van Moolenbroek static const struct flags ipopt_flags[] = {
191521fa314SDavid van Moolenbroek FLAG_ZERO(NWIO_NOFLAGS),
192521fa314SDavid van Moolenbroek FLAG_MASK(NWIO_ACC_MASK, NWIO_EXCL),
193521fa314SDavid van Moolenbroek FLAG_MASK(NWIO_ACC_MASK, NWIO_SHARED),
194521fa314SDavid van Moolenbroek FLAG_MASK(NWIO_ACC_MASK, NWIO_COPY),
195521fa314SDavid van Moolenbroek FLAG(NWIO_EN_LOC),
196521fa314SDavid van Moolenbroek FLAG(NWIO_DI_LOC),
197521fa314SDavid van Moolenbroek FLAG(NWIO_EN_BROAD),
198521fa314SDavid van Moolenbroek FLAG(NWIO_DI_BROAD),
199521fa314SDavid van Moolenbroek FLAG(NWIO_REMSPEC),
200521fa314SDavid van Moolenbroek FLAG(NWIO_REMANY),
201521fa314SDavid van Moolenbroek FLAG(NWIO_PROTOSPEC),
202521fa314SDavid van Moolenbroek FLAG(NWIO_PROTOANY),
203521fa314SDavid van Moolenbroek FLAG(NWIO_HDR_O_SPEC),
204521fa314SDavid van Moolenbroek FLAG(NWIO_HDR_O_ANY),
205521fa314SDavid van Moolenbroek FLAG(NWIO_RWDATONLY),
206521fa314SDavid van Moolenbroek FLAG(NWIO_RWDATALL),
207521fa314SDavid van Moolenbroek };
208521fa314SDavid van Moolenbroek
209521fa314SDavid van Moolenbroek static void
put_ipaddr(struct trace_proc * proc,const char * name,ipaddr_t ipaddr)210521fa314SDavid van Moolenbroek put_ipaddr(struct trace_proc * proc, const char * name, ipaddr_t ipaddr)
211521fa314SDavid van Moolenbroek {
212521fa314SDavid van Moolenbroek struct in_addr in;
213521fa314SDavid van Moolenbroek
214521fa314SDavid van Moolenbroek in.s_addr = ipaddr;
215521fa314SDavid van Moolenbroek
216c38dbb97SDavid van Moolenbroek put_in_addr(proc, name, in);
217521fa314SDavid van Moolenbroek }
218521fa314SDavid van Moolenbroek
219521fa314SDavid van Moolenbroek static void
put_ipproto(struct trace_proc * proc,const char * name,ipproto_t proto)220521fa314SDavid van Moolenbroek put_ipproto(struct trace_proc * proc, const char * name, ipproto_t proto)
221521fa314SDavid van Moolenbroek {
222521fa314SDavid van Moolenbroek const char *text = NULL;
223521fa314SDavid van Moolenbroek
224521fa314SDavid van Moolenbroek if (!valuesonly) {
225521fa314SDavid van Moolenbroek switch (proto) {
226521fa314SDavid van Moolenbroek TEXT(IPPROTO_ICMP);
227521fa314SDavid van Moolenbroek TEXT(IPPROTO_TCP);
228521fa314SDavid van Moolenbroek TEXT(IPPROTO_UDP);
229521fa314SDavid van Moolenbroek }
230521fa314SDavid van Moolenbroek }
231521fa314SDavid van Moolenbroek
232521fa314SDavid van Moolenbroek if (text != NULL)
233521fa314SDavid van Moolenbroek put_field(proc, name, text);
234521fa314SDavid van Moolenbroek else
235521fa314SDavid van Moolenbroek put_value(proc, name, "%u", proto);
236521fa314SDavid van Moolenbroek }
237521fa314SDavid van Moolenbroek
238521fa314SDavid van Moolenbroek static const struct flags tcpconf_flags[] = {
239521fa314SDavid van Moolenbroek FLAG_ZERO(NWTC_NOFLAGS),
240521fa314SDavid van Moolenbroek FLAG_MASK(NWTC_ACC_MASK, NWTC_EXCL),
241521fa314SDavid van Moolenbroek FLAG_MASK(NWTC_ACC_MASK, NWTC_SHARED),
242521fa314SDavid van Moolenbroek FLAG_MASK(NWTC_ACC_MASK, NWTC_COPY),
243521fa314SDavid van Moolenbroek FLAG_MASK(NWTC_LOCPORT_MASK, NWTC_LP_UNSET),
244521fa314SDavid van Moolenbroek FLAG_MASK(NWTC_LOCPORT_MASK, NWTC_LP_SET),
245521fa314SDavid van Moolenbroek FLAG_MASK(NWTC_LOCPORT_MASK, NWTC_LP_SEL),
246521fa314SDavid van Moolenbroek FLAG(NWTC_SET_RA),
247521fa314SDavid van Moolenbroek FLAG(NWTC_UNSET_RA),
248521fa314SDavid van Moolenbroek FLAG(NWTC_SET_RP),
249521fa314SDavid van Moolenbroek FLAG(NWTC_UNSET_RP),
250521fa314SDavid van Moolenbroek };
251521fa314SDavid van Moolenbroek
252521fa314SDavid van Moolenbroek #define put_port(proc, name, port) \
253521fa314SDavid van Moolenbroek put_value(proc, name, "%u", ntohs(port))
254521fa314SDavid van Moolenbroek
255521fa314SDavid van Moolenbroek static const struct flags tcpcl_flags[] = {
256521fa314SDavid van Moolenbroek FLAG_ZERO(TCF_DEFAULT),
257521fa314SDavid van Moolenbroek FLAG(TCF_ASYNCH),
258521fa314SDavid van Moolenbroek };
259521fa314SDavid van Moolenbroek
260521fa314SDavid van Moolenbroek static const struct flags tcpopt_flags[] = {
261521fa314SDavid van Moolenbroek FLAG_ZERO(NWTO_NOFLAG),
262521fa314SDavid van Moolenbroek FLAG(NWTO_SND_URG),
263521fa314SDavid van Moolenbroek FLAG(NWTO_SND_NOTURG),
264521fa314SDavid van Moolenbroek FLAG(NWTO_RCV_URG),
265521fa314SDavid van Moolenbroek FLAG(NWTO_RCV_NOTURG),
266521fa314SDavid van Moolenbroek FLAG(NWTO_BSD_URG),
267521fa314SDavid van Moolenbroek FLAG(NWTO_NOTBSD_URG),
268521fa314SDavid van Moolenbroek FLAG(NWTO_DEL_RST),
269521fa314SDavid van Moolenbroek FLAG(NWTO_BULK),
270521fa314SDavid van Moolenbroek FLAG(NWTO_NOBULK),
271521fa314SDavid van Moolenbroek };
272521fa314SDavid van Moolenbroek
273521fa314SDavid van Moolenbroek static const struct flags udpopt_flags[] = {
274521fa314SDavid van Moolenbroek FLAG_ZERO(NWUO_NOFLAGS),
275521fa314SDavid van Moolenbroek FLAG_MASK(NWUO_ACC_MASK, NWUO_EXCL),
276521fa314SDavid van Moolenbroek FLAG_MASK(NWUO_ACC_MASK, NWUO_SHARED),
277521fa314SDavid van Moolenbroek FLAG_MASK(NWUO_ACC_MASK, NWUO_COPY),
278521fa314SDavid van Moolenbroek FLAG_MASK(NWUO_LOCPORT_MASK, NWUO_LP_SET),
279521fa314SDavid van Moolenbroek FLAG_MASK(NWUO_LOCPORT_MASK, NWUO_LP_SEL),
280521fa314SDavid van Moolenbroek FLAG_MASK(NWUO_LOCPORT_MASK, NWUO_LP_ANY),
281521fa314SDavid van Moolenbroek FLAG(NWUO_EN_LOC),
282521fa314SDavid van Moolenbroek FLAG(NWUO_DI_LOC),
283521fa314SDavid van Moolenbroek FLAG(NWUO_EN_BROAD),
284521fa314SDavid van Moolenbroek FLAG(NWUO_DI_BROAD),
285521fa314SDavid van Moolenbroek FLAG(NWUO_RP_SET),
286521fa314SDavid van Moolenbroek FLAG(NWUO_RP_ANY),
287521fa314SDavid van Moolenbroek FLAG(NWUO_RA_SET),
288521fa314SDavid van Moolenbroek FLAG(NWUO_RA_ANY),
289521fa314SDavid van Moolenbroek FLAG(NWUO_RWDATONLY),
290521fa314SDavid van Moolenbroek FLAG(NWUO_RWDATALL),
291521fa314SDavid van Moolenbroek FLAG(NWUO_EN_IPOPT),
292521fa314SDavid van Moolenbroek FLAG(NWUO_DI_IPOPT),
293521fa314SDavid van Moolenbroek };
294521fa314SDavid van Moolenbroek
295521fa314SDavid van Moolenbroek static void
put_struct_uucred(struct trace_proc * proc,const char * name,int flags,vir_bytes addr)29627852ebeSDavid van Moolenbroek put_struct_uucred(struct trace_proc * proc, const char * name, int flags,
29727852ebeSDavid van Moolenbroek vir_bytes addr)
29827852ebeSDavid van Moolenbroek {
29927852ebeSDavid van Moolenbroek struct uucred cred;
30027852ebeSDavid van Moolenbroek
30127852ebeSDavid van Moolenbroek if (!put_open_struct(proc, name, flags, addr, &cred, sizeof(cred)))
30227852ebeSDavid van Moolenbroek return;
30327852ebeSDavid van Moolenbroek
30427852ebeSDavid van Moolenbroek put_value(proc, "cr_uid", "%u", cred.cr_uid);
30527852ebeSDavid van Moolenbroek if (verbose > 0) {
30627852ebeSDavid van Moolenbroek put_value(proc, "cr_gid", "%u", cred.cr_gid);
30727852ebeSDavid van Moolenbroek if (verbose > 1)
30827852ebeSDavid van Moolenbroek put_value(proc, "cr_ngroups", "%d", cred.cr_ngroups);
30927852ebeSDavid van Moolenbroek put_groups(proc, "cr_groups", PF_LOCADDR,
31027852ebeSDavid van Moolenbroek (vir_bytes)&cred.cr_groups, cred.cr_ngroups);
31127852ebeSDavid van Moolenbroek }
31227852ebeSDavid van Moolenbroek
31327852ebeSDavid van Moolenbroek put_close_struct(proc, verbose > 0);
31427852ebeSDavid van Moolenbroek }
31527852ebeSDavid van Moolenbroek
31627852ebeSDavid van Moolenbroek static void
put_msg_control(struct trace_proc * proc,struct msg_control * ptr)317521fa314SDavid van Moolenbroek put_msg_control(struct trace_proc * proc, struct msg_control * ptr)
318521fa314SDavid van Moolenbroek {
319521fa314SDavid van Moolenbroek struct msghdr msg;
320521fa314SDavid van Moolenbroek struct cmsghdr *cmsg;
321521fa314SDavid van Moolenbroek size_t len;
322b58e161cSDavid van Moolenbroek unsigned int i;
323521fa314SDavid van Moolenbroek
324521fa314SDavid van Moolenbroek if (ptr->msg_controllen > sizeof(ptr->msg_control)) {
325521fa314SDavid van Moolenbroek put_field(proc, NULL, "..");
326521fa314SDavid van Moolenbroek
327521fa314SDavid van Moolenbroek return;
328521fa314SDavid van Moolenbroek }
329521fa314SDavid van Moolenbroek
330521fa314SDavid van Moolenbroek put_open(proc, NULL, PF_NONAME, "[", ", ");
331521fa314SDavid van Moolenbroek
332521fa314SDavid van Moolenbroek memset(&msg, 0, sizeof(msg));
333521fa314SDavid van Moolenbroek msg.msg_control = ptr->msg_control;
334521fa314SDavid van Moolenbroek msg.msg_controllen = ptr->msg_controllen;
335521fa314SDavid van Moolenbroek
336521fa314SDavid van Moolenbroek /*
337521fa314SDavid van Moolenbroek * TODO: decide if we need a verbosity-based limit here. The argument
338521fa314SDavid van Moolenbroek * in favor of printing everything is that upon receipt, SCM_RIGHTS
339521fa314SDavid van Moolenbroek * actually creates new file descriptors, which is pretty essential in
340521fa314SDavid van Moolenbroek * terms of figuring out what is happening in a process. In addition,
341521fa314SDavid van Moolenbroek * these calls should be sufficiently rare that the lengthy output is
342521fa314SDavid van Moolenbroek * not really disruptive for the general output flow.
343521fa314SDavid van Moolenbroek */
344521fa314SDavid van Moolenbroek for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL;
345521fa314SDavid van Moolenbroek cmsg = CMSG_NXTHDR(&msg, cmsg)) {
346521fa314SDavid van Moolenbroek put_open(proc, NULL, 0, "{", ", ");
347521fa314SDavid van Moolenbroek
348521fa314SDavid van Moolenbroek if (verbose > 0)
349521fa314SDavid van Moolenbroek put_value(proc, "cmsg_len", "%u", cmsg->cmsg_len);
350521fa314SDavid van Moolenbroek if (!valuesonly && cmsg->cmsg_level == SOL_SOCKET)
351521fa314SDavid van Moolenbroek put_field(proc, "cmsg_level", "SOL_SOCKET");
352521fa314SDavid van Moolenbroek else
353521fa314SDavid van Moolenbroek put_value(proc, "cmsg_level", "%d", cmsg->cmsg_level);
354521fa314SDavid van Moolenbroek if (cmsg->cmsg_level == SOL_SOCKET)
355521fa314SDavid van Moolenbroek put_cmsg_type(proc, "cmsg_type", cmsg->cmsg_type);
356521fa314SDavid van Moolenbroek
357521fa314SDavid van Moolenbroek len = cmsg->cmsg_len - CMSG_LEN(0);
358521fa314SDavid van Moolenbroek
359521fa314SDavid van Moolenbroek /* Print the contents of the messages that we know. */
360521fa314SDavid van Moolenbroek if (cmsg->cmsg_level == SOL_SOCKET &&
361521fa314SDavid van Moolenbroek cmsg->cmsg_type == SCM_RIGHTS) {
362521fa314SDavid van Moolenbroek put_open(proc, NULL, PF_NONAME, "[", ", ");
363521fa314SDavid van Moolenbroek for (i = 0; i < len / sizeof(int); i++)
364521fa314SDavid van Moolenbroek put_fd(proc, NULL,
365521fa314SDavid van Moolenbroek ((int *)CMSG_DATA(cmsg))[i]);
366521fa314SDavid van Moolenbroek put_close(proc, "]");
367521fa314SDavid van Moolenbroek } else if (cmsg->cmsg_level == SOL_SOCKET &&
368521fa314SDavid van Moolenbroek cmsg->cmsg_type == SCM_CREDS) {
369521fa314SDavid van Moolenbroek put_struct_uucred(proc, NULL, PF_LOCADDR,
370521fa314SDavid van Moolenbroek (vir_bytes)CMSG_DATA(cmsg));
371521fa314SDavid van Moolenbroek } else if (len > 0)
372521fa314SDavid van Moolenbroek put_field(proc, NULL, "..");
373521fa314SDavid van Moolenbroek
374521fa314SDavid van Moolenbroek put_close(proc, "}");
375521fa314SDavid van Moolenbroek }
376521fa314SDavid van Moolenbroek
377521fa314SDavid van Moolenbroek put_close(proc, "]");
378521fa314SDavid van Moolenbroek }
379521fa314SDavid van Moolenbroek
380521fa314SDavid van Moolenbroek int
net_ioctl_arg(struct trace_proc * proc,unsigned long req,void * ptr,int dir)381521fa314SDavid van Moolenbroek net_ioctl_arg(struct trace_proc * proc, unsigned long req, void * ptr, int dir)
382521fa314SDavid van Moolenbroek {
383521fa314SDavid van Moolenbroek const char *text;
384521fa314SDavid van Moolenbroek nwio_ipopt_t *ipopt;
385521fa314SDavid van Moolenbroek nwio_tcpconf_t *nwtc;
386521fa314SDavid van Moolenbroek nwio_tcpcl_t *nwtcl;
387521fa314SDavid van Moolenbroek nwio_tcpopt_t *nwto;
388521fa314SDavid van Moolenbroek tcp_cookie_t *cookie;
389521fa314SDavid van Moolenbroek nwio_udpopt_t *nwuo;
390521fa314SDavid van Moolenbroek struct sockaddr_un *sun;
391521fa314SDavid van Moolenbroek int i;
392521fa314SDavid van Moolenbroek
393521fa314SDavid van Moolenbroek switch (req) {
394521fa314SDavid van Moolenbroek case FIONREAD:
395521fa314SDavid van Moolenbroek /*
396521fa314SDavid van Moolenbroek * Arguably this does not belong here, but as of writing, the
397521fa314SDavid van Moolenbroek * network services are the only ones actually implementing
398521fa314SDavid van Moolenbroek * support for this IOCTL, and we don't have a more suitable
399521fa314SDavid van Moolenbroek * place to put it either.
400521fa314SDavid van Moolenbroek */
401521fa314SDavid van Moolenbroek if (ptr == NULL)
402521fa314SDavid van Moolenbroek return IF_IN;
403521fa314SDavid van Moolenbroek
404521fa314SDavid van Moolenbroek put_value(proc, NULL, "%d", *(int *)ptr);
405521fa314SDavid van Moolenbroek return IF_ALL;
406521fa314SDavid van Moolenbroek
407521fa314SDavid van Moolenbroek case NWIOSIPOPT:
408521fa314SDavid van Moolenbroek case NWIOGIPOPT:
409521fa314SDavid van Moolenbroek if ((ipopt = (nwio_ipopt_t *)ptr) == NULL)
410521fa314SDavid van Moolenbroek return dir;
411521fa314SDavid van Moolenbroek
412521fa314SDavid van Moolenbroek put_flags(proc, "nwio_flags", ipopt_flags, COUNT(ipopt_flags),
413521fa314SDavid van Moolenbroek "0x%x", ipopt->nwio_flags);
414521fa314SDavid van Moolenbroek
415521fa314SDavid van Moolenbroek if (ipopt->nwio_flags & NWIO_REMSPEC)
416521fa314SDavid van Moolenbroek put_ipaddr(proc, "nwio_rem", ipopt->nwio_rem);
417521fa314SDavid van Moolenbroek if (ipopt->nwio_flags & NWIO_PROTOSPEC)
418521fa314SDavid van Moolenbroek put_ipproto(proc, "nwio_proto", ipopt->nwio_proto);
419521fa314SDavid van Moolenbroek
420521fa314SDavid van Moolenbroek return 0; /* TODO: the remaining fields */
421521fa314SDavid van Moolenbroek
422521fa314SDavid van Moolenbroek case NWIOSTCPCONF:
423521fa314SDavid van Moolenbroek case NWIOGTCPCONF:
424521fa314SDavid van Moolenbroek if ((nwtc = (nwio_tcpconf_t *)ptr) == NULL)
425521fa314SDavid van Moolenbroek return dir;
426521fa314SDavid van Moolenbroek
427521fa314SDavid van Moolenbroek put_flags(proc, "nwtc_flags", tcpconf_flags,
428521fa314SDavid van Moolenbroek COUNT(tcpconf_flags), "0x%x", nwtc->nwtc_flags);
429521fa314SDavid van Moolenbroek
430521fa314SDavid van Moolenbroek /* The local address cannot be set, just retrieved. */
431521fa314SDavid van Moolenbroek if (req == NWIOGTCPCONF)
432521fa314SDavid van Moolenbroek put_ipaddr(proc, "nwtc_locaddr", nwtc->nwtc_locaddr);
433521fa314SDavid van Moolenbroek
434521fa314SDavid van Moolenbroek if ((nwtc->nwtc_flags & NWTC_LOCPORT_MASK) == NWTC_LP_SET)
435521fa314SDavid van Moolenbroek put_port(proc, "nwtc_locport", nwtc->nwtc_locport);
436521fa314SDavid van Moolenbroek
437521fa314SDavid van Moolenbroek if (nwtc->nwtc_flags & NWTC_SET_RA)
438521fa314SDavid van Moolenbroek put_ipaddr(proc, "nwtc_remaddr", nwtc->nwtc_remaddr);
439521fa314SDavid van Moolenbroek
440521fa314SDavid van Moolenbroek if (nwtc->nwtc_flags & NWTC_SET_RP)
441521fa314SDavid van Moolenbroek put_port(proc, "nwtc_remport", nwtc->nwtc_remport);
442521fa314SDavid van Moolenbroek
443521fa314SDavid van Moolenbroek return IF_ALL;
444521fa314SDavid van Moolenbroek
445521fa314SDavid van Moolenbroek case NWIOTCPCONN:
446521fa314SDavid van Moolenbroek case NWIOTCPLISTEN:
447521fa314SDavid van Moolenbroek if ((nwtcl = (nwio_tcpcl_t *)ptr) == NULL)
448521fa314SDavid van Moolenbroek return dir;
449521fa314SDavid van Moolenbroek
450521fa314SDavid van Moolenbroek put_flags(proc, "nwtcl_flags", tcpcl_flags,
451521fa314SDavid van Moolenbroek COUNT(tcpcl_flags), "0x%x", nwtcl->nwtcl_flags);
452521fa314SDavid van Moolenbroek
453521fa314SDavid van Moolenbroek /* We pretend the unused nwtcl_ttl field does not exist. */
454521fa314SDavid van Moolenbroek return IF_ALL;
455521fa314SDavid van Moolenbroek
456521fa314SDavid van Moolenbroek case NWIOSTCPOPT:
457521fa314SDavid van Moolenbroek case NWIOGTCPOPT:
458521fa314SDavid van Moolenbroek if ((nwto = (nwio_tcpopt_t *)ptr) == NULL)
459521fa314SDavid van Moolenbroek return dir;
460521fa314SDavid van Moolenbroek
461521fa314SDavid van Moolenbroek put_flags(proc, "nwto_flags", tcpopt_flags,
462521fa314SDavid van Moolenbroek COUNT(tcpopt_flags), "0x%x", nwto->nwto_flags);
463521fa314SDavid van Moolenbroek return IF_ALL;
464521fa314SDavid van Moolenbroek
465521fa314SDavid van Moolenbroek case NWIOTCPLISTENQ:
466521fa314SDavid van Moolenbroek case NWIOSUDSBLOG:
467521fa314SDavid van Moolenbroek if (ptr == NULL)
468521fa314SDavid van Moolenbroek return IF_OUT;
469521fa314SDavid van Moolenbroek
470521fa314SDavid van Moolenbroek put_value(proc, NULL, "%d", *(int *)ptr);
471521fa314SDavid van Moolenbroek return IF_ALL;
472521fa314SDavid van Moolenbroek
473521fa314SDavid van Moolenbroek case NWIOGTCPCOOKIE:
474521fa314SDavid van Moolenbroek case NWIOTCPACCEPTTO:
475521fa314SDavid van Moolenbroek if ((cookie = (tcp_cookie_t *)ptr) == NULL)
476521fa314SDavid van Moolenbroek return dir;
477521fa314SDavid van Moolenbroek
478521fa314SDavid van Moolenbroek put_value(proc, "tc_ref", "%"PRIu32, cookie->tc_ref);
479521fa314SDavid van Moolenbroek if (verbose > 0)
480521fa314SDavid van Moolenbroek put_buf(proc, "tc_secret", PF_LOCADDR,
481521fa314SDavid van Moolenbroek (vir_bytes)&cookie->tc_secret,
482521fa314SDavid van Moolenbroek sizeof(cookie->tc_secret));
483521fa314SDavid van Moolenbroek return (verbose > 0) ? IF_ALL : 0;
484521fa314SDavid van Moolenbroek
485521fa314SDavid van Moolenbroek case NWIOTCPGERROR:
486521fa314SDavid van Moolenbroek if (ptr == NULL)
487521fa314SDavid van Moolenbroek return IF_IN;
488521fa314SDavid van Moolenbroek
489521fa314SDavid van Moolenbroek i = *(int *)ptr;
490521fa314SDavid van Moolenbroek if (!valuesonly && (text = get_error_name(i)) != NULL)
491521fa314SDavid van Moolenbroek put_field(proc, NULL, text);
492521fa314SDavid van Moolenbroek else
493521fa314SDavid van Moolenbroek put_value(proc, NULL, "%d", i);
494521fa314SDavid van Moolenbroek return IF_ALL;
495521fa314SDavid van Moolenbroek
496521fa314SDavid van Moolenbroek case NWIOSUDPOPT:
497521fa314SDavid van Moolenbroek case NWIOGUDPOPT:
498521fa314SDavid van Moolenbroek if ((nwuo = (nwio_udpopt_t *)ptr) == NULL)
499521fa314SDavid van Moolenbroek return dir;
500521fa314SDavid van Moolenbroek
501521fa314SDavid van Moolenbroek put_flags(proc, "nwuo_flags", udpopt_flags,
502521fa314SDavid van Moolenbroek COUNT(udpopt_flags), "0x%x", nwuo->nwuo_flags);
503521fa314SDavid van Moolenbroek
504521fa314SDavid van Moolenbroek /* The local address cannot be set, just retrieved. */
505521fa314SDavid van Moolenbroek if (req == NWIOGUDPOPT)
506521fa314SDavid van Moolenbroek put_ipaddr(proc, "nwuo_locaddr", nwuo->nwuo_locaddr);
507521fa314SDavid van Moolenbroek
508521fa314SDavid van Moolenbroek if ((nwuo->nwuo_flags & NWUO_LOCPORT_MASK) == NWUO_LP_SET)
509521fa314SDavid van Moolenbroek put_port(proc, "nwuo_locport", nwuo->nwuo_locport);
510521fa314SDavid van Moolenbroek
511521fa314SDavid van Moolenbroek if (nwuo->nwuo_flags & NWUO_RA_SET)
512521fa314SDavid van Moolenbroek put_ipaddr(proc, "nwuo_remaddr", nwuo->nwuo_remaddr);
513521fa314SDavid van Moolenbroek
514521fa314SDavid van Moolenbroek if (nwuo->nwuo_flags & NWUO_RP_SET)
515521fa314SDavid van Moolenbroek put_port(proc, "nwuo_remport", nwuo->nwuo_remport);
516521fa314SDavid van Moolenbroek
517521fa314SDavid van Moolenbroek return IF_ALL;
518521fa314SDavid van Moolenbroek
519521fa314SDavid van Moolenbroek case NWIOGUDSFADDR:
520521fa314SDavid van Moolenbroek case NWIOSUDSTADDR:
521521fa314SDavid van Moolenbroek case NWIOSUDSADDR:
522521fa314SDavid van Moolenbroek case NWIOGUDSADDR:
523521fa314SDavid van Moolenbroek case NWIOGUDSPADDR:
524521fa314SDavid van Moolenbroek case NWIOSUDSCONN:
525521fa314SDavid van Moolenbroek case NWIOSUDSACCEPT:
526521fa314SDavid van Moolenbroek if ((sun = (struct sockaddr_un *)ptr) == NULL)
527521fa314SDavid van Moolenbroek return dir;
528521fa314SDavid van Moolenbroek
529c38dbb97SDavid van Moolenbroek put_socket_family(proc, "sun_family", sun->sun_family);
530521fa314SDavid van Moolenbroek
531521fa314SDavid van Moolenbroek /* This could be extended to a generic sockaddr printer.. */
532521fa314SDavid van Moolenbroek if (sun->sun_family == AF_LOCAL) {
533521fa314SDavid van Moolenbroek put_buf(proc, "sun_path", PF_LOCADDR | PF_PATH,
534521fa314SDavid van Moolenbroek (vir_bytes)&sun->sun_path, sizeof(sun->sun_path));
535521fa314SDavid van Moolenbroek return IF_ALL; /* skipping sun_len, it's unused */
536521fa314SDavid van Moolenbroek } else
537521fa314SDavid van Moolenbroek return 0;
538521fa314SDavid van Moolenbroek
539521fa314SDavid van Moolenbroek case NWIOSUDSTYPE:
540521fa314SDavid van Moolenbroek case NWIOGUDSSOTYPE:
541521fa314SDavid van Moolenbroek if (ptr == NULL)
542521fa314SDavid van Moolenbroek return dir;
543521fa314SDavid van Moolenbroek
544c38dbb97SDavid van Moolenbroek put_socket_type(proc, NULL, *(int *)ptr);
545521fa314SDavid van Moolenbroek return IF_ALL;
546521fa314SDavid van Moolenbroek
547521fa314SDavid van Moolenbroek case NWIOSUDSSHUT:
548521fa314SDavid van Moolenbroek if (ptr == NULL)
549521fa314SDavid van Moolenbroek return IF_OUT;
550521fa314SDavid van Moolenbroek
551521fa314SDavid van Moolenbroek put_shutdown_how(proc, NULL, *(int *)ptr);
552521fa314SDavid van Moolenbroek return IF_ALL;
553521fa314SDavid van Moolenbroek
554521fa314SDavid van Moolenbroek case NWIOSUDSPAIR:
555521fa314SDavid van Moolenbroek if (ptr == NULL)
556521fa314SDavid van Moolenbroek return IF_OUT;
557521fa314SDavid van Moolenbroek
558521fa314SDavid van Moolenbroek put_dev(proc, NULL, *(dev_t *)ptr);
559521fa314SDavid van Moolenbroek return IF_ALL;
560521fa314SDavid van Moolenbroek
561521fa314SDavid van Moolenbroek case NWIOSUDSCTRL:
562521fa314SDavid van Moolenbroek if (ptr == NULL)
563521fa314SDavid van Moolenbroek return IF_OUT;
564521fa314SDavid van Moolenbroek
565521fa314SDavid van Moolenbroek /* FALLTHROUGH */
566521fa314SDavid van Moolenbroek case NWIOGUDSCTRL:
567521fa314SDavid van Moolenbroek if (ptr == NULL)
568521fa314SDavid van Moolenbroek return IF_IN;
569521fa314SDavid van Moolenbroek
570521fa314SDavid van Moolenbroek put_msg_control(proc, (struct msg_control *)ptr);
571521fa314SDavid van Moolenbroek return IF_ALL;
572521fa314SDavid van Moolenbroek
573521fa314SDavid van Moolenbroek case NWIOGUDSPEERCRED:
574521fa314SDavid van Moolenbroek if (ptr == NULL)
575521fa314SDavid van Moolenbroek return IF_IN;
576521fa314SDavid van Moolenbroek
577521fa314SDavid van Moolenbroek put_struct_uucred(proc, NULL, PF_LOCADDR, (vir_bytes)ptr);
578521fa314SDavid van Moolenbroek return IF_ALL;
579521fa314SDavid van Moolenbroek
580521fa314SDavid van Moolenbroek case NWIOGUDSSNDBUF:
581521fa314SDavid van Moolenbroek case NWIOSUDSSNDBUF:
582521fa314SDavid van Moolenbroek case NWIOGUDSRCVBUF:
583521fa314SDavid van Moolenbroek case NWIOSUDSRCVBUF:
584521fa314SDavid van Moolenbroek if (ptr == NULL)
585521fa314SDavid van Moolenbroek return dir;
586521fa314SDavid van Moolenbroek
587521fa314SDavid van Moolenbroek put_value(proc, NULL, "%zu", *(size_t *)ptr);
588521fa314SDavid van Moolenbroek return IF_ALL;
589521fa314SDavid van Moolenbroek
590521fa314SDavid van Moolenbroek default:
591521fa314SDavid van Moolenbroek return 0;
592521fa314SDavid van Moolenbroek }
593521fa314SDavid van Moolenbroek }
594