1 |
1633 |
jcastillo |
/*
|
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, <bir7@leland.Stanford.Edu>
|
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 "caddr_t" et al */
|
23 |
|
|
#include <linux/socket.h> /* for "struct sockaddr" et al */
|
24 |
|
|
|
25 |
|
|
/* Standard interface flags. */
|
26 |
|
|
#define IFF_UP 0x1 /* interface is up */
|
27 |
|
|
#define IFF_BROADCAST 0x2 /* broadcast address valid */
|
28 |
|
|
#define IFF_DEBUG 0x4 /* turn on debugging */
|
29 |
|
|
#define IFF_LOOPBACK 0x8 /* is a loopback net */
|
30 |
|
|
#define IFF_POINTOPOINT 0x10 /* interface is has p-p link */
|
31 |
|
|
#define IFF_NOTRAILERS 0x20 /* avoid use of trailers */
|
32 |
|
|
#define IFF_RUNNING 0x40 /* resources allocated */
|
33 |
|
|
#define IFF_NOARP 0x80 /* no ARP protocol */
|
34 |
|
|
#define IFF_PROMISC 0x100 /* receive all packets */
|
35 |
|
|
/* Not supported */
|
36 |
|
|
#define IFF_ALLMULTI 0x200 /* receive all multicast packets*/
|
37 |
|
|
|
38 |
|
|
#define IFF_MASTER 0x400 /* master of a load balancer */
|
39 |
|
|
#define IFF_SLAVE 0x800 /* slave of a load balancer */
|
40 |
|
|
|
41 |
|
|
#define IFF_MULTICAST 0x1000 /* Supports multicast */
|
42 |
|
|
#define IFF_SOFTHEADERS 0x2000 /* Device cannot construct headers
|
43 |
|
|
* until broadcast time. Therefore
|
44 |
|
|
* SOCK_PACKET must call header
|
45 |
|
|
* construction. Private flag.
|
46 |
|
|
* Never visible outside of kernel.
|
47 |
|
|
*/
|
48 |
|
|
|
49 |
|
|
/*
|
50 |
|
|
* The ifaddr structure contains information about one address
|
51 |
|
|
* of an interface. They are maintained by the different address
|
52 |
|
|
* families, are allocated and attached when an address is set,
|
53 |
|
|
* and are linked together so all addresses for an interface can
|
54 |
|
|
* be located.
|
55 |
|
|
*/
|
56 |
|
|
|
57 |
|
|
struct ifaddr
|
58 |
|
|
{
|
59 |
|
|
struct sockaddr ifa_addr; /* address of interface */
|
60 |
|
|
union {
|
61 |
|
|
struct sockaddr ifu_broadaddr;
|
62 |
|
|
struct sockaddr ifu_dstaddr;
|
63 |
|
|
} ifa_ifu;
|
64 |
|
|
struct iface *ifa_ifp; /* back-pointer to interface */
|
65 |
|
|
struct ifaddr *ifa_next; /* next address for interface */
|
66 |
|
|
};
|
67 |
|
|
|
68 |
|
|
#define ifa_broadaddr ifa_ifu.ifu_broadaddr /* broadcast address */
|
69 |
|
|
#define ifa_dstaddr ifa_ifu.ifu_dstaddr /* other end of link */
|
70 |
|
|
|
71 |
|
|
/*
|
72 |
|
|
* Device mapping structure. I'd just gone off and designed a
|
73 |
|
|
* beautiful scheme using only loadable modules with arguments
|
74 |
|
|
* for driver options and along come the PCMCIA people 8)
|
75 |
|
|
*
|
76 |
|
|
* Ah well. The get() side of this is good for WDSETUP, and it'll
|
77 |
|
|
* be handy for debugging things. The set side is fine for now and
|
78 |
|
|
* being very small might be worth keeping for clean configuration.
|
79 |
|
|
*/
|
80 |
|
|
|
81 |
|
|
struct ifmap
|
82 |
|
|
{
|
83 |
|
|
unsigned long mem_start;
|
84 |
|
|
unsigned long mem_end;
|
85 |
|
|
unsigned short base_addr;
|
86 |
|
|
unsigned char irq;
|
87 |
|
|
unsigned char dma;
|
88 |
|
|
unsigned char port;
|
89 |
|
|
/* 3 bytes spare */
|
90 |
|
|
};
|
91 |
|
|
|
92 |
|
|
/*
|
93 |
|
|
* Interface request structure used for socket
|
94 |
|
|
* ioctl's. All interface ioctl's must have parameter
|
95 |
|
|
* definitions which begin with ifr_name. The
|
96 |
|
|
* remainder may be interface specific.
|
97 |
|
|
*/
|
98 |
|
|
|
99 |
|
|
struct ifreq
|
100 |
|
|
{
|
101 |
|
|
#define IFHWADDRLEN 6
|
102 |
|
|
#define IFNAMSIZ 16
|
103 |
|
|
union
|
104 |
|
|
{
|
105 |
|
|
char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */
|
106 |
|
|
} ifr_ifrn;
|
107 |
|
|
|
108 |
|
|
union {
|
109 |
|
|
struct sockaddr ifru_addr;
|
110 |
|
|
struct sockaddr ifru_dstaddr;
|
111 |
|
|
struct sockaddr ifru_broadaddr;
|
112 |
|
|
struct sockaddr ifru_netmask;
|
113 |
|
|
struct sockaddr ifru_hwaddr;
|
114 |
|
|
short ifru_flags;
|
115 |
|
|
int ifru_metric;
|
116 |
|
|
int ifru_mtu;
|
117 |
|
|
struct ifmap ifru_map;
|
118 |
|
|
char ifru_slave[IFNAMSIZ]; /* Just fits the size */
|
119 |
|
|
caddr_t ifru_data;
|
120 |
|
|
} ifr_ifru;
|
121 |
|
|
};
|
122 |
|
|
|
123 |
|
|
#define ifr_name ifr_ifrn.ifrn_name /* interface name */
|
124 |
|
|
#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
|
125 |
|
|
#define ifr_addr ifr_ifru.ifru_addr /* address */
|
126 |
|
|
#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-p lnk */
|
127 |
|
|
#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
|
128 |
|
|
#define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */
|
129 |
|
|
#define ifr_flags ifr_ifru.ifru_flags /* flags */
|
130 |
|
|
#define ifr_metric ifr_ifru.ifru_metric /* metric */
|
131 |
|
|
#define ifr_mtu ifr_ifru.ifru_mtu /* mtu */
|
132 |
|
|
#define ifr_map ifr_ifru.ifru_map /* device map */
|
133 |
|
|
#define ifr_slave ifr_ifru.ifru_slave /* slave device */
|
134 |
|
|
#define ifr_data ifr_ifru.ifru_data /* for use by interface */
|
135 |
|
|
|
136 |
|
|
/*
|
137 |
|
|
* Structure used in SIOCGIFCONF request.
|
138 |
|
|
* Used to retrieve interface configuration
|
139 |
|
|
* for machine (useful for programs which
|
140 |
|
|
* must know all networks accessible).
|
141 |
|
|
*/
|
142 |
|
|
|
143 |
|
|
struct ifconf
|
144 |
|
|
{
|
145 |
|
|
int ifc_len; /* size of buffer */
|
146 |
|
|
union
|
147 |
|
|
{
|
148 |
|
|
caddr_t ifcu_buf;
|
149 |
|
|
struct ifreq *ifcu_req;
|
150 |
|
|
} ifc_ifcu;
|
151 |
|
|
};
|
152 |
|
|
#define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */
|
153 |
|
|
#define ifc_req ifc_ifcu.ifcu_req /* array of structures */
|
154 |
|
|
|
155 |
|
|
#endif /* _LINUX_IF_H */
|