blob: 8018c2e22c0c3c6bdf237378cc18f15668eb89e4 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
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
Jesper Juhl02c30a82005-05-05 16:16:16 -070011 * Ross Biro
Linus Torvalds1da177e2005-04-16 15:20:36 -070012 * 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 */
Stefan Rompfb00055a2006-03-20 17:09:11 -080036#define IFF_RUNNING 0x40 /* interface RFC2863 OPER_UP */
Linus Torvalds1da177e2005-04-16 15:20:36 -070037#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
Linus Torvalds1da177e2005-04-16 15:20:36 -070046#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
Stefan Rompfb00055a2006-03-20 17:09:11 -080050#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
Linus Torvalds1da177e2005-04-16 15:20:36 -070056/* 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. */
Jay Vosburgh8f903c72006-02-21 16:36:44 -080059#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. */
Jay Vosburgh0b680e72006-09-22 21:54:10 -070062#define IFF_BONDING 0x20 /* bonding master or slave */
Jay Vosburghf5b2b962006-09-22 21:54:53 -070063#define IFF_SLAVE_NEEDARP 0x40 /* need ARPs for validation */
Linus Torvalds1da177e2005-04-16 15:20:36 -070064
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
Stefan Rompfb00055a2006-03-20 17:09:11 -080092/* RFC 2863 operational status */
93enum {
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 */
104enum {
105 IF_LINK_MODE_DEFAULT,
106 IF_LINK_MODE_DORMANT, /* limit upward transition to dormant */
107};
Linus Torvalds1da177e2005-04-16 15:20:36 -0700108
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
119struct 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
130struct 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
155struct 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
205struct 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
Thomas Graf08445652006-08-04 23:05:56 -0700217/* The struct should be in sync with struct net_device_stats */
218struct 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 */
252struct 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
262enum
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 */
326enum
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
339struct ifla_cacheinfo
340{
341 __u32 max_reasm_len;
342 __u32 tstamp; /* ipv6InterfaceTable updated timestamp */
343 __u32 reachable_time;
344 __u32 retrans_time;
345};
Linus Torvalds1da177e2005-04-16 15:20:36 -0700346
347#endif /* _LINUX_IF_H */