Changeset 321 for EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_input.c
- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_input.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 5 5 * Tomakomai National College of Technology, JAPAN 6 6 * 7 * ä¸è¨èä½æ¨©è 8 ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 9 * ã«ãã£ã¦å 10 ¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨ 11 * è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢ 12 * ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼ 14 * å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 * ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 * è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 * ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼ 28 * (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 33 * 害ãããï¼ä¸è¨èä½æ¨©è 34 ããã³TOPPERSããã¸ã§ã¯ããå 35 責ãããã¨ï¼ 36 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 7 * 上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation 8 * によって公表されている GNU General Public License の Version 2 に記 9 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 10 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 11 * 利用と呼ぶ)することを無償で許諾する. 12 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 13 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 14 * スコード中に含まれていること. 15 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 16 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 17 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 18 * の無保証規定を掲載すること. 19 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 20 * 用できない形で再配布する場合には,次の条件を満たすこと. 21 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 22 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 24 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 25 * 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 129 117 130 118 /* 131 * SNMP 㮠管çæ 132 å ±ãã¼ã¹ (MIB) 119 * SNMP の 管理情報ベース (MIB) 133 120 */ 134 121 … … 142 129 143 130 /* 144 * udp_dstaddr_accept -- UDP ã®ãã¦å 145 ã¢ãã¬ã¹ãæ£ããããã§ãã¯ããã 146 * 147 * DHCP_CFG ãå®ç¾©ããã¦ããã¨ãã¯ã以ä¸ã®ãã¼ã¿ã°ã©ã ãåä¿¡ããã 148 * 149 * ã»ãã¦å 150 ã¢ãã¬ã¹ãããã¼ããã£ã¹ã 151 * ã»ãã¼ã«ã«ã¢ãã¬ã¹ãæªå®ç¾© 131 * udp_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。 132 * 133 * DHCP_CFG が定義されているときは、以下のデータグラムを受信する。 134 * 135 * ・あて先アドレスがブロードキャスト 136 * ・ローカルアドレスが未定義 152 137 */ 153 138 … … 168 153 169 154 /* 170 * udp_dstaddr_accept -- UDP ã®ãã¦å 171 ã¢ãã¬ã¹ãæ£ããããã§ãã¯ããã 172 * 173 * 以ä¸ã®å ´åããã¼ã¿ã°ã©ã ãåä¿¡ããã 174 * 175 * ã»ãã¦å 176 ã¢ãã¬ã¹ãããã¼ããã£ã¹ã 155 * udp_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。 156 * 157 * 以下の場合もデータグラムを受信する。 158 * 159 * ・あて先アドレスがブロードキャスト 177 160 */ 178 161 … … 194 177 195 178 /* 196 * udp_dstaddr_accept -- UDP ã®ãã¦å 197 ã¢ãã¬ã¹ãæ£ããããã§ãã¯ããã 198 * 199 * 以ä¸ã®å ´åããã¼ã¿ã°ã©ã ãåä¿¡ããã 200 * 201 * ã»ãã¦å 202 ã¢ãã¬ã¹ãããã¼ããã£ã¹ã 179 * udp_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。 180 * 181 * 以下の場合もデータグラムを受信する。 182 * 183 * ・あて先アドレスがブロードキャスト 203 184 */ 204 185 … … 222 203 223 204 /* 224 * udp_dstaddr_accept -- UDP ã®ãã¦å 225 ã¢ãã¬ã¹ãæ£ããããã§ãã¯ããã 226 * 227 * 以ä¸ã®å ´åããã¼ã¿ã°ã©ã ãåä¿¡ããã 228 * 229 * ã»ãã¦å 230 ã¢ãã¬ã¹ããã«ããã£ã¹ã 205 * udp_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。 206 * 207 * 以下の場合もデータグラムを受信する。 208 * 209 * ・あて先アドレスがマルチキャスト 231 210 */ 232 211 … … 243 222 244 223 /* 245 * udp_input -- UDP ã®å 246 ¥åé¢æ° 224 * udp_input -- UDP の入力関数 247 225 */ 248 226 … … 263 241 NET_COUNT_MIB(udp_stats.udpInDatagrams, 1); 264 242 265 /* ãããé·ããã§ãã¯ããã*/243 /* ヘッダ長をチェックする。*/ 266 244 if (input->len < hlen + UDP_HDR_SIZE) 267 245 goto buf_rel; … … 269 247 udph = (T_UDP_HDR *)(input->buf + *offp); 270 248 271 /* ãã¼ã¿ã°ã©ã é·ããã§ãã¯ãã*/249 /* データグラム長をチェックする */ 272 250 ulen = ntohs(udph->ulen); 273 251 if (ulen != input->len - hlen) 274 252 goto buf_rel; 275 253 276 /* å®å 277 ãã¼ãã 0 ã®ãã¼ã¿ã°ã©ã ã¯ç ´æ£ãããRFC768 */ 254 /* 宛先ポートが 0 のデータグラムは破棄する。RFC768 */ 278 255 if (udph->dport == 0) 279 256 goto buf_rel; … … 281 258 #ifdef UDP_CFG_IN_CHECKSUM 282 259 283 /* ãã§ãã¯ãµã ããã§ãã¯ãã*/260 /* チェックサムをチェックする */ 284 261 if (udph->sum && IN_CKSUM(input, IPPROTO_UDP, *offp, ulen) != 0) 285 262 goto buf_rel; … … 289 266 iph = GET_IP_HDR(input); 290 267 291 /* å®å 292 ã¢ãã¬ã¹ã¨ãã¼ãããã§ãã¯ãã */ 268 /* 宛先アドレスとポートをチェックする */ 293 269 for (ix = tmax_udp_ccepid; ix -- > 0; ) { 294 270 cep = &udp_cep[ix]; … … 298 274 len = (uint_t)(ntohs(udph->ulen) - UDP_HDR_SIZE); 299 275 300 if (cep->rcv_tskid != TA_NULL) { /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/276 if (cep->rcv_tskid != TA_NULL) { /* 非ノンブロッキングコールでペンディング中 */ 301 277 if (psnd_dtq(cep->rcvqid, (intptr_t)input) != E_OK) 302 278 goto buf_rel; … … 305 281 #ifdef UDP_CFG_NON_BLOCKING 306 282 307 else if (cep->rcv_p_dstaddr != NULL) { /* ãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/308 309 /* p_dstaddr ãè¨å®ããã*/283 else if (cep->rcv_p_dstaddr != NULL) { /* ノンブロッキングコールでペンディング中 */ 284 285 /* p_dstaddr を設定する。*/ 310 286 cep->rcv_p_dstaddr->portno = ntohs(udph->sport); 311 287 IN_COPY_TO_HOST(&cep->rcv_p_dstaddr->ipaddr, &GET_IP_HDR(input)->src); 312 288 313 /* ãã¼ã¿ããããã¡ã«ç§»ãã*/289 /* データをバッファに移す。*/ 314 290 memcpy(cep->rcv_data, GET_UDP_SDU(input, *offp), 315 291 (size_t)(len < cep->rcv_len ? len : cep->rcv_len)); … … 337 313 else if (IS_PTR_DEFINED(cep->callback)) { 338 314 339 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/315 /* コールバック関数を呼び出す。*/ 340 316 cep->cb_netbuf = input; 341 317 … … 351 327 352 328 /* 353 * ãããã¯ã¼ã¯ãããã¡ããã®ã¾ã¾ã§ããã°ãã³ã¼ã«ããã¯é¢æ°å 354 㧠355 * ãã¼ã¿ãèªã¿åºããªãã£ããã¨ã«ãªãã®ã§ãæ¨ã¦ãã 329 * ネットワークバッファがそのままであれば、コールバック関数内で 330 * データを読み出さなかったことになるので、捨てる。 356 331 */ 357 332 if (cep->cb_netbuf != NULL) … … 369 344 #if defined(SUPPORT_INET4) 370 345 371 /* ãã¼ã«ã« IP ã¢ãã¬ã¹ã«å±ãããã¼ã¿ã°ã©ã ã®ã¿ ICMP ã¨ã©ã¼ãéç¥ããã*/346 /* ローカル IP アドレスに届いたデータグラムのみ ICMP エラーを通知する。*/ 372 347 if (ntohl(iph->dst) == IF_GET_IFNET()->in_ifaddr.addr) { 373 348 syslog(LOG_INFO, "[UDP] unexp port: %d.", ntohs(udph->dport)); 374 349 375 350 icmp_error(ICMP4_UNREACH_PORT, input); 376 /* icmp_error ã§ã¯ããããã¯ã¼ã¯ãããã¡ input ãè¿å´ããªãã®ã§ä¸ã¸æããã*/351 /* icmp_error では、ネットワークバッファ input を返却しないので下へ抜ける。*/ 377 352 } 378 353 … … 381 356 #if defined(SUPPORT_INET6) 382 357 383 /* ãã«ããã£ã¹ãã¢ãã¬ã¹ã«å±ãããã¼ã¿ã°ã©ã 㯠ICMP ã¨ã©ã¼ãéç¥ããªãã*/358 /* マルチキャストアドレスに届いたデータグラムは ICMP エラーを通知しない。*/ 384 359 if (!IN6_IS_ADDR_MULTICAST(&iph->dst)) { 385 360 syslog(LOG_INFO, "[UDP] unexp port: %d.", ntohs(udph->dport)); 386 361 387 /* icmp6_error ã§ããããã¯ã¼ã¯ãããã¡ input ãè¿å´ããã*/362 /* icmp6_error で、ネットワークバッファ input を返却する。*/ 388 363 icmp6_error(input, ICMP6_DST_UNREACH, ICMP6_DST_UNREACH_NOPORT, 0); 389 364
Note:
See TracChangeset
for help on using the changeset viewer.