xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/net/if.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /* net/if.h -- declarations for inquiring about network interfaces
2*53ee8cc1Swenshuai.xi    Copyright (C) 1997,98,99,2000,2001 Free Software Foundation, Inc.
3*53ee8cc1Swenshuai.xi    This file is part of the GNU C Library.
4*53ee8cc1Swenshuai.xi 
5*53ee8cc1Swenshuai.xi    The GNU C Library is free software; you can redistribute it and/or
6*53ee8cc1Swenshuai.xi    modify it under the terms of the GNU Lesser General Public
7*53ee8cc1Swenshuai.xi    License as published by the Free Software Foundation; either
8*53ee8cc1Swenshuai.xi    version 2.1 of the License, or (at your option) any later version.
9*53ee8cc1Swenshuai.xi 
10*53ee8cc1Swenshuai.xi    The GNU C Library is distributed in the hope that it will be useful,
11*53ee8cc1Swenshuai.xi    but WITHOUT ANY WARRANTY; without even the implied warranty of
12*53ee8cc1Swenshuai.xi    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13*53ee8cc1Swenshuai.xi    Lesser General Public License for more details.
14*53ee8cc1Swenshuai.xi 
15*53ee8cc1Swenshuai.xi    You should have received a copy of the GNU Lesser General Public
16*53ee8cc1Swenshuai.xi    License along with the GNU C Library; if not, write to the Free
17*53ee8cc1Swenshuai.xi    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18*53ee8cc1Swenshuai.xi    02111-1307 USA.  */
19*53ee8cc1Swenshuai.xi 
20*53ee8cc1Swenshuai.xi #ifndef _NET_IF_H
21*53ee8cc1Swenshuai.xi #define _NET_IF_H	1
22*53ee8cc1Swenshuai.xi 
23*53ee8cc1Swenshuai.xi #include <features.h>
24*53ee8cc1Swenshuai.xi 
25*53ee8cc1Swenshuai.xi #ifdef __USE_MISC
26*53ee8cc1Swenshuai.xi # include <sys/types.h>
27*53ee8cc1Swenshuai.xi # include <sys/socket.h>
28*53ee8cc1Swenshuai.xi #endif
29*53ee8cc1Swenshuai.xi 
30*53ee8cc1Swenshuai.xi 
31*53ee8cc1Swenshuai.xi /* Length of interface name.  */
32*53ee8cc1Swenshuai.xi #define IF_NAMESIZE	16
33*53ee8cc1Swenshuai.xi 
34*53ee8cc1Swenshuai.xi struct if_nameindex
35*53ee8cc1Swenshuai.xi   {
36*53ee8cc1Swenshuai.xi     unsigned int if_index;	/* 1, 2, ... */
37*53ee8cc1Swenshuai.xi     char *if_name;		/* null terminated name: "eth0", ... */
38*53ee8cc1Swenshuai.xi   };
39*53ee8cc1Swenshuai.xi 
40*53ee8cc1Swenshuai.xi 
41*53ee8cc1Swenshuai.xi #ifdef __USE_MISC
42*53ee8cc1Swenshuai.xi /* Standard interface flags. */
43*53ee8cc1Swenshuai.xi enum
44*53ee8cc1Swenshuai.xi   {
45*53ee8cc1Swenshuai.xi     IFF_UP = 0x1,		/* Interface is up.  */
46*53ee8cc1Swenshuai.xi # define IFF_UP	IFF_UP
47*53ee8cc1Swenshuai.xi     IFF_BROADCAST = 0x2,	/* Broadcast address valid.  */
48*53ee8cc1Swenshuai.xi # define IFF_BROADCAST	IFF_BROADCAST
49*53ee8cc1Swenshuai.xi     IFF_DEBUG = 0x4,		/* Turn on debugging.  */
50*53ee8cc1Swenshuai.xi # define IFF_DEBUG	IFF_DEBUG
51*53ee8cc1Swenshuai.xi     IFF_LOOPBACK = 0x8,		/* Is a loopback net.  */
52*53ee8cc1Swenshuai.xi # define IFF_LOOPBACK	IFF_LOOPBACK
53*53ee8cc1Swenshuai.xi     IFF_POINTOPOINT = 0x10,	/* Interface is point-to-point link.  */
54*53ee8cc1Swenshuai.xi # define IFF_POINTOPOINT IFF_POINTOPOINT
55*53ee8cc1Swenshuai.xi     IFF_NOTRAILERS = 0x20,	/* Avoid use of trailers.  */
56*53ee8cc1Swenshuai.xi # define IFF_NOTRAILERS	IFF_NOTRAILERS
57*53ee8cc1Swenshuai.xi     IFF_RUNNING = 0x40,		/* Resources allocated.  */
58*53ee8cc1Swenshuai.xi # define IFF_RUNNING	IFF_RUNNING
59*53ee8cc1Swenshuai.xi     IFF_NOARP = 0x80,		/* No address resolution protocol.  */
60*53ee8cc1Swenshuai.xi # define IFF_NOARP	IFF_NOARP
61*53ee8cc1Swenshuai.xi     IFF_PROMISC = 0x100,	/* Receive all packets.  */
62*53ee8cc1Swenshuai.xi # define IFF_PROMISC	IFF_PROMISC
63*53ee8cc1Swenshuai.xi 
64*53ee8cc1Swenshuai.xi     /* Not supported */
65*53ee8cc1Swenshuai.xi     IFF_ALLMULTI = 0x200,	/* Receive all multicast packets.  */
66*53ee8cc1Swenshuai.xi # define IFF_ALLMULTI	IFF_ALLMULTI
67*53ee8cc1Swenshuai.xi 
68*53ee8cc1Swenshuai.xi     IFF_MASTER = 0x400,		/* Master of a load balancer.  */
69*53ee8cc1Swenshuai.xi # define IFF_MASTER	IFF_MASTER
70*53ee8cc1Swenshuai.xi     IFF_SLAVE = 0x800,		/* Slave of a load balancer.  */
71*53ee8cc1Swenshuai.xi # define IFF_SLAVE	IFF_SLAVE
72*53ee8cc1Swenshuai.xi 
73*53ee8cc1Swenshuai.xi     IFF_MULTICAST = 0x1000,	/* Supports multicast.  */
74*53ee8cc1Swenshuai.xi # define IFF_MULTICAST	IFF_MULTICAST
75*53ee8cc1Swenshuai.xi 
76*53ee8cc1Swenshuai.xi     IFF_PORTSEL = 0x2000,	/* Can set media type.  */
77*53ee8cc1Swenshuai.xi # define IFF_PORTSEL	IFF_PORTSEL
78*53ee8cc1Swenshuai.xi     IFF_AUTOMEDIA = 0x4000,	/* Auto media select active.  */
79*53ee8cc1Swenshuai.xi # define IFF_AUTOMEDIA	IFF_AUTOMEDIA
80*53ee8cc1Swenshuai.xi     IFF_DYNAMIC = 0x8000	/* Dialup device with changing addresses.  */
81*53ee8cc1Swenshuai.xi # define IFF_DYNAMIC	IFF_DYNAMIC
82*53ee8cc1Swenshuai.xi   };
83*53ee8cc1Swenshuai.xi 
84*53ee8cc1Swenshuai.xi /* The ifaddr structure contains information about one address of an
85*53ee8cc1Swenshuai.xi    interface.  They are maintained by the different address families,
86*53ee8cc1Swenshuai.xi    are allocated and attached when an address is set, and are linked
87*53ee8cc1Swenshuai.xi    together so all addresses for an interface can be located.  */
88*53ee8cc1Swenshuai.xi 
89*53ee8cc1Swenshuai.xi struct ifaddr
90*53ee8cc1Swenshuai.xi   {
91*53ee8cc1Swenshuai.xi     struct sockaddr ifa_addr;	/* Address of interface.  */
92*53ee8cc1Swenshuai.xi     union
93*53ee8cc1Swenshuai.xi       {
94*53ee8cc1Swenshuai.xi 	struct sockaddr	ifu_broadaddr;
95*53ee8cc1Swenshuai.xi 	struct sockaddr	ifu_dstaddr;
96*53ee8cc1Swenshuai.xi       } ifa_ifu;
97*53ee8cc1Swenshuai.xi     struct iface *ifa_ifp;	/* Back-pointer to interface.  */
98*53ee8cc1Swenshuai.xi     struct ifaddr *ifa_next;	/* Next address for interface.  */
99*53ee8cc1Swenshuai.xi   };
100*53ee8cc1Swenshuai.xi 
101*53ee8cc1Swenshuai.xi # define ifa_broadaddr	ifa_ifu.ifu_broadaddr	/* broadcast address	*/
102*53ee8cc1Swenshuai.xi # define ifa_dstaddr	ifa_ifu.ifu_dstaddr	/* other end of link	*/
103*53ee8cc1Swenshuai.xi 
104*53ee8cc1Swenshuai.xi /* Device mapping structure. I'd just gone off and designed a
105*53ee8cc1Swenshuai.xi    beautiful scheme using only loadable modules with arguments for
106*53ee8cc1Swenshuai.xi    driver options and along come the PCMCIA people 8)
107*53ee8cc1Swenshuai.xi 
108*53ee8cc1Swenshuai.xi    Ah well. The get() side of this is good for WDSETUP, and it'll be
109*53ee8cc1Swenshuai.xi    handy for debugging things. The set side is fine for now and being
110*53ee8cc1Swenshuai.xi    very small might be worth keeping for clean configuration.  */
111*53ee8cc1Swenshuai.xi 
112*53ee8cc1Swenshuai.xi struct ifmap
113*53ee8cc1Swenshuai.xi   {
114*53ee8cc1Swenshuai.xi     unsigned long int mem_start;
115*53ee8cc1Swenshuai.xi     unsigned long int mem_end;
116*53ee8cc1Swenshuai.xi     unsigned short int base_addr;
117*53ee8cc1Swenshuai.xi     unsigned char irq;
118*53ee8cc1Swenshuai.xi     unsigned char dma;
119*53ee8cc1Swenshuai.xi     unsigned char port;
120*53ee8cc1Swenshuai.xi     /* 3 bytes spare */
121*53ee8cc1Swenshuai.xi   };
122*53ee8cc1Swenshuai.xi 
123*53ee8cc1Swenshuai.xi /* Interface request structure used for socket ioctl's.  All interface
124*53ee8cc1Swenshuai.xi    ioctl's must have parameter definitions which begin with ifr_name.
125*53ee8cc1Swenshuai.xi    The remainder may be interface specific.  */
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi struct ifreq
128*53ee8cc1Swenshuai.xi   {
129*53ee8cc1Swenshuai.xi # define IFHWADDRLEN	6
130*53ee8cc1Swenshuai.xi # define IFNAMSIZ	IF_NAMESIZE
131*53ee8cc1Swenshuai.xi     union
132*53ee8cc1Swenshuai.xi       {
133*53ee8cc1Swenshuai.xi 	char ifrn_name[IFNAMSIZ];	/* Interface name, e.g. "en0".  */
134*53ee8cc1Swenshuai.xi       } ifr_ifrn;
135*53ee8cc1Swenshuai.xi 
136*53ee8cc1Swenshuai.xi     union
137*53ee8cc1Swenshuai.xi       {
138*53ee8cc1Swenshuai.xi 	struct sockaddr ifru_addr;
139*53ee8cc1Swenshuai.xi 	struct sockaddr ifru_dstaddr;
140*53ee8cc1Swenshuai.xi 	struct sockaddr ifru_broadaddr;
141*53ee8cc1Swenshuai.xi 	struct sockaddr ifru_netmask;
142*53ee8cc1Swenshuai.xi 	struct sockaddr ifru_hwaddr;
143*53ee8cc1Swenshuai.xi 	short int ifru_flags;
144*53ee8cc1Swenshuai.xi 	int ifru_ivalue;
145*53ee8cc1Swenshuai.xi 	int ifru_mtu;
146*53ee8cc1Swenshuai.xi 	struct ifmap ifru_map;
147*53ee8cc1Swenshuai.xi 	char ifru_slave[IFNAMSIZ];	/* Just fits the size */
148*53ee8cc1Swenshuai.xi 	char ifru_newname[IFNAMSIZ];
149*53ee8cc1Swenshuai.xi 	__caddr_t ifru_data;
150*53ee8cc1Swenshuai.xi       } ifr_ifru;
151*53ee8cc1Swenshuai.xi   };
152*53ee8cc1Swenshuai.xi # define ifr_name	ifr_ifrn.ifrn_name	/* interface name 	*/
153*53ee8cc1Swenshuai.xi # define ifr_hwaddr	ifr_ifru.ifru_hwaddr	/* MAC address 		*/
154*53ee8cc1Swenshuai.xi # define ifr_addr	ifr_ifru.ifru_addr	/* address		*/
155*53ee8cc1Swenshuai.xi # define ifr_dstaddr	ifr_ifru.ifru_dstaddr	/* other end of p-p lnk	*/
156*53ee8cc1Swenshuai.xi # define ifr_broadaddr	ifr_ifru.ifru_broadaddr	/* broadcast address	*/
157*53ee8cc1Swenshuai.xi # define ifr_netmask	ifr_ifru.ifru_netmask	/* interface net mask	*/
158*53ee8cc1Swenshuai.xi # define ifr_flags	ifr_ifru.ifru_flags	/* flags		*/
159*53ee8cc1Swenshuai.xi # define ifr_metric	ifr_ifru.ifru_ivalue	/* metric		*/
160*53ee8cc1Swenshuai.xi # define ifr_mtu	ifr_ifru.ifru_mtu	/* mtu			*/
161*53ee8cc1Swenshuai.xi # define ifr_map	ifr_ifru.ifru_map	/* device map		*/
162*53ee8cc1Swenshuai.xi # define ifr_slave	ifr_ifru.ifru_slave	/* slave device		*/
163*53ee8cc1Swenshuai.xi # define ifr_data	ifr_ifru.ifru_data	/* for use by interface	*/
164*53ee8cc1Swenshuai.xi # define ifr_ifindex	ifr_ifru.ifru_ivalue    /* interface index      */
165*53ee8cc1Swenshuai.xi # define ifr_bandwidth	ifr_ifru.ifru_ivalue	/* link bandwidth	*/
166*53ee8cc1Swenshuai.xi # define ifr_qlen	ifr_ifru.ifru_ivalue	/* queue length		*/
167*53ee8cc1Swenshuai.xi # define ifr_newname	ifr_ifru.ifru_newname	/* New name		*/
168*53ee8cc1Swenshuai.xi # define _IOT_ifreq	_IOT(_IOTS(char),IFNAMSIZ,_IOTS(char),16,0,0)
169*53ee8cc1Swenshuai.xi # define _IOT_ifreq_short _IOT(_IOTS(char),IFNAMSIZ,_IOTS(short),1,0,0)
170*53ee8cc1Swenshuai.xi # define _IOT_ifreq_int	_IOT(_IOTS(char),IFNAMSIZ,_IOTS(int),1,0,0)
171*53ee8cc1Swenshuai.xi 
172*53ee8cc1Swenshuai.xi 
173*53ee8cc1Swenshuai.xi /* Structure used in SIOCGIFCONF request.  Used to retrieve interface
174*53ee8cc1Swenshuai.xi    configuration for machine (useful for programs which must know all
175*53ee8cc1Swenshuai.xi    networks accessible).  */
176*53ee8cc1Swenshuai.xi 
177*53ee8cc1Swenshuai.xi struct ifconf
178*53ee8cc1Swenshuai.xi   {
179*53ee8cc1Swenshuai.xi     int	ifc_len;			/* Size of buffer.  */
180*53ee8cc1Swenshuai.xi     union
181*53ee8cc1Swenshuai.xi       {
182*53ee8cc1Swenshuai.xi 	__caddr_t ifcu_buf;
183*53ee8cc1Swenshuai.xi 	struct ifreq *ifcu_req;
184*53ee8cc1Swenshuai.xi       } ifc_ifcu;
185*53ee8cc1Swenshuai.xi   };
186*53ee8cc1Swenshuai.xi # define ifc_buf	ifc_ifcu.ifcu_buf	/* Buffer address.  */
187*53ee8cc1Swenshuai.xi # define ifc_req	ifc_ifcu.ifcu_req	/* Array of structures.  */
188*53ee8cc1Swenshuai.xi # define _IOT_ifconf _IOT(_IOTS(struct ifconf),1,0,0,0,0) /* not right */
189*53ee8cc1Swenshuai.xi #endif	/* Misc.  */
190*53ee8cc1Swenshuai.xi 
191*53ee8cc1Swenshuai.xi __BEGIN_DECLS
192*53ee8cc1Swenshuai.xi 
193*53ee8cc1Swenshuai.xi /* Convert an interface name to an index, and vice versa.  */
194*53ee8cc1Swenshuai.xi extern unsigned int if_nametoindex (__const char *__ifname) __THROW;
195*53ee8cc1Swenshuai.xi extern char *if_indextoname (unsigned int __ifindex, char *__ifname) __THROW;
196*53ee8cc1Swenshuai.xi 
197*53ee8cc1Swenshuai.xi /* Return a list of all interfaces and their indices.  */
198*53ee8cc1Swenshuai.xi extern struct if_nameindex *if_nameindex (void) __THROW;
199*53ee8cc1Swenshuai.xi 
200*53ee8cc1Swenshuai.xi /* Free the data returned from if_nameindex.  */
201*53ee8cc1Swenshuai.xi extern void if_freenameindex (struct if_nameindex *__ptr) __THROW;
202*53ee8cc1Swenshuai.xi 
203*53ee8cc1Swenshuai.xi __END_DECLS
204*53ee8cc1Swenshuai.xi 
205*53ee8cc1Swenshuai.xi #endif /* net/if.h */
206