Annotation of 43BSDReno/share/doc/smm/15.net/8.t, revision 1.1

1.1     ! root        1: .\" Copyright (c) 1983, 1986 The Regents of the University of California.
        !             2: .\" All rights reserved.
        !             3: .\"
        !             4: .\" Redistribution and use in source and binary forms are permitted
        !             5: .\" provided that the above copyright notice and this paragraph are
        !             6: .\" duplicated in all such forms and that any documentation,
        !             7: .\" advertising materials, and other materials related to such
        !             8: .\" distribution and use acknowledge that the software was developed
        !             9: .\" by the University of California, Berkeley.  The name of the
        !            10: .\" University may not be used to endorse or promote products derived
        !            11: .\" from this software without specific prior written permission.
        !            12: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
        !            13: .\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
        !            14: .\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
        !            15: .\"
        !            16: .\"    @(#)8.t 6.5 (Berkeley) 3/7/89
        !            17: .\"
        !            18: .nr H2 1
        !            19: .\".ds RH "Protocol/protocol interface
        !            20: .br
        !            21: .ne 2i
        !            22: .NH
        !            23: \s+2Protocol/protocol interface\s0
        !            24: .PP
        !            25: The interface between protocol modules is through the \fIpr_usrreq\fP,
        !            26: \fIpr_input\fP, \fIpr_output\fP, \fIpr_ctlinput\fP, and
        !            27: \fIpr_ctloutput\fP routines.  The calling conventions for all
        !            28: but the \fIpr_usrreq\fP routine are expected to be specific to
        !            29: the protocol
        !            30: modules and are not guaranteed to be consistent across protocol
        !            31: families.  We
        !            32: will examine the conventions used for some of the Internet
        !            33: protocols in this section as an example.
        !            34: .NH 2
        !            35: pr_output
        !            36: .PP
        !            37: The Internet protocol UDP uses the convention,
        !            38: .DS
        !            39: error = udp_output(inp, m);
        !            40: int error; struct inpcb *inp; struct mbuf *m;
        !            41: .DE
        !            42: where the \fIinp\fP, ``\fIin\fP\^ternet
        !            43: \fIp\fP\^rotocol \fIc\fP\^ontrol \fIb\fP\^lock'',
        !            44: passed between modules conveys per connection state information, and
        !            45: the mbuf chain contains the data to be sent.  UDP
        !            46: performs consistency checks, appends its header, calculates a
        !            47: checksum, etc. before passing the packet on.
        !            48: UDP is based on the Internet Protocol, IP [Postel81a], as its transport.
        !            49: UDP passes a packet to the IP module for output as follows:
        !            50: .DS
        !            51: error = ip_output(m, opt, ro, flags);
        !            52: int error; struct mbuf *m, *opt; struct route *ro; int flags;
        !            53: .DE
        !            54: .PP
        !            55: The call to IP's output routine is more complicated than that for
        !            56: UDP, as befits the additional work the IP module must do.
        !            57: The \fIm\fP parameter is the data to be sent, and the \fIopt\fP
        !            58: parameter is an optional list of IP options which should
        !            59: be placed in the IP packet header.  The \fIro\fP parameter is
        !            60: is used in making routing decisions (and passing them back to the
        !            61: caller for use in subsequent calls).  The
        !            62: final parameter, \fIflags\fP contains flags indicating whether the
        !            63: user is allowed to transmit a broadcast packet
        !            64: and if routing is to be performed.  The broadcast flag may
        !            65: be inconsequential if the underlying hardware does not support the
        !            66: notion of broadcasting.
        !            67: .PP
        !            68: All output routines return 0 on success and a UNIX error number
        !            69: if a failure occurred which could be detected immediately
        !            70: (no buffer space available, no route to destination, etc.).
        !            71: .NH 2
        !            72: pr_input
        !            73: .PP
        !            74: Both UDP and TCP use the following calling convention,
        !            75: .DS
        !            76: (void) (*protosw[].pr_input)(m, ifp);
        !            77: struct mbuf *m; struct ifnet *ifp;
        !            78: .DE
        !            79: Each mbuf list passed is a single packet to be processed by
        !            80: the protocol module.
        !            81: The interface from which the packet was received is passed as the second
        !            82: parameter.
        !            83: .PP
        !            84: The IP input routine is a VAX software interrupt level routine,
        !            85: and so is not called with any parameters.  It instead communicates
        !            86: with network interfaces through a queue, \fIipintrq\fP, which is
        !            87: identical in structure to the queues used by the network interfaces
        !            88: for storing packets awaiting transmission.
        !            89: The software interrupt is enabled by the network interfaces
        !            90: when they place input data on the input queue.
        !            91: .NH 2
        !            92: pr_ctlinput
        !            93: .PP
        !            94: This routine is used to convey ``control'' information to a
        !            95: protocol module (i.e. information which might be passed to the
        !            96: user, but is not data).
        !            97: .PP
        !            98: The common calling convention for this routine is,
        !            99: .DS
        !           100: (void) (*protosw[].pr_ctlinput)(req, addr);
        !           101: int req; struct sockaddr *addr;
        !           102: .DE
        !           103: The \fIreq\fP parameter is one of the following,
        !           104: .DS
        !           105: .ta \w'#define  'u +\w'PRC_UNREACH_NEEDFRAG   'u +8n
        !           106: #define        PRC_IFDOWN      0       /* interface transition */
        !           107: #define        PRC_ROUTEDEAD   1       /* select new route if possible */
        !           108: #define        PRC_QUENCH      4       /* some said to slow down */
        !           109: #define        PRC_MSGSIZE     5       /* message size forced drop */
        !           110: #define        PRC_HOSTDEAD    6       /* normally from IMP */
        !           111: #define        PRC_HOSTUNREACH 7       /* ditto */
        !           112: #define        PRC_UNREACH_NET 8       /* no route to network */
        !           113: #define        PRC_UNREACH_HOST        9       /* no route to host */
        !           114: #define        PRC_UNREACH_PROTOCOL    10      /* dst says bad protocol */
        !           115: #define        PRC_UNREACH_PORT        11      /* bad port # */
        !           116: #define        PRC_UNREACH_NEEDFRAG    12      /* IP_DF caused drop */
        !           117: #define        PRC_UNREACH_SRCFAIL     13      /* source route failed */
        !           118: #define        PRC_REDIRECT_NET        14      /* net routing redirect */
        !           119: #define        PRC_REDIRECT_HOST       15      /* host routing redirect */
        !           120: #define        PRC_REDIRECT_TOSNET     14      /* redirect for type of service & net */
        !           121: #define        PRC_REDIRECT_TOSHOST    15      /* redirect for tos & host */
        !           122: #define        PRC_TIMXCEED_INTRANS    18      /* packet lifetime expired in transit */
        !           123: #define        PRC_TIMXCEED_REASS      19      /* lifetime expired on reass q */
        !           124: #define        PRC_PARAMPROB   20      /* header incorrect */
        !           125: .DE
        !           126: while the \fIaddr\fP parameter is the address to which the condition applies.
        !           127: Many of the requests have obviously been
        !           128: derived from ICMP (the Internet Control Message Protocol [Postel81c]),
        !           129: and from error messages defined in the 1822 host/IMP convention
        !           130: [BBN78].  Mapping tables exist to convert
        !           131: control requests to UNIX error codes which are delivered
        !           132: to a user.
        !           133: .NH 2
        !           134: pr_ctloutput
        !           135: .PP
        !           136: This is the routine that implements per-socket options at the protocol
        !           137: level for \fIgetsockopt\fP and \fIsetsockopt\fP.
        !           138: The calling convention is,
        !           139: .DS
        !           140: error = (*protosw[].pr_ctloutput)(op, so, level, optname, mp);
        !           141: int op; struct socket *so; int level, optname; struct mbuf **mp;
        !           142: .DE
        !           143: where \fIop\fP is one of PRCO_SETOPT or PRCO_GETOPT,
        !           144: \fIso\fP is the socket from whence the call originated,
        !           145: and \fIlevel\fP and \fIoptname\fP are the protocol level and option name
        !           146: supplied by the user.
        !           147: The results of a PRCO_GETOPT call are returned in an mbuf whose address
        !           148: is placed in \fImp\fP before return.
        !           149: On a PRCO_SETOPT call, \fImp\fP contains the address of an mbuf
        !           150: containing the option data; the mbuf should be freed before return.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.