Annotation of 43BSDReno/share/doc/smm/15.net/7.t, revision 1.1.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: .\"    @(#)7.t 6.4 (Berkeley) 3/7/89
                     17: .\"
                     18: .nr H2 1
                     19: .br
                     20: .ne 30v
                     21: .\".ds RH "Socket/protocol interface
                     22: .NH
                     23: \s+2Socket/protocol interface\s0
                     24: .PP
                     25: The interface between the socket routines and the communication
                     26: protocols is through the \fIpr_usrreq\fP routine defined in the
                     27: protocol switch table.  The following requests to a protocol
                     28: module are possible:
                     29: .DS
                     30: ._d
                     31: #define        PRU_ATTACH      0       /* attach protocol */
                     32: #define        PRU_DETACH      1       /* detach protocol */
                     33: #define        PRU_BIND        2       /* bind socket to address */
                     34: #define        PRU_LISTEN      3       /* listen for connection */
                     35: #define        PRU_CONNECT     4       /* establish connection to peer */
                     36: #define        PRU_ACCEPT      5       /* accept connection from peer */
                     37: #define        PRU_DISCONNECT  6       /* disconnect from peer */
                     38: #define        PRU_SHUTDOWN    7       /* won't send any more data */
                     39: #define        PRU_RCVD        8       /* have taken data; more room now */
                     40: #define        PRU_SEND        9       /* send this data */
                     41: #define        PRU_ABORT       10      /* abort (fast DISCONNECT, DETATCH) */
                     42: #define        PRU_CONTROL     11      /* control operations on protocol */
                     43: #define        PRU_SENSE       12      /* return status into m */
                     44: #define        PRU_RCVOOB      13      /* retrieve out of band data */
                     45: #define        PRU_SENDOOB     14      /* send out of band data */
                     46: #define        PRU_SOCKADDR    15      /* fetch socket's address */
                     47: #define        PRU_PEERADDR    16      /* fetch peer's address */
                     48: #define        PRU_CONNECT2    17      /* connect two sockets */
                     49: /* begin for protocols internal use */
                     50: #define        PRU_FASTTIMO    18      /* 200ms timeout */
                     51: #define        PRU_SLOWTIMO    19      /* 500ms timeout */
                     52: #define        PRU_PROTORCV    20      /* receive from below */
                     53: #define        PRU_PROTOSEND   21      /* send to below */
                     54: .DE
                     55: A call on the user request routine is of the form,
                     56: .DS
                     57: ._f
                     58: error = (*protosw[].pr_usrreq)(so, req, m, addr, rights);
                     59: int error; struct socket *so; int req; struct mbuf *m, *addr, *rights;
                     60: .DE
                     61: The mbuf data chain \fIm\fP is supplied for output operations
                     62: and for certain other operations where it is to receive a result.
                     63: The address \fIaddr\fP is supplied for address-oriented requests
                     64: such as PRU_BIND and PRU_CONNECT.
                     65: The \fIrights\fP parameter is an optional pointer to an mbuf
                     66: chain containing user-specified capabilities (see the \fIsendmsg\fP
                     67: and \fIrecvmsg\fP system calls).  The protocol is responsible for
                     68: disposal of the data mbuf chains on output operations.
                     69: A non-zero return value gives a
                     70: UNIX error number which should be passed to higher level software.
                     71: The following paragraphs describe each
                     72: of the requests possible.
                     73: .IP PRU_ATTACH
                     74: .br
                     75: When a protocol is bound to a socket (with the \fIsocket\fP
                     76: system call) the protocol module is called with this
                     77: request.  It is the responsibility of the protocol module to
                     78: allocate any resources necessary.
                     79: The ``attach'' request
                     80: will always precede any of the other requests, and should not
                     81: occur more than once.
                     82: .IP PRU_DETACH
                     83: .br
                     84: This is the antithesis of the attach request, and is used
                     85: at the time a socket is deleted.  The protocol module may
                     86: deallocate any resources assigned to the socket.
                     87: .IP PRU_BIND
                     88: .br
                     89: When a socket is initially created it has no address bound
                     90: to it.  This request indicates that an address should be bound to
                     91: an existing socket.  The protocol module must verify that the
                     92: requested address is valid and available for use.
                     93: .IP PRU_LISTEN
                     94: .br
                     95: The ``listen'' request indicates the user wishes to listen
                     96: for incoming connection requests on the associated socket.
                     97: The protocol module should perform any state changes needed
                     98: to carry out this request (if possible).  A ``listen'' request
                     99: always precedes a request to accept a connection.
                    100: .IP PRU_CONNECT
                    101: .br
                    102: The ``connect'' request indicates the user wants to a establish
                    103: an association.  The \fIaddr\fP parameter supplied describes
                    104: the peer to be connected to.  The effect of a connect request
                    105: may vary depending on the protocol.  Virtual circuit protocols,
                    106: such as TCP [Postel81b], use this request to initiate establishment of a
                    107: TCP connection.  Datagram protocols, such as UDP [Postel80], simply
                    108: record the peer's address in a private data structure and use
                    109: it to tag all outgoing packets.  There are no restrictions
                    110: on how many times a connect request may be used after an attach.
                    111: If a protocol supports the notion of \fImulti-casting\fP, it
                    112: is possible to use multiple connects to establish a multi-cast
                    113: group.  Alternatively, an association may be broken by a
                    114: PRU_DISCONNECT request, and a new association created with a
                    115: subsequent connect request; all without destroying and creating
                    116: a new socket.
                    117: .IP PRU_ACCEPT
                    118: .br
                    119: Following a successful PRU_LISTEN request and the arrival
                    120: of one or more connections, this request is made to
                    121: indicate the user
                    122: has accepted the first connection on the queue of
                    123: pending connections.  The protocol module should fill
                    124: in the supplied address buffer with the address of the
                    125: connected party.
                    126: .IP PRU_DISCONNECT
                    127: .br
                    128: Eliminate an association created with a PRU_CONNECT request.
                    129: .IP PRU_SHUTDOWN
                    130: .br
                    131: This call is used to indicate no more data will be sent and/or
                    132: received (the \fIaddr\fP parameter indicates the direction of
                    133: the shutdown, as encoded in the \fIsoshutdown\fP system call).
                    134: The protocol may, at its discretion, deallocate any data
                    135: structures related to the shutdown and/or notify a connected peer
                    136: of the shutdown.
                    137: .IP PRU_RCVD
                    138: .br
                    139: This request is made only if the protocol entry in the protocol
                    140: switch table includes the PR_WANTRCVD flag.
                    141: When a user removes data from the receive queue this request
                    142: will be sent to the protocol module.  It may be used to trigger
                    143: acknowledgements, refresh windowing information, initiate
                    144: data transfer, etc.
                    145: .IP PRU_SEND
                    146: .br
                    147: Each user request to send data is translated into one or more
                    148: PRU_SEND requests (a protocol may indicate that a single user
                    149: send request must be translated into a single PRU_SEND request by
                    150: specifying the PR_ATOMIC flag in its protocol description).
                    151: The data to be sent is presented to the protocol as a list of
                    152: mbufs and an address is, optionally, supplied in the \fIaddr\fP
                    153: parameter.  The protocol is responsible for preserving the data
                    154: in the socket's send queue if it is not able to send it immediately,
                    155: or if it may need it at some later time (e.g. for retransmission).
                    156: .IP PRU_ABORT
                    157: .br
                    158: This request indicates an abnormal termination of service.  The
                    159: protocol should delete any existing association(s).
                    160: .IP PRU_CONTROL
                    161: .br
                    162: The ``control'' request is generated when a user performs a
                    163: UNIX \fIioctl\fP system call on a socket (and the ioctl is not
                    164: intercepted by the socket routines).  It allows protocol-specific
                    165: operations to be provided outside the scope of the common socket
                    166: interface.  The \fIaddr\fP parameter contains a pointer to a static
                    167: kernel data area where relevant information may be obtained or returned.
                    168: The \fIm\fP parameter contains the actual \fIioctl\fP request code
                    169: (note the non-standard calling convention).
                    170: The \fIrights\fP parameter contains a pointer to an \fIifnet\fP structure
                    171: if the \fIioctl\fP operation pertains to a particular network interface.
                    172: .IP PRU_SENSE
                    173: .br
                    174: The ``sense'' request is generated when the user makes an \fIfstat\fP
                    175: system call on a socket; it requests status of the associated socket. 
                    176: This currently returns a standard \fIstat\fP structure.
                    177: It typically contains only the
                    178: optimal transfer size for the connection (based on buffer size,
                    179: windowing information and maximum packet size).
                    180: The \fIm\fP parameter contains a pointer
                    181: to a static kernel data area where the status buffer should be placed.
                    182: .IP PRU_RCVOOB
                    183: .br
                    184: Any ``out-of-band'' data presently available is to be returned.  An
                    185: mbuf is passed to the protocol module, and the protocol
                    186: should either place
                    187: data in the mbuf or attach new mbufs to the one supplied if there is
                    188: insufficient space in the single mbuf.
                    189: An error may be returned if out-of-band data is not (yet) available
                    190: or has already been consumed.
                    191: The \fIaddr\fP parameter contains any options such as MSG_PEEK
                    192: to examine data without consuming it.
                    193: .IP PRU_SENDOOB
                    194: .br
                    195: Like PRU_SEND, but for out-of-band data.
                    196: .IP PRU_SOCKADDR
                    197: .br
                    198: The local address of the socket is returned, if any is currently
                    199: bound to it.  The address (with protocol specific format) is returned
                    200: in the \fIaddr\fP parameter.
                    201: .IP PRU_PEERADDR
                    202: .br
                    203: The address of the peer to which the socket is connected is returned.
                    204: The socket must be in a SS_ISCONNECTED state for this request to
                    205: be made to the protocol.  The address format (protocol specific) is
                    206: returned in the \fIaddr\fP parameter.
                    207: .IP PRU_CONNECT2
                    208: .br
                    209: The protocol module is supplied two sockets and requested to
                    210: establish a connection between the two without binding any
                    211: addresses, if possible.  This call is used in implementing
                    212: the
                    213: .IR socketpair (2)
                    214: system call.
                    215: .PP
                    216: The following requests are used internally by the protocol modules
                    217: and are never generated by the socket routines.  In certain instances,
                    218: they are handed to the \fIpr_usrreq\fP routine solely for convenience
                    219: in tracing a protocol's operation (e.g. PRU_SLOWTIMO).
                    220: .IP PRU_FASTTIMO
                    221: .br
                    222: A ``fast timeout'' has occurred.  This request is made when a timeout
                    223: occurs in the protocol's \fIpr_fastimo\fP routine.  The \fIaddr\fP
                    224: parameter indicates which timer expired.
                    225: .IP PRU_SLOWTIMO
                    226: .br
                    227: A ``slow timeout'' has occurred.  This request is made when a timeout
                    228: occurs in the protocol's \fIpr_slowtimo\fP routine.  The \fIaddr\fP
                    229: parameter indicates which timer expired.
                    230: .IP PRU_PROTORCV
                    231: .br
                    232: This request is used in the protocol-protocol interface, not by the
                    233: routines.  It requests reception of data destined for the protocol and
                    234: not the user.  No protocols currently use this facility.
                    235: .IP PRU_PROTOSEND
                    236: .br
                    237: This request allows a protocol to send data destined for another
                    238: protocol module, not a user.  The details of how data is marked
                    239: ``addressed to protocol'' instead of ``addressed to user'' are
                    240: left to the protocol modules.  No protocols currently use this facility.

unix.superglobalmegacorp.com

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