Changeset 331 for EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/in6.c
- Timestamp:
- Jan 21, 2018, 12:10:09 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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 */
Note:
See TracChangeset
for help on using the changeset viewer.