亚洲欧美第一页_禁久久精品乱码_粉嫩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蜜桃| 午夜不卡av在线| 91精品国产免费久久综合| 日韩vs国产vs欧美| 欧美电影免费观看高清完整版在线观看| 日韩高清不卡在线| 日韩欧美国产午夜精品| 国精产品一区一区三区mba桃花| 精品国产一区二区精华| 国产成人av电影在线播放| 一区视频在线播放| 色一区在线观看| 日韩中文欧美在线| 欧美精品一区二区三区蜜桃视频| 国产成a人无v码亚洲福利| 亚洲欧美在线高清| 欧美日韩黄色一区二区| 欧美三级午夜理伦三级中视频| 亚洲一区二区在线免费观看视频| 欧美一卡二卡三卡四卡| 国产激情视频一区二区三区欧美 | 91精品欧美久久久久久动漫| 日韩专区一卡二卡| 国产欧美日韩综合| 欧美视频一二三区| 国产乱国产乱300精品| 亚洲激情男女视频| 精品久久国产老人久久综合| 97成人超碰视| 伦理电影国产精品| 国产精品久久久久久久久快鸭 | 中文字幕欧美日韩一区| 91极品视觉盛宴| 欧美aaaaa成人免费观看视频| 国产拍欧美日韩视频二区| 欧洲在线/亚洲| 国产精品一级片| 亚洲午夜久久久| 国产午夜精品一区二区 | 亚洲精品免费在线| 日韩一区二区三区在线| 91婷婷韩国欧美一区二区| 美女任你摸久久 | 99久久国产综合精品女不卡| 日日夜夜免费精品| 国产精品不卡在线| 欧美xxxxx牲另类人与| 欧美性做爰猛烈叫床潮| 国产成人av电影在线播放| 日本怡春院一区二区| 亚洲欧美一区二区三区极速播放| 欧美岛国在线观看| 欧美日韩精品专区| 99久久精品国产导航| 国产精品一卡二卡在线观看| 天堂午夜影视日韩欧美一区二区| 亚洲欧美日韩国产另类专区 | 欧美视频第二页| 粉嫩欧美一区二区三区高清影视| 奇米亚洲午夜久久精品| 一区二区三区四区在线播放| 国产精品伦一区| 亚洲精品一区二区三区福利| 91精品国产色综合久久不卡蜜臀 | 国产一区二区主播在线| 石原莉奈在线亚洲二区| 一区二区在线观看免费视频播放 | 亚洲丝袜制服诱惑| 久久99精品久久久| 亚洲成a人在线观看| 亚洲激情图片一区| 亚洲人成精品久久久久| 亚洲欧美区自拍先锋| 最新高清无码专区| 18欧美亚洲精品| 亚洲欧洲性图库| 中文字幕在线不卡一区| 国产精品久久久久桃色tv| 中文文精品字幕一区二区| 国产欧美精品一区二区三区四区 | 久久99国产精品麻豆| 日本欧美肥老太交大片| 免费在线一区观看| 久久机这里只有精品| 精品伊人久久久久7777人| 精品无人区卡一卡二卡三乱码免费卡| 免费观看在线色综合| 麻豆成人在线观看| 国产在线精品免费| 国产成人精品三级| av在线不卡网| 色狠狠色狠狠综合| 欧美日韩国产大片| 欧美一级片在线| 精品国产一区二区三区久久影院| 久久久美女毛片| 中文字幕在线观看一区二区| 一区二区三区四区激情| 亚洲成人av电影在线| 免费欧美日韩国产三级电影| 国产乱一区二区| 高清日韩电视剧大全免费| 91在线丨porny丨国产| 欧美日韩国产另类一区| 精品欧美一区二区三区精品久久| 日本一区二区三区久久久久久久久不| 欧美激情一区在线观看| 亚洲午夜一区二区三区| 久久99久久久久久久久久久| 成人综合激情网| 欧美视频一区在线观看| 精品国产乱码久久久久久夜甘婷婷| 国产亚洲综合性久久久影院| 亚洲欧美一区二区三区国产精品 | 国产精品中文有码| www.视频一区| 91精品国产一区二区三区香蕉| 久久九九全国免费| 亚洲在线观看免费视频| 国产原创一区二区| 欧美在线观看一区| 2014亚洲片线观看视频免费| 亚洲美女淫视频| 黄色精品一二区| 欧美亚洲免费在线一区| 久久久久久久久蜜桃| 亚洲高清视频在线| 国产精品123| 91精品婷婷国产综合久久| 国产精品久久久久一区二区三区共| 手机精品视频在线观看| 99在线精品视频| 精品久久久久久久久久久久久久久久久 | 精彩视频一区二区三区| 欧美在线|欧美| 国产精品系列在线| 美国十次了思思久久精品导航| 99re视频精品| 国产日韩欧美精品一区| 日精品一区二区| 日本精品一区二区三区高清| 精品91自产拍在线观看一区| 亚洲一二三区在线观看| 成人精品电影在线观看| 欧美一区二区三区的| 亚洲在线视频网站| 99久久精品国产毛片| 久久精品日产第一区二区三区高清版| 午夜久久久久久久久| 色婷婷综合久久久久中文一区二区 | 久久久久久久久一| 日韩电影在线看| 欧美日韩一级视频| 日韩美女精品在线| 成人午夜视频福利| 久久精品视频免费观看| 狠狠色综合播放一区二区| 日韩一区二区在线看| 偷窥少妇高潮呻吟av久久免费 | 色先锋aa成人| 国产精品毛片高清在线完整版 | 国产三级三级三级精品8ⅰ区| 日韩国产欧美在线播放| 欧美午夜精品久久久久久超碰 | 色综合天天做天天爱| 中文字幕一区二区三区在线播放| 国产乱子伦视频一区二区三区| 精品日韩99亚洲| 久久爱www久久做| 精品剧情在线观看| 麻豆91小视频| 精品sm捆绑视频| 国产精品正在播放| 中文字幕欧美激情| 成人精品鲁一区一区二区| 国产精品天天看| 99热精品一区二区| 亚洲乱码国产乱码精品精的特点 | 亚洲欧美视频在线观看视频| 99riav一区二区三区| 亚洲精品视频观看| 欧美日韩国产一区二区三区地区| 一区二区三区国产精华| 欧美三级午夜理伦三级中视频| 午夜a成v人精品| 欧美成人女星排行榜| 国产一本一道久久香蕉| 另类中文字幕网| 国产清纯在线一区二区www| 成人蜜臀av电影| 亚洲综合久久久| 日韩一区二区在线观看视频| 国产精品原创巨作av| 亚洲欧美视频一区| 欧美日韩黄色一区二区| 久久精品99国产精品日本| 国产精品情趣视频|