source: rtems-libbsd/freebsd/sys/net/if.h @ e599318

4.1155-freebsd-126-freebsd-12freebsd-9.3
Last change on this file since e599318 was e599318, checked in by Sebastian Huber <sebastian.huber@…>, on 10/09/13 at 20:52:54

Update files to match FreeBSD layout

Add compatibility with Newlib header files. Some FreeBSD header files
are mapped by the translation script:

o rtems/bsd/sys/_types.h
o rtems/bsd/sys/errno.h
o rtems/bsd/sys/lock.h
o rtems/bsd/sys/param.h
o rtems/bsd/sys/resource.h
o rtems/bsd/sys/time.h
o rtems/bsd/sys/timespec.h
o rtems/bsd/sys/types.h
o rtems/bsd/sys/unistd.h

It is now possible to include <sys/socket.h> directly for example.

Generate one Makefile which builds everything including tests.

  • Property mode set to 100644
File size: 16.5 KB
Line 
1/*-
2 * Copyright (c) 1982, 1986, 1989, 1993
3 *      The Regents of the University of California.  All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 * 4. Neither the name of the University nor the names of its contributors
14 *    may be used to endorse or promote products derived from this software
15 *    without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 *      @(#)if.h        8.1 (Berkeley) 6/10/93
30 * $FreeBSD$
31 */
32
33#ifndef _NET_IF_H_
34#define _NET_IF_H_
35
36#include <sys/cdefs.h>
37
38#ifdef _KERNEL
39#include <sys/queue.h>
40#endif
41
42#if __BSD_VISIBLE
43
44#ifdef __rtems__
45#include <rtems/bsd/sys/time.h>
46#else
47#ifndef _KERNEL
48/*
49 * <net/if.h> does not depend on <sys/time.h> on most other systems.  This
50 * helps userland compatibility.  (struct timeval ifi_lastchange)
51 */
52#include <rtems/bsd/sys/time.h>
53#endif
54#endif /* __rtems__ */
55
56struct ifnet;
57#endif
58
59/*
60 * Length of interface external name, including terminating '\0'.
61 * Note: this is the same size as a generic device's external name.
62 */
63#define         IF_NAMESIZE     16
64#if __BSD_VISIBLE
65#define         IFNAMSIZ        IF_NAMESIZE
66#define         IF_MAXUNIT      0x7fff  /* historical value */
67#endif
68#if __BSD_VISIBLE
69
70/*
71 * Structure used to query names of interface cloners.
72 */
73
74struct if_clonereq {
75        int     ifcr_total;             /* total cloners (out) */
76        int     ifcr_count;             /* room for this many in user buffer */
77        char    *ifcr_buffer;           /* buffer for cloner names */
78};
79
80/*
81 * Structure describing information about an interface
82 * which may be of interest to management entities.
83 */
84struct if_data {
85        /* generic interface information */
86        u_char  ifi_type;               /* ethernet, tokenring, etc */
87        u_char  ifi_physical;           /* e.g., AUI, Thinnet, 10base-T, etc */
88        u_char  ifi_addrlen;            /* media address length */
89        u_char  ifi_hdrlen;             /* media header length */
90        u_char  ifi_link_state;         /* current link state */
91        u_char  ifi_spare_char1;        /* spare byte */
92        u_char  ifi_spare_char2;        /* spare byte */
93        u_char  ifi_datalen;            /* length of this data struct */
94        u_long  ifi_mtu;                /* maximum transmission unit */
95        u_long  ifi_metric;             /* routing metric (external only) */
96        u_long  ifi_baudrate;           /* linespeed */
97        /* volatile statistics */
98        u_long  ifi_ipackets;           /* packets received on interface */
99        u_long  ifi_ierrors;            /* input errors on interface */
100        u_long  ifi_opackets;           /* packets sent on interface */
101        u_long  ifi_oerrors;            /* output errors on interface */
102        u_long  ifi_collisions;         /* collisions on csma interfaces */
103        u_long  ifi_ibytes;             /* total number of octets received */
104        u_long  ifi_obytes;             /* total number of octets sent */
105        u_long  ifi_imcasts;            /* packets received via multicast */
106        u_long  ifi_omcasts;            /* packets sent via multicast */
107        u_long  ifi_iqdrops;            /* dropped on input, this interface */
108        u_long  ifi_noproto;            /* destined for unsupported protocol */
109        u_long  ifi_hwassist;           /* HW offload capabilities, see IFCAP */
110        time_t  ifi_epoch;              /* uptime at attach or stat reset */
111        struct  timeval ifi_lastchange; /* time of last administrative change */
112};
113
114/*-
115 * Interface flags are of two types: network stack owned flags, and driver
116 * owned flags.  Historically, these values were stored in the same ifnet
117 * flags field, but with the advent of fine-grained locking, they have been
118 * broken out such that the network stack is responsible for synchronizing
119 * the stack-owned fields, and the device driver the device-owned fields.
120 * Both halves can perform lockless reads of the other half's field, subject
121 * to accepting the involved races.
122 *
123 * Both sets of flags come from the same number space, and should not be
124 * permitted to conflict, as they are exposed to user space via a single
125 * field.
126 *
127 * The following symbols identify read and write requirements for fields:
128 *
129 * (i) if_flags field set by device driver before attach, read-only there
130 *     after.
131 * (n) if_flags field written only by the network stack, read by either the
132 *     stack or driver.
133 * (d) if_drv_flags field written only by the device driver, read by either
134 *     the stack or driver.
135 */
136#define IFF_UP          0x1             /* (n) interface is up */
137#define IFF_BROADCAST   0x2             /* (i) broadcast address valid */
138#define IFF_DEBUG       0x4             /* (n) turn on debugging */
139#define IFF_LOOPBACK    0x8             /* (i) is a loopback net */
140#define IFF_POINTOPOINT 0x10            /* (i) is a point-to-point link */
141#define IFF_SMART       0x20            /* (i) interface manages own routes */
142#define IFF_DRV_RUNNING 0x40            /* (d) resources allocated */
143#define IFF_NOARP       0x80            /* (n) no address resolution protocol */
144#define IFF_PROMISC     0x100           /* (n) receive all packets */
145#define IFF_ALLMULTI    0x200           /* (n) receive all multicast packets */
146#define IFF_DRV_OACTIVE 0x400           /* (d) tx hardware queue is full */
147#define IFF_SIMPLEX     0x800           /* (i) can't hear own transmissions */
148#define IFF_LINK0       0x1000          /* per link layer defined bit */
149#define IFF_LINK1       0x2000          /* per link layer defined bit */
150#define IFF_LINK2       0x4000          /* per link layer defined bit */
151#define IFF_ALTPHYS     IFF_LINK2       /* use alternate physical connection */
152#define IFF_MULTICAST   0x8000          /* (i) supports multicast */
153/*                      0x10000         */
154#define IFF_PPROMISC    0x20000         /* (n) user-requested promisc mode */
155#define IFF_MONITOR     0x40000         /* (n) user-requested monitor mode */
156#define IFF_STATICARP   0x80000         /* (n) static ARP */
157#define IFF_DYING       0x200000        /* (n) interface is winding down */
158#define IFF_RENAMING    0x400000        /* (n) interface is being renamed */
159
160/*
161 * Old names for driver flags so that user space tools can continue to use
162 * the old (portable) names.
163 */
164#ifndef _KERNEL
165#define IFF_RUNNING     IFF_DRV_RUNNING
166#define IFF_OACTIVE     IFF_DRV_OACTIVE
167#endif
168
169/* flags set internally only: */
170#define IFF_CANTCHANGE \
171        (IFF_BROADCAST|IFF_POINTOPOINT|IFF_DRV_RUNNING|IFF_DRV_OACTIVE|\
172            IFF_SIMPLEX|IFF_MULTICAST|IFF_ALLMULTI|IFF_SMART|IFF_PROMISC|\
173            IFF_DYING)
174
175/*
176 * Values for if_link_state.
177 */
178#define LINK_STATE_UNKNOWN      0       /* link invalid/unknown */
179#define LINK_STATE_DOWN         1       /* link is down */
180#define LINK_STATE_UP           2       /* link is up */
181
182/*
183 * Some convenience macros used for setting ifi_baudrate.
184 * XXX 1000 vs. 1024? --thorpej@netbsd.org
185 */
186#define IF_Kbps(x)      ((x) * 1000)            /* kilobits/sec. */
187#define IF_Mbps(x)      (IF_Kbps((x) * 1000))   /* megabits/sec. */
188#define IF_Gbps(x)      (IF_Mbps((x) * 1000))   /* gigabits/sec. */
189
190/*
191 * Capabilities that interfaces can advertise.
192 *
193 * struct ifnet.if_capabilities
194 *   contains the optional features & capabilities a particular interface
195 *   supports (not only the driver but also the detected hw revision).
196 *   Capabilities are defined by IFCAP_* below.
197 * struct ifnet.if_capenable
198 *   contains the enabled (either by default or through ifconfig) optional
199 *   features & capabilities on this interface.
200 *   Capabilities are defined by IFCAP_* below.
201 * struct if_data.ifi_hwassist in mbuf CSUM_ flag form, controlled by above
202 *   contains the enabled optional feature & capabilites that can be used
203 *   individually per packet and are specified in the mbuf pkthdr.csum_flags
204 *   field.  IFCAP_* and CSUM_* do not match one to one and CSUM_* may be
205 *   more detailed or differenciated than IFCAP_*.
206 *   Hwassist features are defined CSUM_* in sys/mbuf.h
207 */
208#define IFCAP_RXCSUM            0x00001  /* can offload checksum on RX */
209#define IFCAP_TXCSUM            0x00002  /* can offload checksum on TX */
210#define IFCAP_NETCONS           0x00004  /* can be a network console */
211#define IFCAP_VLAN_MTU          0x00008 /* VLAN-compatible MTU */
212#define IFCAP_VLAN_HWTAGGING    0x00010 /* hardware VLAN tag support */
213#define IFCAP_JUMBO_MTU         0x00020 /* 9000 byte MTU supported */
214#define IFCAP_POLLING           0x00040 /* driver supports polling */
215#define IFCAP_VLAN_HWCSUM       0x00080 /* can do IFCAP_HWCSUM on VLANs */
216#define IFCAP_TSO4              0x00100 /* can do TCP Segmentation Offload */
217#define IFCAP_TSO6              0x00200 /* can do TCP6 Segmentation Offload */
218#define IFCAP_LRO               0x00400 /* can do Large Receive Offload */
219#define IFCAP_WOL_UCAST         0x00800 /* wake on any unicast frame */
220#define IFCAP_WOL_MCAST         0x01000 /* wake on any multicast frame */
221#define IFCAP_WOL_MAGIC         0x02000 /* wake on any Magic Packet */
222#define IFCAP_TOE4              0x04000 /* interface can offload TCP */
223#define IFCAP_TOE6              0x08000 /* interface can offload TCP6 */
224#define IFCAP_VLAN_HWFILTER     0x10000 /* interface hw can filter vlan tag */
225#define IFCAP_POLLING_NOCOUNT   0x20000 /* polling ticks cannot be fragmented */
226#define IFCAP_VLAN_HWTSO        0x40000 /* can do IFCAP_TSO on VLANs */
227#define IFCAP_LINKSTATE         0x80000 /* the runtime link state is dynamic */
228
229#define IFCAP_HWCSUM    (IFCAP_RXCSUM | IFCAP_TXCSUM)
230#define IFCAP_TSO       (IFCAP_TSO4 | IFCAP_TSO6)
231#define IFCAP_WOL       (IFCAP_WOL_UCAST | IFCAP_WOL_MCAST | IFCAP_WOL_MAGIC)
232#define IFCAP_TOE       (IFCAP_TOE4 | IFCAP_TOE6)
233
234#define IFQ_MAXLEN      50
235#define IFNET_SLOWHZ    1               /* granularity is 1 second */
236
237/*
238 * Message format for use in obtaining information about interfaces
239 * from getkerninfo and the routing socket
240 */
241struct if_msghdr {
242        u_short ifm_msglen;     /* to skip over non-understood messages */
243        u_char  ifm_version;    /* future binary compatibility */
244        u_char  ifm_type;       /* message type */
245        int     ifm_addrs;      /* like rtm_addrs */
246        int     ifm_flags;      /* value of if_flags */
247        u_short ifm_index;      /* index for associated ifp */
248        struct  if_data ifm_data;/* statistics and other data about if */
249};
250
251/*
252 * Message format for use in obtaining information about interface addresses
253 * from getkerninfo and the routing socket
254 */
255struct ifa_msghdr {
256        u_short ifam_msglen;    /* to skip over non-understood messages */
257        u_char  ifam_version;   /* future binary compatibility */
258        u_char  ifam_type;      /* message type */
259        int     ifam_addrs;     /* like rtm_addrs */
260        int     ifam_flags;     /* value of ifa_flags */
261        u_short ifam_index;     /* index for associated ifp */
262        int     ifam_metric;    /* value of ifa_metric */
263};
264
265/*
266 * Message format for use in obtaining information about multicast addresses
267 * from the routing socket
268 */
269struct ifma_msghdr {
270        u_short ifmam_msglen;   /* to skip over non-understood messages */
271        u_char  ifmam_version;  /* future binary compatibility */
272        u_char  ifmam_type;     /* message type */
273        int     ifmam_addrs;    /* like rtm_addrs */
274        int     ifmam_flags;    /* value of ifa_flags */
275        u_short ifmam_index;    /* index for associated ifp */
276};
277
278/*
279 * Message format announcing the arrival or departure of a network interface.
280 */
281struct if_announcemsghdr {
282        u_short ifan_msglen;    /* to skip over non-understood messages */
283        u_char  ifan_version;   /* future binary compatibility */
284        u_char  ifan_type;      /* message type */
285        u_short ifan_index;     /* index for associated ifp */
286        char    ifan_name[IFNAMSIZ]; /* if name, e.g. "en0" */
287        u_short ifan_what;      /* what type of announcement */
288};
289
290#define IFAN_ARRIVAL    0       /* interface arrival */
291#define IFAN_DEPARTURE  1       /* interface departure */
292
293/*
294 * Buffer with length to be used in SIOCGIFDESCR/SIOCSIFDESCR requests
295 */
296struct ifreq_buffer {
297        size_t  length;
298        void    *buffer;
299};
300
301/*
302 * Interface request structure used for socket
303 * ioctl's.  All interface ioctl's must have parameter
304 * definitions which begin with ifr_name.  The
305 * remainder may be interface specific.
306 */
307struct  ifreq {
308        char    ifr_name[IFNAMSIZ];             /* if name, e.g. "en0" */
309        union {
310                struct  sockaddr ifru_addr;
311                struct  sockaddr ifru_dstaddr;
312                struct  sockaddr ifru_broadaddr;
313                struct  ifreq_buffer ifru_buffer;
314                short   ifru_flags[2];
315                short   ifru_index;
316                int     ifru_jid;
317                int     ifru_metric;
318                int     ifru_mtu;
319                int     ifru_phys;
320                int     ifru_media;
321                caddr_t ifru_data;
322                int     ifru_cap[2];
323        } ifr_ifru;
324#define ifr_addr        ifr_ifru.ifru_addr      /* address */
325#define ifr_dstaddr     ifr_ifru.ifru_dstaddr   /* other end of p-to-p link */
326#define ifr_broadaddr   ifr_ifru.ifru_broadaddr /* broadcast address */
327#define ifr_buffer      ifr_ifru.ifru_buffer    /* user supplied buffer with its length */
328#define ifr_flags       ifr_ifru.ifru_flags[0]  /* flags (low 16 bits) */
329#define ifr_flagshigh   ifr_ifru.ifru_flags[1]  /* flags (high 16 bits) */
330#define ifr_jid         ifr_ifru.ifru_jid       /* jail/vnet */
331#define ifr_metric      ifr_ifru.ifru_metric    /* metric */
332#define ifr_mtu         ifr_ifru.ifru_mtu       /* mtu */
333#define ifr_phys        ifr_ifru.ifru_phys      /* physical wire */
334#define ifr_media       ifr_ifru.ifru_media     /* physical media */
335#define ifr_data        ifr_ifru.ifru_data      /* for use by interface */
336#define ifr_reqcap      ifr_ifru.ifru_cap[0]    /* requested capabilities */
337#define ifr_curcap      ifr_ifru.ifru_cap[1]    /* current capabilities */
338#define ifr_index       ifr_ifru.ifru_index     /* interface index */
339};
340
341#define _SIZEOF_ADDR_IFREQ(ifr) \
342        ((ifr).ifr_addr.sa_len > sizeof(struct sockaddr) ? \
343         (sizeof(struct ifreq) - sizeof(struct sockaddr) + \
344          (ifr).ifr_addr.sa_len) : sizeof(struct ifreq))
345
346struct ifaliasreq {
347        char    ifra_name[IFNAMSIZ];            /* if name, e.g. "en0" */
348        struct  sockaddr ifra_addr;
349        struct  sockaddr ifra_broadaddr;
350        struct  sockaddr ifra_mask;
351};
352
353struct ifmediareq {
354        char    ifm_name[IFNAMSIZ];     /* if name, e.g. "en0" */
355        int     ifm_current;            /* current media options */
356        int     ifm_mask;               /* don't care mask */
357        int     ifm_status;             /* media status */
358        int     ifm_active;             /* active options */
359        int     ifm_count;              /* # entries in ifm_ulist array */
360        int     *ifm_ulist;             /* media words */
361};
362
363struct  ifdrv {
364        char            ifd_name[IFNAMSIZ];     /* if name, e.g. "en0" */
365        unsigned long   ifd_cmd;
366        size_t          ifd_len;
367        void            *ifd_data;
368};
369
370/*
371 * Structure used to retrieve aux status data from interfaces.
372 * Kernel suppliers to this interface should respect the formatting
373 * needed by ifconfig(8): each line starts with a TAB and ends with
374 * a newline.  The canonical example to copy and paste is in if_tun.c.
375 */
376
377#define IFSTATMAX       800             /* 10 lines of text */
378struct ifstat {
379        char    ifs_name[IFNAMSIZ];     /* if name, e.g. "en0" */
380        char    ascii[IFSTATMAX + 1];
381};
382
383/*
384 * Structure used in SIOCGIFCONF request.
385 * Used to retrieve interface configuration
386 * for machine (useful for programs which
387 * must know all networks accessible).
388 */
389struct  ifconf {
390        int     ifc_len;                /* size of associated buffer */
391        union {
392                caddr_t ifcu_buf;
393                struct  ifreq *ifcu_req;
394        } ifc_ifcu;
395#define ifc_buf ifc_ifcu.ifcu_buf       /* buffer address */
396#define ifc_req ifc_ifcu.ifcu_req       /* array of structures returned */
397};
398
399/*
400 * interface groups
401 */
402
403#define IFG_ALL         "all"           /* group contains all interfaces */
404/* XXX: will we implement this? */
405#define IFG_EGRESS      "egress"        /* if(s) default route(s) point to */
406
407struct ifg_req {
408        union {
409                char                     ifgrqu_group[IFNAMSIZ];
410                char                     ifgrqu_member[IFNAMSIZ];
411        } ifgrq_ifgrqu;
412#define ifgrq_group     ifgrq_ifgrqu.ifgrqu_group
413#define ifgrq_member    ifgrq_ifgrqu.ifgrqu_member
414};
415
416/*
417 * Used to lookup groups for an interface
418 */
419struct ifgroupreq {
420        char    ifgr_name[IFNAMSIZ];
421        u_int   ifgr_len;
422        union {
423                char    ifgru_group[IFNAMSIZ];
424                struct  ifg_req *ifgru_groups;
425        } ifgr_ifgru;
426#define ifgr_group      ifgr_ifgru.ifgru_group
427#define ifgr_groups     ifgr_ifgru.ifgru_groups
428};
429
430/*
431 * Structure for SIOC[AGD]LIFADDR
432 */
433struct if_laddrreq {
434        char    iflr_name[IFNAMSIZ];
435        u_int   flags;
436#define IFLR_PREFIX     0x8000  /* in: prefix given  out: kernel fills id */
437        u_int   prefixlen;         /* in/out */
438        struct  sockaddr_storage addr;   /* in/out */
439        struct  sockaddr_storage dstaddr; /* out */
440};
441
442#endif /* __BSD_VISIBLE */
443
444#ifdef _KERNEL
445#ifdef MALLOC_DECLARE
446MALLOC_DECLARE(M_IFADDR);
447MALLOC_DECLARE(M_IFMADDR);
448#endif
449#endif
450
451#ifndef _KERNEL
452struct if_nameindex {
453        unsigned int    if_index;       /* 1, 2, ... */
454        char            *if_name;       /* null terminated name: "le0", ... */
455};
456
457__BEGIN_DECLS
458void                     if_freenameindex(struct if_nameindex *);
459char                    *if_indextoname(unsigned int, char *);
460struct if_nameindex     *if_nameindex(void);
461unsigned int             if_nametoindex(const char *);
462__END_DECLS
463#endif
464
465#ifdef _KERNEL
466/* XXX - this should go away soon. */
467#include <net/if_var.h>
468#endif
469
470#endif /* !_NET_IF_H_ */
Note: See TracBrowser for help on using the repository browser.