Annotation of 43BSDReno/share/doc/smm/15.net/b.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: .\"    @(#)b.t 6.4 (Berkeley) 3/7/89
                     17: .\"
                     18: .nr H2 1
                     19: .\".ds RH "Raw sockets
                     20: .br
                     21: .ne 2i
                     22: .NH
                     23: \s+2Raw sockets\s0
                     24: .PP
                     25: A raw socket is an object which allows users direct access
                     26: to a lower-level protocol.  Raw sockets are intended for knowledgeable
                     27: processes which wish to take advantage of some protocol
                     28: feature not directly accessible through the normal interface, or 
                     29: for the development of new protocols built atop existing lower level
                     30: protocols.  For example, a new version of TCP might be developed at the
                     31: user level by utilizing a raw IP socket for delivery of packets.
                     32: The raw IP socket interface attempts to provide an identical interface
                     33: to the one a protocol would have if it were resident in the kernel.
                     34: .PP
                     35: The raw socket support is built around a generic raw socket interface,
                     36: (possibly) augmented by protocol-specific processing routines.
                     37: This section will describe the core of the raw socket interface.
                     38: .NH 2
                     39: Control blocks
                     40: .PP
                     41: Every raw socket has a protocol control block of the following form:
                     42: .DS
                     43: .ta \w'struct  'u +\w'caddr_t  'u +\w'sockproto rcb_proto;    'u 
                     44: struct rawcb {
                     45:        struct  rawcb *rcb_next;        /* doubly linked list */
                     46:        struct  rawcb *rcb_prev;
                     47:        struct  socket *rcb_socket;     /* back pointer to socket */
                     48:        struct  sockaddr rcb_faddr;     /* destination address */
                     49:        struct  sockaddr rcb_laddr;     /* socket's address */
                     50:        struct  sockproto rcb_proto;    /* protocol family, protocol */
                     51:        caddr_t rcb_pcb;                /* protocol specific stuff */
                     52:        struct  mbuf *rcb_options;      /* protocol specific options */
                     53:        struct  route rcb_route;        /* routing information */
                     54:        short   rcb_flags;
                     55: };
                     56: .DE
                     57: All the control blocks are kept on a doubly linked list for
                     58: performing lookups during packet dispatch.  Associations may
                     59: be recorded in the control block and used by the output routine
                     60: in preparing packets for transmission.
                     61: The \fIrcb_proto\fP structure contains the protocol family and protocol
                     62: number with which the raw socket is associated.
                     63: The protocol, family and addresses are
                     64: used to filter packets on input; this will be described in more
                     65: detail shortly.  If any protocol-specific information is required,
                     66: it may be attached to the control block using the \fIrcb_pcb\fP
                     67: field.
                     68: Protocol-specific options for transmission in outgoing packets
                     69: may be stored in \fIrcb_options\fP.
                     70: .PP
                     71: A raw socket interface is datagram oriented.  That is, each send
                     72: or receive on the socket requires a destination address.  This
                     73: address may be supplied by the user or stored in the control block
                     74: and automatically installed in the outgoing packet by the output
                     75: routine.  Since it is not possible to determine whether an address
                     76: is present or not in the control block, two flags, RAW_LADDR and
                     77: RAW_FADDR, indicate if a local and foreign address are present.
                     78: Routing is expected to be performed by the underlying protocol
                     79: if necessary.
                     80: .NH 2
                     81: Input processing
                     82: .PP
                     83: Input packets are ``assigned'' to raw sockets based on a simple
                     84: pattern matching scheme.  Each network interface or protocol
                     85: gives unassigned packets
                     86: to the raw input routine with the call:
                     87: .DS
                     88: raw_input(m, proto, src, dst)
                     89: struct mbuf *m; struct sockproto *proto, struct sockaddr *src, *dst;
                     90: .DE
                     91: The data packet then has a generic header prepended to it of the
                     92: form
                     93: .DS
                     94: ._f
                     95: struct raw_header {
                     96:        struct  sockproto raw_proto;
                     97:        struct  sockaddr raw_dst;
                     98:        struct  sockaddr raw_src;
                     99: };
                    100: .DE
                    101: and it is placed in a packet queue for the ``raw input protocol'' module.
                    102: Packets taken from this queue are copied into any raw sockets that
                    103: match the header according to the following rules,
                    104: .IP 1)
                    105: The protocol family of the socket and header agree.
                    106: .IP 2)
                    107: If the protocol number in the socket is non-zero, then it agrees
                    108: with that found in the packet header.
                    109: .IP 3)
                    110: If a local address is defined for the socket, the address format
                    111: of the local address is the same as the destination address's and
                    112: the two addresses agree bit for bit.
                    113: .IP 4)
                    114: The rules of 3) are applied to the socket's foreign address and the packet's
                    115: source address.
                    116: .LP
                    117: A basic assumption is that addresses present in the
                    118: control block and packet header (as constructed by the network
                    119: interface and any raw input protocol module) are in a canonical
                    120: form which may be ``block compared''.
                    121: .NH 2
                    122: Output processing
                    123: .PP
                    124: On output the raw \fIpr_usrreq\fP routine 
                    125: passes the packet and a pointer to the raw control block to the
                    126: raw protocol output routine for any processing required before
                    127: it is delivered to the appropriate network interface.  The
                    128: output routine is normally the only code required to implement
                    129: a raw socket interface.

unix.superglobalmegacorp.com

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