Dr Andrew Scott G7VAV

My photo
 
May 2024
Mo Tu We Th Fr Sa Su
29 30 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 1 2
3 4 5 6 7 8 9


if.h
001: /* net/if.h -- declarations for inquiring about network interfaces
002:    Copyright (C) 1997,98,99,2000,2001 Free Software Foundation, Inc.
003:    This file is part of the GNU C Library.
004: 
005:    The GNU C Library is free software; you can redistribute it and/or
006:    modify it under the terms of the GNU Lesser General Public
007:    License as published by the Free Software Foundation; either
008:    version 2.1 of the License, or (at your option) any later version.
009: 
010:    The GNU C Library is distributed in the hope that it will be useful,
011:    but WITHOUT ANY WARRANTY; without even the implied warranty of
012:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
013:    Lesser General Public License for more details.
014: 
015:    You should have received a copy of the GNU Lesser General Public
016:    License along with the GNU C Library; if not, write to the Free
017:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
018:    02111-1307 USA.  */
019: 
020: #ifndef _NET_IF_H
021: #define _NET_IF_H       1
022: 
023: #include <features.h>
024: 
025: #ifdef __USE_MISC
026: # include <sys/types.h>
027: # include <sys/socket.h>
028: #endif
029: 
030: 
031: /* Length of interface name.  */
032: #define IF_NAMESIZE     16
033: 
034: struct if_nameindex
035:   {
036:     unsigned int if_index;      /* 1, 2, ... */
037:     char *if_name;              /* null terminated name: "eth0", ... */
038:   };
039: 
040: 
041: #ifdef __USE_MISC
042: /* Standard interface flags. */
043: enum
044:   {
045:     IFF_UP = 0x1,               /* Interface is up.  */
046: # define IFF_UP IFF_UP
047:     IFF_BROADCAST = 0x2,        /* Broadcast address valid.  */
048: # define IFF_BROADCAST  IFF_BROADCAST
049:     IFF_DEBUG = 0x4,            /* Turn on debugging.  */
050: # define IFF_DEBUG      IFF_DEBUG
051:     IFF_LOOPBACK = 0x8,         /* Is a loopback net.  */
052: # define IFF_LOOPBACK   IFF_LOOPBACK
053:     IFF_POINTOPOINT = 0x10,     /* Interface is point-to-point link.  */
054: # define IFF_POINTOPOINT IFF_POINTOPOINT
055:     IFF_NOTRAILERS = 0x20,      /* Avoid use of trailers.  */
056: # define IFF_NOTRAILERS IFF_NOTRAILERS
057:     IFF_RUNNING = 0x40,         /* Resources allocated.  */
058: # define IFF_RUNNING    IFF_RUNNING
059:     IFF_NOARP = 0x80,           /* No address resolution protocol.  */
060: # define IFF_NOARP      IFF_NOARP
061:     IFF_PROMISC = 0x100,        /* Receive all packets.  */
062: # define IFF_PROMISC    IFF_PROMISC
063: 
064:     /* Not supported */
065:     IFF_ALLMULTI = 0x200,       /* Receive all multicast packets.  */
066: # define IFF_ALLMULTI   IFF_ALLMULTI
067: 
068:     IFF_MASTER = 0x400,         /* Master of a load balancer.  */
069: # define IFF_MASTER     IFF_MASTER
070:     IFF_SLAVE = 0x800,          /* Slave of a load balancer.  */
071: # define IFF_SLAVE      IFF_SLAVE
072: 
073:     IFF_MULTICAST = 0x1000,     /* Supports multicast.  */
074: # define IFF_MULTICAST  IFF_MULTICAST
075: 
076:     IFF_PORTSEL = 0x2000,       /* Can set media type.  */
077: # define IFF_PORTSEL    IFF_PORTSEL
078:     IFF_AUTOMEDIA = 0x4000,     /* Auto media select active.  */
079: # define IFF_AUTOMEDIA  IFF_AUTOMEDIA
080:     IFF_DYNAMIC = 0x8000        /* Dialup device with changing addresses.  */
081: # define IFF_DYNAMIC    IFF_DYNAMIC
082:   };
083: 
084: /* The ifaddr structure contains information about one address of an
085:    interface.  They are maintained by the different address families,
086:    are allocated and attached when an address is set, and are linked
087:    together so all addresses for an interface can be located.  */
088: 
089: struct ifaddr
090:   {
091:     struct sockaddr ifa_addr;   /* Address of interface.  */
092:     union
093:       {
094:         struct sockaddr ifu_broadaddr;
095:         struct sockaddr ifu_dstaddr;
096:       } ifa_ifu;
097:     struct iface *ifa_ifp;      /* Back-pointer to interface.  */
098:     struct ifaddr *ifa_next;    /* Next address for interface.  */
099:   };
100: 
101: # define ifa_broadaddr  ifa_ifu.ifu_broadaddr   /* broadcast address    */
102: # define ifa_dstaddr    ifa_ifu.ifu_dstaddr     /* other end of link    */
103: 
104: /* Device mapping structure. I'd just gone off and designed a
105:    beautiful scheme using only loadable modules with arguments for
106:    driver options and along come the PCMCIA people 8)
107: 
108:    Ah well. The get() side of this is good for WDSETUP, and it'll be
109:    handy for debugging things. The set side is fine for now and being
110:    very small might be worth keeping for clean configuration.  */
111: 
112: struct ifmap
113:   {
114:     unsigned long int mem_start;
115:     unsigned long int mem_end;
116:     unsigned short int base_addr;
117:     unsigned char irq;
118:     unsigned char dma;
119:     unsigned char port;
120:     /* 3 bytes spare */
121:   };
122: 
123: /* Interface request structure used for socket ioctl's.  All interface
124:    ioctl's must have parameter definitions which begin with ifr_name.
125:    The remainder may be interface specific.  */
126: 
127: struct ifreq
128:   {
129: # define IFHWADDRLEN    6
130: # define IFNAMSIZ       IF_NAMESIZE
131:     union
132:       {
133:         char ifrn_name[IFNAMSIZ];       /* Interface name, e.g. "en0".  */
134:       } ifr_ifrn;
135: 
136:     union
137:       {
138:         struct sockaddr ifru_addr;
139:         struct sockaddr ifru_dstaddr;
140:         struct sockaddr ifru_broadaddr;
141:         struct sockaddr ifru_netmask;
142:         struct sockaddr ifru_hwaddr;
143:         short int ifru_flags;
144:         int ifru_ivalue;
145:         int ifru_mtu;
146:         struct ifmap ifru_map;
147:         char ifru_slave[IFNAMSIZ];      /* Just fits the size */
148:         char ifru_newname[IFNAMSIZ];
149:         __caddr_t ifru_data;
150:       } ifr_ifru;
151:   };
152: # define ifr_name       ifr_ifrn.ifrn_name      /* interface name       */
153: # define ifr_hwaddr     ifr_ifru.ifru_hwaddr    /* MAC address          */
154: # define ifr_addr       ifr_ifru.ifru_addr      /* address              */
155: # define ifr_dstaddr    ifr_ifru.ifru_dstaddr   /* other end of p-p lnk */
156: # define ifr_broadaddr  ifr_ifru.ifru_broadaddr /* broadcast address    */
157: # define ifr_netmask    ifr_ifru.ifru_netmask   /* interface net mask   */
158: # define ifr_flags      ifr_ifru.ifru_flags     /* flags                */
159: # define ifr_metric     ifr_ifru.ifru_ivalue    /* metric               */
160: # define ifr_mtu        ifr_ifru.ifru_mtu       /* mtu                  */
161: # define ifr_map        ifr_ifru.ifru_map       /* device map           */
162: # define ifr_slave      ifr_ifru.ifru_slave     /* slave device         */
163: # define ifr_data       ifr_ifru.ifru_data      /* for use by interface */
164: # define ifr_ifindex    ifr_ifru.ifru_ivalue    /* interface index      */
165: # define ifr_bandwidth  ifr_ifru.ifru_ivalue    /* link bandwidth       */
166: # define ifr_qlen       ifr_ifru.ifru_ivalue    /* queue length         */
167: # define ifr_newname    ifr_ifru.ifru_newname   /* New name             */
168: # define _IOT_ifreq     _IOT(_IOTS(char),IFNAMSIZ,_IOTS(char),16,0,0)
169: # define _IOT_ifreq_short _IOT(_IOTS(char),IFNAMSIZ,_IOTS(short),1,0,0)
170: # define _IOT_ifreq_int _IOT(_IOTS(char),IFNAMSIZ,_IOTS(int),1,0,0)
171: 
172: 
173: /* Structure used in SIOCGIFCONF request.  Used to retrieve interface
174:    configuration for machine (useful for programs which must know all
175:    networks accessible).  */
176: 
177: struct ifconf
178:   {
179:     int ifc_len;                        /* Size of buffer.  */
180:     union
181:       {
182:         __caddr_t ifcu_buf;
183:         struct ifreq *ifcu_req;
184:       } ifc_ifcu;
185:   };
186: # define ifc_buf        ifc_ifcu.ifcu_buf       /* Buffer address.  */
187: # define ifc_req        ifc_ifcu.ifcu_req       /* Array of structures.  */
188: # define _IOT_ifconf _IOT(_IOTS(struct ifconf),1,0,0,0,0) /* not right */
189: #endif  /* Misc.  */
190: 
191: __BEGIN_DECLS
192: 
193: /* Convert an interface name to an index, and vice versa.  */
194: extern unsigned int if_nametoindex (__const char *__ifname) __THROW;
195: extern char *if_indextoname (unsigned int __ifindex, char *__ifname) __THROW;
196: 
197: /* Return a list of all interfaces and their indices.  */
198: extern struct if_nameindex *if_nameindex (void) __THROW;
199: 
200: /* Free the data returned from if_nameindex.  */
201: extern void if_freenameindex (struct if_nameindex *__ptr) __THROW;
202: 
203: __END_DECLS
204: 
205: #endif /* net/if.h */
206: 


for client 3.141.31.209
© Andrew Scott 2006 - 2024,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/