OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [rtos/] [rtems/] [c/] [src/] [libnetworking/] [sys/] [protosw.h] - Blame information for rev 173

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 30 unneback
/*-
2
 * Copyright (c) 1982, 1986, 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
 * 3. All advertising materials mentioning features or use of this software
14
 *    must display the following acknowledgement:
15
 *      This product includes software developed by the University of
16
 *      California, Berkeley and its contributors.
17
 * 4. Neither the name of the University nor the names of its contributors
18
 *    may be used to endorse or promote products derived from this software
19
 *    without specific prior written permission.
20
 *
21
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31
 * SUCH DAMAGE.
32
 *
33
 *      @(#)protosw.h   8.1 (Berkeley) 6/2/93
34
 * $Id: protosw.h,v 1.2 2001-09-27 12:02:00 chris Exp $
35
 */
36
 
37
#ifndef _SYS_PROTOSW_H_
38
#define _SYS_PROTOSW_H_
39
 
40
struct ifnet;
41
struct mbuf;
42
struct sockaddr;
43
struct socket;
44
struct sockproto;
45
struct stat;
46
 
47
/*
48
 * Protocol switch table.
49
 *
50
 * Each protocol has a handle initializing one of these structures,
51
 * which is used for protocol-protocol and system-protocol communication.
52
 *
53
 * A protocol is called through the pr_init entry before any other.
54
 * Thereafter it is called every 200ms through the pr_fasttimo entry and
55
 * every 500ms through the pr_slowtimo for timer based actions.
56
 * The system will call the pr_drain entry if it is low on space and
57
 * this should throw away any non-critical data.
58
 *
59
 * Protocols pass data between themselves as chains of mbufs using
60
 * the pr_input and pr_output hooks.  Pr_input passes data up (towards
61
 * UNIX) and pr_output passes it down (towards the imps); control
62
 * information passes up and down on pr_ctlinput and pr_ctloutput.
63
 * The protocol is responsible for the space occupied by any the
64
 * arguments to these entries and must dispose it.
65
 *
66
 * The userreq routine interfaces protocols to the system and is
67
 * described below.
68
 */
69
struct protosw {
70
        short   pr_type;                /* socket type used for */
71
        struct  domain *pr_domain;      /* domain protocol a member of */
72
        short   pr_protocol;            /* protocol number */
73
        short   pr_flags;               /* see below */
74
/* protocol-protocol hooks */
75
        void    (*pr_input) __P((struct mbuf *, int len));
76
                                        /* input to protocol (from below) */
77
        int     (*pr_output)    __P((struct mbuf *m, struct socket *so));
78
                                        /* output to protocol (from above) */
79
        void    (*pr_ctlinput)__P((int, struct sockaddr *, void *));
80
                                        /* control input (from below) */
81
        int     (*pr_ctloutput)__P((int, struct socket *, int, int,
82
                                    struct mbuf **));
83
                                        /* control output (from above) */
84
/* user-protocol hook */
85
        int     (*pr_ousrreq) __P((struct socket *, int, struct mbuf *,
86
                                   struct mbuf *, struct mbuf *));
87
                                        /* user request: see list below */
88
/* utility hooks */
89
        void    (*pr_init) __P((void)); /* initialization hook */
90
        void    (*pr_fasttimo) __P((void));
91
                                        /* fast timeout (200ms) */
92
        void    (*pr_slowtimo) __P((void));
93
                                        /* slow timeout (500ms) */
94
        void    (*pr_drain) __P((void));
95
                                        /* flush any excess space possible */
96
        struct  pr_usrreqs *pr_usrreqs; /* supersedes pr_usrreq() */
97
};
98
 
99
#define PR_SLOWHZ       2               /* 2 slow timeouts per second */
100
#define PR_FASTHZ       5               /* 5 fast timeouts per second */
101
 
102
/*
103
 * Values for pr_flags.
104
 * PR_ADDR requires PR_ATOMIC;
105
 * PR_ADDR and PR_CONNREQUIRED are mutually exclusive.
106
 * PR_IMPLOPCL means that the protocol allows sendto without prior connect,
107
 *      and the protocol understands the MSG_EOF flag.  The first property is
108
 *      is only relevant if PR_CONNREQUIRED is set (otherwise sendto is allowed
109
 *      anyhow).
110
 */
111
#define PR_ATOMIC       0x01            /* exchange atomic messages only */
112
#define PR_ADDR         0x02            /* addresses given with messages */
113
#define PR_CONNREQUIRED 0x04            /* connection required by protocol */
114
#define PR_WANTRCVD     0x08            /* want PRU_RCVD calls */
115
#define PR_RIGHTS       0x10            /* passes capabilities */
116
#define PR_IMPLOPCL     0x20            /* implied open/close */
117
 
118
/*
119
 * The arguments to usrreq are:
120
 *      (*protosw[].pr_usrreq)(up, req, m, nam, opt);
121
 * where up is a (struct socket *), req is one of these requests,
122
 * m is a optional mbuf chain containing a message,
123
 * nam is an optional mbuf chain containing an address,
124
 * and opt is a pointer to a socketopt structure or nil.
125
 * The protocol is responsible for disposal of the mbuf chain m,
126
 * the caller is responsible for any space held by nam and opt.
127
 * A non-zero return from usrreq gives an
128
 * UNIX error number which should be passed to higher level software.
129
 */
130
#define PRU_ATTACH              0        /* attach protocol to up */
131
#define PRU_DETACH              1       /* detach protocol from up */
132
#define PRU_BIND                2       /* bind socket to address */
133
#define PRU_LISTEN              3       /* listen for connection */
134
#define PRU_CONNECT             4       /* establish connection to peer */
135
#define PRU_ACCEPT              5       /* accept connection from peer */
136
#define PRU_DISCONNECT          6       /* disconnect from peer */
137
#define PRU_SHUTDOWN            7       /* won't send any more data */
138
#define PRU_RCVD                8       /* have taken data; more room now */
139
#define PRU_SEND                9       /* send this data */
140
#define PRU_ABORT               10      /* abort (fast DISCONNECT, DETATCH) */
141
#define PRU_CONTROL             11      /* control operations on protocol */
142
#define PRU_SENSE               12      /* return status into m */
143
#define PRU_RCVOOB              13      /* retrieve out of band data */
144
#define PRU_SENDOOB             14      /* send out of band data */
145
#define PRU_SOCKADDR            15      /* fetch socket's address */
146
#define PRU_PEERADDR            16      /* fetch peer's address */
147
#define PRU_CONNECT2            17      /* connect two sockets */
148
/* begin for protocols internal use */
149
#define PRU_FASTTIMO            18      /* 200ms timeout */
150
#define PRU_SLOWTIMO            19      /* 500ms timeout */
151
#define PRU_PROTORCV            20      /* receive from below */
152
#define PRU_PROTOSEND           21      /* send to below */
153
/* end for protocol's internal use */
154
#define PRU_SEND_EOF            22      /* send and close */
155
#define PRU_NREQ                22
156
 
157
#ifdef PRUREQUESTS
158
char *prurequests[] = {
159
        "ATTACH",       "DETACH",       "BIND",         "LISTEN",
160
        "CONNECT",      "ACCEPT",       "DISCONNECT",   "SHUTDOWN",
161
        "RCVD",         "SEND",         "ABORT",        "CONTROL",
162
        "SENSE",        "RCVOOB",       "SENDOOB",      "SOCKADDR",
163
        "PEERADDR",     "CONNECT2",     "FASTTIMO",     "SLOWTIMO",
164
        "PROTORCV",     "PROTOSEND",
165
        "SEND_EOF",
166
};
167
#endif
168
 
169
#ifdef  KERNEL                  /* users shouldn't see this decl */
170
struct stat;
171
struct ifnet;
172
 
173
/*
174
 * If the ordering here looks odd, that's because it's alphabetical.
175
 */
176
struct pr_usrreqs {
177
        int     (*pru_abort) __P((struct socket *so));
178
        int     (*pru_accept) __P((struct socket *so, struct mbuf *nam));
179
        int     (*pru_attach) __P((struct socket *so, int proto));
180
        int     (*pru_bind) __P((struct socket *so, struct mbuf *nam));
181
        int     (*pru_connect) __P((struct socket *so, struct mbuf *nam));
182
        int     (*pru_connect2) __P((struct socket *so1, struct socket *so2));
183
        int     (*pru_control) __P((struct socket *so, int cmd, caddr_t data,
184
                                    struct ifnet *ifp));
185
        int     (*pru_detach) __P((struct socket *so));
186
        int     (*pru_disconnect) __P((struct socket *so));
187
        int     (*pru_listen) __P((struct socket *so));
188
        int     (*pru_peeraddr) __P((struct socket *so, struct mbuf *nam));
189
        int     (*pru_rcvd) __P((struct socket *so, int flags));
190
        int     (*pru_rcvoob) __P((struct socket *so, struct mbuf *m,
191
                                   int flags));
192
        /*
193
         * The `m' parameter here is almost certainly going to become a
194
         * `struct uio' at some point in the future.  Similar changes
195
         * will probably happen for the receive entry points.
196
         */
197
        int     (*pru_send) __P((struct socket *so, int flags, struct mbuf *m,
198
                              struct mbuf *addr, struct mbuf *control));
199
#define PRUS_OOB        0x1
200
#define PRUS_EOF        0x2
201
        int     (*pru_sense) __P((struct socket *so, struct stat *sb));
202
        int     (*pru_shutdown) __P((struct socket *so));
203
        int     (*pru_sockaddr) __P((struct socket *so, struct mbuf *nam));
204
};
205
 
206
int     pru_accept_notsupp __P((struct socket *so, struct mbuf *nam));
207
int     pru_connect2_notsupp __P((struct socket *so1, struct socket *so2));
208
int     pru_control_notsupp __P((struct socket *so, int cmd, caddr_t data,
209
                                 struct ifnet *ifp));
210
int     pru_listen_notsupp __P((struct socket *so));
211
int     pru_rcvd_notsupp __P((struct socket *so, int flags));
212
int     pru_rcvoob_notsupp __P((struct socket *so, struct mbuf *m, int flags));
213
int     pru_sense_null __P((struct socket *so, struct stat *sb));
214
 
215
#define PRU_OLDSTYLE
216
 
217
#ifdef PRU_OLDSTYLE
218
/*
219
 * Protocols which don't yet implement pr_usrreqs can point it to this
220
 * structure, which will call the old pr_usrreq() entry point with the
221
 * appropriate arguments.
222
 */
223
extern  struct pr_usrreqs pru_oldstyle;
224
#endif /* PRU_OLDSTYLE */
225
 
226
#endif /* KERNEL */
227
 
228
/*
229
 * The arguments to the ctlinput routine are
230
 *      (*protosw[].pr_ctlinput)(cmd, sa, arg);
231
 * where cmd is one of the commands below, sa is a pointer to a sockaddr,
232
 * and arg is a `void *' argument used within a protocol family.
233
 */
234
#define PRC_IFDOWN              0        /* interface transition */
235
#define PRC_ROUTEDEAD           1       /* select new route if possible ??? */
236
#define PRC_QUENCH2             3       /* DEC congestion bit says slow down */
237
#define PRC_QUENCH              4       /* some one said to slow down */
238
#define PRC_MSGSIZE             5       /* message size forced drop */
239
#define PRC_HOSTDEAD            6       /* host appears to be down */
240
#define PRC_HOSTUNREACH         7       /* deprecated (use PRC_UNREACH_HOST) */
241
#define PRC_UNREACH_NET         8       /* no route to network */
242
#define PRC_UNREACH_HOST        9       /* no route to host */
243
#define PRC_UNREACH_PROTOCOL    10      /* dst says bad protocol */
244
#define PRC_UNREACH_PORT        11      /* bad port # */
245
/* was  PRC_UNREACH_NEEDFRAG    12         (use PRC_MSGSIZE) */
246
#define PRC_UNREACH_SRCFAIL     13      /* source route failed */
247
#define PRC_REDIRECT_NET        14      /* net routing redirect */
248
#define PRC_REDIRECT_HOST       15      /* host routing redirect */
249
#define PRC_REDIRECT_TOSNET     16      /* redirect for type of service & net */
250
#define PRC_REDIRECT_TOSHOST    17      /* redirect for tos & host */
251
#define PRC_TIMXCEED_INTRANS    18      /* packet lifetime expired in transit */
252
#define PRC_TIMXCEED_REASS      19      /* lifetime expired on reass q */
253
#define PRC_PARAMPROB           20      /* header incorrect */
254
 
255
#define PRC_NCMDS               21
256
 
257
#define PRC_IS_REDIRECT(cmd)    \
258
        ((cmd) >= PRC_REDIRECT_NET && (cmd) <= PRC_REDIRECT_TOSHOST)
259
 
260
#ifdef PRCREQUESTS
261
char    *prcrequests[] = {
262
        "IFDOWN", "ROUTEDEAD", "#2", "DEC-BIT-QUENCH2",
263
        "QUENCH", "MSGSIZE", "HOSTDEAD", "#7",
264
        "NET-UNREACH", "HOST-UNREACH", "PROTO-UNREACH", "PORT-UNREACH",
265
        "#12", "SRCFAIL-UNREACH", "NET-REDIRECT", "HOST-REDIRECT",
266
        "TOSNET-REDIRECT", "TOSHOST-REDIRECT", "TX-INTRANS", "TX-REASS",
267
        "PARAMPROB"
268
};
269
#endif
270
 
271
/*
272
 * The arguments to ctloutput are:
273
 *      (*protosw[].pr_ctloutput)(req, so, level, optname, optval);
274
 * req is one of the actions listed below, so is a (struct socket *),
275
 * level is an indication of which protocol layer the option is intended.
276
 * optname is a protocol dependent socket option request,
277
 * optval is a pointer to a mbuf-chain pointer, for value-return results.
278
 * The protocol is responsible for disposal of the mbuf chain *optval
279
 * if supplied,
280
 * the caller is responsible for any space held by *optval, when returned.
281
 * A non-zero return from usrreq gives an
282
 * UNIX error number which should be passed to higher level software.
283
 */
284
#define PRCO_GETOPT     0
285
#define PRCO_SETOPT     1
286
 
287
#define PRCO_NCMDS      2
288
 
289
#ifdef PRCOREQUESTS
290
char    *prcorequests[] = {
291
        "GETOPT", "SETOPT",
292
};
293
#endif
294
 
295
#ifdef KERNEL
296
struct protosw *pffindproto __P((int family, int protocol, int type));
297
struct protosw *pffindtype __P((int family, int type));
298
#endif
299
 
300
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.