BSD 4_2 development
[unix-history] / usr / doc / net / 8.t
CommitLineData
36ad06bf
C
1.nr H2 1
2.ds RH "Protocol/protocol interface
3.NH
4\s+2Protocol/protocol interface\s0
5.PP
6The interface between protocol modules is through the \fIpr_usrreq\fP,
7\fIpr_input\fP, \fIpr_output\fP, \fIpr_ctlinput\fP, and
8\fIpr_ctloutput\fP routines. The calling conventions for all
9but the \fIpr_usrreq\fP routine are expected to be specific to
10the protocol
11modules and are not guaranteed to be consistent across protocol
12families. We
13will examine the conventions used for some of the Internet
14protocols in this section as an example.
15.NH 2
16pr_output
17.PP
18The Internet protocol UDP uses the convention,
19.DS
20error = udp_output(inp, m);
21int error; struct inpcb *inp; struct mbuf *m;
22.DE
23where the \fIinp\fP, ``\fIin\fPternet
24\fIp\fProtocol \fIc\fPontrol \fIb\fPlock'',
25passed between modules conveys per connection state information, and
26the mbuf chain contains the data to be sent. UDP
27performs consistency checks, appends its header, calculates a
28checksum, etc. before passing the packet on to the IP module:
29.DS
30error = ip_output(m, opt, ro, allowbroadcast);
31int error; struct mbuf *m, *opt; struct route *ro; int allowbroadcast;
32.DE
33.PP
34The call to IP's output routine is more complicated than that for
35UDP, as befits the additional work the IP module must do.
36The \fIm\fP parameter is the data to be sent, and the \fIopt\fP
37parameter is an optional list of IP options which should
38be placed in the IP packet header. The \fIro\fP parameter is
39is used in making routing decisions (and passing them back to the
40caller). The
41final parameter, \fIallowbroadcast\fP is a flag indicating if the
42user is allowed to transmit a broadcast packet. This may
43be inconsequential if the underlying hardware does not support the
44notion of broadcasting.
45.PP
46All output routines return 0 on success and a UNIX error number
47if a failure occured which could be immediately detected
48(no buffer space available, no route to destination, etc.).
49.NH 2
50pr_input
51.PP
52Both UDP and TCP use the following calling convention,
53.DS
54(void) (*protosw[].pr_input)(m);
55struct mbuf *m;
56.DE
57Each mbuf list passed is a single packet to be processed by
58the protocol module.
59.PP
60The IP input routine is a VAX software interrupt level routine,
61and so is not called with any parameters. It instead communicates
62with network interfaces through a queue, \fIipintrq\fP, which is
63identical in structure to the queues used by the network interfaces
64for storing packets awaiting transmission.
65.NH 2
66pr_ctlinput
67.PP
68This routine is used to convey ``control'' information to a
69protocol module (i.e. information which might be passed to the
70user, but is not data). This routine, and the \fIpr_ctloutput\fP
71routine, have not been extensively developed, and thus suffer
72from a ``clumsiness'' that can only be improved as more demands
73are placed on it.
74.PP
75The common calling convention for this routine is,
76.DS
77(void) (*protosw[].pr_ctlinput)(req, info);
78int req; caddr_t info;
79.DE
80The \fIreq\fP parameter is one of the following,
81.DS
82.if t .ta .6i 2.6i 3.1i
83.if n .ta .84i 3.1i 3.80i
84#define PRC_IFDOWN 0 /* interface transition */
85#define PRC_ROUTEDEAD 1 /* select new route if possible */
86#define PRC_QUENCH 4 /* some said to slow down */
87#define PRC_HOSTDEAD 6 /* normally from IMP */
88#define PRC_HOSTUNREACH 7 /* ditto */
89#define PRC_UNREACH_NET 8 /* no route to network */
90#define PRC_UNREACH_HOST 9 /* no route to host */
91#define PRC_UNREACH_PROTOCOL 10 /* dst says bad protocol */
92#define PRC_UNREACH_PORT 11 /* bad port # */
93#define PRC_MSGSIZE 12 /* message size forced drop */
94#define PRC_REDIRECT_NET 13 /* net routing redirect */
95#define PRC_REDIRECT_HOST 14 /* host routing redirect */
96#define PRC_TIMXCEED_INTRANS 17 /* packet lifetime expired in transit */
97#define PRC_TIMXCEED_REASS 18 /* lifetime expired on reass q */
98#define PRC_PARAMPROB 19 /* header incorrect */
99.DE
100while the \fIinfo\fP parameter is a ``catchall'' value which
101is request dependent. Many of the requests have obviously been
102derived from ICMP (the Internet Control Message Protocol),
103and from error messages defined in the 1822 host/IMP convention
104[BBN78]. Mapping tables exist to convert
105control requests to UNIX error codes which are delivered
106to a user.
107.NH 2
108pr_ctloutput
109.PP
110This routine is not currently used by any protocol modules.
111.ds RH "Protocol/network-interface
112.bp