blob: 73ef7feb3e638000bdf6f333f55697a0404fffcf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
|
/*
* INET An implementation of the TCP/IP protocol suite for the LINUX
* operating system. INET is implemented using the BSD Socket
* interface as the means of communication with the user level.
*
* Global definitions for the INET interface module.
*
* Version: @(#)if.h 1.0.2 04/18/93
*
* Authors: Original taken from Berkeley UNIX 4.3, (c) UCB 1982-1988
* Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
#ifndef _LINUX_IF_H
#define _LINUX_IF_H
#include <linux/types.h> /* for "caddr_t" et al */
#include <linux/socket.h> /* for "struct sockaddr" et al */
/* Standard interface flags. */
#define LINUX_IFF_UP 0x1 /* interface is up */
#define LINUX_IFF_BROADCAST 0x2 /* broadcast address valid */
#define LINUX_IFF_DEBUG 0x4 /* turn on debugging */
#define LINUX_IFF_LOOPBACK 0x8 /* is a loopback net */
#define LINUX_IFF_POINTOPOINT 0x10 /* interface is has p-p link */
#define LINUX_IFF_NOTRAILERS 0x20 /* avoid use of trailers */
#define LINUX_IFF_RUNNING 0x40 /* resources allocated */
#define LINUX_IFF_NOARP 0x80 /* no ARP protocol */
#define LINUX_IFF_PROMISC 0x100 /* receive all packets */
/* Not supported */
#define LINUX_IFF_ALLMULTI 0x200 /* receive all multicast packets*/
#define LINUX_IFF_MASTER 0x400 /* master of a load balancer */
#define LINUX_IFF_SLAVE 0x800 /* slave of a load balancer */
#define LINUX_IFF_MULTICAST 0x1000 /* Supports multicast */
#ifdef MACH
#ifndef MACH_INCLUDE
#define IFF_UP LINUX_IFF_UP
#define IFF_BROADCAST LINUX_IFF_BROADCAST
#define IFF_DEBUG LINUX_IFF_DEBUG
#define IFF_LOOPBACK LINUX_IFF_LOOPBACK
#define IFF_POINTOPOINT LINUX_IFF_POINTOPOINT
#define IFF_NOTRAILERS LINUX_IFF_NOTRAILERS
#define IFF_RUNNING LINUX_IFF_RUNNING
#define IFF_NOARP LINUX_IFF_NOARP
#define IFF_PROMISC LINUX_IFF_PROMISC
#define IFF_ALLMULTI LINUX_IFF_ALLMULTI
#define IFF_MASTER LINUX_IFF_MASTER
#define IFF_SLAVE LINUX_IFF_SLAVE
#define IFF_MULTICAST LINUX_IFF_MULTICAST
#endif
#endif
/*
* The ifaddr structure contains information about one address
* of an interface. They are maintained by the different address
* families, are allocated and attached when an address is set,
* and are linked together so all addresses for an interface can
* be located.
*/
struct ifaddr
{
struct sockaddr ifa_addr; /* address of interface */
union {
struct sockaddr ifu_broadaddr;
struct sockaddr ifu_dstaddr;
} ifa_ifu;
struct iface *ifa_ifp; /* back-pointer to interface */
struct ifaddr *ifa_next; /* next address for interface */
};
#define ifa_broadaddr ifa_ifu.ifu_broadaddr /* broadcast address */
#define ifa_dstaddr ifa_ifu.ifu_dstaddr /* other end of link */
/*
* Device mapping structure. I'd just gone off and designed a
* beautiful scheme using only loadable modules with arguments
* for driver options and along come the PCMCIA people 8)
*
* Ah well. The get() side of this is good for WDSETUP, and it'll
* be handy for debugging things. The set side is fine for now and
* being very small might be worth keeping for clean configuration.
*/
struct ifmap
{
unsigned long mem_start;
unsigned long mem_end;
unsigned short base_addr;
unsigned char irq;
unsigned char dma;
unsigned char port;
/* 3 bytes spare */
};
/*
* Interface request structure used for socket
* ioctl's. All interface ioctl's must have parameter
* definitions which begin with ifr_name. The
* remainder may be interface specific.
*/
struct ifreq
{
#define IFHWADDRLEN 6
#define IFNAMSIZ 16
union
{
char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */
} ifr_ifrn;
union {
struct sockaddr ifru_addr;
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr;
struct sockaddr ifru_netmask;
struct sockaddr ifru_hwaddr;
short ifru_flags;
int ifru_metric;
int ifru_mtu;
struct ifmap ifru_map;
char ifru_slave[IFNAMSIZ]; /* Just fits the size */
caddr_t ifru_data;
} ifr_ifru;
};
#define ifr_name ifr_ifrn.ifrn_name /* interface name */
#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
#define ifr_addr ifr_ifru.ifru_addr /* address */
#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-p lnk */
#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
#define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */
#define ifr_flags ifr_ifru.ifru_flags /* flags */
#define ifr_metric ifr_ifru.ifru_metric /* metric */
#define ifr_mtu ifr_ifru.ifru_mtu /* mtu */
#define ifr_map ifr_ifru.ifru_map /* device map */
#define ifr_slave ifr_ifru.ifru_slave /* slave device */
#define ifr_data ifr_ifru.ifru_data /* for use by interface */
/*
* Structure used in SIOCGIFCONF request.
* Used to retrieve interface configuration
* for machine (useful for programs which
* must know all networks accessible).
*/
struct ifconf
{
int ifc_len; /* size of buffer */
union
{
caddr_t ifcu_buf;
struct ifreq *ifcu_req;
} ifc_ifcu;
};
#define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */
#define ifc_req ifc_ifcu.ifcu_req /* array of structures */
#endif /* _LINUX_IF_H */
|