root/net/tcp/sock.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   1 /* sock.h */
   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 bir7@leland.stanford.edu or
  20     C/O Department of Mathematics; Stanford University; Stanford, CA 94305
  21 */
  22 #ifndef _TCP_SOCK_H
  23 #define _TCP_SOCK_H
  24 
  25 #define SOCK_ARRAY_SIZE 64
  26 
  27 /* This structure really needs to be cleaned up.  Most of it is
  28    for tcp, and not used by any of the other protocols. */
  29 
  30 struct sock 
  31 {
  32   struct options *opt;
  33   unsigned long wmem_alloc;
  34   unsigned long rmem_alloc;
  35   unsigned long send_seq;
  36   unsigned long acked_seq;
  37   unsigned long copied_seq;
  38   unsigned long rcv_ack_seq;
  39   unsigned long window_seq;
  40   unsigned long fin_seq;
  41   unsigned long inuse:1, dead:1, urginline:1,
  42                 intr:1, blog:1, done:1, reuse:1, keepopen:1, linger:1,
  43                 delay_acks:1, timeout:3, destroy:1, ack_timed:1, no_check:1,
  44                 exp_growth:1;
  45   int proc;
  46   volatile struct sock *next;
  47   volatile struct sock *pair;
  48   struct sk_buff *send_tail;
  49   struct sk_buff *send_head;
  50   struct sk_buff *back_log;
  51   long retransmits;
  52   struct sk_buff *wback, *wfront, *rqueue;
  53   struct proto *prot;
  54   struct wait_queue **sleep;
  55   unsigned long daddr;
  56   unsigned long saddr;
  57   unsigned short max_unacked;
  58   unsigned short window;
  59   unsigned short bytes_rcv;
  60   unsigned short mtu;
  61   unsigned short num;
  62   unsigned short cong_window;
  63   unsigned short packets_out;
  64   unsigned short urg;
  65   unsigned short shutdown;
  66   short rtt;
  67   short err;
  68   unsigned char protocol;
  69   unsigned char state;
  70   unsigned char ack_backlog;
  71   unsigned char max_ack_backlog;
  72   unsigned char priority;
  73   struct tcp_header dummy_th; /* I may be able to get rid of this. */
  74   struct timer time_wait;
  75 };
  76 
  77 struct proto 
  78 {
  79   void *(*wmalloc)(volatile struct sock *sk, unsigned long size, int force);
  80   void *(*rmalloc)(volatile struct sock *sk, unsigned long size, int force);
  81   void (*wfree)(volatile struct sock *sk, void *mem, unsigned long size);
  82   void (*rfree)(volatile struct sock *sk, void *mem, unsigned long size);
  83   unsigned long (*rspace)(volatile struct sock *sk);
  84   unsigned long (*wspace)(volatile struct sock *sk);
  85   void (*close)(volatile struct sock *sk, int timeout);
  86   int (*read)(volatile struct sock *sk, unsigned char *to, int len,
  87               int nonblock, unsigned flags);
  88   int (*write)(volatile struct sock *sk, unsigned char *to, int len,
  89                int nonblock, unsigned flags);
  90   int (*sendto) (volatile struct sock *sk, unsigned char *from, int len,
  91                  int noblock, unsigned flags, struct sockaddr_in *usin,
  92                  int addr_len);
  93   int (*recvfrom) (volatile struct sock *sk, unsigned char *from, int len,
  94                    int noblock, unsigned flags, struct sockaddr_in *usin,
  95                    int *addr_len);
  96   int (*build_header) (struct sk_buff *skb, unsigned long saddr,
  97                        unsigned long daddr, struct device **dev, int type,
  98                        struct options *opt, int len);
  99   int (*connect) (volatile struct sock *sk, struct sockaddr_in *usin,
 100                   int addr_len);
 101   volatile struct sock *(*accept) (volatile struct sock *sk, int flags);
 102   void  (*queue_xmit) (volatile struct sock *sk, struct device *dev, 
 103                        struct sk_buff *skb, int free);
 104   void (*retransmit) (volatile struct sock *sk, int all);
 105   void (*write_wakeup) (volatile struct sock *sk);
 106   void (*read_wakeup) (volatile struct sock *sk);
 107   int (*rcv)(struct sk_buff *buff, struct device *dev, struct options *opt,
 108              unsigned long daddr, unsigned short len,
 109              unsigned long saddr, int redo, struct ip_protocol *protocol);
 110   int (*select)(volatile struct sock *sk, int which, select_table *wait);
 111   int (*ioctl) (volatile struct sock *sk, int cmd, unsigned long arg);
 112   int (*init) (volatile struct sock *sk);
 113   unsigned short max_header;
 114   unsigned long retransmits;
 115   volatile struct sock *sock_array[SOCK_ARRAY_SIZE];
 116 };
 117 
 118 #define TIME_WRITE 1
 119 #define TIME_CLOSE 2
 120 #define TIME_KEEPOPEN 3
 121 #define TIME_DESTROY 4
 122 #define TIME_DONE 5 /* used to absorb those last few packets. */
 123 #define SOCK_DESTROY_TIME 1000 /* about 10 seconds. */
 124 
 125 /* used with free skb */
 126 #define FREE_READ 1
 127 #define FREE_WRITE 0
 128 
 129 struct sk_buff
 130 {
 131   struct sk_buff *next;
 132   struct sk_buff *prev;
 133   struct sk_buff *link3;
 134   volatile struct sock *sk;
 135   unsigned long when; /* used to compute rtt's. */
 136   struct device *dev;
 137   void *mem_addr;
 138   union
 139     {
 140        struct tcp_header *th;
 141        struct enet_header *eth;
 142        struct ip_header *iph;
 143        struct udp_header *uh;
 144        struct arp *arp;
 145        unsigned char *raw;
 146        unsigned long seq;
 147     } h;
 148   unsigned long mem_len;
 149   unsigned long len;
 150   unsigned long saddr;
 151   unsigned long daddr;
 152   unsigned long acked:1,used:1,free:1,arp:1, urg_used:1, lock:1;
 153 };
 154 
 155 #define PROT_SOCK 1024
 156 #define SK_WMEM_MAX 8192
 157 #define SK_RMEM_MAX 32767
 158 #define SHUTDOWN_MASK 3
 159 #define RCV_SHUTDOWN 1
 160 #define SEND_SHUTDOWN 2
 161 
 162 void destroy_sock (volatile struct sock *sk);
 163 unsigned short get_new_socknum (struct proto *, unsigned short);
 164 void put_sock (unsigned short, volatile struct sock *); 
 165 void release_sock (volatile struct sock *sk);
 166 volatile struct sock *get_sock(struct proto *, unsigned short, unsigned long,
 167                                unsigned short, unsigned long);
 168 void print_sk (volatile struct sock *);
 169 void print_skb (struct sk_buff *);
 170 void *sock_wmalloc(volatile struct sock *sk, unsigned long size, int force);
 171 void *sock_rmalloc(volatile struct sock *sk, unsigned long size, int force);
 172 void sock_wfree(volatile struct sock *sk, void *mem, unsigned long size);
 173 void sock_rfree(volatile struct sock *sk, void *mem, unsigned long size);
 174 unsigned long sock_rspace(volatile struct sock *sk);
 175 unsigned long sock_wspace(volatile struct sock *sk);
 176 void free_skb (struct sk_buff *skb, int rw);
 177 void lock_skb (struct sk_buff *skb);
 178 void unlock_skb (struct sk_buff *skb, int rw);
 179 
 180 void dummy_routine(void *, ... );
 181 
 182 #endif

/* [previous][next][first][last][top][bottom][index][help] */