Annotation of linux/net/tcp/loopback.c, revision 1.1

1.1     ! root        1: /* loopback.c contains the loopback device functions. */
        !             2: /*
        !             3:     Copyright (C) 1992  Ross Biro
        !             4: 
        !             5:     This program is free software; you can redistribute it and/or modify
        !             6:     it under the terms of the GNU General Public License as published by
        !             7:     the Free Software Foundation; either version 2, or (at your option)
        !             8:     any later version.
        !             9: 
        !            10:     This program is distributed in the hope that it will be useful,
        !            11:     but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            12:     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            13:     GNU General Public License for more details.
        !            14: 
        !            15:     You should have received a copy of the GNU General Public License
        !            16:     along with this program; if not, write to the Free Software
        !            17:     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
        !            18: 
        !            19:     The Author may be reached as [email protected] or
        !            20:     C/O Department of Mathematics; Stanford University; Stanford, CA 94305
        !            21: */
        !            22: #include <linux/config.h>
        !            23: #include <linux/kernel.h>
        !            24: #include <linux/sched.h>
        !            25: #include <linux/fs.h>
        !            26: #include <linux/tty.h>
        !            27: #include <linux/types.h>
        !            28: #include <linux/ptrace.h>
        !            29: #include <asm/system.h>
        !            30: #include <asm/segment.h>
        !            31: #include <asm/io.h>
        !            32: #include <asm/memory.h>
        !            33: #include <errno.h>
        !            34: #include <linux/fcntl.h>
        !            35: #include <netinet/in.h>
        !            36: 
        !            37: #include "dev.h"
        !            38: #include "eth.h"
        !            39: #include "timer.h"
        !            40: #include "ip.h"
        !            41: #include "tcp.h"
        !            42: #include "sock.h"
        !            43: #include "arp.h"
        !            44: 
        !            45: #include "../kern_sock.h" /* for PRINTK */
        !            46: 
        !            47: 
        !            48: 
        !            49: static int
        !            50: loopback_xmit(struct sk_buff *skb, struct device *dev)
        !            51: {
        !            52:   static int inuse=0;
        !            53:   struct enet_header *eth;
        !            54:   int i;
        !            55:   int done;
        !            56:   static unsigned char buff[2048];
        !            57:   unsigned char *tmp;
        !            58: 
        !            59:   PRINTK ("loopback_xmit (dev = %X)\n", dev);
        !            60:   cli();
        !            61:   if (inuse)
        !            62:     {
        !            63:        sti();
        !            64:        return (1);
        !            65:     }
        !            66:   inuse = 1;
        !            67:   sti();
        !            68:   tmp = NULL;
        !            69:   done = dev_rint ((unsigned char *)(skb+1), skb->len, 0, dev);
        !            70: 
        !            71:   if (skb->free)
        !            72:     free_skb (skb, FREE_WRITE);
        !            73: 
        !            74:   while (done != 1)
        !            75:         {
        !            76:            if (done != -1 && (i = dev_tint (buff,dev)) != 0)
        !            77:              {
        !            78:                 /* print out the buffer. */
        !            79:                 PRINTK ("ethernet xmit: \n");
        !            80:                 eth = (struct enet_header *)buff;
        !            81:                 print_eth (eth);
        !            82:                 tmp = buff;
        !            83:                 done = dev_rint (buff, i, 0, dev);
        !            84:                 if (done != -1) tmp = NULL;
        !            85:              }
        !            86:            else
        !            87:              {
        !            88:                 done = dev_rint (tmp, 0, 0, dev);
        !            89:              }
        !            90:            
        !            91:         }
        !            92:   inuse = 0;
        !            93:   return (0);
        !            94: }
        !            95: 
        !            96: void
        !            97: loopback_init(struct device *dev)
        !            98: {
        !            99:    printk ("Loopback device init\n");
        !           100:   /* initialize the rest of the device structure. */
        !           101:   dev->mtu = 2000; /* mtu */
        !           102:   dev->hard_start_xmit = loopback_xmit;
        !           103:   dev->open = NULL;
        !           104:   dev->hard_header = eth_hard_header;
        !           105:   dev->add_arp = NULL;
        !           106:   dev->hard_header_len = sizeof (struct enet_header);
        !           107:   dev->addr_len = ETHER_ADDR_LEN;
        !           108:   dev->type = ETHER_TYPE;
        !           109:   dev->queue_xmit = dev_queue_xmit;
        !           110:   dev->rebuild_header = eth_rebuild_header;
        !           111:   dev->type_trans = eth_type_trans;
        !           112:   dev->loopback = 1;
        !           113: }

unix.superglobalmegacorp.com

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