Changeset 331 for EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6
- Timestamp:
- Jan 21, 2018, 12:10:09 AM (6 years ago)
- Location:
- EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6
- Files:
-
- 2 added
- 29 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/ah.h
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 * … … 67 67 #define _AH_H_ 68 68 69 #ifdef SUPPORT_INET670 71 69 /* 72 70 * RFC2402 認証ヘッダ … … 80 78 uint32_t spi; /* Security Parameter Index (SPI) */ 81 79 uint32_t seq; /* シーケンス番号 */ 82 } __attribute__((packed, aligned(2)))T_IP6_AH_HDR; 83 84 #endif /* of #ifdef SUPPORT_INET6 */ 80 } __attribute__((packed, aligned(2))) T_IP6_AH_HDR; 85 81 86 82 #endif /* of #ifndef _AH_H_ */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/ah6.h
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 * … … 67 67 #define _AH6_H_ 68 68 69 #ifdef SUPPORT_INET670 71 69 /* 72 70 * 関数 … … 75 73 extern uint_t ah6_input (T_NET_BUF **inputp, uint_t *offp, uint_t *nextp); 76 74 77 #endif /* of #ifdef SUPPORT_INET6 */78 79 75 #endif /* of #ifndef _AH6_H_ */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/ah_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 * … … 82 82 83 83 #include <net/net.h> 84 #include <net/net_endian.h> 84 85 #include <net/if.h> 85 86 #include <net/if_loop.h> … … 92 93 93 94 #include <netinet/in.h> 94 #include <netinet6/in6.h> 95 #include <netinet6/in6_var.h> 95 #include <netinet/in_var.h> 96 #include <netinet/ip.h> 97 #include <netinet/ip_var.h> 98 #include <netinet/ip_icmp.h> 96 99 #include <netinet6/nd6.h> 97 #include <netinet/ip6.h>98 #include <netinet6/ip6_var.h>99 #include <netinet/icmp6.h>100 100 #include <netinet6/ah.h> 101 101 #include <netinet6/ah6.h> 102 102 103 #ifdef SUPPORT_INET6103 #ifdef _IP6_CFG 104 104 105 105 /* … … 116 116 } 117 117 118 #endif /* of #ifdef SUPPORT_INET6*/118 #endif /* of #ifdef _IP6_CFG */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/dest6.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 * … … 88 88 #include <net/ppp_ipcp.h> 89 89 #include <net/net.h> 90 #include <net/net_endian.h> 90 91 #include <net/net_buf.h> 91 92 #include <net/net_count.h> 92 93 93 94 #include <netinet/in.h> 94 #include <netinet6/in6.h> 95 #include <netinet6/in6_var.h> 95 #include <netinet/in_var.h> 96 #include <netinet/ip.h> 97 #include <netinet/ip_var.h> 98 #include <netinet/ip_icmp.h> 96 99 #include <netinet6/nd6.h> 97 #include <netinet/ip6.h>98 #include <netinet6/ip6_var.h>99 #include <netinet/icmp6.h>100 100 101 #ifdef SUPPORT_INET6101 #ifdef _IP6_CFG 102 102 103 103 /* … … 163 163 } 164 164 165 #endif /* of #ifdef SUPPORT_INET6*/165 #endif /* of #ifdef _IP6_CFG */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/esp.h
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 * Copyright (C) 2008-2009 by Hokkaido Industrial Research Institute, JAPAN … … 68 68 #define _ESP_H_ 69 69 70 #if defined(SUPPORT_INET6) || defined(SUPPORT_IPSEC)71 72 70 /* 73 71 * RFC2406 暗号化ヘッダ … … 129 127 #endif /* of #ifdef T_IPSEC_REQUEST_DEFINED */ 130 128 131 #endif /* defined(SUPPORT_INET6) || defined(SUPPORT_IPSEC) */132 133 129 #endif /* of #ifndef _ESP_H_ */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/esp6.h
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 * … … 67 67 #define _ESP6_H_ 68 68 69 #ifdef SUPPORT_INET670 71 69 /* 72 70 * 関数 … … 75 73 extern uint_t esp6_input (T_NET_BUF **inputp, uint_t *offp, uint_t *nextp); 76 74 77 #endif /* of #ifdef SUPPORT_INET6 */78 79 75 #endif /* of #ifndef _ESP6_H_ */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/esp_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 * … … 88 88 #include <net/ppp_ipcp.h> 89 89 #include <net/net.h> 90 #include <net/net_endian.h> 90 91 #include <net/net_buf.h> 91 92 #include <net/net_count.h> 92 93 93 94 #include <netinet/in.h> 94 #include <netinet6/in6.h> 95 #include <netinet6/in6_var.h> 95 #include <netinet/in_var.h> 96 #include <netinet/ip.h> 97 #include <netinet/ip_var.h> 98 #include <netinet/ip_icmp.h> 96 99 #include <netinet6/nd6.h> 97 #include <netinet/ip6.h>98 #include <netinet6/ip6_var.h>99 #include <netinet/icmp6.h>100 100 #include <netinet6/ah.h> 101 101 #include <netinet6/ah6.h> … … 103 103 #include <netinet6/esp6.h> 104 104 105 #ifdef SUPPORT_INET6105 #ifdef _IP6_CFG 106 106 107 107 /* … … 122 122 } 123 123 124 #endif /* of #ifdef SUPPORT_INET6*/124 #endif /* of #ifdef _IP6_CFG */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/frag6.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 * … … 92 92 #include <net/ppp_ipcp.h> 93 93 #include <net/net.h> 94 #include <net/net_endian.h> 94 95 #include <net/net_buf.h> 95 96 #include <net/net_var.h> … … 97 98 98 99 #include <netinet/in.h> 99 #include <netinet6/in6.h> 100 #include <netinet6/in6_var.h> 100 #include <netinet/in_var.h> 101 #include <netinet/ip.h> 102 #include <netinet/ip_var.h> 103 #include <netinet/ip_icmp.h> 101 104 #include <netinet6/nd6.h> 102 #include <netinet/ip6.h> 103 #include <netinet6/ip6_var.h> 104 #include <netinet/icmp6.h> 105 106 #ifdef SUPPORT_INET6 105 106 #ifdef _IP6_CFG 107 107 108 108 #ifdef IP6_CFG_FRAGMENT … … 606 606 /* 送信先アドレスを元に戻す。*/ 607 607 ip6h = GET_IP6_HDR(input); 608 ip6h->dst = ip6_frag_dest[ip6fq - ip6_frag_queue];608 memcpy(&ip6h->dst, &ip6_frag_dest[ip6fq - ip6_frag_queue], sizeof(T_IN6_ADDR)); 609 609 610 610 /* offp を、再構成した断片の先頭に設定する。*/ … … 669 669 } 670 670 671 #endif /* of #ifdef SUPPORT_INET6*/671 #endif /* of #ifdef _IP6_CFG */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/icmp6.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 * … … 106 106 #include <sil.h> 107 107 #include <t_syslog.h> 108 #include "tinet_cfg.h" 108 109 109 110 #endif /* of #ifdef TARGET_KERNEL_ASP */ … … 113 114 #include <s_services.h> 114 115 #include <t_services.h> 116 #include "tinet_id.h" 115 117 116 118 #endif /* of #ifdef TARGET_KERNEL_JSP */ … … 124 126 #include <net/ethernet.h> 125 127 #include <net/net.h> 128 #include <net/net_endian.h> 126 129 #include <net/net_buf.h> 127 130 #include <net/net_timer.h> … … 130 133 #include <netinet/in.h> 131 134 #include <netinet/in_var.h> 132 #include <netinet6/in6.h> 133 #include <netinet6/in6_var.h> 134 #include <netinet/ip6.h> 135 #include <netinet6/ip6_var.h> 136 #include <netinet/icmp6.h> 135 #include <netinet/ip.h> 136 #include <netinet/ip_var.h> 137 #include <netinet/ip_icmp.h> 138 #include <netinet/tcp.h> 139 #include <netinet/tcp_var.h> 140 #include <netinet/udp_var.h> 141 137 142 #include <netinet6/nd6.h> 138 #include <netinet/tcp.h> 139 #include <netinet/tcp_timer.h> 140 #include <netinet/tcp_var.h> 141 142 #ifdef SUPPORT_INET6 143 144 #ifdef _IP6_CFG 143 145 144 146 /* … … 178 180 return; 179 181 } 180 ip6h->src = ia->addr;182 memcpy(&ip6h->src, &ia->addr, sizeof(T_IN6_ADDR)); 181 183 182 184 icmp6h = GET_ICMP6_HDR(output, off); … … 241 243 242 244 /* IPv6 ヘッダの発信元アドレスと宛先アドレスを入替える。*/ 243 dst = ip6h->dst;244 ip6h->dst = ip6h->src;245 ip6h->src = dst;245 memcpy(&dst, &ip6h->dst, sizeof(T_IN6_ADDR)); 246 memcpy(&ip6h->dst, &ip6h->src, sizeof(T_IN6_ADDR)); 247 memcpy(&ip6h->src, &dst, sizeof(T_IN6_ADDR)); 246 248 247 249 /* … … 256 258 } 257 259 else 258 ip6h->src = ia->addr;260 memcpy(&ip6h->src, &ia->addr, sizeof(T_IN6_ADDR)); 259 261 } 260 262 261 263 /* 次ヘッダとホップリミットを設定する。*/ 262 264 ip6h->next = IPPROTO_ICMPV6; 263 ip6h->hlim = IP _DEFTTL;265 ip6h->hlim = IP6_DEFTTL; 264 266 265 267 /* チェックサムを計算する。*/ … … 299 301 loff = ip6_lasthdr(input, poff + ICMP6_HDR_SIZE, IPPROTO_IPV6, &next); 300 302 301 /* 最終ヘッダが TCP のみ対応する。*/ 302 if (loff >= 0 && next == IPPROTO_TCP) { 303 304 #ifdef SUPPORT_TCP 303 /* 最終ヘッダが TCP/UDP のみ対応する。*/ 304 if (loff >= 0 && (next == IPPROTO_TCP || next == IPPROTO_UDP)) { 305 305 306 306 memcpy(GET_IP6_HDR(input), input->buf + (loff + ICMP6_HDR_SIZE), 307 307 input->len - (loff + ICMP6_HDR_SIZE)); 308 308 input->len -= loff + ICMP6_HDR_SIZE; 309 tcp_notify(input, icmp6h->code == ICMP6_DST_UNREACH_NOPORT ? EV_CNNRF : EV_HURCH); 310 311 #endif /* of #ifdef SUPPORT_TCP */ 309 310 #if defined(SUPPORT_TCP) 311 312 if (next == IPPROTO_TCP) 313 314 tcp_notify(input, icmp6h->code == ICMP6_DST_UNREACH_NOPORT ? EV_CNNRF : EV_HURCH); 315 316 #endif /* of #if defined(SUPPORT_TCP) */ 317 318 #if defined(SUPPORT_UDP) && TNUM_UDP6_CEPID > 0 319 320 if (next == IPPROTO_UDP) 321 322 udp6_notify(input, icmp6h->code == ICMP6_DST_UNREACH_NOPORT ? EV_CNNRF : EV_HURCH); 323 324 #endif /* of #if defined(SUPPORT_UDP) && TNUM_UDP6_CEPID > 0 */ 312 325 313 326 } … … 340 353 #endif /* of #if NUM_IN6_HOSTCACHE_ENTRY > 0 */ 341 354 342 #if NUM_REDIRECT_ROUTE_ENTRY > 0 355 #if defined(NUM_IN6_REDIRECT_ROUTE_ENTRY) 356 #if NUM_IN6_REDIRECT_ROUTE_ENTRY > 0 343 357 344 358 /* … … 350 364 { 351 365 T_IP6_HDR *ip6h; 352 T_IN6_ADDR*gw;366 const T_IN6_ADDR *gw; 353 367 T_ND_REDIRECT_HDR *rdh; 354 368 T_ND_OPT_HDR *opth; … … 440 454 } 441 455 442 #endif /* of #if NUM_REDIRECT_ROUTE_ENTRY > 0 */ 456 #endif /* of #if NUM_IN6_REDIRECT_ROUTE_ENTRY > 0 */ 457 #endif /* of #if defined(NUM_IN6_REDIRECT_ROUTE_ENTRY) */ 443 458 444 459 /* … … 472 487 473 488 /* チェックサムを計算する。*/ 474 if ((in6_cksum(input, IPPROTO_ICMPV6, off, ntohs(ip6h->plen) - (off - IF_IP _HDR_SIZE)) & 0xffff) != 0) {489 if ((in6_cksum(input, IPPROTO_ICMPV6, off, ntohs(ip6h->plen) - (off - IF_IP6_HDR_SIZE)) & 0xffff) != 0) { 475 490 NET_COUNT_ICMP6(net_count_icmp6[NC_ICMP6_IN_ERR_PACKETS], 1); 476 491 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInErrors, 1); … … 530 545 NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInRedirects, 1); 531 546 532 #if NUM_REDIRECT_ROUTE_ENTRY > 0 547 #if defined(NUM_IN6_REDIRECT_ROUTE_ENTRY) 548 #if NUM_IN6_REDIRECT_ROUTE_ENTRY > 0 533 549 534 550 if (code != 0 || len < ND_REDIRECT_HDR_SIZE) … … 537 553 return IPPROTO_DONE; 538 554 539 #else /* of #if NUM_ REDIRECT_ROUTE_ENTRY > 0 */555 #else /* of #if NUM_IN6_REDIRECT_ROUTE_ENTRY > 0 */ 540 556 541 557 syslog(LOG_WARNING, "[ICMP6] redirect ignored."); 542 558 543 #endif /* of #if NUM_REDIRECT_ROUTE_ENTRY > 0 */ 559 #endif /* of #if NUM_IN6_REDIRECT_ROUTE_ENTRY > 0 */ 560 #else /* of #if defined(NUM_IN6_REDIRECT_ROUTE_ENTRY) */ 561 562 syslog(LOG_WARNING, "[ICMP6] redirect ignored."); 563 564 #endif /* of #if defined(NUM_IN6_REDIRECT_ROUTE_ENTRY) */ 544 565 545 566 break; … … 571 592 case ICMP6_FQDN_QUERY: /* FQDN 照会 */ 572 593 case ICMP6_FQDN_REPLY: /* FQDN 応答 */ 573 syslog(LOG_ WARNING, "[ICMP6] unsupported type: %d.", icmp6h->type);594 syslog(LOG_INFO, "[ICMP6] unsupported type: %d.", icmp6h->type); 574 595 break; 575 596 … … 693 714 } 694 715 695 #endif /* of #ifdef SUPPORT_INET6*/716 #endif /* of #ifdef _IP6_CFG */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/if6_ether.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 * … … 87 87 #include <net/if_arp.h> 88 88 #include <net/net.h> 89 #include <net/net_endian.h> 89 90 #include <net/net_timer.h> 90 91 #include <net/net_buf.h> … … 92 93 93 94 #include <netinet/in.h> 95 #include <netinet/in_var.h> 94 96 #include <netinet/ip.h> 95 97 #include <netinet/if_ether.h> … … 98 100 #include <netinet6/in6_var.h> 99 101 100 #include <net/if 6_var.h>102 #include <net/if_var.h> 101 103 102 #if defined( SUPPORT_INET6) && defined(SUPPORT_ETHER)104 #if defined(_IP6_CFG) && defined(SUPPORT_ETHER) 103 105 104 106 /* … … 107 109 108 110 void 109 ether_map_ipv6_multicast (T_ETHER_ADDR *eaddr, T_IN6_ADDR *maddr)111 ether_map_ipv6_multicast (T_ETHER_ADDR *eaddr, const T_IN6_ADDR *maddr) 110 112 { 111 113 eaddr->lladdr[0] = UINT_C(0x33); … … 117 119 } 118 120 119 #endif /* of #if defined( SUPPORT_INET6) && defined(SUPPORT_ETHER) */121 #endif /* of #if defined(_IP6_CFG) && defined(SUPPORT_ETHER) */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/if6_ether.h
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 * … … 68 68 #define _IF6_ETHER_H_ 69 69 70 #ifdef SUPPORT_INET671 72 70 /* 73 71 * 関数 74 72 */ 75 73 76 extern void ether_map_ipv6_multicast (T_ETHER_ADDR *eaddr, T_IN6_ADDR *maddr); 77 78 #endif /* of #ifdef SUPPORT_INET6 */ 74 extern void ether_map_ipv6_multicast (T_ETHER_ADDR *eaddr, const T_IN6_ADDR *maddr); 79 75 80 76 #endif /* of #ifndef _IF6_ETHER_H_ */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/in6.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 * … … 126 126 #include <net/ppp_ipcp.h> 127 127 #include <net/net.h> 128 #include <net/net_endian.h> 128 129 #include <net/net_buf.h> 129 130 #include <net/net_timer.h> 130 131 #include <net/net_count.h> 132 133 #include <netinet/in.h> 134 #include <netinet/in_var.h> 131 135 132 136 #include <netinet6/in6.h> … … 135 139 #include <netinet6/in6_ifattach.h> 136 140 137 #include <net/if 6_var.h>138 139 #ifdef SUPPORT_INET6141 #include <net/if_var.h> 142 143 #ifdef _IP6_CFG 140 144 141 145 /* … … 143 147 */ 144 148 145 T_IN6_ADDR in6_addr_unspecified =149 const T_IN6_ADDR in6_addr_unspecified = 146 150 IPV6_ADDR_UNSPECIFIED_INIT; 147 151 148 T_IN6_ADDR in6_addr_linklocal_allnodes =152 const T_IN6_ADDR in6_addr_linklocal_allnodes = 149 153 IPV6_ADDR_LINKLOCAL_ALLNODES_INIT; 150 154 151 T_IN6_ADDR in6_addr_linklocal_allrouters =155 const T_IN6_ADDR in6_addr_linklocal_allrouters = 152 156 IPV6_ADDR_LINKLOCAL_ALLROUTERS_INIT; 153 157 … … 172 176 173 177 static ER 174 in6_ifinit (T_IFNET *ifp, T_IN6_IFADDR *ia, T_IN6_ADDR *addr, uint_t prefix_len)178 in6_ifinit (T_IFNET *ifp, T_IN6_IFADDR *ia, const T_IN6_ADDR *addr, uint_t prefix_len) 175 179 { 176 180 /* アドレスとプレフィックス長を設定する。*/ … … 200 204 201 205 for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) { 202 ia = &ifp->in _ifaddrs[ix];206 ia = &ifp->in6_ifaddrs[ix]; 203 207 memset(ia, sizeof(T_IN6_IFADDR), 0); 204 208 ia->router_index = IN6_RTR_IX_UNREACH; … … 226 230 227 231 int_t 228 in6_addr2ifaix ( T_IN6_ADDR *addr)232 in6_addr2ifaix (const T_IN6_ADDR *addr) 229 233 { 230 234 T_IFNET *ifp = IF_GET_IFNET(); … … 233 237 234 238 for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) { 235 ia = &ifp->in _ifaddrs[ix];239 ia = &ifp->in6_ifaddrs[ix]; 236 240 if ((ia->flags & IN6_IFF_DEFINED) != 0 && 237 241 in6_are_prefix_equal(addr, &ia->addr, ia->prefix_len)) … … 247 251 248 252 int_t 249 in6_addr2maix ( T_IN6_ADDR *addr)253 in6_addr2maix (const T_IN6_ADDR *addr) 250 254 { 251 255 if (addr->s6_addr8[0] == 0xff) { … … 268 272 269 273 ER 270 in6_update_ifa (T_IFNET *ifp, T_IN6_IFADDR *ia, T_IN6_ADDR *addr,274 in6_update_ifa (T_IFNET *ifp, T_IN6_IFADDR *ia, const T_IN6_ADDR *addr, 271 275 uint_t prefix_len, uint32_t vltime, uint32_t pltime, 272 276 int_t router_index, int_t prefix_index, uint_t flags) … … 365 369 in6ifa_ifpwithix (T_IFNET *ifp, int_t ix) 366 370 { 367 return ix < NUM_IN6_IFADDR_ENTRY? &ifp->in _ifaddrs[ix] : NULL;371 return ix < NUM_IN6_IFADDR_ENTRY? &ifp->in6_ifaddrs[ix] : NULL; 368 372 } 369 373 … … 379 383 380 384 for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) 381 if (ifp->in _ifaddrs[ix].router_index == router_index)382 return &ifp->in _ifaddrs[ix];385 if (ifp->in6_ifaddrs[ix].router_index == router_index) 386 return &ifp->in6_ifaddrs[ix]; 383 387 return NULL; 384 388 } 385 389 386 390 /* 387 * in6_ifawithifp -- 宛先アドレスにふさわしい送信元アドレス を、391 * in6_ifawithifp -- 宛先アドレスにふさわしい送信元アドレス情報を、 388 392 * ネットワークインタフェースから探索する。 389 393 */ 390 394 391 395 T_IN6_IFADDR * 392 in6_ifawithifp (T_IFNET *ifp, T_IN6_ADDR *dst)396 in6_ifawithifp (T_IFNET *ifp, const T_IN6_ADDR *dst) 393 397 { 394 398 uint_t scope; … … 397 401 /* 宛先アドレスと同じスコープのアドレスを返す。*/ 398 402 if ((ix = in6_addr2ifaix(dst)) != IPV6_IFADDR_IX_INVALID) 399 return &ifp->in _ifaddrs[ix];403 return &ifp->in6_ifaddrs[ix]; 400 404 else if ((ix = in6_addr2maix(dst)) == IPV6_MADDR_IX_SOL_NODE || 401 405 ix == IPV6_MADDR_IX_LL_ALL_NODE) 402 return &ifp->in _ifaddrs[IPV6_IFADDR_IX_LINKLOCAL];406 return &ifp->in6_ifaddrs[IPV6_IFADDR_IX_LINKLOCAL]; 403 407 else { 404 408 scope = in6_addrscope(dst); 405 409 for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) { 406 if ((ifp->in _ifaddrs[ix].flags & IN6_IFF_DEFINED) &&407 (ifp->in _ifaddrs[ix].flags & IN6_IFF_DETACHED) == 0 &&408 in6_addrscope(&ifp->in _ifaddrs[ix].addr) == scope) {409 return &ifp->in _ifaddrs[ix];410 if ((ifp->in6_ifaddrs[ix].flags & IN6_IFF_DEFINED) && 411 (ifp->in6_ifaddrs[ix].flags & IN6_IFF_DETACHED) == 0 && 412 in6_addrscope(&ifp->in6_ifaddrs[ix].addr) == scope) { 413 return &ifp->in6_ifaddrs[ix]; 410 414 } 411 415 } 412 416 return NULL; 417 } 418 } 419 420 /* 421 * in6_addrwithifp -- 宛先アドレスにふさわしい送信元アドレスを、 422 * ネットワークインタフェースから探索する。 423 */ 424 425 const T_IN6_ADDR * 426 in6_addrwithifp (T_IFNET *ifp, T_IN6_ADDR *src, const T_IN6_ADDR *dst) 427 { 428 T_IN6_IFADDR *ifaddr; 429 430 if ((ifaddr = in6_ifawithifp(ifp, dst)) == NULL) 431 return NULL; 432 else { 433 *src = ifaddr->addr; 434 return src; 413 435 } 414 436 } … … 431 453 dad_delay = 0; 432 454 for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) 433 if ((ifp->in _ifaddrs[ix].flags & IN6_IFF_DEFINED) &&434 (ifp->in _ifaddrs[ix].flags & IN6_IFF_TENTATIVE))435 nd6_dad_start(ifp, &ifp->in _ifaddrs[ix], &dad_delay);455 if ((ifp->in6_ifaddrs[ix].flags & IN6_IFF_DEFINED) && 456 (ifp->in6_ifaddrs[ix].flags & IN6_IFF_TENTATIVE)) 457 nd6_dad_start(ifp, &ifp->in6_ifaddrs[ix], &dad_delay); 436 458 #endif /* of #if 0 */ 437 459 … … 449 471 450 472 bool_t 451 in6_are_prefix_equal ( T_IN6_ADDR *addr,T_IN6_ADDR *prefix, uint_t prefix_len)473 in6_are_prefix_equal (const T_IN6_ADDR *addr, const T_IN6_ADDR *prefix, uint_t prefix_len) 452 474 { 453 475 uint_t bitlen, bytelen; … … 478 500 syscall(get_tim(&now)); 479 501 for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) { 480 ia = &ifp->in _ifaddrs[ix];502 ia = &ifp->in6_ifaddrs[ix]; 481 503 482 504 if ((ia->flags & IN6_IFF_DEFINED) == 0) … … 500 522 } 501 523 502 #endif /* of #ifdef SUPPORT_INET6*/524 #endif /* of #ifdef _IP6_CFG */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/in6.h
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 * … … 103 103 104 104 /* 105 * IPv6 アドレス構造 106 * 107 * RFC4291(RFC1884、RFC2373、RFC3513 のアップデート) 108 */ 109 110 /* 105 111 * IPv6 アドレス 106 112 */ … … 150 156 151 157 /* 152 * アドレスの定義153 */154 155 #ifdef _NET_CFG_BYTE_ORDER156 157 #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN158 159 #define IPV6_ADDR_INT32_ONE ULONG_C(0x00000001)160 #define IPV6_ADDR_INT32_TWO ULONG_C(0x00000002)161 #define IPV6_ADDR_INT32_0000FFFF ULONG_C(0x0000ffff)162 #define IPV6_ADDR_INT32_MNL ULONG_C(0xff010000)163 #define IPV6_ADDR_INT32_MLL ULONG_C(0xff020000)164 #define IPV6_ADDR_INT32_ULL ULONG_C(0xfe800000)165 #define IPV6_ADDR_INT16_ULL UINT_C(0xfe80)166 #define IPV6_ADDR_INT16_USL UINT_C(0xfec0)167 #define IPV6_ADDR_INT16_MLL UINT_C(0xff02)168 169 #elif _NET_CFG_BYTE_ORDER == _NET_CFG_LITTLE_ENDIAN170 171 #define IPV6_ADDR_INT32_ONE ULONG_C(0x01000000)172 #define IPV6_ADDR_INT32_TWO ULONG_C(0x02000000)173 #define IPV6_ADDR_INT32_0000FFFF ULONG_C(0xffff0000)174 #define IPV6_ADDR_INT32_MNL ULONG_C(0x000001ff)175 #define IPV6_ADDR_INT32_MLL ULONG_C(0x000002ff)176 #define IPV6_ADDR_INT32_ULL ULONG_C(0x000080fe)177 #define IPV6_ADDR_INT16_ULL UINT_C(0x80fe)178 #define IPV6_ADDR_INT16_USL UINT_C(0xc0fe)179 #define IPV6_ADDR_INT16_MLL UINT_C(0x02ff)180 181 #endif /* #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN */182 183 #endif /* of #ifdef _NET_CFG_BYTE_ORDER */184 185 /*186 158 * 特別なアドレスのチェック 187 159 */ … … 197 169 (memcmp((void *)(a), (void *)&in6_addr_unspecified, sizeof(T_IN6_ADDR) - 1) == 0 && \ 198 170 (a)->s6_addr8[15] == 0x01) 199 200 /* IPv4 互換 */201 202 #define IN6_IS_ADDR_V4COMPAT(a) \203 (memcmp((void *)(a), (void *)&in6_addr_unspecified, sizeof(T_IN6_ADDR) - 4) == 0 && \204 (a)->s6_addr32[3] > IPV6_ADDR_INT32_ONE)205 206 /* IPv4 マップ */207 208 #define IN6_IS_ADDR_V4MAPPED(a) \209 (((a)->s6_addr32[0] == ULONG_C(0x00000000)) && \210 ((a)->s6_addr32[1] == ULONG_C(0x00000000)) && \211 ((a)->s6_addr32[2] == IPV6_ADDR_INT32_0000FFFF))212 171 213 172 /* … … 248 207 #define IN6_IS_ADDR_MULTICAST(a) ((a)->s6_addr8[0] == UINT_C(0xff)) 249 208 250 /* 要請マルチキャスト */251 252 #define IN6_IS_ADDR_NS_MULTICAST(a) \253 (((a)->s6_addr32[0] == IPV6_ADDR_INT32_MLL) && \254 ((a)->s6_addr32[1] == ULONG_C(0x00000000)) && \255 ((a)->s6_addr32[2] == IPV6_ADDR_INT32_ONE) && \256 ((a)->s6_addr8[12] == UINT_C(0xff)))257 258 209 /* 259 210 * 同一のチェック … … 272 223 */ 273 224 274 #define IPV6_DEFAULT_MULTICAST_HOPS 1 /* マルチキャスト時のホップリミットの規定値 */ 225 #define IPV6_DEFAULT_MULTICAST_HOPS 1 /* マルチキャスト時のホップリミットの規定値 */ 226 #define ND6_INFINITE_LIFETIME 0xffffffff /* アドレスの無制限有効時間 */ 275 227 276 228 /* … … 282 234 uint16_t portno; /* ポート番号 */ 283 235 } T_IPV6EP; 236 237 #define T_IPV6EP_DEFINED 284 238 285 239 /* … … 299 253 /* 実装依存 */ 300 254 } T_TCP6_CREP; 301 302 #if defined(SUPPORT_INET6)303 #define T_TCP_CREP T_TCP6_CREP304 #endif305 255 306 256 /* … … 316 266 } T_UDP6_CCEP; 317 267 318 #if defined(SUPPORT_INET6)319 #define T_UDP_CCEP T_UDP6_CCEP320 #endif321 322 /*323 * IPv4 と IPv6 をコンパイル時に選択するためのマクロ324 */325 326 #if defined(SUPPORT_INET6)327 328 #define T_IN_ADDR T_IN6_ADDR329 #define T_IPEP T_IPV6EP330 #define IP_ADDRANY IPV6_ADDRANY331 332 #define IN_ARE_ADDR_EQUAL(n,h) IN6_ARE_ADDR_EQUAL(n,h)333 #define IN_ARE_NET_ADDR_EQUAL(n,h) IN6_ARE_ADDR_EQUAL(n,h)334 #define IN_COPY_TO_NET(d,s) memcpy(d,s,sizeof(T_IN6_ADDR))335 #define IN_COPY_TO_HOST(d,s) memcpy(d,s,sizeof(T_IN6_ADDR))336 #define IN_IS_ADDR_MULTICAST(a) IN6_IS_ADDR_MULTICAST(a)337 #define IN_IS_NET_ADDR_MULTICAST(a) IN6_IS_ADDR_MULTICAST(a)338 #define IN_IS_ADDR_ANY(a) IN6_IS_ADDR_UNSPECIFIED(a)339 340 #endif /* of #if defined(SUPPORT_INET6) */341 342 268 /* 343 269 * 前方参照 … … 356 282 */ 357 283 358 extern T_IN6_ADDR in6_addr_unspecified;359 extern T_IN6_ADDR in6_addr_linklocal_allnodes;360 extern T_IN6_ADDR in6_addr_linklocal_allrouters;284 extern const T_IN6_ADDR in6_addr_unspecified; 285 extern const T_IN6_ADDR in6_addr_linklocal_allnodes; 286 extern const T_IN6_ADDR in6_addr_linklocal_allrouters; 361 287 362 288 #define ipv6_addrany in6_addr_unspecified … … 366 292 */ 367 293 368 extern char *ipv62str (char *buf, const T_IN6_ADDR *p_ ip6addr);369 extern ER_UINTin6_get_maxnum_ifaddr (void);294 extern char *ipv62str (char *buf, const T_IN6_ADDR *p_addr); 295 extern uint_t in6_get_maxnum_ifaddr (void); 370 296 extern const T_IN6_ADDR *in6_get_ifaddr (int_t index); 297 extern ER in6_upd_ifaddr (T_IN6_ADDR *addr, uint_t prefixlen, 298 uint32_t vltime, uint32_t pltime); 299 extern ER in6_del_ifaddr (T_IN6_ADDR *addr); 300 extern T_IN6_ADDR *in6_make_ipv4mapped (T_IN6_ADDR *dst, T_IN4_ADDR src); 301 extern bool_t in6_is_addr_ipv4mapped (const T_IN6_ADDR *addr); 371 302 372 303 #endif /* of #ifndef _IN6_H_ */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/in6_ifattach.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 * … … 87 87 #include <net/if_arp.h> 88 88 #include <net/net.h> 89 #include <net/net_endian.h> 90 91 #include <netinet/in.h> 92 #include <netinet/in_var.h> 89 93 90 94 #include <netinet6/in6.h> … … 93 97 #include <netinet6/in6_ifattach.h> 94 98 95 #include <net/if 6_var.h>96 97 #ifdef SUPPORT_INET699 #include <net/if_var.h> 100 101 #ifdef _IP6_CFG 98 102 99 103 /* … … 126 130 #endif /* of #ifdef SUPPORT_ETHER */ 127 131 132 #ifdef SUPPORT_PPP 133 134 /* 135 * get_rand_ifid -- 乱数により、インタフェース識別子を設定する。 136 */ 137 138 static ER 139 get_rand_ifid (T_IFNET *ifp, T_IN6_ADDR *ifra_addr) 140 { 141 return E_OK; 142 } 143 144 #endif /* of #ifdef SUPPORT_PPP */ 145 128 146 #ifdef IP6_CFG_AUTO_LINKLOCAL 129 147 … … 149 167 150 168 /* インタフェースのアドレス情報を更新する。*/ 151 if ((error = in6_update_ifa(ifp, &ifp->in _ifaddrs[IPV6_IFADDR_IX_LINKLOCAL],169 if ((error = in6_update_ifa(ifp, &ifp->in6_ifaddrs[IPV6_IFADDR_IX_LINKLOCAL], 152 170 &addr, 64, ND6_INFINITE_LIFETIME, 153 171 ND6_INFINITE_LIFETIME, … … 171 189 #ifdef IP6_CFG_AUTO_LINKLOCAL 172 190 173 if ((ifp->in _ifaddrs[IPV6_IFADDR_IX_LINKLOCAL].flags & IN6_IFF_DEFINED) == 0)191 if ((ifp->in6_ifaddrs[IPV6_IFADDR_IX_LINKLOCAL].flags & IN6_IFF_DEFINED) == 0) 174 192 if ((error = in6_ifattach_linklocal(ifp)) != E_OK) 175 193 return error; … … 180 198 } 181 199 182 #endif /* of #ifdef SUPPORT_INET6*/200 #endif /* of #ifdef _IP6_CFG */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/in6_ifattach.h
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 * -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/in6_rename.h
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 * … … 41 41 /* netinet6/in6.c */ 42 42 43 #define in6_are_prefix_equal _tinet_in6_are_prefix_equal 44 #define in6ifa_ifpwithrtrix _tinet_in6ifa_ifpwithrtrix 45 #define in6_if_up _tinet_in6_if_up 46 #define in6_if2idlen _tinet_in6_if2idlen 47 #define in6_ifaddr_timer _tinet_in6_ifaddr_timer 48 #define in6ifa_ifpwithix _tinet_in6ifa_ifpwithix 49 #define in6_addr2maix _tinet_in6_addr2maix 50 #define in6_ifawithifp _tinet_in6_ifawithifp 51 #define in6_addr2ifaix _tinet_in6_addr2ifaix 52 #define in6_update_ifa _tinet_in6_update_ifa 53 #define in6_ifainit _tinet_in6_ifainit 54 #define in6_addrwithifp _tinet_in6_addrwithifp 43 55 #define in6_addr_loopback _tinet_in6_addr_loopback 44 #define in6_ifainit _tinet_in6_ifainit45 #define in6_addr2ifaix _tinet_in6_addr2ifaix46 #define in6_addr2maix _tinet_in6_addr2maix47 #define in6_update_ifa _tinet_in6_update_ifa48 #define in6ifa_ifpwithix _tinet_in6ifa_ifpwithix49 #define in6ifa_ifpwithrtrix _tinet_in6ifa_ifpwithrtrix50 #define in6_ifawithifp _tinet_in6_ifawithifp51 #define in6_if_up _tinet_in6_if_up52 #define in6_rtalloc _tinet_in6_rtalloc53 #define in6_are_prefix_equal _tinet_in6_are_prefix_equal54 #define in6_addr_linklocal_allrouters \55 _tinet_in6_addr_linklocal_allrouters56 #define in6_addr_linklocal_allnodes \57 _tinet_in6_addr_linklocal_allnodes58 #define in6_ifaddr_timer _tinet_in6_ifaddr_timer59 56 60 57 /* netinet6/in6_ifattach.c */ … … 64 61 /* netinet6/in6_subr.c */ 65 62 63 #define inn6_is_dstaddr_accept _tinet_inn6_is_dstaddr_accept 64 #define in6_lookup_ifaddr _tinet_in6_lookup_ifaddr 65 #define in6_rtalloc _tinet_in6_rtalloc 66 #define in6_get_ifaddr _tinet_in6_get_ifaddr 67 #define in6_cksum _tinet_in6_cksum 68 #define in6_gateway_lookup _tinet_in6_gateway_lookup 69 #define in6_is_dstaddr_accept _tinet_in6_is_dstaddr_accept 70 #define in6_hostcache_getmtu _tinet_in6_hostcache_getmtu 71 #define in6_set_header _tinet_in6_set_header 72 #define in6_get_datagram _tinet_in6_get_datagram 73 #define in6_rtredirect _tinet_in6_rtredirect 74 #define get_ip6_hdr_size _tinet_get_ip6_hdr_size 75 #define in6_plen2pmask _tinet_in6_plen2pmask 76 #define in6_rtnewentry _tinet_in6_rtnewentry 77 #define in6_rtinit _tinet_in6_rtinit 78 #define in6_rttimer _tinet_in6_rttimer 66 79 #define in6_lookup_multi _tinet_in6_lookup_multi 67 #define get_ip6_hdr_size _tinet_get_ip6_hdr_size 68 #define in6_lookup_ifaddr _tinet_in6_lookup_ifaddr 69 #define in6_get_datagram _tinet_in6_get_datagram 70 #define in6_cksum _tinet_in6_cksum 71 #define in6_is_dstaddr_accept _tinet_in6_is_dstaddr_accept 72 #define in6_plen2pmask _tinet_in6_plen2pmask 80 #define in6_hostcache_update _tinet_in6_hostcache_update 73 81 #define in6_init _tinet_in6_init 74 #define in6_rtredirect _tinet_in6_rtredirect75 #define in6_gateway_lookup _tinet_in6_gateway_lookup76 #define in6_set_header _tinet_in6_set_header77 #define in6_hostcache_getmtu _tinet_in6_hostcache_getmtu78 #define in6_hostcache_update _tinet_in6_hostcache_update79 82 80 83 /* netinet6/if6_ether.c */ … … 151 154 /* netinet6/nd6_rtr.c */ 152 155 156 #define nd6_get_prl _tinet_nd6_get_prl 153 157 #define nd6_router_lookup _tinet_nd6_router_lookup 158 #define nd6_onlink_prefix_lookup \ 159 _tinet_nd6_onlink_prefix_lookup 160 #define nd6_defrtrlist_del _tinet_nd6_defrtrlist_del 161 #define nd6_prefix_onlink _tinet_nd6_prefix_onlink 162 #define nd6_get_drl _tinet_nd6_get_drl 163 #define nd6_rtrsol_ctl _tinet_nd6_rtrsol_ctl 154 164 #define nd6_defrtrlist_timer _tinet_nd6_defrtrlist_timer 165 #define nd6_ra_input _tinet_nd6_ra_input 155 166 #define nd6_prelist_timer _tinet_nd6_prelist_timer 156 #define nd6_ ra_input _tinet_nd6_ra_input157 #define nd6_ rtrsol_ctl _tinet_nd6_rtrsol_ctl167 #define nd6_prefix_offlink _tinet_nd6_prefix_offlink 168 #define nd6_defrtrlist_lookup _tinet_nd6_defrtrlist_lookup 158 169 #define ip6_defhlim _tinet_ip6_defhlim 159 170 #define nd6_reachable_time _tinet_nd6_reachable_time … … 162 173 _tinet_nd6_recalc_reachtm_interval 163 174 #define nd6_retrans_time _tinet_nd6_retrans_time 164 #define nd6_defrtrlist_lookup _tinet_nd6_defrtrlist_lookup165 #define nd6_prefix_onlink _tinet_nd6_prefix_onlink166 #define nd6_prefix_offlink _tinet_nd6_prefix_offlink167 #define nd6_get_prl _tinet_nd6_get_prl168 #define nd6_get_drl _tinet_nd6_get_drl169 #define nd6_defrtrlist_del _tinet_nd6_defrtrlist_del170 175 171 176 /* netinet6/scope6.c */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/in6_subr.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 * … … 122 122 #include <net/if_arp.h> 123 123 #include <net/net.h> 124 #include <net/net_endian.h> 124 125 #include <net/net_var.h> 125 126 #include <net/net_buf.h> … … 128 129 #include <netinet/in.h> 129 130 #include <netinet/in_var.h> 130 131 #include <netinet6/in6.h> 132 #include <netinet6/in6_var.h> 133 #include <netinet/ip6.h> 134 #include <netinet6/ip6_var.h> 131 #include <netinet/ip.h> 132 #include <netinet/ip_var.h> 133 134 #include <netinet6/nd6.h> 135 135 #include <netinet6/ah.h> 136 #include <netinet6/nd6.h> 137 138 #include <net/if6_var.h> 139 140 #ifdef SUPPORT_INET6 136 137 #include <net/if_var.h> 138 139 /* 140 * in6_make_ipv4mapped -- IPv4 射影アドレスを生成する。 141 * 142 * 注意: 143 * src はホストバイトオーダー 144 * 145 */ 146 147 T_IN6_ADDR * 148 in6_make_ipv4mapped (T_IN6_ADDR *dst, T_IN4_ADDR src) 149 { 150 dst->s6_addr32[0] = ULONG_C(0x00000000); 151 dst->s6_addr32[1] = ULONG_C(0x00000000); 152 dst->s6_addr32[2] = IPV6_ADDR_INT32_0000FFFF; 153 dst->s6_addr32[3] = htonl(src); 154 155 return dst; 156 } 157 158 #ifdef _IP6_CFG 159 160 #if NUM_IN6_REDIRECT_ROUTE_ENTRY > 0 161 162 /* 163 * in6_rtinit -- ルーティング表を初期化する。 164 */ 165 166 void 167 in6_rtinit (void) 168 { 169 int_t ix; 170 171 for (ix = 0; ix < NUM_IN6_STATIC_ROUTE_ENTRY; ix ++) 172 routing6_tbl[ix].flags = IN_RTF_DEFINED; 173 174 for ( ; ix < NUM_IN6_ROUTE_ENTRY; ix ++) 175 routing6_tbl[ix].flags = 0; 176 } 177 178 /* 179 * in6_rtnewentry -- 新しいエントリを獲得する。 180 */ 181 182 T_IN6_RTENTRY * 183 in6_rtnewentry (uint8_t flags, uint32_t tmo) 184 { 185 SYSTIM now; 186 T_IN6_RTENTRY *rt, *frt = NULL; 187 int_t ix; 188 189 /* 空きエントリを探す。*/ 190 for (ix = NUM_IN6_STATIC_ROUTE_ENTRY; ix < NUM_IN6_ROUTE_ENTRY; ix ++) { 191 rt = &routing6_tbl[ix]; 192 if ((routing6_tbl[ix].flags & IN_RTF_DEFINED) == 0) { 193 frt = rt; 194 break; 195 } 196 } 197 198 /* expire の単位は [s]。*/ 199 syscall(get_tim(&now)); 200 now /= SYSTIM_HZ; 201 202 if (frt == NULL) { 203 /* 空きがなければ、有効時間がもっとも短いエントリを空きにする。*/ 204 T_IN6_RTENTRY *srt = NULL; 205 int_t diff, sdiff = INT_MAX; 206 207 syscall(wai_sem(SEM_IN6_ROUTING_TBL)); 208 for (ix = NUM_IN6_STATIC_ROUTE_ENTRY; ix < NUM_IN6_ROUTE_ENTRY; ix ++) { 209 rt = &routing6_tbl[ix]; 210 diff = (int_t)(rt->expire - now); 211 if (diff <= 0) { /* rt->expire <= now */ 212 /* 既に、有効時間が過ぎている。*/ 213 frt = rt; 214 break; 215 } 216 else if (diff < sdiff) { 217 srt = rt; 218 sdiff = diff; 219 } 220 } 221 if (frt == NULL) 222 frt = srt; 223 frt->flags = 0; 224 syscall(sig_sem(SEM_IN6_ROUTING_TBL)); 225 } 226 227 frt->flags = (uint8_t)(flags | IN_RTF_DEFINED); 228 frt->expire = now + tmo / SYSTIM_HZ; 229 return frt; 230 } 231 232 /* 233 * in6_rttimer -- ルーティング表の管理タイマー 234 */ 235 236 void 237 in6_rttimer (void) 238 { 239 SYSTIM now; 240 int_t ix; 241 242 /* expire の単位は [s]。*/ 243 syscall(get_tim(&now)); 244 now /= SYSTIM_HZ; 245 246 syscall(wai_sem(SEM_IN6_ROUTING_TBL)); 247 for (ix = NUM_IN6_STATIC_ROUTE_ENTRY; ix < NUM_IN6_ROUTE_ENTRY; ix ++) 248 if ((routing6_tbl[ix].flags & IN_RTF_DEFINED) && 249 (int_t)(routing6_tbl[ix].expire - now) <= 0) 250 routing6_tbl[ix].flags = 0; 251 syscall(sig_sem(SEM_IN6_ROUTING_TBL)); 252 } 253 254 #endif /* of #if NUM_IN6_REDIRECT_ROUTE_ENTRY > 0 */ 141 255 142 256 #if NUM_IN6_HOSTCACHE_ENTRY > 0 … … 155 269 156 270 T_IN6_IFADDR * 157 in6_lookup_ifaddr (T_IFNET *ifp, T_IN6_ADDR *addr)271 in6_lookup_ifaddr (T_IFNET *ifp, const T_IN6_ADDR *addr) 158 272 { 159 273 int_t ix; 160 274 161 275 for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) { 162 if ((ifp->in _ifaddrs[ix].flags & IN6_IFF_DEFINED) &&163 IN6_ARE_ADDR_EQUAL(addr, &ifp->in _ifaddrs[ix].addr))164 return &ifp->in _ifaddrs[ix];276 if ((ifp->in6_ifaddrs[ix].flags & IN6_IFF_DEFINED) && 277 IN6_ARE_ADDR_EQUAL(addr, &ifp->in6_ifaddrs[ix].addr)) 278 return &ifp->in6_ifaddrs[ix]; 165 279 } 166 280 return NULL; … … 172 286 173 287 bool_t 174 in6_lookup_multi (T_IFNET *ifp, T_IN6_ADDR *maddr)288 in6_lookup_multi (T_IFNET *ifp, const T_IN6_ADDR *maddr) 175 289 { 176 290 int_t ix; 177 291 178 292 for (ix = MAX_IN6_MADDR_CNT; ix -- > 0; ) 179 if (IN6_ARE_ADDR_EQUAL(maddr, &ifp->in _maddrs[ix]))293 if (IN6_ARE_ADDR_EQUAL(maddr, &ifp->in6_maddrs[ix])) 180 294 return true; 181 295 return false; … … 188 302 ER 189 303 in6_set_header (T_NET_BUF *nbuf, uint_t len, 190 T_IN6_ADDR *dstaddr,T_IN6_ADDR *srcaddr,304 const T_IN6_ADDR *dstaddr, const T_IN6_ADDR *srcaddr, 191 305 uint8_t next, uint8_t hlim) 192 306 { … … 216 330 memset(&ip6h->dst, 0, sizeof(T_IN6_ADDR)); 217 331 else 218 ip6h->dst = *dstaddr;332 memcpy(&ip6h->dst, dstaddr, sizeof(T_IN6_ADDR)); 219 333 220 334 if (srcaddr == NULL) 221 335 memset(&ip6h->src, 0, sizeof(T_IN6_ADDR)); 222 336 else 223 ip6h->src = *srcaddr;337 memcpy(&ip6h->src, srcaddr, sizeof(T_IN6_ADDR)); 224 338 225 339 return E_OK; … … 232 346 ER 233 347 in6_get_datagram (T_NET_BUF **nbuf, uint_t len, uint_t maxlen, 234 T_IN6_ADDR *dstaddr,T_IN6_ADDR *srcaddr,348 const T_IN6_ADDR *dstaddr, const T_IN6_ADDR *srcaddr, 235 349 uint8_t next, uint8_t hlim, ATR nbatr, TMO tmout) 236 350 { … … 269 383 */ 270 384 271 ER_UINT 385 uint_t 272 386 in6_get_maxnum_ifaddr (void) 273 387 { … … 285 399 286 400 if (index < NUM_IN6_IFADDR_ENTRY && 287 (ifp->in _ifaddrs[index].flags & IN6_IFF_DEFINED))288 return &ifp->in _ifaddrs[index].addr;401 (ifp->in6_ifaddrs[index].flags & IN6_IFF_DEFINED)) 402 return &ifp->in6_ifaddrs[index].addr; 289 403 else 290 404 return NULL; … … 296 410 297 411 char * 298 ipv62str (char *buf, const T_IN6_ADDR *p_ ip6addr)299 { 300 static char addr_sbuf[NUM_IPV6ADDR_STR_BUFF][sizeof("0123:4567:89ab:cdef:0123:4567: 89ab:cdef")];412 ipv62str (char *buf, const T_IN6_ADDR *p_addr) 413 { 414 static char addr_sbuf[NUM_IPV6ADDR_STR_BUFF][sizeof("0123:4567:89ab:cdef:0123:4567:255.255.255.255")]; 301 415 static int_t bix = NUM_IPV6ADDR_STR_BUFF; 302 416 303 417 bool_t omit = false, zero = false; 304 418 char *start; 305 int_t ix ;419 int_t ix, len6; 306 420 307 421 if (buf == NULL) { … … 314 428 315 429 start = buf; 316 if (p_ip6addr == NULL) { 430 if (p_addr == NULL || IN6_IS_ADDR_UNSPECIFIED(p_addr)) { 431 *buf ++ = '0'; 317 432 *buf ++ = ':'; 318 433 *buf ++ = ':'; 434 *buf ++ = '0'; 319 435 } 320 436 else { 321 for (ix = 0; ix < sizeof(T_IN6_ADDR) / 2; ix ++) { 437 if (IN6_IS_ADDR_V4MAPPED(p_addr)) 438 len6 = sizeof(T_IN6_ADDR) / 2 - 2; 439 else 440 len6 = sizeof(T_IN6_ADDR) / 2; 441 for (ix = 0; ix < len6; ix ++) { 322 442 if (omit) { 323 buf += convert_hexdigit(buf, ntohs(p_ ip6addr->s6_addr16[ix]), 16, 0, ' ');443 buf += convert_hexdigit(buf, ntohs(p_addr->s6_addr16[ix]), 16, 0, ' '); 324 444 if (ix < 7) 325 445 *buf ++ = ':'; 326 446 } 327 else if (ix > 0 && ix < 7 && p_ ip6addr->s6_addr16[ix] == 0)447 else if (ix > 0 && ix < 7 && p_addr->s6_addr16[ix] == 0) 328 448 zero = true; 329 449 else { … … 332 452 *buf ++ = ':'; 333 453 } 334 buf += convert_hexdigit(buf, ntohs(p_ ip6addr->s6_addr16[ix]), 16, 0, ' ');454 buf += convert_hexdigit(buf, ntohs(p_addr->s6_addr16[ix]), 16, 0, ' '); 335 455 if (ix < 7) 336 456 *buf ++ = ':'; 337 457 } 338 458 } 459 460 if (len6 == sizeof(T_IN6_ADDR) / 2 - 2) { 461 T_IN4_ADDR ipv4addr; 462 463 ipv4addr = ntohl(p_addr->s6_addr32[3]); 464 buf += convert_hexdigit(buf, (uint_t)((ipv4addr >> 24) & 0xff), 10, 0, ' '); 465 *(buf ++) = '.'; 466 buf += convert_hexdigit(buf, (uint_t)((ipv4addr >> 16) & 0xff), 10, 0, ' '); 467 *(buf ++) = '.'; 468 buf += convert_hexdigit(buf, (uint_t)((ipv4addr >> 8) & 0xff), 10, 0, ' '); 469 *(buf ++) = '.'; 470 buf += convert_hexdigit(buf, (uint_t)((ipv4addr ) & 0xff), 10, 0, ' '); 471 } 339 472 } 340 473 *buf = '\0'; … … 370 503 371 504 /* 372 * in6_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。373 */374 375 bool_t376 in6_is_dstaddr_accept (T_IN6_ADDR *myaddr, T_IN6_ADDR *dstaddr)377 {378 if (IN6_IS_ADDR_UNSPECIFIED(myaddr))379 return in6_lookup_ifaddr(IF_GET_IFNET(), dstaddr) != NULL;380 else381 return IN6_ARE_ADDR_EQUAL(dstaddr, myaddr);382 }383 384 /*385 505 * get_ip6_hdr_size -- 拡張ヘッダも含めた IPv6 ヘッダ長を返す。 386 506 */ 387 507 388 508 uint_t 389 get_ip6_hdr_size (T_IP6_HDR *iph) 390 { 391 uint_t size = IP6_HDR_SIZE, hsize; 392 uint8_t curr = iph->next, next; 393 uint8_t *hdr = ((uint8_t *)iph) + IP6_HDR_SIZE; 509 get_ip6_hdr_size (T_NET_BUF *nbuf) 510 { 511 T_IP6_HDR *iph = GET_IP6_HDR(nbuf); 512 uint_t size = IP6_HDR_SIZE, hsize; 513 uint8_t curr = iph->next, next; 514 uint8_t *hdr = ((uint8_t *)iph) + IP6_HDR_SIZE; 394 515 395 516 while (1) { … … 436 557 */ 437 558 438 T_IN6_ADDR *439 in6_rtalloc (T_IFNET *ifp, T_IN6_ADDR *dst)559 const T_IN6_ADDR * 560 in6_rtalloc (T_IFNET *ifp, const T_IN6_ADDR *dst) 440 561 { 441 562 if (IN6_IS_ADDR_LINKLOCAL(dst) || IN6_IS_ADDR_MULTICAST(dst)) … … 456 577 /* 推奨有効時間内のアドレスを探索する。*/ 457 578 for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) { 458 ia = &ifp->in _ifaddrs[ix];579 ia = &ifp->in6_ifaddrs[ix]; 459 580 if (IFA6_IS_READY(ia) && 460 581 in6_are_prefix_equal(dst, &ia->addr, ia->prefix_len) && … … 467 588 /* 有効時間内のアドレスを探索する。*/ 468 589 for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) { 469 ia = &ifp->in _ifaddrs[ix];590 ia = &ifp->in6_ifaddrs[ix]; 470 591 if (IFA6_IS_READY(ia) && 471 592 in6_are_prefix_equal(dst, &ia->addr, ia->prefix_len) && … … 485 606 */ 486 607 487 #if NUM_ ROUTE_ENTRY > 0488 489 syscall(wai_sem(SEM_IN _ROUTING_TBL));490 for (ix = NUM_ ROUTE_ENTRY; ix --; ) {491 if ((routing _tbl[ix].flags & IN_RTF_DEFINED) &&492 in6_are_prefix_equal(dst, &routing _tbl[ix].target,493 routing _tbl[ix].prefix_len)) {608 #if NUM_IN6_ROUTE_ENTRY > 0 609 610 syscall(wai_sem(SEM_IN6_ROUTING_TBL)); 611 for (ix = NUM_IN6_ROUTE_ENTRY; ix --; ) { 612 if ((routing6_tbl[ix].flags & IN_RTF_DEFINED) && 613 in6_are_prefix_equal(dst, &routing6_tbl[ix].target, 614 routing6_tbl[ix].prefix_len)) { 494 615 495 616 /* … … 498 619 * TMO_IN_REDIRECT の単位は [ms]。 499 620 */ 500 if (ix > NUM_ STATIC_ROUTE_ENTRY) {621 if (ix > NUM_IN6_STATIC_ROUTE_ENTRY) { 501 622 SYSTIM now; 502 623 503 624 syscall(get_tim(&now)); 504 routing _tbl[ix].expire = now / SYSTIM_HZ + TMO_IN_REDIRECT / 1000;625 routing6_tbl[ix].expire = now / SYSTIM_HZ + TMO_IN_REDIRECT / 1000; 505 626 } 506 627 507 syscall(sig_sem(SEM_IN _ROUTING_TBL));508 return &routing _tbl[ix].gateway;628 syscall(sig_sem(SEM_IN6_ROUTING_TBL)); 629 return &routing6_tbl[ix].gateway; 509 630 } 510 631 } 511 syscall(sig_sem(SEM_IN _ROUTING_TBL));512 513 #endif /* of #if NUM_ ROUTE_ENTRY > 0 */632 syscall(sig_sem(SEM_IN6_ROUTING_TBL)); 633 634 #endif /* of #if NUM_IN6_ROUTE_ENTRY > 0 */ 514 635 515 636 /* … … 520 641 } 521 642 522 #if NUM_ REDIRECT_ROUTE_ENTRY > 0643 #if NUM_IN6_REDIRECT_ROUTE_ENTRY > 0 523 644 524 645 /* … … 526 647 */ 527 648 528 T_IN _RTENTRY *529 in6_gateway_lookup ( T_IN6_ADDR *gw)649 T_IN6_RTENTRY * 650 in6_gateway_lookup (const T_IN6_ADDR *gw) 530 651 { 531 652 int_t ix; 532 653 533 for (ix = NUM_ ROUTE_ENTRY; ix --; )534 if ((routing _tbl[ix].flags & IN_RTF_DEFINED) &&535 IN6_ARE_ADDR_EQUAL(&routing _tbl[ix].gateway, gw))536 return &routing _tbl[ix];654 for (ix = NUM_IN6_ROUTE_ENTRY; ix --; ) 655 if ((routing6_tbl[ix].flags & IN_RTF_DEFINED) && 656 IN6_ARE_ADDR_EQUAL(&routing6_tbl[ix].gateway, gw)) 657 return &routing6_tbl[ix]; 537 658 return NULL; 538 659 } … … 545 666 546 667 void 547 in6_rtredirect ( T_IN6_ADDR *gateway,T_IN6_ADDR *target, uint_t prefix_len, uint8_t flags, uint32_t tmo)548 { 549 T_IN _RTENTRY *frt;550 551 frt = in _rtnewentry(flags, tmo);552 frt->gateway = *gateway;553 frt->target = *target;668 in6_rtredirect (const T_IN6_ADDR *gateway, const T_IN6_ADDR *target, uint_t prefix_len, uint8_t flags, uint32_t tmo) 669 { 670 T_IN6_RTENTRY *frt; 671 672 frt = in6_rtnewentry(flags, tmo); 673 memcpy(&frt->gateway, gateway, sizeof(T_IN6_ADDR)); 674 memcpy(&frt->target, target, sizeof(T_IN6_ADDR)); 554 675 frt->prefix_len = prefix_len; 555 676 } 556 677 557 #endif /* of #if NUM_ REDIRECT_ROUTE_ENTRY > 0 */678 #endif /* of #if NUM_IN6_REDIRECT_ROUTE_ENTRY > 0 */ 558 679 559 680 #if NUM_IN6_HOSTCACHE_ENTRY > 0 … … 564 685 565 686 static T_IN6_HOSTCACHE_ENTRY* 566 in6_hostcache_lookup ( T_IN6_ADDR *dst)687 in6_hostcache_lookup (const T_IN6_ADDR *dst) 567 688 { 568 689 int_t ix; … … 625 746 return; 626 747 } 627 hc->dst = *dst;748 memcpy(&hc->dst, dst, sizeof(T_IN6_ADDR)); 628 749 hc->expire = now + IN6_HOSTCACHE_EXPIRE; 629 750 hc->mtu = mtu; … … 637 758 638 759 uint32_t 639 in6_hostcache_getmtu ( T_IN6_ADDR *dst)760 in6_hostcache_getmtu (const T_IN6_ADDR *dst) 640 761 { 641 762 T_IN6_HOSTCACHE_ENTRY *hc; … … 679 800 in6_timer (void) 680 801 { 681 #if NUM_ REDIRECT_ROUTE_ENTRY > 0682 683 in _rttimer();684 685 #endif /* of #if NUM_ REDIRECT_ROUTE_ENTRY > 0 */802 #if NUM_IN6_REDIRECT_ROUTE_ENTRY > 0 803 804 in6_rttimer(); 805 806 #endif /* of #if NUM_IN6_REDIRECT_ROUTE_ENTRY > 0 */ 686 807 687 808 #ifdef IP6_CFG_FRAGMENT … … 707 828 in6_init (void) 708 829 { 709 #if NUM_ REDIRECT_ROUTE_ENTRY > 0710 711 in _rtinit();712 713 #endif /* of #if NUM_ REDIRECT_ROUTE_ENTRY > 0 */830 #if NUM_IN6_REDIRECT_ROUTE_ENTRY > 0 831 832 in6_rtinit(); 833 834 #endif /* of #if NUM_IN6_REDIRECT_ROUTE_ENTRY > 0 */ 714 835 715 836 timeout((callout_func)nd6_timer, NULL, ND6_TIMER_TMO); … … 717 838 } 718 839 719 #endif /* of #ifdef SUPPORT_INET6 */ 840 /* 841 * in6_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。 842 */ 843 844 bool_t 845 in6_is_dstaddr_accept (const T_IN6_ADDR *myaddr, const T_IN6_ADDR *dstaddr) 846 { 847 if (IN6_IS_ADDR_UNSPECIFIED(myaddr)) 848 return in6_lookup_ifaddr(IF_GET_IFNET(), dstaddr) != NULL; 849 else 850 return IN6_ARE_ADDR_EQUAL(dstaddr, myaddr); 851 } 852 853 #if defined(DHCP6_CLI_CFG) 854 855 /* 856 * in6_add_ifaddr -- インタフェースに IPv6 アドレスを設定する。 857 * 858 * vltime と pltime の単位は[s] 859 */ 860 861 static ER 862 in6_add_ifaddr (T_IN6_ADDR *addr, uint_t prefix_len, 863 uint32_t vltime, uint32_t pltime) 864 { 865 T_IFNET *ifp = IF_GET_IFNET(); 866 T_IN6_IFADDR *ia = NULL; 867 int_t ix; 868 869 /* 空きのエントリーを探す。*/ 870 ix = 0; 871 while (true) { 872 ia = in6ifa_ifpwithix(ifp, ix ++); 873 874 /* 空きが無ければエラー */ 875 if (ia == NULL) 876 return E_OBJ; 877 878 if ((ia->flags & IN6_IFF_DEFINED) == 0) 879 break; 880 } 881 882 /* 登録する。*/ 883 return in6_update_ifa(ifp, ia, addr, prefix_len, vltime, pltime, 884 IN6_RTR_IX_UNREACH, ND6_PREFIX_IX_INVALID, 0); 885 } 886 887 /* 888 * in6_upd_ifaddr -- インタフェースに設定されている IPv6 アドレスを更新する。 889 * 890 * 登録されていなければ、追加する。 891 * vltime と pltime の単位は[s] 892 */ 893 894 ER 895 in6_upd_ifaddr (T_IN6_ADDR *addr, uint_t prefix_len, 896 uint32_t vltime, uint32_t pltime) 897 { 898 T_IFNET *ifp = IF_GET_IFNET(); 899 T_IN6_IFADDR *ia; 900 int_t ix; 901 902 /* 903 * アドレスが一致するエントリーを探す。 904 * 無ければ登録する。 905 */ 906 if ((ix = in6_addr2ifaix(addr)) == IPV6_IFADDR_IX_INVALID) 907 return in6_add_ifaddr(addr, prefix_len, vltime, pltime); 908 909 /* 910 * インデックス番号から、エントリーに変換する。 911 * エラーにならないはずであるが、確認する。 912 */ 913 if ((ia = in6ifa_ifpwithix (ifp, ix)) == NULL) 914 return E_OBJ; 915 916 /* 更新する。*/ 917 return in6_update_ifa(ifp, ia, addr, prefix_len, vltime, pltime, 918 IN6_RTR_IX_UNREACH, ND6_PREFIX_IX_INVALID, 0); 919 } 920 921 /* 922 * in6_del_ifaddr -- インタフェースに設定されている IPv6 アドレスを削除する。 923 */ 924 925 ER 926 in6_del_ifaddr (T_IN6_ADDR *addr) 927 { 928 T_IFNET *ifp = IF_GET_IFNET(); 929 int_t ix; 930 931 /* アドレスが一致するエントリーを探す。*/ 932 if ((ix = in6_addr2ifaix(addr)) != IPV6_IFADDR_IX_INVALID) { 933 934 /* エントリーを無効にする。*/ 935 ifp->in6_ifaddrs[ix].flags &= ~IN6_IFF_DEFINED; 936 return E_OK; 937 } 938 return E_PAR; 939 } 940 941 #endif /* of #if defined(DHCP6_CLI_CFG) */ 942 943 #endif /* of #ifdef _IP6_CFG */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/in6_var.h
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 * … … 102 102 #define _IN6_VAR_H_ 103 103 104 #ifdef SUPPORT_INET6 104 /* 105 * アドレスの定義 106 */ 107 108 #ifdef _NET_CFG_BYTE_ORDER 109 110 #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN 111 112 #define IPV6_ADDR_INT32_ONE ULONG_C(0x00000001) 113 #define IPV6_ADDR_INT32_TWO ULONG_C(0x00000002) 114 #define IPV6_ADDR_INT32_0000FFFF ULONG_C(0x0000ffff) 115 #define IPV6_ADDR_INT32_MNL ULONG_C(0xff010000) 116 #define IPV6_ADDR_INT32_MLL ULONG_C(0xff020000) 117 #define IPV6_ADDR_INT32_ULL ULONG_C(0xfe800000) 118 #define IPV6_ADDR_INT16_ULL UINT_C(0xfe80) 119 #define IPV6_ADDR_INT16_USL UINT_C(0xfec0) 120 #define IPV6_ADDR_INT16_MLL UINT_C(0xff02) 121 122 #elif _NET_CFG_BYTE_ORDER == _NET_CFG_LITTLE_ENDIAN 123 124 #define IPV6_ADDR_INT32_ONE ULONG_C(0x01000000) 125 #define IPV6_ADDR_INT32_TWO ULONG_C(0x02000000) 126 #define IPV6_ADDR_INT32_0000FFFF ULONG_C(0xffff0000) 127 #define IPV6_ADDR_INT32_MNL ULONG_C(0x000001ff) 128 #define IPV6_ADDR_INT32_MLL ULONG_C(0x000002ff) 129 #define IPV6_ADDR_INT32_ULL ULONG_C(0x000080fe) 130 #define IPV6_ADDR_INT16_ULL UINT_C(0x80fe) 131 #define IPV6_ADDR_INT16_USL UINT_C(0xc0fe) 132 #define IPV6_ADDR_INT16_MLL UINT_C(0x02ff) 133 134 #endif /* #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN */ 135 136 #endif /* of #ifdef _NET_CFG_BYTE_ORDER */ 137 138 /* 139 * 特別なアドレスのチェック 140 */ 141 142 /* IPv4 互換 */ 143 144 #ifdef _NET_CFG_BYTE_ORDER 145 #define IN6_IS_ADDR_V4COMPAT(a) \ 146 (memcmp((void *)(a), (void *)&in6_addr_unspecified, sizeof(T_IN6_ADDR) - 4) == 0 && \ 147 (a)->s6_addr32[3] > IPV6_ADDR_INT32_ONE) 148 #endif 149 150 /* IPv4 射影 */ 151 152 #ifdef _NET_CFG_BYTE_ORDER 153 #define IN6_IS_ADDR_V4MAPPED(a) \ 154 (((a)->s6_addr32[0] == ULONG_C(0x00000000)) && \ 155 ((a)->s6_addr32[1] == ULONG_C(0x00000000)) && \ 156 ((a)->s6_addr32[2] == IPV6_ADDR_INT32_0000FFFF)) 157 #endif 158 159 /* 要請マルチキャスト */ 160 161 #ifdef _NET_CFG_BYTE_ORDER 162 #define IN6_IS_ADDR_NS_MULTICAST(a) \ 163 (((a)->s6_addr32[0] == IPV6_ADDR_INT32_MLL) && \ 164 ((a)->s6_addr32[1] == ULONG_C(0x00000000)) && \ 165 ((a)->s6_addr32[2] == IPV6_ADDR_INT32_ONE) && \ 166 ((a)->s6_addr8[12] == UINT_C(0xff))) 167 #endif 168 169 #ifndef _MACRO_ONLY 105 170 106 171 /* … … 197 262 /* IPv6 マルチキャストアドレス配列の最大サイズ */ 198 263 199 /*200 * ルーティングの制御201 */202 203 264 /* ルーティング表エントリ構造体 */ 204 265 … … 231 292 232 293 /* 233 * IPv4 と IPv6 をコンパイル時に選択するためのマクロ 234 */ 235 236 #define IN_SET_HEADER(nbuf,len,dst,src,next,hlim) \ 237 in6_set_header(nbuf,len,dst,src,next,hlim) 238 #define IN_GET_DATAGRAM(nbuf,len,maxlen,dst,src,next,hlim,nbatr,tmout) \ 239 in6_get_datagram(nbuf,len,maxlen,dst,src,next,hlim,nbatr,tmout) 240 #define IN_CKSUM(nbuf,proto,off,len) in6_cksum(nbuf,proto,off,len) 241 #define IN_IS_DSTADDR_ACCEPT(myaddr,dstaddr) \ 242 in6_is_dstaddr_accept(myaddr,dstaddr) 243 #define IN_IFAWITHIFP(ifp,dst) in6_ifawithifp(ifp,dst) 244 #define T_IN_IFADDR T_IN6_IFADDR 245 #define T_IN_RTENTRY T_IN6_RTENTRY 294 * ルーティング表 295 */ 296 297 extern T_IN6_RTENTRY routing6_tbl[]; 246 298 247 299 /* … … 264 316 265 317 /* 318 * 関数シミュレーションマクロ 319 */ 320 321 #define IN6_COPY_TO_HOST(dst,nbuf) memcpy(dst,&GET_IP6_HDR(nbuf)->src,sizeof(T_IN6_ADDR)) 322 #define INN6_IS_DSTADDR_ACCEPT(addr,nbuf) \ 323 in6_is_dstaddr_accept(addr,&GET_IP6_HDR(nbuf)->dst) 324 325 /* 266 326 * 関数 267 327 */ 268 328 269 329 extern void in6_ifainit (void); 270 extern int_t in6_addr2maix ( T_IN6_ADDR *addr);271 extern ER in6_update_ifa (T_IFNET *ifp, T_IN6_IFADDR *ia, T_IN6_ADDR *addr,330 extern int_t in6_addr2maix (const T_IN6_ADDR *addr); 331 extern ER in6_update_ifa (T_IFNET *ifp, T_IN6_IFADDR *ia, const T_IN6_ADDR *addr, 272 332 uint_t prefix_len, uint32_t vltime, uint32_t pltime, 273 333 int_t router_index, int_t prefix_index, uint_t flags); 274 334 extern ER in6_set_header (T_NET_BUF *nbuf, uint_t len, 275 T_IN6_ADDR *dstaddr,T_IN6_ADDR *srcaddr,335 const T_IN6_ADDR *dstaddr, const T_IN6_ADDR *srcaddr, 276 336 uint8_t next, uint8_t hlim); 277 337 extern ER in6_get_datagram (T_NET_BUF **nbuf, uint_t len, uint_t maxlen, 278 T_IN6_ADDR *dstaddr,T_IN6_ADDR *srcaddr,338 const T_IN6_ADDR *dstaddr, const T_IN6_ADDR *srcaddr, 279 339 uint8_t next, uint8_t hlim, ATR nbatr, TMO tmout); 280 340 extern uint16_t in6_cksum (T_NET_BUF *nbuf, uint8_t proto, uint_t off, uint_t len); 281 341 extern T_IN6_IFADDR *in6ifa_ifpwithix (T_IFNET *ifp, int_t ix); 282 342 extern T_IN6_IFADDR *in6ifa_ifpwithrtrix (T_IFNET *ifp, int_t rtr_ix); 283 extern T_IN6_IFADDR *in6_ifawithifp (T_IFNET *ifp, T_IN6_ADDR *dst); 343 extern T_IN6_IFADDR *in6_ifawithifp (T_IFNET *ifp, const T_IN6_ADDR *dst); 344 extern const T_IN6_ADDR *in6_addrwithifp (T_IFNET *ifp, T_IN6_ADDR *src, const T_IN6_ADDR *dst); 284 345 extern void ip6_input (T_NET_BUF *input); 285 extern T_IN6_IFADDR *in6_lookup_ifaddr (T_IFNET *ifp, T_IN6_ADDR *addr); 286 extern bool_t in6_lookup_multi (T_IFNET *ifp, T_IN6_ADDR *maddr); 287 extern bool_t in6_is_dstaddr_accept (T_IN6_ADDR *myaddr, T_IN6_ADDR *dstaddr); 288 extern T_IN6_ADDR *in6_rtalloc (T_IFNET *ifp, T_IN6_ADDR *dst); 346 extern T_IN6_IFADDR *in6_lookup_ifaddr (T_IFNET *ifp, const T_IN6_ADDR *addr); 347 extern bool_t in6_lookup_multi (T_IFNET *ifp, const T_IN6_ADDR *maddr); 348 extern bool_t in6_is_dstaddr_accept (const T_IN6_ADDR *myaddr, const T_IN6_ADDR *dstaddr); 349 extern bool_t inn6_is_dstaddr_accept (const T_IN6_ADDR *myaddr, T_NET_BUF *input); 350 extern const T_IN6_ADDR *in6_rtalloc (T_IFNET *ifp, const T_IN6_ADDR *dst); 289 351 extern int_t in6_if2idlen (T_IFNET *ifp); 290 extern int_t in6_addr2ifaix ( T_IN6_ADDR *addr);352 extern int_t in6_addr2ifaix (const T_IN6_ADDR *addr); 291 353 extern void in6_plen2pmask (T_IN6_ADDR *mask, uint_t prefix_len); 292 extern bool_t in6_are_prefix_equal ( T_IN6_ADDR *addr,T_IN6_ADDR *prefix,354 extern bool_t in6_are_prefix_equal (const T_IN6_ADDR *addr, const T_IN6_ADDR *prefix, 293 355 uint_t prefix_len); 294 356 extern void in6_ifaddr_timer (T_IFNET *ifp); 295 extern T_IN6_RTENTRY *in6_gateway_lookup ( T_IN6_ADDR *src);296 extern void in6_rtredirect ( T_IN6_ADDR *gateway,T_IN6_ADDR *target,357 extern T_IN6_RTENTRY *in6_gateway_lookup (const T_IN6_ADDR *src); 358 extern void in6_rtredirect (const T_IN6_ADDR *gateway, const T_IN6_ADDR *target, 297 359 uint_t prefix_len, uint8_t flags, uint32_t tmo); 298 360 extern void in6_init (void); 299 361 extern void in6_if_up (T_IFNET *ifp); 300 362 extern void in6_hostcache_update (T_IN6_ADDR *dst, uint32_t mtu); 301 extern uint32_t in6_hostcache_getmtu ( T_IN6_ADDR *dst);302 extern uint_t in6_addrscope ( T_IN6_ADDR *addr);363 extern uint32_t in6_hostcache_getmtu (const T_IN6_ADDR *dst); 364 extern uint_t in6_addrscope (const T_IN6_ADDR *addr); 303 365 extern const T_NET_BUF**ip6_get_frag_queue (void); 304 366 305 #endif /* of #if def SUPPORT_INET6*/367 #endif /* of #ifndef _MACRO_ONLY */ 306 368 307 369 #endif /* of #ifndef _IN6_VAR_H_ */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/ip6.cfg
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 * … … 36 36 */ 37 37 38 #ifdef SUPPORT_INET638 #ifdef _IP6_CFG 39 39 40 40 /* 近隣キャッシュ */ … … 58 58 #endif /* of #ifdef IP6_CFG_FRAGMENT */ 59 59 60 #if NUM_ REDIRECT_ROUTE_ENTRY > 060 #if NUM_IN6_ROUTE_ENTRY > 0 61 61 62 /* ルーティング表 (向け直し)*/62 /* ルーティング表 */ 63 63 64 CRE_SEM(SEM_IN _ROUTING_TBL, { TA_TPRI, 1, 1 });64 CRE_SEM(SEM_IN6_ROUTING_TBL, { TA_TPRI, 1, 1 }); 65 65 66 #endif /* of #if NUM_ REDIRECT_ROUTE_ENTRY > 0 */66 #endif /* of #if NUM_IN6_ROUTE_ENTRY > 0 */ 67 67 68 #endif /* of #ifdef SUPPORT_INET6*/68 #endif /* of #ifdef _IP6_CFG */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/ip6_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 * … … 105 105 #include <kernel.h> 106 106 #include <sil.h> 107 #include <t_syslog.h> 108 #include "tinet_cfg.h" 107 109 108 110 #endif /* of #ifdef TARGET_KERNEL_ASP */ … … 112 114 #include <s_services.h> 113 115 #include <t_services.h> 116 #include "tinet_id.h" 114 117 115 118 #endif /* of #ifdef TARGET_KERNEL_JSP */ … … 124 127 #include <net/ppp_ipcp.h> 125 128 #include <net/net.h> 129 #include <net/net_endian.h> 126 130 #include <net/net_buf.h> 127 131 #include <net/net_count.h> 128 132 129 133 #include <netinet/in.h> 130 #include <netinet6/in6.h> 131 #include <netinet6/in6_var.h> 134 #include <netinet/in_var.h> 135 #include <netinet/ip.h> 136 #include <netinet/ip_var.h> 137 #include <netinet/ip_icmp.h> 138 #include <netinet/tcp.h> 139 #include <netinet/tcp_var.h> 140 #include <netinet/udp_var.h> 141 132 142 #include <netinet6/nd6.h> 133 #include <netinet/ip6.h>134 #include <netinet6/ip6_var.h>135 #include <netinet/icmp6.h>136 143 #include <netinet6/ah6.h> 137 144 #include <netinet6/esp6.h> 138 #include <netinet/tcp.h> 139 #include <netinet/tcp_timer.h> 140 #include <netinet/tcp_var.h> 141 #include <netinet/udp_var.h> 142 143 #include <net/if6_var.h> 144 145 #ifdef SUPPORT_INET6 145 146 #include <net/if_var.h> 147 148 #ifdef _IP6_CFG 146 149 147 150 /* … … 170 173 { icmp6_input, IPPROTO_ICMPV6 }, 171 174 172 #ifdef SUPPORT_UDP 173 174 { udp_input, IPPROTO_UDP }, 175 176 #endif /* of #ifdef SUPPORT_UDP */ 177 178 #ifdef SUPPORT_TCP 175 #if defined(SUPPORT_TCP) 179 176 180 177 { tcp_input, IPPROTO_TCP }, 181 178 182 #endif /* of #ifdef SUPPORT_TCP */ 179 #endif /* of #if defined(SUPPORT_TCP) */ 180 181 #if defined(SUPPORT_UDP) && TNUM_UDP6_CEPID > 0 182 183 { udp6_input, IPPROTO_UDP }, 184 185 #endif /* of #if defined(SUPPORT_UDP) && TNUM_UDP6_CEPID > 0 */ 183 186 184 187 }; … … 640 643 641 644 /* 開始オフセットを IP ヘッダに設定する。*/ 642 off = ((uint8_t *)GET_IP _HDR(nbuf)) - nbuf->buf;645 off = ((uint8_t *)GET_IP6_HDR(nbuf)) - nbuf->buf; 643 646 644 647 /* 最終ヘッダを探索する。*/ … … 650 653 uint_t sdu; 651 654 652 sdu = GET_IP _SDU(nbuf) - nbuf->buf;655 sdu = GET_IP6_SDU(nbuf) - nbuf->buf; 653 656 if (off > sdu) { 654 657 memmove(nbuf->buf + sdu, nbuf->buf + off, off - sdu); 655 GET_IP _HDR(nbuf)->plen -= off - sdu;658 GET_IP6_HDR(nbuf)->plen -= off - sdu; 656 659 nbuf->len -= off - sdu; 657 660 } … … 660 663 } 661 664 662 #endif /* of #ifdef SUPPORT_INET6*/665 #endif /* of #ifdef _IP6_CFG */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/ip6_output.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 * … … 125 125 #include <net/ppp_ipcp.h> 126 126 #include <net/net.h> 127 #include <net/net_endian.h> 127 128 #include <net/net_buf.h> 128 129 #include <net/net_count.h> 129 130 130 131 #include <netinet/in.h> 131 #include <netinet6/in6.h> 132 #include <netinet6/in6_var.h> 132 #include <netinet/in_var.h> 133 #include <netinet/ip.h> 134 #include <netinet/ip_var.h> 135 #include <netinet/ip_icmp.h> 136 133 137 #include <netinet6/nd6.h> 134 #include <netinet/ip6.h> 135 #include <netinet6/ip6_var.h> 136 #include <netinet/icmp6.h> 137 138 #include <net/if6_var.h> 139 140 #ifdef SUPPORT_INET6 138 139 #include <net/if_var.h> 140 141 #ifdef _IP6_CFG 141 142 142 143 /* … … 165 166 ip6_output (T_NET_BUF *output, uint16_t flags, TMO tmout) 166 167 { 167 T_IP6_HDR *ip6h;168 T_IN6_ADDR *gw;169 T_IFNET *ifp = IF_GET_IFNET();170 ER error = E_OK;168 T_IP6_HDR *ip6h; 169 const T_IN6_ADDR *gw; 170 T_IFNET *ifp = IF_GET_IFNET(); 171 ER error = E_OK; 171 172 172 173 #ifdef IP6_CFG_FRAGMENT … … 185 186 186 187 NET_COUNT_IP6(net_count_ip6[NC_IP6_OUT_OCTETS], 187 GET_IP _HDR_SIZE(ip6h) + GET_IP_SDU_SIZE(ip6h));188 GET_IP6_HDR_SIZE(output) + GET_IP6_SDU_SIZE(output)); 188 189 NET_COUNT_IP6(net_count_ip6[NC_IP6_OUT_PACKETS], 1); 189 190 NET_COUNT_MIB(in6_ifstat.ipv6IfStatsOutRequests, 1); … … 371 372 } 372 373 373 #endif /* of #ifdef SUPPORT_INET6*/374 #endif /* of #ifdef _IP6_CFG */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/ip6_var.h
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 * … … 102 102 #define _IP6_VAR_H_ 103 103 104 #ifdef SUPPORT_INET6105 106 104 /* 107 105 * IPv6 ヘッダ・ペイロードアクセスマクロ … … 114 112 #define GET_IP6_NEXT_HDR(nbuf) ((uint8_t*)((nbuf)->buf) + IF_IP6_HDR_SIZE) 115 113 116 #define GET_IP6_HDR_SIZE(iph) (get_ip6_hdr_size(iph)) 117 #define GET_IP6_SDU_SIZE(iph) (ntohs((iph)->plen)) 118 #define GET_IF_IP6_HDR_SIZE(nbuf) (IF_HDR_SIZE + (GET_IP6_HDR_SIZE(GET_IP6_HDR(nbuf)))) 119 120 #define SET_IP6_SDU_SIZE(iph,slen) ((iph)->plen=htons(slen)) 114 #define GET_IP6_HDR_SIZE(nbuf) (get_ip6_hdr_size(nbuf)) 115 #define GET_IP6_SDU_SIZE(nbuf) (ntohs(GET_IP6_HDR(nbuf)->plen)) 116 #define GET_IF_IP6_HDR_SIZE(nbuf) (IF_HDR_SIZE + (GET_IP6_HDR_SIZE(nbuf))) 117 118 #define SET_IP6_CF(nbuf,cf) (GET_IP6_HDR(nbuf)->vcf=htonl(IP6_MAKE_VCF(IP6_VCF_V(ntohl(GET_IP6_HDR(nbuf)->vcf)),cf))) 119 #define SET_IP6_SDU_SIZE(nbuf,slen) (GET_IP6_HDR(nbuf)->plen=htons(slen)) 121 120 122 121 /* ip6_output のフラグ */ … … 144 143 145 144 /* 146 * IPv4 と IPv6 をコンパイル時に選択するためのマクロ147 */148 149 #define T_TCP_IP_Q_HDR T_TCP_IP6_Q_HDR150 151 #define IF_IP_HDR_SIZE IF_IP6_HDR_SIZE152 153 #define GET_IP_HDR(nbuf) GET_IP6_HDR(nbuf)154 #define GET_IP_SDU(nbuf) GET_IP6_SDU(nbuf)155 156 #define GET_IP_HDR_SIZE(iph) GET_IP6_HDR_SIZE(iph)157 #define GET_IP_SDU_SIZE(iph) GET_IP6_SDU_SIZE(iph)158 #define GET_IF_IP_HDR_SIZE(nbuf) GET_IF_IP6_HDR_SIZE(nbuf)159 160 #define SET_IP_SDU_SIZE(iph,len) SET_IP6_SDU_SIZE(iph,len)161 162 #define IP_OUTPUT(nbuf,tmout) ip6_output(nbuf,0,tmout)163 #define IP_INIT() ip6_init()164 #define IP_REMOVE_OPTIONS(nbuf) ip6_remove_exthdrs(nbuf)165 166 /*167 145 * IPv6 の MMTU サイズのネットワークバッファ 168 146 */ 147 148 #if defined(IF_HDR_SIZE) 169 149 170 150 typedef struct t_net_buf_ipv6_mmtu { … … 181 161 /* バッファ本体 */ 182 162 } T_NET_BUF_IPV6_MMTU; 163 164 #endif /* of #if defined(IF_HDR_SIZE) */ 183 165 184 166 /* … … 258 240 */ 259 241 260 typedef struct t_ tcp_ip6_q_hdr {242 typedef struct t_ip6_tcp_q_hdr { 261 243 uint8_t vc; /* Version: 4 bit */ 262 244 uint8_t cf; /* Traffic Class: 8 bit */ … … 268 250 T_IN6_ADDR src; /* Source Address */ 269 251 T_IN6_ADDR dst; /* Destination Address */ 270 } __attribute__((packed, aligned(2))) T_TCP_IP6_Q_HDR;252 } __attribute__((packed, aligned(2))) T_IP6_TCP_Q_HDR; 271 253 272 254 #ifdef SUPPORT_MIB … … 304 286 305 287 /* 288 * 変数 289 */ 290 291 extern uint8_t ip6_defhlim; 292 293 /* 306 294 * 関数 307 295 */ … … 310 298 extern void ip6_init (void); 311 299 extern uint8_t *ip6_get_prev_hdr (T_NET_BUF *nbuf, uint_t off); 312 extern uint_t get_ip6_hdr_size (T_ IP6_HDR *iph);300 extern uint_t get_ip6_hdr_size (T_NET_BUF *nbuf); 313 301 extern ER_UINT ip6_nexthdr (T_NET_BUF *nbuf, uint_t off, uint_t proto, uint_t *nextp); 314 302 extern ER_UINT ip6_lasthdr (T_NET_BUF *nbuf, uint_t off, uint_t proto, uint_t *nextp); … … 320 308 extern ER ip6_remove_exthdrs (T_NET_BUF *nbuf); 321 309 322 #endif /* of #ifdef SUPPORT_INET6 */323 324 310 #endif /* of #ifndef _IP6_VAR_H_ */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/ipsec.cfg
r321 r331 3 3 * TINET (TCP/IP Protocol Stack) 4 4 * 5 * Copyright (C) 2001-20 09by Dep. of Computer Science and Engineering5 * Copyright (C) 2001-2017 by Dep. of Computer Science and Engineering 6 6 * Tomakomai National College of Technology, JAPAN 7 7 * Copyright (C) 2008-2009 by Hokkaido Industrial Research Institute, JAPAN -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/nd6.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 * … … 98 98 #include <net/ethernet.h> 99 99 #include <net/if_arp.h> 100 #include <net/ppp.h> 100 101 #include <net/ppp_ipcp.h> 101 102 #include <net/net.h> 103 #include <net/net_endian.h> 102 104 #include <net/net_var.h> 103 105 #include <net/net_buf.h> … … 107 109 #include <netinet/in.h> 108 110 #include <netinet/in_var.h> 109 #include <netinet6/in6.h> 110 #include <netinet6/in6_var.h> 111 #include <netinet/ip.h> 112 #include <netinet/ip_var.h> 113 #include <netinet/ip_icmp.h> 114 111 115 #include <netinet6/nd6.h> 112 116 113 #include <netinet/ip6.h> 114 #include <netinet/icmp6.h> 115 #include <netinet6/ip6_var.h> 116 117 #include <net/if6_var.h> 118 119 #ifdef SUPPORT_INET6 117 #include <net/if_var.h> 118 119 #ifdef _IP6_CFG 120 120 121 121 /* … … 328 328 329 329 T_LLINFO_ND6 * 330 nd6_lookup ( T_IN6_ADDR *addr, bool_t create)330 nd6_lookup (const T_IN6_ADDR *addr, bool_t create) 331 331 { 332 332 SYSTIM min = 0xffffffff; … … 370 370 371 371 T_LLINFO_ND6 * 372 nd6_cache_lladdr (T_IFNET *ifp, T_IN6_ADDR *from,372 nd6_cache_lladdr (T_IFNET *ifp, const T_IN6_ADDR *from, 373 373 T_IF_ADDR *lladdr, uint8_t type, uint8_t code) 374 374 { … … 487 487 488 488 bool_t 489 nd6_is_addr_neighbor (T_IFNET *ifp, T_IN6_ADDR *addr)489 nd6_is_addr_neighbor (T_IFNET *ifp, const T_IN6_ADDR *addr) 490 490 { 491 491 if (IN6_IS_ADDR_LINKLOCAL(addr)) … … 508 508 509 509 ER 510 nd6_output (T_IFNET *ifp, T_NET_BUF *output, T_IN6_ADDR *dst, T_LLINFO_ND6 *ln, TMO tmout)510 nd6_output (T_IFNET *ifp, T_NET_BUF *output, const T_IN6_ADDR *dst, T_LLINFO_ND6 *ln, TMO tmout) 511 511 { 512 512 ER error = E_OK; … … 622 622 623 623 ER 624 nd6_storelladdr (T_IF_ADDR *out, T_IN6_ADDR *dst, T_IF_ADDR *ifa)624 nd6_storelladdr (T_IF_ADDR *out, const T_IN6_ADDR *dst, T_IF_ADDR *ifa) 625 625 { 626 626 if (IN6_IS_ADDR_MULTICAST(dst)) { … … 696 696 } 697 697 698 #endif /* of #ifdef SUPPORT_INET6*/698 #endif /* of #ifdef _IP6_CFG */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/nd6.h
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 * … … 67 67 #define _ND6_H_ 68 68 69 #ifdef SUPPORT_INET670 71 69 /* 72 70 * ネットワークインタフェース構造体(T_IFNET)のフラグ … … 118 116 #define ND6_MAX_UCAST_QUERY 3 /* ユニキャストアドレス要請の再送回数 */ 119 117 120 #define ND6_INFINITE_LIFETIME 0xffffffff121 122 118 #define ND6_GCOLLECTION_TIME (60*60*24*SYSTIM_HZ) 123 119 /* ゴミ拾い周期、1 日 */ … … 234 230 extern SYSTIM nd6_recalc_reachtm_interval; 235 231 extern SYSTIM nd6_retrans_time; 236 extern uint8_t ip6_defhlim;237 232 238 233 /* … … 241 236 242 237 extern void nd6_ifattach (T_IFNET *ifp); 243 extern void nd6_ns_output (T_IFNET *ifp, T_IN6_ADDR *daddr,244 T_IN6_ADDR *taddr, T_LLINFO_ND6 *ln, bool_t dad);245 extern void nd6_na_output (T_IFNET *ifp, T_IN6_ADDR *daddr,246 T_IN6_ADDR *taddr, uint32_t flags, bool_t tlladdr);238 extern void nd6_ns_output (T_IFNET *ifp, const T_IN6_ADDR *daddr, 239 const T_IN6_ADDR *taddr, T_LLINFO_ND6 *ln, bool_t dad); 240 extern void nd6_na_output (T_IFNET *ifp, const T_IN6_ADDR *daddr, 241 const T_IN6_ADDR *taddr, uint32_t flags, bool_t tlladdr); 247 242 extern void nd6_dad_start (T_IFNET *ifp, T_IN6_IFADDR *ia, int_t *tick); 248 243 extern ER nd6_output (T_IFNET *ifp, T_NET_BUF *output, 249 T_IN6_ADDR *dst, T_LLINFO_ND6 *ln, TMO tmout);244 const T_IN6_ADDR *dst, T_LLINFO_ND6 *ln, TMO tmout); 250 245 extern void nd6_na_input (T_NET_BUF *input, uint_t off); 251 246 extern void nd6_ns_input (T_NET_BUF *input, uint_t off); 252 247 extern void nd6_ra_input (T_NET_BUF *input, uint_t off); 253 extern ER nd6_storelladdr (T_IF_ADDR *out, T_IN6_ADDR *dst, T_IF_ADDR *ifa);248 extern ER nd6_storelladdr (T_IF_ADDR *out, const T_IN6_ADDR *dst, T_IF_ADDR *ifa); 254 249 extern ER nd6_options (uint8_t *opt, void *nh, uint_t len); 255 extern T_LLINFO_ND6 *nd6_lookup ( T_IN6_ADDR *addr, bool_t create);250 extern T_LLINFO_ND6 *nd6_lookup (const T_IN6_ADDR *addr, bool_t create); 256 251 extern ER nd6_output_hold (T_IFNET *ifp, T_LLINFO_ND6 *ln); 257 extern T_LLINFO_ND6 *nd6_cache_lladdr (T_IFNET *ifp, T_IN6_ADDR *from,252 extern T_LLINFO_ND6 *nd6_cache_lladdr (T_IFNET *ifp, const T_IN6_ADDR *from, 258 253 T_IF_ADDR *lladdr, uint8_t type, uint8_t code); 259 254 extern void nd6_defrtrlist_timer (void); 260 255 extern void nd6_prelist_timer (void); 261 256 extern void nd6_rtrsol_ctl (void); 262 extern T_IN6_ADDR *nd6_router_lookup (void);263 extern T_DEF_ROUTER *nd6_defrtrlist_lookup ( T_IN6_ADDR *src);257 extern const T_IN6_ADDR *nd6_router_lookup (void); 258 extern T_DEF_ROUTER *nd6_defrtrlist_lookup (const T_IN6_ADDR *src); 264 259 extern void nd6_defrtrlist_del (T_DEF_ROUTER *dr); 265 260 extern void nd6_timer (void); … … 269 264 extern ER nd6_prefix_onlink (T_ND6_PREFIX *pr); 270 265 extern ER nd6_prefix_offlink (T_ND6_PREFIX *pr); 271 extern T_ND6_PREFIX *nd6_onlink_prefix_lookup (T_IN6_ADDR *dst); 272 273 #endif /* of #ifdef SUPPORT_INET6 */ 266 extern T_ND6_PREFIX *nd6_onlink_prefix_lookup (const T_IN6_ADDR *dst); 274 267 275 268 #endif /* of #ifndef _ND6_H_ */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/nd6_nbr.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 * … … 93 93 #include <net/ppp_ipcp.h> 94 94 #include <net/net.h> 95 #include <net/net_endian.h> 95 96 #include <net/net_var.h> 96 97 #include <net/net_buf.h> … … 100 101 #include <netinet/in.h> 101 102 #include <netinet/in_var.h> 102 103 #include <netinet6/in6.h> 104 #include <netinet6/in6_var.h> 103 #include <netinet/ip.h> 104 #include <netinet/ip_var.h> 105 #include <netinet/ip_icmp.h> 106 105 107 #include <netinet6/nd6.h> 106 108 107 #include <netinet/ip6.h>108 #include <netinet/icmp6.h>109 #include <netinet6/ip6_var.h>110 111 109 #include <net/if6_var.h> 112 110 113 #ifdef SUPPORT_INET6111 #ifdef _IP6_CFG 114 112 115 113 /* … … 363 361 364 362 void 365 nd6_ns_output (T_IFNET *ifp, T_IN6_ADDR *daddr,366 T_IN6_ADDR *taddr, T_LLINFO_ND6 *ln, bool_t dad)363 nd6_ns_output (T_IFNET *ifp, const T_IN6_ADDR *daddr, 364 const T_IN6_ADDR *taddr, T_LLINFO_ND6 *ln, bool_t dad) 367 365 { 368 366 T_NEIGHBOR_SOLICIT_HDR *nsh; … … 429 427 430 428 if (saddr && in6_lookup_ifaddr(ifp, saddr)) 431 ip6h->src = *saddr;429 memcpy(&ip6h->src, saddr, sizeof(T_IN6_ADDR)); 432 430 else { 433 431 /* … … 441 439 return; 442 440 } 443 ip6h->src = ifa->addr;441 memcpy(&ip6h->src, &ifa->addr, sizeof(T_IN6_ADDR)); 444 442 } 445 443 } … … 455 453 nsh->hdr.code = 0; 456 454 nsh->hdr.data.data32 = 0; 457 nsh->target = *taddr;455 memcpy(&nsh->target, taddr, sizeof(T_IN6_ADDR)); 458 456 459 457 if (!dad && (mac = IF_SOFTC_TO_IFADDR(ifp->ic)) != NULL) { … … 699 697 700 698 void 701 nd6_na_output (T_IFNET *ifp, T_IN6_ADDR *daddr,702 T_IN6_ADDR *taddr, uint32_t flags, bool_t tlladdr)699 nd6_na_output (T_IFNET *ifp, const T_IN6_ADDR *daddr, 700 const T_IN6_ADDR *taddr, uint32_t flags, bool_t tlladdr) 703 701 { 704 702 T_NEIGHBOR_ADVERT_HDR *nah; … … 747 745 } 748 746 else 749 ip6h->dst = *daddr;747 memcpy(&ip6h->dst, daddr, sizeof(T_IN6_ADDR)); 750 748 751 749 /* … … 757 755 return; 758 756 } 759 ip6h->src = ifa->addr;760 761 762 763 764 765 nah->target = *taddr;757 memcpy(&ip6h->src, &ifa->addr, sizeof(T_IN6_ADDR)); 758 759 /* 近隣通知ヘッダを設定する。*/ 760 nah = GET_NEIGHBOR_ADVERT_HDR(output, IF_IP6_NEIGHBOR_ADVERT_HDR_OFFSET); 761 nah->hdr.type = ND_NEIGHBOR_ADVERT; 762 nah->hdr.code = 0; 763 memcpy(&nah->target, taddr, sizeof(T_IN6_ADDR)); 766 764 767 765 /* tlladdr が真ならネットワークインタフェースのアドレスを追加する。*/ … … 851 849 } 852 850 853 #endif /* of #ifdef SUPPORT_INET6*/851 #endif /* of #ifdef _IP6_CFG */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/nd6_rtr.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 * … … 93 93 #include <net/ppp_ipcp.h> 94 94 #include <net/net.h> 95 #include <net/net_endian.h> 95 96 #include <net/net_var.h> 96 97 #include <net/net_buf.h> … … 100 101 #include <netinet/in.h> 101 102 #include <netinet/in_var.h> 102 #include <netinet6/in6.h> 103 #include <netinet6/in6_var.h> 103 #include <netinet/ip.h> 104 #include <netinet/ip_var.h> 105 #include <netinet/ip_icmp.h> 106 104 107 #include <netinet6/nd6.h> 105 108 #include <netinet6/in6_ifattach.h> 106 #include <netinet/ip6.h> 107 #include <netinet/icmp6.h> 108 #include <netinet6/ip6_var.h> 109 110 #include <net/if6_var.h> 109 110 #include <net/if_var.h> 111 111 112 112 /* … … 116 116 extern const char *itron_strerror (ER ercd); 117 117 118 #ifdef SUPPORT_INET6118 #ifdef _IP6_CFG 119 119 120 120 #if NUM_ND6_DEF_RTR_ENTRY > 0 … … 284 284 */ 285 285 for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) { 286 ia = &ifp->in _ifaddrs[ix];286 ia = &ifp->in6_ifaddrs[ix]; 287 287 if ((ia->flags & (IN6_IFF_DEFINED | IN6_IFF_AUTOCONF)) != 0 && 288 288 ia->prefix_index != ND6_PREFIX_IX_INVALID) { … … 299 299 */ 300 300 for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) { 301 ia = &ifp->in _ifaddrs[ix];301 ia = &ifp->in6_ifaddrs[ix]; 302 302 if ((ia->flags & (IN6_IFF_DEFINED | IN6_IFF_AUTOCONF)) != 0 && 303 303 ia->prefix_index != ND6_PREFIX_IX_INVALID) { … … 316 316 */ 317 317 for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) { 318 ia = &ifp->in _ifaddrs[ix];318 ia = &ifp->in6_ifaddrs[ix]; 319 319 if ((ia->flags & (IN6_IFF_DEFINED | IN6_IFF_AUTOCONF)) != 0) 320 320 ia->flags &= ~IN6_IFF_DETACHED; … … 448 448 /* 各メンバに値を設定する。*/ 449 449 fdr->plistmap = 0; 450 fdr->addr = *src;450 memcpy(&fdr->addr, src, sizeof(T_IN6_ADDR)); 451 451 fdr->lifetime = lifetime * SYSTIM_HZ; /* lifetime の単位は秒 */ 452 452 fdr->flags = flags; … … 478 478 int_t ix; 479 479 480 lla = &ifp->in _ifaddrs[IPV6_IFADDR_IX_LINKLOCAL];480 lla = &ifp->in6_ifaddrs[IPV6_IFADDR_IX_LINKLOCAL]; 481 481 482 482 /* … … 585 585 586 586 /* リンクローカルアドレスが未登録であれば何もしない。*/ 587 lla = &ifp->in _ifaddrs[IPV6_IFADDR_IX_LINKLOCAL];587 lla = &ifp->in6_ifaddrs[IPV6_IFADDR_IX_LINKLOCAL]; 588 588 if ((lla->flags & IN6_IFF_DEFINED) == 0) 589 589 return E_OK; … … 594 594 */ 595 595 for (ix = NUM_IN6_IFADDR_ENTRY; ix --; ) { 596 ia = &ifp->in _ifaddrs[ix];596 ia = &ifp->in6_ifaddrs[ix]; 597 597 if (ia->prefix_index == (pr - nd6_prefix)) 598 598 break; … … 634 634 */ 635 635 for (ix = NUM_IN6_IFADDR_ENTRY; ix --; ) { 636 ia = &ifp->in _ifaddrs[ix];636 ia = &ifp->in6_ifaddrs[ix]; 637 637 if (ia->prefix_index == (pr - nd6_prefix)) 638 638 break; … … 692 692 T_ND6_PREFIX *pr = NULL; 693 693 int_t ix; 694 ER error;695 694 696 695 /* プレフィックスリストから空きのプレフィックスエントリを探索する。*/ … … 723 722 724 723 if ((pr->flags & ND6_PREFIX_FLAG_ONLINK) != 0) { 725 if ( (error = nd6_prefix_onlink(pr)) != E_OK)724 if (nd6_prefix_onlink(pr) != E_OK) 726 725 return NULL; 727 726 } … … 812 811 } 813 812 813 #if 1 /* プレフィックスが未登録の場合だけ表示する。*/ 814 syslog(LOG_NOTICE, "[ND6 RTR] add prefix: flags[MOH]: %02x, addr: %s\n" 815 " from: %s.", 816 nd6_def_router[router_index].flags, 817 ipv62str(NULL, &pi->prefix), 818 ipv62str(NULL, &nd6_def_router[router_index].addr)); 819 #endif 814 820 if ((pr->flags & ND6_PREFIX_FLAG_ONLINK) == 0) { 815 821 /* … … 836 842 */ 837 843 for (ix = NUM_IN6_IFADDR_ENTRY; ix --; ) { 838 ia = &ifp->in _ifaddrs[ix];844 ia = &ifp->in6_ifaddrs[ix]; 839 845 if ((ia->flags & IN6_IFF_DEFINED) != 0 && 840 846 ia->prefix_len == pr->prefix_len && … … 892 898 } 893 899 894 lla = &ifp->in _ifaddrs[IPV6_IFADDR_IX_LINKLOCAL];900 lla = &ifp->in6_ifaddrs[IPV6_IFADDR_IX_LINKLOCAL]; 895 901 896 902 /* プレフィックスマスクを生成する。*/ … … 922 928 923 929 for (ix = NUM_IN6_IFADDR_ENTRY; ix --; ) { 924 ia = &ifp->in _ifaddrs[ix];930 ia = &ifp->in6_ifaddrs[ix]; 925 931 if ((ia->flags & IN6_IFF_DEFINED) == 0) { 926 932 in6_ifadd(pr, ia, router_index); … … 971 977 T_NET_BUF *output; 972 978 T_IN6_IFADDR *ifa; 973 T_IN6_ADDR*saddr;979 const T_IN6_ADDR *saddr; 974 980 uint16_t len; 975 981 … … 1017 1023 1018 1024 T_DEF_ROUTER * 1019 nd6_defrtrlist_lookup ( T_IN6_ADDR *src)1025 nd6_defrtrlist_lookup (const T_IN6_ADDR *src) 1020 1026 { 1021 1027 T_DEF_ROUTER *dr = NULL; … … 1036 1042 */ 1037 1043 1038 T_IN6_ADDR *1044 const T_IN6_ADDR * 1039 1045 nd6_router_lookup (void) 1040 1046 { … … 1260 1266 syslog(LOG_NOTICE, "[ND6 RTR] preferred(%d) > valid time(%d).", ntohl(pi->preferred), ntohl(pi->valid)); 1261 1267 else { 1262 syslog(LOG_NOTICE, "[ND6 RTR] update prefix: %s from %s.", 1263 ipv62str(NULL, &pi->prefix), ipv62str(NULL, &ip6h->src)); 1268 #if 0 /* プレフィックスが未登録の場合だけ表示する。*/ 1269 syslog(LOG_NOTICE, "[ND6 RTR] update prefix: flags[MOH]: %02x, addr: %s\n" 1270 " from: %s.", 1271 rah->nd_ra_flags, ipv62str(NULL, &pi->prefix), ipv62str(NULL, &ip6h->src)); 1272 #endif 1264 1273 if (rix >= 0) { 1265 1274 /* … … 1391 1400 1392 1401 T_ND6_PREFIX * 1393 nd6_onlink_prefix_lookup ( T_IN6_ADDR *dst)1402 nd6_onlink_prefix_lookup (const T_IN6_ADDR *dst) 1394 1403 { 1395 1404 SYSTIM now; … … 1427 1436 } 1428 1437 1429 #endif /* of #ifdef SUPPORT_INET6*/1438 #endif /* of #ifdef _IP6_CFG */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/route6.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 * … … 82 82 83 83 #include <net/net.h> 84 #include <net/net_endian.h> 84 85 #include <net/if.h> 85 86 #include <net/if_loop.h> … … 92 93 93 94 #include <netinet/in.h> 94 #include <netinet6/in6.h> 95 #include <netinet6/in6_var.h> 95 #include <netinet/in_var.h> 96 #include <netinet/ip.h> 97 #include <netinet/ip_var.h> 98 #include <netinet/ip_icmp.h> 96 99 #include <netinet6/nd6.h> 97 #include <netinet/ip6.h> 98 #include <netinet6/ip6_var.h> 99 #include <netinet/icmp6.h> 100 101 #ifdef SUPPORT_INET6 100 101 #ifdef _IP6_CFG 102 102 103 103 #if 0 104 105 106 107 104 /* 105 * 通信帯域を食いつぶす攻撃への対応のため、 106 * タイプ 0 経路制御ヘッダの処理を行わない。 107 */ 108 108 109 109 /* … … 229 229 } 230 230 231 #endif /* of #ifdef SUPPORT_INET6*/231 #endif /* of #ifdef _IP6_CFG */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/scope6.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 * … … 123 123 #include <net/ethernet.h> 124 124 #include <net/net.h> 125 #include <net/net_endian.h> 125 126 #include <net/net_buf.h> 127 128 #include <netinet/in.h> 129 #include <netinet/in_var.h> 126 130 127 131 #include <netinet6/in6.h> 128 132 #include <netinet6/in6_var.h> 129 133 130 #ifdef SUPPORT_INET6134 #ifdef _IP6_CFG 131 135 132 136 /* … … 135 139 136 140 uint_t 137 in6_addrscope ( T_IN6_ADDR *addr)141 in6_addrscope (const T_IN6_ADDR *addr) 138 142 { 139 143 uint_t scope; … … 168 172 } 169 173 170 #endif /* of #ifdef SUPPORT_INET6*/174 #endif /* of #ifdef _IP6_CFG */
Note:
See TracChangeset
for help on using the changeset viewer.