home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / KERNEL-S / V1.0 / LINUX-1.0 / LINUX-1 / linux / net / inet / sock.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-03-02  |  8.8 KB  |  281 lines

  1. /*
  2.  * INET        An implementation of the TCP/IP protocol suite for the LINUX
  3.  *        operating system.  INET is implemented using the  BSD Socket
  4.  *        interface as the means of communication with the user level.
  5.  *
  6.  *        Definitions for the AF_INET socket handler.
  7.  *
  8.  * Version:    @(#)sock.h    1.0.4    05/13/93
  9.  *
  10.  * Authors:    Ross Biro, <bir7@leland.Stanford.Edu>
  11.  *        Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  12.  *        Corey Minyard <wf-rch!minyard@relay.EU.net>
  13.  *        Florian La Roche <flla@stud.uni-sb.de>
  14.  *
  15.  * Fixes:
  16.  *        Alan Cox    :    Volatiles in skbuff pointers. See
  17.  *                    skbuff comments. May be overdone,
  18.  *                    better to prove they can be removed
  19.  *                    than the reverse.
  20.  *        Alan Cox    :    Added a zapped field for tcp to note
  21.  *                    a socket is reset and must stay shut up
  22.  *        Alan Cox    :    New fields for options
  23.  *    Pauline Middelink    :    identd support
  24.  *
  25.  *        This program is free software; you can redistribute it and/or
  26.  *        modify it under the terms of the GNU General Public License
  27.  *        as published by the Free Software Foundation; either version
  28.  *        2 of the License, or (at your option) any later version.
  29.  */
  30. #ifndef _SOCK_H
  31. #define _SOCK_H
  32.  
  33. #include <linux/timer.h>
  34. #include <linux/ip.h>        /* struct options */
  35. #include <linux/tcp.h>        /* struct tcphdr */
  36.  
  37. #include "skbuff.h"        /* struct sk_buff */
  38. #include "protocol.h"        /* struct inet_protocol */
  39. #ifdef CONFIG_AX25
  40. #include "ax25.h"
  41. #endif
  42. #ifdef CONFIG_IPX
  43. #include "ipx.h"
  44. #endif
  45.  
  46. #define SOCK_ARRAY_SIZE    64
  47.  
  48.  
  49. /*
  50.  * This structure really needs to be cleaned up.
  51.  * Most of it is for TCP, and not used by any of
  52.  * the other protocols.
  53.  */
  54. struct sock {
  55.   struct options        *opt;
  56.   volatile unsigned long    wmem_alloc;
  57.   volatile unsigned long    rmem_alloc;
  58.   unsigned long            write_seq;
  59.   unsigned long            sent_seq;
  60.   unsigned long            acked_seq;
  61.   unsigned long            copied_seq;
  62.   unsigned long            rcv_ack_seq;
  63.   unsigned long            window_seq;
  64.   unsigned long            fin_seq;
  65.   unsigned long            urg_seq;
  66.   unsigned long            urg_data;
  67.  
  68.   /*
  69.    * Not all are volatile, but some are, so we
  70.    * might as well say they all are.
  71.    */
  72.   volatile char                 inuse,
  73.                 dead,
  74.                 urginline,
  75.                 intr,
  76.                 blog,
  77.                 done,
  78.                 reuse,
  79.                 keepopen,
  80.                 linger,
  81.                 delay_acks,
  82.                 destroy,
  83.                 ack_timed,
  84.                 no_check,
  85.                 zapped,    /* In ax25 & ipx means not linked */
  86.                 broadcast,
  87.                 nonagle;
  88.   unsigned long                lingertime;
  89.   int                proc;
  90.   struct sock            *next;
  91.   struct sock            *pair;
  92.   struct sk_buff        *volatile send_tail;
  93.   struct sk_buff        *volatile send_head;
  94.   struct sk_buff        *volatile back_log;
  95.   struct sk_buff        *partial;
  96.   struct timer_list        partial_timer;
  97.   long                retransmits;
  98.   struct sk_buff        *volatile wback,
  99.                 *volatile wfront,
  100.                 *volatile rqueue;
  101.   struct proto            *prot;
  102.   struct wait_queue        **sleep;
  103.   unsigned long            daddr;
  104.   unsigned long            saddr;
  105.   unsigned short        max_unacked;
  106.   unsigned short        window;
  107.   unsigned short        bytes_rcv;
  108. /* mss is min(mtu, max_window) */
  109.   unsigned short        mtu;       /* mss negotiated in the syn's */
  110.   volatile unsigned short    mss;       /* current eff. mss - can change */
  111.   volatile unsigned short    user_mss;  /* mss requested by user in ioctl */
  112.   volatile unsigned short    max_window;
  113.   unsigned short        num;
  114.   volatile unsigned short    cong_window;
  115.   volatile unsigned short    cong_count;
  116.   volatile unsigned short    ssthresh;
  117.   volatile unsigned short    packets_out;
  118.   volatile unsigned short    shutdown;
  119.   volatile unsigned long    rtt;
  120.   volatile unsigned long    mdev;
  121.   volatile unsigned long    rto;
  122. /* currently backoff isn't used, but I'm maintaining it in case
  123.  * we want to go back to a backoff formula that needs it
  124.  */
  125.   volatile unsigned short    backoff;
  126.   volatile short        err;
  127.   unsigned char            protocol;
  128.   volatile unsigned char    state;
  129.   volatile unsigned char    ack_backlog;
  130.   unsigned char            max_ack_backlog;
  131.   unsigned char            priority;
  132.   unsigned char            debug;
  133.   unsigned short        rcvbuf;
  134.   unsigned short        sndbuf;
  135.   unsigned short        type;
  136. #ifdef CONFIG_IPX
  137.   ipx_address            ipx_source_addr,ipx_dest_addr;
  138.   unsigned short        ipx_type;
  139. #endif
  140. #ifdef CONFIG_AX25
  141. /* Really we want to add a per protocol private area */
  142.   ax25_address            ax25_source_addr,ax25_dest_addr;
  143.   struct sk_buff *volatile    ax25_retxq[8];
  144.   char                ax25_state,ax25_vs,ax25_vr,ax25_lastrxnr,ax25_lasttxnr;
  145.   char                ax25_condition;
  146.   char                ax25_retxcnt;
  147.   char                ax25_xx;
  148.   char                ax25_retxqi;
  149.   char                ax25_rrtimer;
  150.   char                ax25_timer;
  151.   ax25_digi            *ax25_digipeat;
  152. #endif  
  153. /* IP 'private area' or will be eventually */
  154.   int                ip_ttl;        /* TTL setting */
  155.   int                ip_tos;        /* TOS */
  156.   struct tcphdr            dummy_th;
  157.  
  158.   /* This part is used for the timeout functions (timer.c). */
  159.   int                timeout;    /* What are we waiting for? */
  160.   struct timer_list        timer;
  161.  
  162.   /* identd */
  163.   struct socket            *socket;
  164.   
  165.   /* Callbacks */
  166.   void                (*state_change)(struct sock *sk);
  167.   void                (*data_ready)(struct sock *sk,int bytes);
  168.   void                (*write_space)(struct sock *sk);
  169.   void                (*error_report)(struct sock *sk);
  170.   
  171. };
  172.  
  173. struct proto {
  174.   struct sk_buff *    (*wmalloc)(struct sock *sk,
  175.                     unsigned long size, int force,
  176.                     int priority);
  177.   struct sk_buff *    (*rmalloc)(struct sock *sk,
  178.                     unsigned long size, int force,
  179.                     int priority);
  180.   void            (*wfree)(struct sock *sk, void *mem,
  181.                  unsigned long size);
  182.   void            (*rfree)(struct sock *sk, void *mem,
  183.                  unsigned long size);
  184.   unsigned long        (*rspace)(struct sock *sk);
  185.   unsigned long        (*wspace)(struct sock *sk);
  186.   void            (*close)(struct sock *sk, int timeout);
  187.   int            (*read)(struct sock *sk, unsigned char *to,
  188.                 int len, int nonblock, unsigned flags);
  189.   int            (*write)(struct sock *sk, unsigned char *to,
  190.                  int len, int nonblock, unsigned flags);
  191.   int            (*sendto)(struct sock *sk,
  192.                   unsigned char *from, int len, int noblock,
  193.                   unsigned flags, struct sockaddr_in *usin,
  194.                   int addr_len);
  195.   int            (*recvfrom)(struct sock *sk,
  196.                     unsigned char *from, int len, int noblock,
  197.                     unsigned flags, struct sockaddr_in *usin,
  198.                     int *addr_len);
  199.   int            (*build_header)(struct sk_buff *skb,
  200.                     unsigned long saddr,
  201.                     unsigned long daddr,
  202.                     struct device **dev, int type,
  203.                     struct options *opt, int len, int tos, int ttl);
  204.   int            (*connect)(struct sock *sk,
  205.                   struct sockaddr_in *usin, int addr_len);
  206.   struct sock *        (*accept) (struct sock *sk, int flags);
  207.   void            (*queue_xmit)(struct sock *sk,
  208.                       struct device *dev, struct sk_buff *skb,
  209.                       int free);
  210.   void            (*retransmit)(struct sock *sk, int all);
  211.   void            (*write_wakeup)(struct sock *sk);
  212.   void            (*read_wakeup)(struct sock *sk);
  213.   int            (*rcv)(struct sk_buff *buff, struct device *dev,
  214.                    struct options *opt, unsigned long daddr,
  215.                    unsigned short len, unsigned long saddr,
  216.                    int redo, struct inet_protocol *protocol);
  217.   int            (*select)(struct sock *sk, int which,
  218.                   select_table *wait);
  219.   int            (*ioctl)(struct sock *sk, int cmd,
  220.                  unsigned long arg);
  221.   int            (*init)(struct sock *sk);
  222.   void            (*shutdown)(struct sock *sk, int how);
  223.   int            (*setsockopt)(struct sock *sk, int level, int optname,
  224.                    char *optval, int optlen);
  225.   int            (*getsockopt)(struct sock *sk, int level, int optname,
  226.                   char *optval, int *option);       
  227.   unsigned short    max_header;
  228.   unsigned long        retransmits;
  229.   struct sock *        sock_array[SOCK_ARRAY_SIZE];
  230.   char            name[80];
  231. };
  232.  
  233. #define TIME_WRITE    1
  234. #define TIME_CLOSE    2
  235. #define TIME_KEEPOPEN    3
  236. #define TIME_DESTROY    4
  237. #define TIME_DONE    5    /* used to absorb those last few packets */
  238. #define TIME_PROBE0    6
  239. #define SOCK_DESTROY_TIME 1000    /* about 10 seconds            */
  240.  
  241. #define PROT_SOCK    1024    /* Sockets 0-1023 can't be bound too unless you are superuser */
  242.  
  243. #define SHUTDOWN_MASK    3
  244. #define RCV_SHUTDOWN    1
  245. #define SEND_SHUTDOWN    2
  246.  
  247.  
  248. extern void            destroy_sock(struct sock *sk);
  249. extern unsigned short        get_new_socknum(struct proto *, unsigned short);
  250. extern void            put_sock(unsigned short, struct sock *); 
  251. extern void            release_sock(struct sock *sk);
  252. extern struct sock        *get_sock(struct proto *, unsigned short,
  253.                       unsigned long, unsigned short,
  254.                       unsigned long);
  255. extern void            print_sk(struct sock *);
  256. extern struct sk_buff        *sock_wmalloc(struct sock *sk,
  257.                           unsigned long size, int force,
  258.                           int priority);
  259. extern struct sk_buff        *sock_rmalloc(struct sock *sk,
  260.                           unsigned long size, int force,
  261.                           int priority);
  262. extern void            sock_wfree(struct sock *sk, void *mem,
  263.                        unsigned long size);
  264. extern void            sock_rfree(struct sock *sk, void *mem,
  265.                        unsigned long size);
  266. extern unsigned long        sock_rspace(struct sock *sk);
  267. extern unsigned long        sock_wspace(struct sock *sk);
  268.  
  269. extern int            sock_setsockopt(struct sock *sk,int level,int op,char *optval,int optlen);
  270. extern int            sock_getsockopt(struct sock *sk,int level,int op,char *optval,int *optlen);
  271.  
  272. /* declarations from timer.c */
  273. extern struct sock *timer_base;
  274.  
  275. void delete_timer (struct sock *);
  276. void reset_timer (struct sock *, int, unsigned long);
  277. void net_timer (unsigned long);
  278.  
  279.  
  280. #endif    /* _SOCK_H */
  281.