RTEMS CPU Kit with SuperCore
4.11.3
Main Page
Related Pages
Modules
+
Data Structures
Data Structures
+
Data Fields
+
All
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
+
Variables
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
+
Files
File List
+
Globals
+
All
_
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
q
r
s
t
u
v
w
x
+
Functions
_
a
b
c
d
e
f
g
i
j
l
m
n
o
p
q
r
s
t
u
v
w
+
Variables
_
b
c
d
i
r
+
Typedefs
a
b
c
d
f
h
i
m
o
p
q
r
s
t
u
w
x
+
Enumerations
b
c
d
e
h
i
m
o
p
r
s
t
w
+
Enumerator
c
i
m
p
r
s
t
w
+
Macros
_
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
w
mnt
data0
chrisj
rtems
releases
rtems-release.git
4.11.3
ws-rtems
rtems-4.11.3
cpukit
libnetworking
net
if_var.h
Go to the documentation of this file.
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
* From: @(#)if.h 8.1 (Berkeley) 6/10/93
30
* $FreeBSD: src/sys/net/if_var.h,v 1.107 2006/06/19 22:20:44 mlaier Exp $
31
*/
32
33
34
#ifndef _NET_IF_VAR_H_
35
#define _NET_IF_VAR_H_
36
37
#include <
net/if.h
>
/* struct if_data */
38
#include <
sys/ioccom.h
>
/* ioctl_command_t */
39
40
/*
41
* Structures defining a network interface, providing a packet
42
* transport mechanism (ala level 0 of the PUP protocols).
43
*
44
* Each interface accepts output datagrams of a specified maximum
45
* length, and provides higher level routines with input datagrams
46
* received from its medium.
47
*
48
* Output occurs when the routine if_output is called, with three parameters:
49
* (*ifp->if_output)(ifp, m, dst, rt)
50
* Here m is the mbuf chain to be sent and dst is the destination address.
51
* The output routine encapsulates the supplied datagram if necessary,
52
* and then transmits it on its medium.
53
*
54
* On input, each interface unwraps the data received by it, and either
55
* places it on the input queue of an internetwork datagram routine
56
* and posts the associated software interrupt, or passes the datagram to a raw
57
* packet input routine.
58
*
59
* Routines exist for locating interfaces by their addresses
60
* or for locating an interface on a certain network, as well as more general
61
* routing and gateway routines maintaining information used to locate
62
* interfaces. These routines live in the files if.c and route.c
63
*/
64
65
/*
66
* Forward structure declarations for function prototypes [sic].
67
*/
68
struct
mbuf
;
69
#ifndef __rtems__
70
struct
thread;
71
#endif
72
struct
rtentry
;
73
struct
rt_addrinfo
;
74
struct
socket
;
75
struct
ether_header
;
76
#ifndef __rtems__
77
struct
carp_if;
78
#endif
79
80
#include <sys/queue.h>
/* get TAILQ macros */
81
82
/*
83
* Structure defining a queue for a network interface.
84
*/
85
struct
ifqueue
{
86
struct
mbuf
*ifq_head;
87
struct
mbuf
*ifq_tail;
88
int
ifq_len;
89
int
ifq_maxlen;
90
int
ifq_drops;
91
};
92
93
/*
94
* Structure defining a network interface.
95
*
96
* (Would like to call this struct ``if'', but C isn't PL/1.)
97
*/
98
struct
ifnet {
99
void
*if_softc;
/* pointer to driver state */
100
char
*if_name;
/* name, e.g. ``en'' or ``lo'' */
101
struct
ifnet *if_next;
/* all struct ifnets are chained */
102
struct
ifaddr
*if_addrlist;
/* linked list of addresses per if */
103
int
if_pcount;
/* number of promiscuous listeners */
104
struct
bpf_if *if_bpf;
/* packet filter structure */
105
u_short if_index;
/* numeric abbreviation for this if */
106
short
if_unit;
/* sub-unit for lower level driver */
107
short
if_timer;
/* time 'til if_watchdog called */
108
int
if_flags;
/* up/down, broadcast, etc. */
109
void
*if_linkmib;
/* link-type-specific MIB data */
110
size_t
if_linkmiblen;
/* length of above data */
111
struct
if_data if_data;
112
/* procedure handles */
113
int (*if_output)
/* output routine (enqueue) */
114
(
struct
ifnet *,
struct
mbuf
*,
struct
sockaddr
*,
115
struct
rtentry
*);
116
void (*if_start)
/* initiate output routine */
117
(
struct
ifnet *);
118
int (*if_ioctl)
/* ioctl routine */
119
(
struct
ifnet *, ioctl_command_t, caddr_t);
120
void (*if_watchdog)
/* timer routine */
121
(
struct
ifnet *);
122
int (*if_poll_recv)
/* polled receive routine */
123
(
struct
ifnet *,
int
*);
124
int (*if_poll_xmit)
/* polled transmit routine */
125
(
struct
ifnet *,
int
*);
126
void (*if_poll_intren)
/* polled interrupt reenable routine */
127
(
struct
ifnet *);
128
void (*if_poll_slowinput)
/* input routine for slow devices */
129
(
struct
ifnet *,
struct
mbuf
*);
130
void (*if_init)
/* Init routine */
131
(
void
*);
132
int (*if_tap)
/* Packet filter routine */
133
(
struct
ifnet *,
struct
ether_header
*,
struct
mbuf
*);
134
struct
ifqueue
if_snd;
/* output queue */
135
struct
ifqueue
*if_poll_slowq;
/* input queue for slow devices */
136
};
137
138
typedef
void
if_init_f_t(
void
*);
139
140
/*
141
* XXX These aliases are terribly dangerous because they could apply
142
* to anything.
143
*/
144
#define if_mtu if_data.ifi_mtu
145
#define if_type if_data.ifi_type
146
#define if_physical if_data.ifi_physical
147
#define if_addrlen if_data.ifi_addrlen
148
#define if_hdrlen if_data.ifi_hdrlen
149
#define if_metric if_data.ifi_metric
150
#define if_baudrate if_data.ifi_baudrate
151
#define if_ipackets if_data.ifi_ipackets
152
#define if_ierrors if_data.ifi_ierrors
153
#define if_opackets if_data.ifi_opackets
154
#define if_oerrors if_data.ifi_oerrors
155
#define if_collisions if_data.ifi_collisions
156
#define if_ibytes if_data.ifi_ibytes
157
#define if_obytes if_data.ifi_obytes
158
#define if_imcasts if_data.ifi_imcasts
159
#define if_omcasts if_data.ifi_omcasts
160
#define if_iqdrops if_data.ifi_iqdrops
161
#define if_noproto if_data.ifi_noproto
162
#define if_lastchange if_data.ifi_lastchange
163
#define if_recvquota if_data.ifi_recvquota
164
#define if_xmitquota if_data.ifi_xmitquota
165
#define if_rawoutput(if, m, sa) if_output(if, m, sa, (struct rtentry *)NULL)
166
167
/*
168
* Output queues (ifp->if_snd) and slow device input queues (*ifp->if_slowq)
169
* are queues of messages stored on ifqueue structures
170
* (defined above). Entries are added to and deleted from these structures
171
* by these macros, which should be called with ipl raised to splimp().
172
*/
173
#define IF_QFULL(ifq) ((ifq)->ifq_len >= (ifq)->ifq_maxlen)
174
#define IF_DROP(ifq) ((ifq)->ifq_drops++)
175
176
#define IF_ENQUEUE(ifq, m) do { \
177
(m)->m_nextpkt = NULL; \
178
if ((ifq)->ifq_tail == NULL) \
179
(ifq)->ifq_head = m; \
180
else \
181
(ifq)->ifq_tail->m_nextpkt = m; \
182
(ifq)->ifq_tail = m; \
183
(ifq)->ifq_len++; \
184
} while (0)
185
186
#define IF_PREPEND(ifq, m) do { \
187
(m)->m_nextpkt = (ifq)->ifq_head; \
188
if ((ifq)->ifq_tail == NULL) \
189
(ifq)->ifq_tail = (m); \
190
(ifq)->ifq_head = (m); \
191
(ifq)->ifq_len++; \
192
} while (0)
193
194
#define IF_DEQUEUE(ifq, m) do { \
195
(m) = (ifq)->ifq_head; \
196
if (m) { \
197
if (((ifq)->ifq_head = (m)->m_nextpkt) == NULL) \
198
(ifq)->ifq_tail = NULL; \
199
(m)->m_nextpkt = NULL; \
200
(ifq)->ifq_len--; \
201
} \
202
} while (0)
203
204
/*
205
* The ifaddr structure contains information about one address
206
* of an interface. They are maintained by the different address families,
207
* are allocated and attached when an address is set, and are linked
208
* together so all addresses for an interface can be located.
209
*/
210
struct
ifaddr
{
211
struct
sockaddr
*ifa_addr;
/* address of interface */
212
struct
sockaddr
*ifa_dstaddr;
/* other end of p-to-p link */
213
#define ifa_broadaddr ifa_dstaddr
/* broadcast address interface */
214
struct
sockaddr
*ifa_netmask;
/* used to determine subnet */
215
struct
ifnet *ifa_ifp;
/* back-pointer to interface */
216
struct
ifaddr
*ifa_next;
/* next address for interface */
217
void (*ifa_rtrequest)
/* check or clean routes (+ or -)'d */
218
(int,
struct
rtentry
*,
struct
sockaddr
*);
219
u_short ifa_flags;
/* mostly rt_flags for cloning */
220
u_int ifa_refcnt;
/* references to this structure */
221
int
ifa_metric;
/* cost of going out this interface */
222
int (*ifa_claim_addr)
/* check if an addr goes to this if */
223
(
struct
ifaddr
*,
struct
sockaddr
*);
224
225
};
226
#define IFA_ROUTE RTF_UP
/* route installed */
227
228
#ifdef _KERNEL
229
#define IFAFREE(ifa) \
230
if ((ifa)->ifa_refcnt <= 0) \
231
ifafree(ifa); \
232
else \
233
(ifa)->ifa_refcnt--;
234
235
extern
struct
ifnet *ifnet;
236
extern
int
ifqmaxlen;
237
extern
struct
ifnet loif[];
238
extern
int
if_index;
239
extern
struct
ifaddr
**ifnet_addrs;
240
241
void
if_attach(
struct
ifnet *);
242
void
if_down(
struct
ifnet *);
243
void
if_up(
struct
ifnet *);
244
/*void ifinit(void);*/
/* declared in systm.h for main() */
245
int
ifioctl(
struct
socket
*, u_long, caddr_t,
struct
proc
*);
246
int
ifpromisc(
struct
ifnet *,
int
);
247
248
struct
ifaddr
*ifa_ifwithaddr(
struct
sockaddr
*);
249
struct
ifaddr
*ifa_ifwithdstaddr(
struct
sockaddr
*);
250
struct
ifaddr
*ifa_ifwithnet(
struct
sockaddr
*);
251
struct
ifaddr
*ifa_ifwithroute(
int
,
struct
sockaddr
*,
struct
sockaddr
*);
252
struct
ifaddr
*ifaof_ifpforaddr(
struct
sockaddr
*,
struct
ifnet *);
253
254
#endif
/* _KERNEL */
255
256
#endif
/* !_NET_IF_VAR_H_ */
ioccom.h
ether_header
Definition:
ethernet.h:62
socket
Definition:
socketvar.h:49
proc
Definition:
proc.h:5
rt_addrinfo
Definition:
route.h:251
if.h
ifqueue
Definition:
if_var.h:86
sockaddr
Definition:
socket.h:180
ifaddr
Definition:
if_var.h:211
mbuf
Definition:
mbuf.h:103
rtentry
Definition:
route.h:104
Generated by
1.8.13