xref: /minix/minix/include/minix/if.h (revision 9f81acbc)
1 #ifndef _MINIX_IF_H
2 #define _MINIX_IF_H
3 
4 #include <net/if.h>
5 #include <net/if_media.h>
6 
7 /*
8  * MINIX3-specific extensions to the network interface headers.  These
9  * extensions are necessary because NetBSD IF uses a few ioctl(2) structure
10  * formats that contain pointers--something that MINIX3 has to avoid, due to
11  * its memory granting mechanisms.  Thus, those ioctl(2) calls have to be
12  * converted from NetBSD to MINIX3 format.  We currently do that in libc.
13  * This header specifies the numbers and formats for the MINIX3 versions.
14  *
15  * The general idea is that we rewrite the ioctl request data to include both
16  * the original structure and a buffer for the array of values to which the
17  * original structure uses a pointer.  Important: in those cases, the original
18  * structure is expected to be the first element of the replacement structure.
19  *
20  * There is typically no configured upper bound for the maximum number of
21  * values in the array, and so we pick size values that are hopefully always
22  * oversized and yet keep the ioctl sizes within the range of regular ioctls
23  * (4095 bytes, as per sys/ioccom.h).  If there may be larger amounts of data,
24  * we have to use "big" ioctls.
25  *
26  * For the replacement ioctl codes, we use the original ioctl class and number
27  * with a different size.  That should virtually eliminate the possibility of
28  * accidental collisions.
29  */
30 
31 /* SIOCGIFMEDIA: retrieve interface media status and types. */
32 #define MINIX_IF_MAXMEDIA	256
33 
34 struct minix_ifmediareq {
35 	struct ifmediareq mifm_ifm;			/* MUST be first */
36 	int mifm_list[MINIX_IF_MAXMEDIA];
37 };
38 
39 #define MINIX_SIOCGIFMEDIA	_IOWR('i', 54, struct minix_ifmediareq)
40 
41 /* SIOCIFGCLONERS: retrieve interface "cloners" (virtual types). */
42 #define MINIX_IF_MAXCLONERS	128
43 
44 struct minix_if_clonereq {
45 	struct if_clonereq mifcr_ifcr;			/* MUST be first */
46 	char mifcr_buffer[MINIX_IF_MAXCLONERS * IFNAMSIZ];
47 };
48 
49 #define MINIX_SIOCIFGCLONERS	_IOWR('i', 120, struct minix_if_clonereq)
50 
51 #endif /* !_MINIX_IF_H */
52