⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sock.h

📁 An implementation of the TCP/IP protocol suite for the LINUX operating system. INET is implemented u
💻 H
字号:
  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 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -