source: rtems/cpukit/libnetworking/net/if.h @ d4ab0aef

5
Last change on this file since d4ab0aef was d4ab0aef, checked in by Sebastian Huber <sebastian.huber@…>, on 06/06/17 at 09:14:21

network: Move RTEMS specifics

Move RTEMS specifics to <rtems/rtems_bsdnet.h>.

Introduce rtems_tap_ifreq. The interface tap support is RTEMS-specific
and only available in the legacy network stack.

Update #2833.

  • Property mode set to 100644
File size: 10.3 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: src/sys/net/if.h,v 1.95 2005/02/25 19:46:41 brooks Exp $
31 */
32
33 
34#ifndef _NET_IF_H_
35#define _NET_IF_H_
36
37#include <sys/cdefs.h>
38
39#if defined(__rtems__)
40/*
41 * FIXME - HACK: BSD defines __BSD_VISIBLE in sys/cdefs.h
42 * RTEMS sys/cdefs.h doesn't, so we enforce it here.
43 */
44#ifndef __BSD_VISIBLE
45#define __BSD_VISIBLE 1
46#endif
47#include <inttypes.h>
48#include <sys/socket.h> /* struct sockaddr */
49#endif
50
51#ifdef _KERNEL
52#include <sys/queue.h>
53#endif
54
55#if __BSD_VISIBLE
56/*
57 * <net/if.h> does not depend on <sys/time.h> on most other systems.  This
58 * helps userland compatibility.  (struct timeval ifi_lastchange)
59 */
60#ifndef _KERNEL
61#include <sys/time.h>
62#endif
63
64struct ifnet;
65struct  ether_header;
66#endif
67
68/*
69 * Length of interface external name, including terminating '\0'.
70 * Note: this is the same size as a generic device's external name.
71 */
72#define         IF_NAMESIZE     16
73#if __BSD_VISIBLE
74#define         IFNAMSIZ        IF_NAMESIZE
75#define         IF_MAXUNIT      0x7fff  /* historical value */
76#endif
77#if __BSD_VISIBLE
78
79/*
80 * Structure used to query names of interface cloners.
81 */
82
83struct if_clonereq {
84        int     ifcr_total;             /* total cloners (out) */
85        int     ifcr_count;             /* room for this many in user buffer */
86        char    *ifcr_buffer;           /* buffer for cloner names */
87};
88
89/*
90 * Structure describing information about an interface
91 * which may be of interest to management entities.
92 */
93struct if_data {
94        /* generic interface information */
95        u_char  ifi_type;               /* ethernet, tokenring, etc */
96        u_char  ifi_physical;           /* e.g., AUI, Thinnet, 10base-T, etc */
97        u_char  ifi_addrlen;            /* media address length */
98        u_char  ifi_hdrlen;             /* media header length */
99        u_char  ifi_recvquota;          /* polling quota for receive intrs */
100        u_char  ifi_xmitquota;          /* polling quota for xmit intrs */
101        u_long  ifi_mtu;                /* maximum transmission unit */
102        u_long  ifi_metric;             /* routing metric (external only) */
103        u_long  ifi_baudrate;           /* linespeed */
104        /* volatile statistics */
105        u_long  ifi_ipackets;           /* packets received on interface */
106        u_long  ifi_ierrors;            /* input errors on interface */
107        u_long  ifi_opackets;           /* packets sent on interface */
108        u_long  ifi_oerrors;            /* output errors on interface */
109        u_long  ifi_collisions;         /* collisions on csma interfaces */
110        u_long  ifi_ibytes;             /* total number of octets received */
111        u_long  ifi_obytes;             /* total number of octets sent */
112        u_long  ifi_imcasts;            /* packets received via multicast */
113        u_long  ifi_omcasts;            /* packets sent via multicast */
114        u_long  ifi_iqdrops;            /* dropped on input, this interface */
115        u_long  ifi_noproto;            /* destined for unsupported protocol */
116        u_long  ifi_recvtiming;         /* usec spent receiving when timing */
117        u_long  ifi_xmittiming;         /* usec spent xmitting when timing */
118        struct  timeval ifi_lastchange; /* time of last administrative change */
119};
120
121#define IFF_UP          0x1             /* interface is up */
122#define IFF_BROADCAST   0x2             /* broadcast address valid */
123#define IFF_DEBUG       0x4             /* turn on debugging */
124#define IFF_LOOPBACK    0x8             /* is a loopback net */
125#define IFF_POINTOPOINT 0x10            /* interface is point-to-point link */
126#define IFF_SMART       0x20            /* interface manages own routes */
127#define IFF_RUNNING     0x40            /* resources allocated */
128#define IFF_NOARP       0x80            /* no address resolution protocol */
129#define IFF_PROMISC     0x100           /* receive all packets */
130#define IFF_ALLMULTI    0x200           /* receive all multicast packets */
131#define IFF_OACTIVE     0x400           /* tx hardware queue is full */
132#define IFF_SIMPLEX     0x800           /* can't hear own transmissions */
133#define IFF_LINK0       0x1000          /* per link layer defined bit */
134#define IFF_LINK1       0x2000          /* per link layer defined bit */
135#define IFF_LINK2       0x4000          /* per link layer defined bit */
136#define IFF_ALTPHYS     IFF_LINK2       /* use alternate physical connection */
137#define IFF_MULTICAST   0x8000          /* supports multicast */
138#define IFF_POLLING     0x10000         /* Interface is in polling mode. */
139#define IFF_PPROMISC    0x20000         /* user-requested promisc mode */
140#define IFF_MONITOR     0x40000         /* user-requested monitor mode */
141#define IFF_STATICARP   0x80000         /* static ARP */
142#define IFF_NEEDSGIANT  0x100000        /* hold Giant over if_start calls */
143
144/* flags set internally only: */
145#define IFF_CANTCHANGE \
146        (IFF_BROADCAST|IFF_POINTOPOINT|IFF_RUNNING|IFF_OACTIVE|\
147            IFF_SIMPLEX|IFF_MULTICAST|IFF_ALLMULTI|IFF_SMART|IFF_PROMISC|\
148            IFF_POLLING)
149
150/*
151 * Values for if_link_state.
152 */
153#define LINK_STATE_UNKNOWN      0       /* link invalid/unknown */
154#define LINK_STATE_DOWN         1       /* link is down */
155#define LINK_STATE_UP           2       /* link is up */
156
157/*
158 * Some convenience macros used for setting ifi_baudrate.
159 * XXX 1000 vs. 1024? --thorpej@netbsd.org
160 */
161#define IF_Kbps(x)      ((x) * 1000)            /* kilobits/sec. */
162#define IF_Mbps(x)      (IF_Kbps((x) * 1000))   /* megabits/sec. */
163#define IF_Gbps(x)      (IF_Mbps((x) * 1000))   /* gigabits/sec. */
164
165#define IFQ_MAXLEN      50
166#define IFNET_SLOWHZ    1               /* granularity is 1 second */
167
168/*
169 * Message format for use in obtaining information about interfaces
170 * from getkerninfo and the routing socket
171 */
172struct if_msghdr {
173        u_short ifm_msglen;     /* to skip over non-understood messages */
174        u_char  ifm_version;    /* future binary compatibility */
175        u_char  ifm_type;       /* message type */
176        int     ifm_addrs;      /* like rtm_addrs */
177        int     ifm_flags;      /* value of if_flags */
178        u_short ifm_index;      /* index for associated ifp */
179        struct  if_data ifm_data;/* statistics and other data about if */
180};
181
182/*
183 * Message format for use in obtaining information about interface addresses
184 * from getkerninfo and the routing socket
185 */
186struct ifa_msghdr {
187        u_short ifam_msglen;    /* to skip over non-understood messages */
188        u_char  ifam_version;   /* future binary compatibility */
189        u_char  ifam_type;      /* message type */
190        int     ifam_addrs;     /* like rtm_addrs */
191        int     ifam_flags;     /* value of ifa_flags */
192        u_short ifam_index;     /* index for associated ifp */
193        int     ifam_metric;    /* value of ifa_metric */
194};
195
196/* forward declaration */
197struct mbuf;
198
199/*
200 * Interface request structure used for socket
201 * ioctl's.  All interface ioctl's must have parameter
202 * definitions which begin with ifr_name.  The
203 * remainder may be interface specific.
204 */
205struct  ifreq {
206        char    ifr_name[IFNAMSIZ];             /* if name, e.g. "en0" */
207        union {
208                struct  sockaddr ifru_addr;
209                struct  sockaddr ifru_dstaddr;
210                struct  sockaddr ifru_broadaddr;
211                short   ifru_flags[2];
212                int32_t ifru_metric;
213                int32_t ifru_mtu;
214                int     ifru_phys;
215                int     ifru_media;
216                caddr_t ifru_data;
217        } ifr_ifru;
218#define ifr_addr        ifr_ifru.ifru_addr      /* address */
219#define ifr_dstaddr     ifr_ifru.ifru_dstaddr   /* other end of p-to-p link */
220#define ifr_broadaddr   ifr_ifru.ifru_broadaddr /* broadcast address */
221#define ifr_flags       ifr_ifru.ifru_flags[0]  /* flags (low 16 bits) */
222#define ifr_flagshigh   ifr_ifru.ifru_flags[1]  /* flags (high 16 bits) */
223#define ifr_metric      ifr_ifru.ifru_metric    /* metric */
224#define ifr_mtu         ifr_ifru.ifru_mtu       /* mtu */
225#define ifr_phys        ifr_ifru.ifru_phys      /* physical wire */
226#define ifr_media       ifr_ifru.ifru_media     /* physical media */
227#define ifr_data        ifr_ifru.ifru_data      /* for use by interface */
228};
229
230struct ifaliasreq {
231        char    ifra_name[IFNAMSIZ];            /* if name, e.g. "en0" */
232        struct  sockaddr ifra_addr;
233        struct  sockaddr ifra_broadaddr;
234        struct  sockaddr ifra_mask;
235};
236
237struct ifmediareq {
238        char    ifm_name[IFNAMSIZ];     /* if name, e.g. "en0" */
239        int     ifm_current;            /* current media options */
240        int     ifm_mask;               /* don't care mask */
241        int     ifm_status;             /* media status */
242        int     ifm_active;             /* active options */
243        int     ifm_count;              /* # entries in ifm_ulist array */
244        int     *ifm_ulist;             /* media words */
245};
246
247/*
248 * Structure used to retrieve aux status data from interfaces.
249 * Kernel suppliers to this interface should respect the formatting
250 * needed by ifconfig(8): each line starts with a TAB and ends with
251 * a newline.  The canonical example to copy and paste is in if_tun.c.
252 */
253
254#define IFSTATMAX       800             /* 10 lines of text */
255struct ifstat {
256        char    ifs_name[IFNAMSIZ];     /* if name, e.g. "en0" */
257        char    ascii[IFSTATMAX + 1];
258};
259
260/*
261 * Structure used in SIOCGIFCONF request.
262 * Used to retrieve interface configuration
263 * for machine (useful for programs which
264 * must know all networks accessible).
265 */
266struct  ifconf {
267        int     ifc_len;                /* size of associated buffer */
268        union {
269                caddr_t ifcu_buf;
270                struct  ifreq *ifcu_req;
271        } ifc_ifcu;
272#define ifc_buf ifc_ifcu.ifcu_buf       /* buffer address */
273#define ifc_req ifc_ifcu.ifcu_req       /* array of structures returned */
274};
275#endif /* __BSD_VISIBLE */
276
277#ifndef _KERNEL
278struct if_nameindex {
279    unsigned int    if_index;   /* 1, 2, ... */
280    char        *if_name;   /* null terminated name: "le0", ... */
281};
282
283__BEGIN_DECLS
284void             if_freenameindex(struct if_nameindex *);
285char            *if_indextoname(unsigned int, char *);
286struct if_nameindex *if_nameindex(void);
287__END_DECLS
288#endif
289
290#ifdef _KERNEL
291
292/* XXX - this should go away soon. */
293#include <net/if_var.h>
294
295void    ifafree(struct ifaddr *);
296
297int     looutput(struct ifnet *,
298           struct mbuf *, struct sockaddr *, struct rtentry *);
299#endif
300
301#endif /* !_NET_IF_H_ */
Note: See TracBrowser for help on using the repository browser.