mods from Al Longyear
[ppp.git] / 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, <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
43 /*
44  * The ifaddr structure contains information about one address
45  * of an interface.  They are maintained by the different address
46  * families, are allocated and attached when an address is set,
47  * and are linked together so all addresses for an interface can
48  * be located.
49  */
50  
51 struct ifaddr 
52 {
53         struct sockaddr ifa_addr;       /* address of interface         */
54         union {
55                 struct sockaddr ifu_broadaddr;
56                 struct sockaddr ifu_dstaddr;
57         } ifa_ifu;
58         struct iface            *ifa_ifp;       /* back-pointer to interface    */
59         struct ifaddr           *ifa_next;      /* next address for interface   */
60 };
61
62 #define ifa_broadaddr   ifa_ifu.ifu_broadaddr   /* broadcast address    */
63 #define ifa_dstaddr     ifa_ifu.ifu_dstaddr     /* other end of link    */
64
65 /*
66  *      Device mapping structure. I'd just gone off and designed a 
67  *      beautiful scheme using only loadable modules with arguments
68  *      for driver options and along come the PCMCIA people 8)
69  *
70  *      Ah well. The get() side of this is good for WDSETUP, and it'll
71  *      be handy for debugging things. The set side is fine for now and
72  *      being very small might be worth keeping for clean configuration.
73  */
74
75 struct ifmap 
76 {
77         unsigned long mem_start;
78         unsigned long mem_end;
79         unsigned short base_addr; 
80         unsigned char irq;
81         unsigned char dma;
82         unsigned char port;
83         /* 3 bytes spare */
84 };
85
86 /*
87  * Interface request structure used for socket
88  * ioctl's.  All interface ioctl's must have parameter
89  * definitions which begin with ifr_name.  The
90  * remainder may be interface specific.
91  */
92
93 struct ifreq 
94 {
95 #define IFHWADDRLEN     6
96 #define IFNAMSIZ        16
97         union
98         {
99                 char    ifrn_name[IFNAMSIZ];            /* if name, e.g. "en0" */
100         } ifr_ifrn;
101         
102         union {
103                 struct  sockaddr ifru_addr;
104                 struct  sockaddr ifru_dstaddr;
105                 struct  sockaddr ifru_broadaddr;
106                 struct  sockaddr ifru_netmask;
107                 struct  sockaddr ifru_hwaddr;
108                 short   ifru_flags;
109                 int     ifru_metric;
110                 int     ifru_mtu;
111                 struct  ifmap ifru_map;
112                 char    ifru_slave[IFNAMSIZ];   /* Just fits the size */
113                 caddr_t ifru_data;
114         } ifr_ifru;
115 };
116
117 #define ifr_name        ifr_ifrn.ifrn_name      /* interface name       */
118 #define ifr_hwaddr      ifr_ifru.ifru_hwaddr    /* MAC address          */
119 #define ifr_addr        ifr_ifru.ifru_addr      /* address              */
120 #define ifr_dstaddr     ifr_ifru.ifru_dstaddr   /* other end of p-p lnk */
121 #define ifr_broadaddr   ifr_ifru.ifru_broadaddr /* broadcast address    */
122 #define ifr_netmask     ifr_ifru.ifru_netmask   /* interface net mask   */
123 #define ifr_flags       ifr_ifru.ifru_flags     /* flags                */
124 #define ifr_metric      ifr_ifru.ifru_metric    /* metric               */
125 #define ifr_mtu         ifr_ifru.ifru_mtu       /* mtu                  */
126 #define ifr_map         ifr_ifru.ifru_map       /* device map           */
127 #define ifr_slave       ifr_ifru.ifru_slave     /* slave device         */
128 #define ifr_data        ifr_ifru.ifru_data      /* for use by interface */
129
130 /*
131  * Structure used in SIOCGIFCONF request.
132  * Used to retrieve interface configuration
133  * for machine (useful for programs which
134  * must know all networks accessible).
135  */
136
137 struct ifconf 
138 {
139         int     ifc_len;                        /* size of buffer       */
140         union 
141         {
142                 caddr_t ifcu_buf;
143                 struct  ifreq *ifcu_req;
144         } ifc_ifcu;
145 };
146 #define ifc_buf ifc_ifcu.ifcu_buf               /* buffer address       */
147 #define ifc_req ifc_ifcu.ifcu_req               /* array of structures  */
148
149 #endif /* _LINUX_IF_H */