]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - include/linux/if.h
Merge branch 'master' into upstream
[karo-tx-linux.git] / include / linux / if.h
1 /*
2  * INET         An implementation of the TCP/IP protocol suite for the LINUX
3  *              operating system.  INET is implemented using the  BSD Socket
4  *              interface as the means of communication with the user level.
5  *
6  *              Global definitions for the INET interface module.
7  *
8  * Version:     @(#)if.h        1.0.2   04/18/93
9  *
10  * Authors:     Original taken from Berkeley UNIX 4.3, (c) UCB 1982-1988
11  *              Ross Biro
12  *              Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
13  *
14  *              This program is free software; you can redistribute it and/or
15  *              modify it under the terms of the GNU General Public License
16  *              as published by the Free Software Foundation; either version
17  *              2 of the License, or (at your option) any later version.
18  */
19 #ifndef _LINUX_IF_H
20 #define _LINUX_IF_H
21
22 #include <linux/types.h>                /* for "__kernel_caddr_t" et al */
23 #include <linux/socket.h>               /* for "struct sockaddr" et al  */
24 #include <linux/compiler.h>             /* for "__user" et al           */
25
26 #define IFNAMSIZ        16
27 #include <linux/hdlc/ioctl.h>
28
29 /* Standard interface flags (netdevice->flags). */
30 #define IFF_UP          0x1             /* interface is up              */
31 #define IFF_BROADCAST   0x2             /* broadcast address valid      */
32 #define IFF_DEBUG       0x4             /* turn on debugging            */
33 #define IFF_LOOPBACK    0x8             /* is a loopback net            */
34 #define IFF_POINTOPOINT 0x10            /* interface is has p-p link    */
35 #define IFF_NOTRAILERS  0x20            /* avoid use of trailers        */
36 #define IFF_RUNNING     0x40            /* interface RFC2863 OPER_UP    */
37 #define IFF_NOARP       0x80            /* no ARP protocol              */
38 #define IFF_PROMISC     0x100           /* receive all packets          */
39 #define IFF_ALLMULTI    0x200           /* receive all multicast packets*/
40
41 #define IFF_MASTER      0x400           /* master of a load balancer    */
42 #define IFF_SLAVE       0x800           /* slave of a load balancer     */
43
44 #define IFF_MULTICAST   0x1000          /* Supports multicast           */
45
46 #define IFF_PORTSEL     0x2000          /* can set media type           */
47 #define IFF_AUTOMEDIA   0x4000          /* auto media select active     */
48 #define IFF_DYNAMIC     0x8000          /* dialup device with changing addresses*/
49
50 #define IFF_LOWER_UP    0x10000         /* driver signals L1 up         */
51 #define IFF_DORMANT     0x20000         /* driver signals dormant       */
52
53 #define IFF_VOLATILE    (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|\
54                 IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT)
55
56 /* Private (from user) interface flags (netdevice->priv_flags). */
57 #define IFF_802_1Q_VLAN 0x1             /* 802.1Q VLAN device.          */
58 #define IFF_EBRIDGE     0x2             /* Ethernet bridging device.    */
59 #define IFF_SLAVE_INACTIVE      0x4     /* bonding slave not the curr. active */
60 #define IFF_MASTER_8023AD       0x8     /* bonding master, 802.3ad.     */
61 #define IFF_MASTER_ALB  0x10            /* bonding master, balance-alb. */
62 #define IFF_BONDING     0x20            /* bonding master or slave      */
63 #define IFF_SLAVE_NEEDARP 0x40          /* need ARPs for validation     */
64
65 #define IF_GET_IFACE    0x0001          /* for querying only */
66 #define IF_GET_PROTO    0x0002
67
68 /* For definitions see hdlc.h */
69 #define IF_IFACE_V35    0x1000          /* V.35 serial interface        */
70 #define IF_IFACE_V24    0x1001          /* V.24 serial interface        */
71 #define IF_IFACE_X21    0x1002          /* X.21 serial interface        */
72 #define IF_IFACE_T1     0x1003          /* T1 telco serial interface    */
73 #define IF_IFACE_E1     0x1004          /* E1 telco serial interface    */
74 #define IF_IFACE_SYNC_SERIAL 0x1005     /* can't be set by software     */
75 #define IF_IFACE_X21D   0x1006          /* X.21 Dual Clocking (FarSite) */
76
77 /* For definitions see hdlc.h */
78 #define IF_PROTO_HDLC   0x2000          /* raw HDLC protocol            */
79 #define IF_PROTO_PPP    0x2001          /* PPP protocol                 */
80 #define IF_PROTO_CISCO  0x2002          /* Cisco HDLC protocol          */
81 #define IF_PROTO_FR     0x2003          /* Frame Relay protocol         */
82 #define IF_PROTO_FR_ADD_PVC 0x2004      /*    Create FR PVC             */
83 #define IF_PROTO_FR_DEL_PVC 0x2005      /*    Delete FR PVC             */
84 #define IF_PROTO_X25    0x2006          /* X.25                         */
85 #define IF_PROTO_HDLC_ETH 0x2007        /* raw HDLC, Ethernet emulation */
86 #define IF_PROTO_FR_ADD_ETH_PVC 0x2008  /*  Create FR Ethernet-bridged PVC */
87 #define IF_PROTO_FR_DEL_ETH_PVC 0x2009  /*  Delete FR Ethernet-bridged PVC */
88 #define IF_PROTO_FR_PVC 0x200A          /* for reading PVC status       */
89 #define IF_PROTO_FR_ETH_PVC 0x200B
90 #define IF_PROTO_RAW    0x200C          /* RAW Socket                   */
91
92 /* RFC 2863 operational status */
93 enum {
94         IF_OPER_UNKNOWN,
95         IF_OPER_NOTPRESENT,
96         IF_OPER_DOWN,
97         IF_OPER_LOWERLAYERDOWN,
98         IF_OPER_TESTING,
99         IF_OPER_DORMANT,
100         IF_OPER_UP,
101 };
102
103 /* link modes */
104 enum {
105         IF_LINK_MODE_DEFAULT,
106         IF_LINK_MODE_DORMANT,   /* limit upward transition to dormant */
107 };
108
109 /*
110  *      Device mapping structure. I'd just gone off and designed a 
111  *      beautiful scheme using only loadable modules with arguments
112  *      for driver options and along come the PCMCIA people 8)
113  *
114  *      Ah well. The get() side of this is good for WDSETUP, and it'll
115  *      be handy for debugging things. The set side is fine for now and
116  *      being very small might be worth keeping for clean configuration.
117  */
118
119 struct ifmap 
120 {
121         unsigned long mem_start;
122         unsigned long mem_end;
123         unsigned short base_addr; 
124         unsigned char irq;
125         unsigned char dma;
126         unsigned char port;
127         /* 3 bytes spare */
128 };
129
130 struct if_settings
131 {
132         unsigned int type;      /* Type of physical device or protocol */
133         unsigned int size;      /* Size of the data allocated by the caller */
134         union {
135                 /* {atm/eth/dsl}_settings anyone ? */
136                 raw_hdlc_proto          __user *raw_hdlc;
137                 cisco_proto             __user *cisco;
138                 fr_proto                __user *fr;
139                 fr_proto_pvc            __user *fr_pvc;
140                 fr_proto_pvc_info       __user *fr_pvc_info;
141
142                 /* interface settings */
143                 sync_serial_settings    __user *sync;
144                 te1_settings            __user *te1;
145         } ifs_ifsu;
146 };
147
148 /*
149  * Interface request structure used for socket
150  * ioctl's.  All interface ioctl's must have parameter
151  * definitions which begin with ifr_name.  The
152  * remainder may be interface specific.
153  */
154
155 struct ifreq 
156 {
157 #define IFHWADDRLEN     6
158         union
159         {
160                 char    ifrn_name[IFNAMSIZ];            /* if name, e.g. "en0" */
161         } ifr_ifrn;
162         
163         union {
164                 struct  sockaddr ifru_addr;
165                 struct  sockaddr ifru_dstaddr;
166                 struct  sockaddr ifru_broadaddr;
167                 struct  sockaddr ifru_netmask;
168                 struct  sockaddr ifru_hwaddr;
169                 short   ifru_flags;
170                 int     ifru_ivalue;
171                 int     ifru_mtu;
172                 struct  ifmap ifru_map;
173                 char    ifru_slave[IFNAMSIZ];   /* Just fits the size */
174                 char    ifru_newname[IFNAMSIZ];
175                 void __user *   ifru_data;
176                 struct  if_settings ifru_settings;
177         } ifr_ifru;
178 };
179
180 #define ifr_name        ifr_ifrn.ifrn_name      /* interface name       */
181 #define ifr_hwaddr      ifr_ifru.ifru_hwaddr    /* MAC address          */
182 #define ifr_addr        ifr_ifru.ifru_addr      /* address              */
183 #define ifr_dstaddr     ifr_ifru.ifru_dstaddr   /* other end of p-p lnk */
184 #define ifr_broadaddr   ifr_ifru.ifru_broadaddr /* broadcast address    */
185 #define ifr_netmask     ifr_ifru.ifru_netmask   /* interface net mask   */
186 #define ifr_flags       ifr_ifru.ifru_flags     /* flags                */
187 #define ifr_metric      ifr_ifru.ifru_ivalue    /* metric               */
188 #define ifr_mtu         ifr_ifru.ifru_mtu       /* mtu                  */
189 #define ifr_map         ifr_ifru.ifru_map       /* device map           */
190 #define ifr_slave       ifr_ifru.ifru_slave     /* slave device         */
191 #define ifr_data        ifr_ifru.ifru_data      /* for use by interface */
192 #define ifr_ifindex     ifr_ifru.ifru_ivalue    /* interface index      */
193 #define ifr_bandwidth   ifr_ifru.ifru_ivalue    /* link bandwidth       */
194 #define ifr_qlen        ifr_ifru.ifru_ivalue    /* Queue length         */
195 #define ifr_newname     ifr_ifru.ifru_newname   /* New name             */
196 #define ifr_settings    ifr_ifru.ifru_settings  /* Device/proto settings*/
197
198 /*
199  * Structure used in SIOCGIFCONF request.
200  * Used to retrieve interface configuration
201  * for machine (useful for programs which
202  * must know all networks accessible).
203  */
204
205 struct ifconf 
206 {
207         int     ifc_len;                        /* size of buffer       */
208         union 
209         {
210                 char __user *ifcu_buf;
211                 struct ifreq __user *ifcu_req;
212         } ifc_ifcu;
213 };
214 #define ifc_buf ifc_ifcu.ifcu_buf               /* buffer address       */
215 #define ifc_req ifc_ifcu.ifcu_req               /* array of structures  */
216
217 /* The struct should be in sync with struct net_device_stats */
218 struct rtnl_link_stats
219 {
220         __u32   rx_packets;             /* total packets received       */
221         __u32   tx_packets;             /* total packets transmitted    */
222         __u32   rx_bytes;               /* total bytes received         */
223         __u32   tx_bytes;               /* total bytes transmitted      */
224         __u32   rx_errors;              /* bad packets received         */
225         __u32   tx_errors;              /* packet transmit problems     */
226         __u32   rx_dropped;             /* no space in linux buffers    */
227         __u32   tx_dropped;             /* no space available in linux  */
228         __u32   multicast;              /* multicast packets received   */
229         __u32   collisions;
230
231         /* detailed rx_errors: */
232         __u32   rx_length_errors;
233         __u32   rx_over_errors;         /* receiver ring buff overflow  */
234         __u32   rx_crc_errors;          /* recved pkt with crc error    */
235         __u32   rx_frame_errors;        /* recv'd frame alignment error */
236         __u32   rx_fifo_errors;         /* recv'r fifo overrun          */
237         __u32   rx_missed_errors;       /* receiver missed packet       */
238
239         /* detailed tx_errors */
240         __u32   tx_aborted_errors;
241         __u32   tx_carrier_errors;
242         __u32   tx_fifo_errors;
243         __u32   tx_heartbeat_errors;
244         __u32   tx_window_errors;
245
246         /* for cslip etc */
247         __u32   rx_compressed;
248         __u32   tx_compressed;
249 };
250
251 /* The struct should be in sync with struct ifmap */
252 struct rtnl_link_ifmap
253 {
254         __u64   mem_start;
255         __u64   mem_end;
256         __u64   base_addr;
257         __u16   irq;
258         __u8    dma;
259         __u8    port;
260 };
261
262 enum
263 {
264         IFLA_UNSPEC,
265         IFLA_ADDRESS,
266         IFLA_BROADCAST,
267         IFLA_IFNAME,
268         IFLA_MTU,
269         IFLA_LINK,
270         IFLA_QDISC,
271         IFLA_STATS,
272         IFLA_COST,
273 #define IFLA_COST IFLA_COST
274         IFLA_PRIORITY,
275 #define IFLA_PRIORITY IFLA_PRIORITY
276         IFLA_MASTER,
277 #define IFLA_MASTER IFLA_MASTER
278         IFLA_WIRELESS,          /* Wireless Extension event - see wireless.h */
279 #define IFLA_WIRELESS IFLA_WIRELESS
280         IFLA_PROTINFO,          /* Protocol specific information for a link */
281 #define IFLA_PROTINFO IFLA_PROTINFO
282         IFLA_TXQLEN,
283 #define IFLA_TXQLEN IFLA_TXQLEN
284         IFLA_MAP,
285 #define IFLA_MAP IFLA_MAP
286         IFLA_WEIGHT,
287 #define IFLA_WEIGHT IFLA_WEIGHT
288         IFLA_OPERSTATE,
289         IFLA_LINKMODE,
290         __IFLA_MAX
291 };
292
293
294 #define IFLA_MAX (__IFLA_MAX - 1)
295
296 /* ifi_flags.
297
298    IFF_* flags.
299
300    The only change is:
301    IFF_LOOPBACK, IFF_BROADCAST and IFF_POINTOPOINT are
302    more not changeable by user. They describe link media
303    characteristics and set by device driver.
304
305    Comments:
306    - Combination IFF_BROADCAST|IFF_POINTOPOINT is invalid
307    - If neither of these three flags are set;
308      the interface is NBMA.
309
310    - IFF_MULTICAST does not mean anything special:
311    multicasts can be used on all not-NBMA links.
312    IFF_MULTICAST means that this media uses special encapsulation
313    for multicast frames. Apparently, all IFF_POINTOPOINT and
314    IFF_BROADCAST devices are able to use multicasts too.
315  */
316
317 /* IFLA_LINK.
318    For usual devices it is equal ifi_index.
319    If it is a "virtual interface" (f.e. tunnel), ifi_link
320    can point to real physical interface (f.e. for bandwidth calculations),
321    or maybe 0, what means, that real media is unknown (usual
322    for IPIP tunnels, when route to endpoint is allowed to change)
323  */
324
325 /* Subtype attributes for IFLA_PROTINFO */
326 enum
327 {
328         IFLA_INET6_UNSPEC,
329         IFLA_INET6_FLAGS,       /* link flags                   */
330         IFLA_INET6_CONF,        /* sysctl parameters            */
331         IFLA_INET6_STATS,       /* statistics                   */
332         IFLA_INET6_MCAST,       /* MC things. What of them?     */
333         IFLA_INET6_CACHEINFO,   /* time values and max reasm size */
334         __IFLA_INET6_MAX
335 };
336
337 #define IFLA_INET6_MAX  (__IFLA_INET6_MAX - 1)
338
339 struct ifla_cacheinfo
340 {
341         __u32   max_reasm_len;
342         __u32   tstamp;         /* ipv6InterfaceTable updated timestamp */
343         __u32   reachable_time;
344         __u32   retrans_time;
345 };
346
347 #endif /* _LINUX_IF_H */