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

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

?? icmp.c

?? An implementation of the TCP/IP protocol suite for the LINUX operating system. INET is implemented u
?? C
?? 第 1 頁 / 共 2 頁
字號:
  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  *              Internet Control Message Protocol (ICMP)
  7  *
  8  * Version:     @(#)icmp.c      1.0.11  06/02/93
  9  *
 10  * Authors:     Ross Biro, <bir7@leland.Stanford.Edu>
 11  *              Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
 12  *              Mark Evans, <evansmp@uhura.aston.ac.uk>
 13  *
 14  * Fixes:       
 15  *              Alan Cox        :       Generic queue usage.
 16  *              Gerhard Koerting:       ICMP addressing corrected
 17  *              Alan Cox        :       Use tos/ttl settings
 18  *
 19  *
 20  *              This program is free software; you can redistribute it and/or
 21  *              modify it under the terms of the GNU General Public License
 22  *              as published by the Free Software Foundation; either version
 23  *              2 of the License, or (at your option) any later version.
 24  */
 25 #include <linux/types.h>
 26 #include <linux/sched.h>
 27 #include <linux/kernel.h>
 28 #include <linux/fcntl.h>
 29 #include <linux/socket.h>
 30 #include <linux/in.h>
 31 #include "inet.h"
 32 #include "dev.h"
 33 #include "ip.h"
 34 #include "route.h"
 35 #include "protocol.h"
 36 #include "icmp.h"
 37 #include "tcp.h"
 38 #include "skbuff.h"
 39 #include "sock.h"
 40 #include <linux/errno.h>
 41 #include <linux/timer.h>
 42 #include <asm/system.h>
 43 #include <asm/segment.h>
 44 
 45 
 46 #define min(a,b)        ((a)<(b)?(a):(b))
 47 
 48 
 49 /* An array of errno for error messages from dest unreach. */
 50 struct icmp_err icmp_err_convert[] = {
 51   { ENETUNREACH,        1 },    /*      ICMP_NET_UNREACH        */
 52   { EHOSTUNREACH,       1 },    /*      ICMP_HOST_UNREACH       */
 53   { ENOPROTOOPT,        1 },    /*      ICMP_PROT_UNREACH       */
 54   { ECONNREFUSED,       1 },    /*      ICMP_PORT_UNREACH       */
 55   { EOPNOTSUPP,         0 },    /*      ICMP_FRAG_NEEDED        */
 56   { EOPNOTSUPP,         0 },    /*      ICMP_SR_FAILED          */
 57   { ENETUNREACH,        1 },    /*      ICMP_NET_UNKNOWN        */
 58   { EHOSTDOWN,          1 },    /*      ICMP_HOST_UNKNOWN       */
 59   { ENONET,             1 },    /*      ICMP_HOST_ISOLATED      */
 60   { ENETUNREACH,        1 },    /*      ICMP_NET_ANO            */
 61   { EHOSTUNREACH,       1 },    /*      ICMP_HOST_ANO           */
 62   { EOPNOTSUPP,         0 },    /*      ICMP_NET_UNR_TOS        */
 63   { EOPNOTSUPP,         0 }     /*      ICMP_HOST_UNR_TOS       */
 64 };
 65 
 66 
 67 /* Display the contents of an ICMP header. */
 68 static void
 69 print_icmp(struct icmphdr *icmph)
 70 {
 71   if (inet_debug != DBG_ICMP) return;
 72 
 73   printk("ICMP: type = %d, code = %d, checksum = %X\n",
 74                         icmph->type, icmph->code, icmph->checksum);
 75   printk("      gateway = %s\n", in_ntoa(icmph->un.gateway));
 76 }
 77 
 78 
 79 /* Send an ICMP message. */
 80 void
 81 icmp_send(struct sk_buff *skb_in, int type, int code, struct device *dev)
 82 {
 83   struct sk_buff *skb;
 84   struct iphdr *iph;
 85   int offset;
 86   struct icmphdr *icmph;
 87   int len;
 88 
 89   DPRINTF((DBG_ICMP, "icmp_send(skb_in = %X, type = %d, code = %d, dev=%X)\n",
 90                                                 skb_in, type, code, dev));
 91 
 92   /* Get some memory for the reply. */
 93   len = sizeof(struct sk_buff) + dev->hard_header_len +
 94         sizeof(struct iphdr) + sizeof(struct icmphdr) +
 95         sizeof(struct iphdr) + 8;       /* amount of header to return */
 96            
 97   skb = (struct sk_buff *) alloc_skb(len, GFP_ATOMIC);
 98   if (skb == NULL) 
 99         return;
100 
101   skb->sk = NULL;
102   skb->mem_addr = skb;
103   skb->mem_len = len;
104   len -= sizeof(struct sk_buff);
105 
106   /* Find the IP header. */
107   iph = (struct iphdr *) (skb_in->data + dev->hard_header_len);
108 
109   /* Build Layer 2-3 headers for message back to source. */
110   offset = ip_build_header(skb, dev->pa_addr, iph->saddr,
111                            &dev, IPPROTO_ICMP, NULL, len, skb_in->ip_hdr->tos,255);
112   if (offset < 0) {
113         skb->sk = NULL;
114         kfree_skb(skb, FREE_READ);
115         return;
116   }
117 
118   /* Re-adjust length according to actual IP header size. */
119   skb->len = offset + sizeof(struct icmphdr) + sizeof(struct iphdr) + 8;
120   icmph = (struct icmphdr *) (skb->data + offset);
121   icmph->type = type;
122   icmph->code = code;
123   icmph->checksum = 0;
124   icmph->un.gateway = 0;
125   memcpy(icmph + 1, iph, sizeof(struct iphdr) + 8);
126 
127   icmph->checksum = ip_compute_csum((unsigned char *)icmph,
128                          sizeof(struct icmphdr) + sizeof(struct iphdr) + 8);
129 
130   DPRINTF((DBG_ICMP, ">>\n"));
131   print_icmp(icmph);
132 
133   /* Send it and free it. */
134   ip_queue_xmit(NULL, dev, skb, 1);
135 }
136 
137 
138 /* Handle ICMP_UNREACH and ICMP_QUENCH. */
139 static void
140 icmp_unreach(struct icmphdr *icmph, struct sk_buff *skb)
141 {
142   struct inet_protocol *ipprot;
143   struct iphdr *iph;
144   unsigned char hash;
145   int err;
146 
147   err = (icmph->type << 8) | icmph->code;
148   iph = (struct iphdr *) (icmph + 1);
149   switch(icmph->code & 7) {
150         case ICMP_NET_UNREACH:
151                 DPRINTF((DBG_ICMP, "ICMP: %s: network unreachable.\n",
152                                                         in_ntoa(iph->daddr)));
153                 break;
154         case ICMP_HOST_UNREACH:
155                 DPRINTF((DBG_ICMP, "ICMP: %s: host unreachable.\n",
156                                                 in_ntoa(iph->daddr)));
157                 break;
158         case ICMP_PROT_UNREACH:
159                 printk("ICMP: %s:%d: protocol unreachable.\n",
160                         in_ntoa(iph->daddr), ntohs(iph->protocol));
161                 break;
162         case ICMP_PORT_UNREACH:
163                 DPRINTF((DBG_ICMP, "ICMP: %s:%d: port unreachable.\n",
164                         in_ntoa(iph->daddr), -1 /* FIXME: ntohs(iph->port) */));
165                 break;
166         case ICMP_FRAG_NEEDED:
167                 printk("ICMP: %s: fragmentation needed and DF set.\n",
168                                                         in_ntoa(iph->daddr));
169                 break;
170         case ICMP_SR_FAILED:
171                 printk("ICMP: %s: Source Route Failed.\n", in_ntoa(iph->daddr));
172                 break;
173         default:
174                 DPRINTF((DBG_ICMP, "ICMP: Unreachable: CODE=%d from %s\n",
175                                 (icmph->code & 7), in_ntoa(iph->daddr)));
176                 break;
177   }
178 
179   /* Get the protocol(s). */
180   hash = iph->protocol & (MAX_INET_PROTOS -1);
181 
182   /* This can change while we are doing it. */
183   ipprot = (struct inet_protocol *) inet_protos[hash];
184   while(ipprot != NULL) {
185         struct inet_protocol *nextip;
186 
187         nextip = (struct inet_protocol *) ipprot->next;
188 
189         /* Pass it off to everyone who wants it. */
190         if (iph->protocol == ipprot->protocol && ipprot->err_handler) {
191                 ipprot->err_handler(err, (unsigned char *)(icmph + 1),
192                                     iph->daddr, iph->saddr, ipprot);
193         }
194 
195         ipprot = nextip;
196   }
197   skb->sk = NULL;
198   kfree_skb(skb, FREE_READ);
199 }
200 
201 
202 /* Handle ICMP_REDIRECT. */
203 static void
204 icmp_redirect(struct icmphdr *icmph, struct sk_buff *skb, struct device *dev)
205 {
206   struct iphdr *iph;
207   unsigned long ip;
208 
209   iph = (struct iphdr *) (icmph + 1);
210   ip = iph->daddr;
211   switch(icmph->code & 7) {
212         case ICMP_REDIR_NET:
213 #ifdef not_a_good_idea
214                 rt_add((RTF_DYNAMIC | RTF_MODIFIED | RTF_GATEWAY),
215                         ip, 0, icmph->un.gateway, dev);
216                 break;
217 #endif
218         case ICMP_REDIR_HOST:
219                 rt_add((RTF_DYNAMIC | RTF_MODIFIED | RTF_HOST | RTF_GATEWAY),
220                         ip, 0, icmph->un.gateway, dev);
221                 break;
222         case ICMP_REDIR_NETTOS:
223         case ICMP_REDIR_HOSTTOS:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品福利一区二区| 国产精品一区二区免费不卡| 日韩不卡一区二区三区 | 国产成人自拍网| 91黄色激情网站| 国产日产亚洲精品系列| 亚洲国产欧美日韩另类综合| 国产福利视频一区二区三区| 91精品国产综合久久香蕉麻豆| 亚洲欧美一区二区三区国产精品 | 欧美女孩性生活视频| 国产精品久久看| 国产在线观看一区二区 | 91免费版在线| 欧美一级精品在线| 亚洲国产日产av| 99精品视频在线观看| 久久久久97国产精华液好用吗| 日本特黄久久久高潮| 91成人免费在线视频| 成人免费在线播放视频| 成人sese在线| 国产精品美女久久久久久| 九九精品一区二区| 欧美一区二区久久| 三级不卡在线观看| 欧美日韩一二三区| 亚洲成av人片| 欧美美女黄视频| 日韩av在线播放中文字幕| 精品视频123区在线观看| 亚洲综合无码一区二区| 色婷婷激情久久| 一区二区国产盗摄色噜噜| 色琪琪一区二区三区亚洲区| 亚洲欧美日韩国产中文在线| 色婷婷亚洲婷婷| 亚洲电影你懂得| 欧美一区二区三区小说| 麻豆91在线看| 久久久午夜精品| 成人午夜视频在线观看| 亚洲同性同志一二三专区| 欧美日韩高清一区二区三区| 三级在线观看一区二区| 欧美一区二区视频观看视频| 精品一区二区三区不卡 | 日韩精品中午字幕| 精彩视频一区二区三区| 国产亚洲欧美日韩在线一区| jizz一区二区| 亚洲第四色夜色| 久久一区二区三区四区| 成人国产一区二区三区精品| www.欧美精品一二区| 91亚洲国产成人精品一区二区三| 亚洲一区二区3| 欧美午夜电影网| 日本欧美在线看| 久久精品亚洲一区二区三区浴池 | 亚洲男人的天堂在线aⅴ视频 | 国产一区二区在线视频| 亚洲国产高清在线| 日本久久一区二区三区| 免费看精品久久片| 国产女人18水真多18精品一级做| 97超碰欧美中文字幕| 天堂一区二区在线免费观看| 国产亚洲婷婷免费| 91成人看片片| 国产精品自在在线| 亚洲国产欧美日韩另类综合| 精品日韩一区二区三区免费视频| 不卡的电影网站| 亚洲一本大道在线| 精品裸体舞一区二区三区| 亚洲欧美经典视频| 日韩欧美亚洲国产精品字幕久久久 | 一本一道久久a久久精品综合蜜臀| 婷婷夜色潮精品综合在线| 国产清纯在线一区二区www| 在线这里只有精品| 国产精品一二三四区| 亚洲电影第三页| 18成人在线观看| 久久丝袜美腿综合| 欧美日韩精品欧美日韩精品一| 国产不卡在线视频| 麻豆极品一区二区三区| 一区二区三区高清在线| 国产区在线观看成人精品| 欧美视频精品在线| 色综合天天天天做夜夜夜夜做| 久久精品国产久精国产爱| 亚洲一区在线观看视频| 日本一区二区动态图| 欧美xxxxxxxx| 777色狠狠一区二区三区| 色婷婷国产精品| www.欧美.com| 成人av网站免费观看| 国产综合色产在线精品| 美女网站视频久久| 日韩av网站免费在线| 亚洲一区二区三区视频在线 | 粉嫩高潮美女一区二区三区 | 亚洲bdsm女犯bdsm网站| 国产精品乱码妇女bbbb| 精品国产电影一区二区| 欧美一级日韩一级| 亚洲成人av中文| 日韩天堂在线观看| 欧美老肥妇做.爰bbww| 99久久伊人精品| 91精品久久久久久久91蜜桃| 欧美综合在线视频| 色域天天综合网| av电影在线观看一区| www.成人网.com| 99久久伊人网影院| 91在线你懂得| 欧美亚洲国产一区二区三区va | 中文字幕在线一区二区三区| 国产三级一区二区| 国产精品丝袜一区| 亚洲日本一区二区| 亚洲综合在线五月| 三级亚洲高清视频| 精品无人码麻豆乱码1区2区 | 99久久精品国产精品久久| 国产一区二区日韩精品| 寂寞少妇一区二区三区| 国内久久精品视频| 成人免费看视频| 欧美伊人久久久久久久久影院 | 日韩精品成人一区二区在线| 日韩不卡手机在线v区| 精品无人码麻豆乱码1区2区| 国产精品亚洲午夜一区二区三区 | 欧美日韩亚洲高清一区二区| 欧美日韩国产高清一区二区| 欧美mv日韩mv| 国产精品国模大尺度视频| 一个色综合av| 免费高清在线视频一区·| 国产精品一区二区久久不卡 | 国产自产高清不卡| av资源站一区| 欧美日韩1234| 国产三级一区二区| 亚洲国产另类av| 国产一区亚洲一区| 在线观看国产91| 亚洲精品一区二区三区福利| 亚洲欧洲日韩女同| 青青青伊人色综合久久| 国产成人精品在线看| 欧美三级中文字幕在线观看| 久久亚洲一级片| 亚洲二区在线观看| 国产白丝精品91爽爽久久| 欧美亚洲精品一区| 欧美国产激情二区三区| 日韩电影在线免费观看| 成人深夜在线观看| 日韩欧美在线影院| 亚洲精品国产品国语在线app| 九一九一国产精品| 欧美三级电影网| 国产精品成人一区二区三区夜夜夜| 日韩成人精品在线| 91国产精品成人| 国产女人18水真多18精品一级做| 日本中文在线一区| 色悠悠久久综合| 欧美国产国产综合| 狠狠色丁香婷婷综合| 欧美日韩电影一区| 亚洲精品成a人| 成人h动漫精品一区二区| 精品久久久久一区二区国产| 亚洲成人综合网站| 色天天综合久久久久综合片| 国产精品美女久久久久久久久| 精品一二三四在线| 日韩无一区二区| 日韩高清不卡在线| 欧美精品久久一区| 亚洲一区二区三区在线看| 91视频一区二区三区| 国产精品视频在线看| 国产乱妇无码大片在线观看| 精品日韩av一区二区| 毛片av中文字幕一区二区| 欧美欧美欧美欧美首页| 日韩va亚洲va欧美va久久| 欧美精品黑人性xxxx| 视频一区国产视频| 91麻豆精品国产自产在线观看一区 | 五月天一区二区三区|