亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? packet.c

?? An implementation of the TCP/IP protocol suite for the LINUX operating system. INET is implemented u
?? C
字號:
  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  *              PACKET - implements raw packet sockets.
  7  *
  8  * Version:     @(#)packet.c    1.0.6   05/25/93
  9  *
 10  * Authors:     Ross Biro, <bir7@leland.Stanford.Edu>
 11  *              Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
 12  *
 13  * Fixes:       
 14  *              Alan Cox        :       verify_area() now used correctly
 15  *              Alan Cox        :       new skbuff lists, look ma no backlogs!
 16  *              Alan Cox        :       tidied skbuff lists.
 17  *              Alan Cox        :       Now uses generic datagram routines I
 18  *                                      added. Also fixed the peek/read crash
 19  *                                      from all old Linux datagram code.
 20  *              Alan Cox        :       Uses the improved datagram code.
 21  *              Alan Cox        :       Added NULL's for socket options.
 22  *
 23  *
 24  *              This program is free software; you can redistribute it and/or
 25  *              modify it under the terms of the GNU General Public License
 26  *              as published by the Free Software Foundation; either version
 27  *              2 of the License, or (at your option) any later version.
 28  */
 29 #include <linux/types.h>
 30 #include <linux/sched.h>
 31 #include <linux/fcntl.h>
 32 #include <linux/socket.h>
 33 #include <linux/in.h>
 34 #include "inet.h"
 35 #include "dev.h"
 36 #include "ip.h"
 37 #include "protocol.h"
 38 #include "tcp.h"
 39 #include "skbuff.h"
 40 #include "sock.h"
 41 #include <linux/errno.h>
 42 #include <linux/timer.h>
 43 #include <asm/system.h>
 44 #include <asm/segment.h>
 45 #include "udp.h"
 46 #include "raw.h"
 47 
 48 
 49 static unsigned long
 50 min(unsigned long a, unsigned long b)
 51 {
 52   if (a < b) return(a);
 53   return(b);
 54 }
 55 
 56 
 57 /* This should be the easiest of all, all we do is copy it into a buffer. */
 58 int
 59 packet_rcv(struct sk_buff *skb, struct device *dev,  struct packet_type *pt)
 60 {
 61   struct sock *sk;
 62 
 63   sk = (struct sock *) pt->data;
 64   skb->dev = dev;
 65   skb->len += dev->hard_header_len;
 66 
 67   skb->sk = sk;
 68 
 69   /* Charge it too the socket. */
 70   if (sk->rmem_alloc + skb->mem_len >= sk->rcvbuf) {
 71         skb->sk = NULL;
 72         kfree_skb(skb, FREE_READ);
 73         return(0);
 74   }
 75   sk->rmem_alloc += skb->mem_len;
 76   skb_queue_tail(&sk->rqueue,skb);
 77   wake_up_interruptible(sk->sleep);
 78   release_sock(sk);
 79   return(0);
 80 }
 81 
 82 
 83 /* This will do terrible things if len + ipheader + devheader > dev->mtu */
 84 static int
 85 packet_sendto(struct sock *sk, unsigned char *from, int len,
 86               int noblock, unsigned flags, struct sockaddr_in *usin,
 87               int addr_len)
 88 {
 89   struct sk_buff *skb;
 90   struct device *dev;
 91   struct sockaddr saddr;
 92   int err;
 93 
 94   /* Check the flags. */
 95   if (flags) return(-EINVAL);
 96   if (len < 0) return(-EINVAL);
 97 
 98   /* Get and verify the address. */
 99   if (usin) {
100         if (addr_len < sizeof(saddr)) return(-EINVAL);
101         err=verify_area(VERIFY_READ, usin, sizeof(saddr));
102         if(err)
103                 return err;
104         memcpy_fromfs(&saddr, usin, sizeof(saddr));
105   } else
106         return(-EINVAL);
107         
108   err=verify_area(VERIFY_READ,from,len);
109   if(err)
110         return(err);
111 /* Find the device first to size check it */
112 
113   saddr.sa_data[13] = 0;
114   dev = dev_get(saddr.sa_data);
115   if (dev == NULL) {
116         return(-ENXIO);
117   }
118   if(len>dev->mtu)
119         return -EMSGSIZE;
120 
121 /* Now allocate the buffer, knowing 4K pagelimits wont break this line */  
122   skb = sk->prot->wmalloc(sk, len+sizeof(*skb), 0, GFP_KERNEL);
123 
124   /* This shouldn't happen, but it could. */
125   if (skb == NULL) {
126         DPRINTF((DBG_PKT, "packet_sendto: write buffer full?\n"));
127         return(-ENOMEM);
128   }
129   /* Fill it in */
130   skb->mem_addr = skb;
131   skb->mem_len = len + sizeof(*skb);
132   skb->sk = sk;
133   skb->free = 1;
134   memcpy_fromfs(skb->data, from, len);
135   skb->len = len;
136   skb->next = NULL;
137   skb->arp = 1;
138   if (dev->flags & IFF_UP) dev->queue_xmit(skb, dev, sk->priority);
139     else kfree_skb(skb, FREE_WRITE);
140   return(len);
141 }
142 
143 
144 static int
145 packet_write(struct sock *sk, unsigned char *buff, 
146              int len, int noblock,  unsigned flags)
147 {
148   return(packet_sendto(sk, buff, len, noblock, flags, NULL, 0));
149 }
150 
151 
152 static void
153 packet_close(struct sock *sk, int timeout)
154 {
155   sk->inuse = 1;
156   sk->state = TCP_CLOSE;
157   dev_remove_pack((struct packet_type *)sk->pair);
158   kfree_s((void *)sk->pair, sizeof(struct packet_type));
159   sk->pair = NULL;
160   release_sock(sk);
161 }
162 
163 
164 static int
165 packet_init(struct sock *sk)
166 {
167   struct packet_type *p;
168 
169   p = (struct packet_type *) kmalloc(sizeof(*p), GFP_KERNEL);
170   if (p == NULL) return(-ENOMEM);
171 
172   p->func = packet_rcv;
173   p->type = sk->num;
174   p->data = (void *)sk;
175   dev_add_pack(p);
176    
177   /* We need to remember this somewhere. */
178   sk->pair = (struct sock *)p;
179 
180   return(0);
181 }
182 
183 
184 /*
185  * This should be easy, if there is something there
186  * we return it, otherwise we block.
187  */
188 int
189 packet_recvfrom(struct sock *sk, unsigned char *to, int len,
190                 int noblock, unsigned flags, struct sockaddr_in *sin,
191                 int *addr_len)
192 {
193   int copied=0;
194   struct sk_buff *skb;
195   struct sockaddr *saddr;
196   int err;
197 
198   saddr = (struct sockaddr *)sin;
199   if (len == 0) return(0);
200   if (len < 0) return(-EINVAL);
201 
202   if (sk->shutdown & RCV_SHUTDOWN) return(0);
203   if (addr_len) {
204           err=verify_area(VERIFY_WRITE, addr_len, sizeof(*addr_len));
205           if(err)
206                 return err;
207           put_fs_long(sizeof(*saddr), addr_len);
208   }
209   
210   err=verify_area(VERIFY_WRITE,to,len);
211   if(err)
212         return err;
213   skb=skb_recv_datagram(sk,flags,noblock,&err);
214   if(skb==NULL)
215         return err;
216   copied = min(len, skb->len);
217 
218   memcpy_tofs(to, skb->data, copied);   /* Don't use skb_copy_datagram here: We can't get frag chains */
219 
220   /* Copy the address. */
221   if (saddr) {
222         struct sockaddr addr;
223 
224         addr.sa_family = skb->dev->type;
225         memcpy(addr.sa_data,skb->dev->name, 14);
226         verify_area(VERIFY_WRITE, saddr, sizeof(*saddr));
227         memcpy_tofs(saddr, &addr, sizeof(*saddr));
228   }
229 
230   skb_free_datagram(skb);               /* Its either been used up, or its a peek_copy anyway */
231 
232   release_sock(sk);
233   return(copied);
234 }
235 
236 
237 int
238 packet_read(struct sock *sk, unsigned char *buff,
239             int len, int noblock, unsigned flags)
240 {
241   return(packet_recvfrom(sk, buff, len, noblock, flags, NULL, NULL));
242 }
243 
244 
245 struct proto packet_prot = {
246   sock_wmalloc,
247   sock_rmalloc,
248   sock_wfree,
249   sock_rfree,
250   sock_rspace,
251   sock_wspace,
252   packet_close,
253   packet_read,
254   packet_write,
255   packet_sendto,
256   packet_recvfrom,
257   ip_build_header,
258   udp_connect,
259   NULL,
260   ip_queue_xmit,
261   ip_retransmit,
262   NULL,
263   NULL,
264   NULL, 
265   datagram_select,
266   NULL,
267   packet_init,
268   NULL,
269   NULL, /* No set/get socket options */
270   NULL,
271   128,
272   0,
273   {NULL,},
274   "PACKET"
275 };
276 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91一区二区三区在线播放| 成人手机电影网| 国产精品自产自拍| 欧美影院午夜播放| 色综合久久久久综合体桃花网| 有坂深雪av一区二区精品| 亚洲少妇屁股交4| 亚洲欧美日韩中文播放| 亚洲黄色性网站| 亚洲综合色视频| www久久精品| 日本一区二区免费在线| 国产精品视频在线看| 中文字幕一区二区三区视频| 91精选在线观看| 99久久婷婷国产综合精品| 日韩一区欧美二区| 美女精品一区二区| 国产精品综合视频| 色呦呦国产精品| 欧美日韩精品电影| 99久久亚洲一区二区三区青草| 日韩在线观看一区二区| 久久国产精品99久久久久久老狼 | 视频一区视频二区中文| 久久久99精品免费观看不卡| 国产欧美精品一区二区色综合| 欧美久久一二三四区| 成人免费在线视频| 日韩视频永久免费| 欧美国产综合一区二区| 综合av第一页| 麻豆成人91精品二区三区| 亚洲电影第三页| 国产一区二区在线电影| 99视频热这里只有精品免费| 欧美精品电影在线播放| 国产亚洲一区二区三区四区 | 欧美在线免费观看视频| 日韩精品中文字幕一区| 亚洲人一二三区| 亚洲一区二区三区四区在线| 成人丝袜18视频在线观看| 欧美日韩一区高清| 欧美日韩黄色一区二区| 亚洲国产精品99久久久久久久久| 久久久久久久久久久黄色| 亚洲一区二区三区美女| 亚洲精品视频一区| 国产精品1024久久| 日韩视频在线观看一区二区| 一区二区三区精品视频| 播五月开心婷婷综合| 日韩精品专区在线影院重磅| 亚洲电影一区二区| 色激情天天射综合网| 欧美极品少妇xxxxⅹ高跟鞋| 美国毛片一区二区三区| 久久99在线观看| 欧美精品亚洲一区二区在线播放| 欧美日韩国产免费一区二区| 国产精品成人在线观看| 国产乱子伦视频一区二区三区 | 日韩女同互慰一区二区| 亚洲欧美日韩国产成人精品影院 | 欧美一级黄色片| 亚洲精品日韩专区silk| 不卡av在线免费观看| 久久久精品中文字幕麻豆发布| 日本一区二区动态图| 国产一区二三区| 久久久久9999亚洲精品| 国产毛片精品视频| 久久色在线视频| 国产一区二区美女诱惑| 国产三级久久久| 亚洲综合一区二区| 欧美日韩在线一区二区| 久久尤物电影视频在线观看| 美国一区二区三区在线播放| 精品国产一区二区三区忘忧草| 亚洲国产岛国毛片在线| 成人理论电影网| 亚洲精品水蜜桃| 久久精品国产久精国产爱| 欧美成人一区二区三区片免费| 18欧美亚洲精品| 99精品热视频| 亚洲国产成人精品视频| 欧美精品粉嫩高潮一区二区| 蜜臀a∨国产成人精品| 久久久亚洲国产美女国产盗摄| 亚洲伦理在线精品| 理论片日本一区| 国产精品网站在线| 色综合久久66| 奇米精品一区二区三区在线观看| 99久久婷婷国产综合精品电影| 日韩一区二区三区电影| 国产一区二区精品在线观看| 国产欧美va欧美不卡在线| 色爱区综合激月婷婷| 视频一区二区三区在线| 91女人视频在线观看| 亚洲成a天堂v人片| 久久九九久久九九| 日本乱码高清不卡字幕| 日日摸夜夜添夜夜添国产精品| 色先锋aa成人| 免费久久精品视频| 国产精品传媒入口麻豆| 91精品国产色综合久久不卡电影 | 欧美视频一区二区在线观看| 国产精品乱子久久久久| 国内偷窥港台综合视频在线播放| 在线电影院国产精品| 国产另类ts人妖一区二区| 亚洲无线码一区二区三区| 久久亚洲综合色| 国产精品无码永久免费888| 国产一区二区在线观看视频| 精品国产3级a| 欧美色欧美亚洲另类二区| 国产精品99久久久| 人妖欧美一区二区| 一区二区在线观看av| 久久青草欧美一区二区三区| 欧美日韩国产123区| 成人av资源在线观看| 久久69国产一区二区蜜臀| 一区二区不卡在线播放| 国产精品入口麻豆原神| 成人激情小说网站| 久久 天天综合| 日韩精品电影在线观看| 一区精品在线播放| 欧洲亚洲精品在线| 丰满白嫩尤物一区二区| 国产真实乱偷精品视频免| 亚洲一区av在线| 一区二区三区四区高清精品免费观看| 在线观看国产一区二区| 成人激情小说网站| 国产成人丝袜美腿| 亚洲精品伦理在线| 亚洲天堂a在线| 中文字幕一区二区三区不卡| 国产欧美一区二区三区在线看蜜臀| 成人性生交大片免费看在线播放 | 777奇米成人网| 欧美性xxxxxx少妇| 在线观看91视频| 在线观看亚洲精品视频| 91在线高清观看| 色婷婷久久久久swag精品| 97精品国产97久久久久久久久久久久| 一区二区久久久久| 亚洲综合在线视频| 国产精品高潮久久久久无| 在线观看一区不卡| 国产精品资源在线观看| 国产黄色精品网站| 99视频国产精品| 欧美最新大片在线看| 欧美日韩在线播放| 日韩三级精品电影久久久| 一本高清dvd不卡在线观看| 91久久精品一区二区三区| 欧美日韩免费一区二区三区视频| 国产不卡视频一区二区三区| 成人一区二区三区在线观看| 不卡电影一区二区三区| 在线观看亚洲精品| 日韩欧美综合在线| 国产精品的网站| 日韩精品午夜视频| 国产伦精品一区二区三区在线观看| 亚洲成av人片观看| 美女视频第一区二区三区免费观看网站| 日韩一区在线免费观看| 一区二区三区精品视频| 精品一区二区三区在线播放| 成人激情电影免费在线观看| 欧美三电影在线| 色中色一区二区| 欧美电影免费观看高清完整版在| 欧美无人高清视频在线观看| 日韩三级视频在线看| 亚洲日本电影在线| 毛片av一区二区三区| 91麻豆国产福利精品| 日韩一级黄色大片| 亚洲激情在线播放| 国产精品影音先锋| 欧美精品久久久久久久多人混战| 在线视频你懂得一区| 国产性天天综合网| 日本不卡123| 免费高清成人在线| 色网站国产精品|