Annotation of 43BSDReno/share/doc/smm/15.net/9.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: .\"    @(#)9.t 6.4 (Berkeley) 3/7/89
        !            17: .\"
        !            18: .nr H2 1
        !            19: .\".ds RH "Protocol/network-interface
        !            20: .br
        !            21: .ne 2i
        !            22: .NH
        !            23: \s+2Protocol/network-interface interface\s0
        !            24: .PP
        !            25: The lowest layer in the set of protocols which comprise a
        !            26: protocol family must interface itself to one or more network
        !            27: interfaces in order to transmit and receive
        !            28: packets.  It is assumed that
        !            29: any routing decisions have been made before handing a packet
        !            30: to a network interface, in fact this is absolutely necessary
        !            31: in order to locate any interface at all (unless, of course,
        !            32: one uses a single ``hardwired'' interface).  There are two
        !            33: cases with which to be concerned, transmission of a packet
        !            34: and receipt of a packet; each will be considered separately.
        !            35: .NH 2
        !            36: Packet transmission
        !            37: .PP
        !            38: Assuming a protocol has a handle on an interface, \fIifp\fP,
        !            39: a (struct ifnet\ *),
        !            40: it transmits a fully formatted packet with the following call,
        !            41: .DS
        !            42: error = (*ifp->if_output)(ifp, m, dst)
        !            43: int error; struct ifnet *ifp; struct mbuf *m; struct sockaddr *dst;
        !            44: .DE
        !            45: The output routine for the network interface transmits the packet
        !            46: \fIm\fP to the \fIdst\fP address, or returns an error indication
        !            47: (a UNIX error number).  In reality transmission may
        !            48: not be immediate or successful; normally the output
        !            49: routine simply queues the packet on its send queue and primes
        !            50: an interrupt driven routine to actually transmit the packet.
        !            51: For unreliable media, such as the Ethernet, ``successful''
        !            52: transmission simply means that the packet has been placed on the cable
        !            53: without a collision.  On the other hand, an 1822 interface guarantees
        !            54: proper delivery or an error indication for each message transmitted.
        !            55: The model employed in the networking system attaches no promises
        !            56: of delivery to the packets handed to a network interface, and thus
        !            57: corresponds more closely to the Ethernet.  Errors returned by the
        !            58: output routine are only those that can be detected immediately,
        !            59: and are normally trivial in nature (no buffer space, 
        !            60: address format not handled, etc.).
        !            61: No indication is received if errors are detected after the call has returned.
        !            62: .NH 2
        !            63: Packet reception
        !            64: .PP
        !            65: Each protocol family must have one or more ``lowest level'' protocols.
        !            66: These protocols deal with internetwork addressing and are responsible
        !            67: for the delivery of incoming packets to the proper protocol processing
        !            68: modules.  In the PUP model [Boggs78] these protocols are termed Level
        !            69: 1 protocols,
        !            70: in the ISO model, network layer protocols.  In this system each such
        !            71: protocol module has an input packet queue assigned to it.  Incoming
        !            72: packets received by a network interface are queued for the protocol
        !            73: module, and a VAX software interrupt is posted to initiate processing.  
        !            74: .PP
        !            75: Three macros are available for queuing and dequeuing packets:
        !            76: .IP "IF_ENQUEUE(ifq, m)"
        !            77: .br
        !            78: This places the packet \fIm\fP at the tail of the queue \fIifq\fP.
        !            79: .IP "IF_DEQUEUE(ifq, m)"
        !            80: .br
        !            81: This places a pointer to the packet at the head of queue \fIifq\fP 
        !            82: in \fIm\fP
        !            83: and removes the packet from the queue.
        !            84: A zero value will be returned in \fIm\fP if the queue is empty.
        !            85: .IP "IF_DEQUEUEIF(ifq, m, ifp)"
        !            86: .br
        !            87: Like IF_DEQUEUE, this removes the next packet from the head of a queue
        !            88: and returns it in \fIm\fP.
        !            89: A pointer to the interface on which the packet was received
        !            90: is placed in \fIifp\fP, a (struct ifnet\ *).
        !            91: .IP "IF_PREPEND(ifq, m)"
        !            92: .br
        !            93: This places the packet \fIm\fP at the head of the queue \fIifq\fP.
        !            94: .PP
        !            95: Each queue has a maximum length associated with it as a simple form
        !            96: of congestion control.  The macro IF_QFULL(ifq) returns 1 if the queue
        !            97: is filled, in which case the macro IF_DROP(ifq) should be used to
        !            98: increment the count of the number of packets dropped, and the offending
        !            99: packet is dropped.  For example, the following code fragment is commonly
        !           100: found in a network interface's input routine,
        !           101: .DS 
        !           102: ._f
        !           103: if (IF_QFULL(inq)) {
        !           104:        IF_DROP(inq);
        !           105:        m_freem(m);
        !           106: } else
        !           107:        IF_ENQUEUE(inq, m);
        !           108: .DE

unix.superglobalmegacorp.com

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