Changeset 331 for EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_input.c
- Timestamp:
- Jan 21, 2018, 12:10:09 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_input.c
r321 r331 2 2 * TINET (TCP/IP Protocol Stack) 3 3 * 4 * Copyright (C) 2001-20 09by Dep. of Computer Science and Engineering4 * Copyright (C) 2001-2017 by Dep. of Computer Science and Engineering 5 5 * Tomakomai National College of Technology, JAPAN 6 6 * … … 77 77 #include <t_syslog.h> 78 78 #include "kernel_cfg.h" 79 #include "tinet_cfg.h" 79 80 80 81 #endif /* of #ifdef TARGET_KERNEL_ASP */ … … 85 86 #include <t_services.h> 86 87 #include "kernel_id.h" 88 #include "tinet_id.h" 87 89 88 90 #endif /* of #ifdef TARGET_KERNEL_JSP */ … … 97 99 #include <net/ppp_ipcp.h> 98 100 #include <net/net.h> 101 #include <net/net_endian.h> 99 102 #include <net/net_buf.h> 100 103 #include <net/net_count.h> … … 107 110 #include <netinet/ip_icmp.h> 108 111 #include <netinet/tcp.h> 109 #include <netinet/tcp_timer.h>110 112 #include <netinet/tcp_var.h> 111 113 #include <netinet/udp.h> 112 114 #include <netinet/udp_var.h> 115 #include <netinet/ip_igmp.h> 113 116 114 117 #if defined(SUPPORT_IPSEC) … … 122 125 123 126 #include <net/if_var.h> 127 128 #if defined(_IP4_CFG) 124 129 125 130 /* … … 345 350 ip_remove_options (T_NET_BUF *nbuf) 346 351 { 347 T_IP_HDR *iph; 348 349 iph = GET_IP_HDR(nbuf); 350 351 if (GET_IP_HDR_SIZE(iph) > IP4_HDR_SIZE) { 352 memmove((char *)iph + IP4_HDR_SIZE, GET_IP_SDU(nbuf), 353 (size_t)(iph->len - GET_IP_HDR_SIZE(iph))); 352 T_IP4_HDR *iph; 353 uint_t hdr_size; 354 355 iph = GET_IP4_HDR(nbuf); 356 hdr_size = GET_IP4_HDR_SIZE(nbuf); 357 358 if (hdr_size > IP4_HDR_SIZE) { 359 memmove((char *)iph + IP4_HDR_SIZE, GET_IP4_SDU(nbuf), 360 (size_t)(iph->len - hdr_size)); 354 361 iph->vhl = IP4_MAKE_VHL(IPV4_VERSION, IP4_HDR_SIZE >> 2); 355 iph->len -= (uint16_t)( GET_IP_HDR_SIZE(iph)- IP4_HDR_SIZE);356 nbuf->len -= (uint16_t)( GET_IP_HDR_SIZE(iph)- IP4_HDR_SIZE);362 iph->len -= (uint16_t)(hdr_size - IP4_HDR_SIZE); 363 nbuf->len -= (uint16_t)(hdr_size - IP4_HDR_SIZE); 357 364 } 358 365 … … 389 396 } 390 397 391 ip4h 392 hlen = GET_IP4_HDR_SIZE(i p4h);398 ip4h = GET_IP4_HDR(input); 399 hlen = GET_IP4_HDR_SIZE(input); 393 400 394 401 /* バージョンをチェックする。*/ … … 429 436 /* 送信元アドレスをチェックする。*/ 430 437 src = ntohl(ip4h->src); 431 bc = (ifp->in _ifaddr.addr & ifp->in_ifaddr.mask) | ~ifp->in_ifaddr.mask;438 bc = (ifp->in4_ifaddr.addr & ifp->in4_ifaddr.mask) | ~ifp->in4_ifaddr.mask; 432 439 433 440 #ifdef SUPPORT_LOOP … … 441 448 #else /* of #ifdef SUPPORT_LOOP */ 442 449 443 if (src == ifp->in _ifaddr.addr || src == bc || src == IPV4_ADDR_BROADCAST || src == IPV4_ADDRANY) {450 if (src == ifp->in4_ifaddr.addr || src == bc || src == IPV4_ADDR_BROADCAST || src == IPV4_ADDRANY) { 444 451 NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_ADDR], 1); 445 452 NET_COUNT_MIB(ip_stats.ipInAddrErrors, 1); … … 459 466 */ 460 467 461 if ((ifp->in_ifaddr.addr != IPV4_ADDRANY) && 462 (!(dst == ifp->in_ifaddr.addr || dst == bc || 463 dst == IPV4_ADDR_BROADCAST || dst == IPV4_ADDRANY))) { 468 #if defined(ETHER_CFG_MULTICAST) 469 if ((ifp->in4_ifaddr.addr != IPV4_ADDRANY) && 470 (!(dst == ifp->in4_ifaddr.addr || dst == bc || 471 dst == IPV4_ADDR_BROADCAST || dst == IPV4_ADDRANY || 472 IN4_IS_ADDR_MULTICAST(dst)))) { 464 473 NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_ADDR], 1); 465 474 NET_COUNT_MIB(ip_stats.ipInAddrErrors, 1); 466 475 goto buf_rel; 467 476 } 477 #else 478 if ((ifp->in4_ifaddr.addr != IPV4_ADDRANY) && 479 (!(dst == ifp->in4_ifaddr.addr || dst == bc || 480 dst == IPV4_ADDR_BROADCAST || dst == IPV4_ADDRANY))) { 481 NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_ADDR], 1); 482 NET_COUNT_MIB(ip_stats.ipInAddrErrors, 1); 483 goto buf_rel; 484 } 485 #endif 468 486 469 487 #else /* of #ifdef DHCP_CFG */ 470 488 471 489 #if defined(ETHER_CFG_MULTICAST) 472 if (!(dst == ifp->in _ifaddr.addr || dst == bc ||490 if (!(dst == ifp->in4_ifaddr.addr || dst == bc || 473 491 dst == IPV4_ADDR_BROADCAST || dst == IPV4_ADDRANY || 474 492 IN4_IS_ADDR_MULTICAST(dst))) { … … 478 496 } 479 497 #else 480 if (!(dst == ifp->in _ifaddr.addr || dst == bc ||481 dst == IPV4_ADDR_BROADCAST || dst == IPV4_ADDRANY)) {498 if (!(dst == ifp->in4_ifaddr.addr || dst == bc || 499 dst == IPV4_ADDR_BROADCAST || dst == IPV4_ADDRANY)) { 482 500 NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_ADDR], 1); 483 501 NET_COUNT_MIB(ip_stats.ipInAddrErrors, 1); … … 525 543 switch (ip4h->proto) { 526 544 527 #ifdef SUPPORT_UDP 528 case IPPROTO_UDP: 529 NET_COUNT_MIB(ip_stats.ipInDelivers, 1); 530 udp_input(&input, &off, NULL); 531 return; 532 break; 533 #endif /* of #ifdef SUPPORT_UDP */ 534 535 #ifdef SUPPORT_TCP 545 #if defined(SUPPORT_TCP) 536 546 case IPPROTO_TCP: 537 547 NET_COUNT_MIB(ip_stats.ipInDelivers, 1); … … 539 549 return; 540 550 break; 541 #endif /* of #ifdef SUPPORT_UDP */ 551 #endif /* of #if defined(SUPPORT_TCP) */ 552 553 #if defined(SUPPORT_UDP) && ( (TNUM_UDP4_CEPID > 0) || \ 554 ((TNUM_UDP6_CEPID > 0) && defined(API_CFG_IP4MAPPED_ADDR))) 555 case IPPROTO_UDP: 556 NET_COUNT_MIB(ip_stats.ipInDelivers, 1); 557 udp4_input(&input, &off, NULL); 558 return; 559 break; 560 #endif /* of #if defined(SUPPORT_UDP) && TNUM_UDP4_CEPID > 0 */ 542 561 543 562 case IPPROTO_ICMP: … … 546 565 return; 547 566 break; 567 568 #if defined(SUPPORT_IGMP) 569 case IPPROTO_IGMP: 570 NET_COUNT_MIB(ip_stats.ipInDelivers, 1); 571 igmp_input(&input, &off, NULL); 572 return; 573 break; 574 #endif /* of #ifdef UDP_CFG_EXTENTIONS */ 548 575 549 576 #if defined(SUPPORT_IPSEC) … … 560 587 561 588 /* ローカル IP アドレスに届いたデータグラムのみ ICMP エラーを通知する。*/ 562 if (dst == ifp->in _ifaddr.addr) {589 if (dst == ifp->in4_ifaddr.addr) { 563 590 T_IN4_ADDR src; 564 591 … … 578 605 syscall(rel_net_buf(input)); 579 606 } 607 608 #endif /* of #if defined(_IP4_CFG) */
Note:
See TracChangeset
for help on using the changeset viewer.