Lines Matching refs:pi
35 static void phyint_print(struct phyint *pi);
36 static void phyint_insert(struct phyint *pi);
41 static void prefix_insert(struct phyint *pi, struct prefix *pr);
47 static void adv_prefix_insert(struct phyint *pi, struct adv_prefix *adv_pr);
51 static void router_insert(struct phyint *pi, struct router *dr);
63 struct phyint *pi; in phyint_lookup() local
68 for (pi = phyints; pi != NULL; pi = pi->pi_next) { in phyint_lookup()
69 if (strcmp(pi->pi_name, name) == 0) in phyint_lookup()
72 return (pi); in phyint_lookup()
78 struct phyint *pi; in phyint_lookup_on_index() local
83 for (pi = phyints; pi != NULL; pi = pi->pi_next) { in phyint_lookup_on_index()
84 if (pi->pi_index == ifindex) in phyint_lookup_on_index()
87 return (pi); in phyint_lookup_on_index()
93 struct phyint *pi; in phyint_create() local
99 pi = (struct phyint *)calloc(sizeof (struct phyint), 1); in phyint_create()
100 if (pi == NULL) { in phyint_create()
104 (void) strncpy(pi->pi_name, name, sizeof (pi->pi_name)); in phyint_create()
105 pi->pi_name[sizeof (pi->pi_name) - 1] = '\0'; in phyint_create()
113 pi->pi_config[i].cf_value = ifdefaults[i].cf_value; in phyint_create()
124 if (pi->pi_TmpMaxDesyncFactor != 0) { in phyint_create()
127 pi->pi_TmpDesyncFactor = rand() % pi->pi_TmpMaxDesyncFactor; in phyint_create()
129 pi->pi_TmpDesyncFactor++; in phyint_create()
131 pi->pi_TmpRegenCountdown = TIMER_INFINITY; in phyint_create()
133 pi->pi_sock = -1; in phyint_create()
134 pi->pi_stateless = pi->pi_StatelessAddrConf; in phyint_create()
135 pi->pi_stateful = pi->pi_StatefulAddrConf; in phyint_create()
136 pi->pi_autoconf = _B_TRUE; in phyint_create()
137 pi->pi_default_token = _B_TRUE; in phyint_create()
138 if (phyint_init_from_k(pi) == -1) { in phyint_create()
139 free(pi); in phyint_create()
142 phyint_insert(pi); in phyint_create()
143 if (pi->pi_sock != -1) { in phyint_create()
144 if (poll_add(pi->pi_sock) == -1) { in phyint_create()
145 phyint_delete(pi); in phyint_create()
149 return (pi); in phyint_create()
154 phyint_insert(struct phyint *pi) in phyint_insert() argument
157 pi->pi_next = phyints; in phyint_insert()
158 pi->pi_prev = NULL; in phyint_insert()
160 phyints->pi_prev = pi; in phyint_insert()
161 phyints = pi; in phyint_insert()
171 phyint_init_from_k(struct phyint *pi) in phyint_init_from_k() argument
182 logmsg(LOG_DEBUG, "phyint_init_from_k(%s)\n", pi->pi_name); in phyint_init_from_k()
186 if (pi->pi_sock < 0) { in phyint_init_from_k()
187 pi->pi_sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6); in phyint_init_from_k()
188 if (pi->pi_sock < 0) { in phyint_init_from_k()
189 logperror_pi(pi, "phyint_init_from_k: socket"); in phyint_init_from_k()
196 fd = pi->pi_sock; in phyint_init_from_k()
198 (void) strncpy(lifr.lifr_name, pi->pi_name, sizeof (lifr.lifr_name)); in phyint_init_from_k()
203 (void) close(pi->pi_sock); in phyint_init_from_k()
204 pi->pi_sock = -1; in phyint_init_from_k()
208 "not exist\n", pi->pi_name); in phyint_init_from_k()
212 logperror_pi(pi, "phyint_init_from_k: SIOCGLIFINDEX"); in phyint_init_from_k()
216 if (!newsock && (pi->pi_index != lifr.lifr_index)) { in phyint_init_from_k()
223 phyint_cleanup(pi); in phyint_init_from_k()
227 pi->pi_index = lifr.lifr_index; in phyint_init_from_k()
230 logperror_pi(pi, "phyint_init_from_k: ioctl (get flags)"); in phyint_init_from_k()
233 pi->pi_flags = lifr.lifr_flags; in phyint_init_from_k()
239 if (!(pi->pi_flags & IFF_UP) || (pi->pi_flags & IFF_NOLOCAL)) { in phyint_init_from_k()
241 (void) close(pi->pi_sock); in phyint_init_from_k()
242 pi->pi_sock = -1; in phyint_init_from_k()
247 "IFF_NOLOCAL or not IFF_UP\n", pi->pi_name); in phyint_init_from_k()
251 pi->pi_kernel_state |= PI_PRESENT; in phyint_init_from_k()
254 logperror_pi(pi, "phyint_init_from_k: ioctl (get mtu)"); in phyint_init_from_k()
257 pi->pi_mtu = lifr.lifr_mtu; in phyint_init_from_k()
260 logperror_pi(pi, "phyint_init_from_k: SIOCGLIFADDR"); in phyint_init_from_k()
264 pi->pi_ifaddr = sin6->sin6_addr; in phyint_init_from_k()
266 if (pi->pi_autoconf && pi->pi_default_token) { in phyint_init_from_k()
268 logperror_pi(pi, "phyint_init_from_k: SIOCGLIFTOKEN"); in phyint_init_from_k()
275 pi->pi_name); in phyint_init_from_k()
278 pi->pi_token = sin6->sin6_addr; in phyint_init_from_k()
279 pi->pi_token_length = lifr.lifr_addrlen; in phyint_init_from_k()
286 if (pi->pi_flags & IFF_POINTOPOINT) { in phyint_init_from_k()
288 logperror_pi(pi, "phyint_init_from_k: SIOCGLIFDSTADDR"); in phyint_init_from_k()
295 pi->pi_dst_token = in6addr_any; in phyint_init_from_k()
297 pi->pi_dst_token = sin6->sin6_addr; in phyint_init_from_k()
299 pi->pi_dst_token.s6_addr[0] = 0; in phyint_init_from_k()
300 pi->pi_dst_token.s6_addr[1] &= 0x3f; in phyint_init_from_k()
303 pi->pi_dst_token = in6addr_any; in phyint_init_from_k()
311 pi->pi_LinkMTU = pi->pi_mtu; in phyint_init_from_k()
312 pi->pi_CurHopLimit = 0; in phyint_init_from_k()
313 pi->pi_BaseReachableTime = ND_REACHABLE_TIME; in phyint_init_from_k()
314 phyint_reach_random(pi, _B_FALSE); in phyint_init_from_k()
315 pi->pi_RetransTimer = ND_RETRANS_TIMER; in phyint_init_from_k()
319 IPV6_BOUND_IF, (char *)&pi->pi_index, in phyint_init_from_k()
320 sizeof (pi->pi_index)) < 0) { in phyint_init_from_k()
321 logperror_pi(pi, "phyint_init_from_k: setsockopt " in phyint_init_from_k()
329 logperror_pi(pi, "phyint_init_from_k: setsockopt " in phyint_init_from_k()
336 logperror_pi(pi, "phyint_init_from_k: setsockopt " in phyint_init_from_k()
342 v6mcastr.ipv6mr_interface = pi->pi_index; in phyint_init_from_k()
353 (void) strlcpy(lifr.lifr_name, pi->pi_name, LIFNAMSIZ); in phyint_init_from_k()
357 logperror_pi(pi, "phyint_init_from_k: " in phyint_init_from_k()
362 pi->pi_state |= PI_JOINED_ALLNODES; in phyint_init_from_k()
363 pi->pi_kernel_state |= PI_JOINED_ALLNODES; in phyint_init_from_k()
375 logperror_pi(pi, "phyint_init_from_k: setsockopt " in phyint_init_from_k()
383 logperror_pi(pi, "phyint_init_from_k: setsockopt " in phyint_init_from_k()
389 logperror_pi(pi, "phyint_init_from_k: setsockopt " in phyint_init_from_k()
395 if (pi->pi_AdvSendAdvertisements && in phyint_init_from_k()
396 !(pi->pi_kernel_state & PI_JOINED_ALLROUTERS)) { in phyint_init_from_k()
398 v6mcastr.ipv6mr_interface = pi->pi_index; in phyint_init_from_k()
405 (void) strlcpy(lifr.lifr_name, pi->pi_name, LIFNAMSIZ); in phyint_init_from_k()
409 logperror_pi(pi, "phyint_init_from_k: " in phyint_init_from_k()
414 pi->pi_state |= PI_JOINED_ALLROUTERS; in phyint_init_from_k()
415 pi->pi_kernel_state |= PI_JOINED_ALLROUTERS; in phyint_init_from_k()
424 (void) strncpy(lifr.lifr_name, pi->pi_name, sizeof (lifr.lifr_name)); in phyint_init_from_k()
427 logperror_pi(pi, "phyint_init_from_k: SIOCGLIFFLAGS"); in phyint_init_from_k()
430 if (!(lifr.lifr_flags & IFF_ROUTER) && pi->pi_AdvSendAdvertisements) { in phyint_init_from_k()
434 logperror_pi(pi, "phyint_init_from_k: SIOCSLIFFLAGS"); in phyint_init_from_k()
437 pi->pi_flags = lifr.lifr_flags; in phyint_init_from_k()
441 (void) strncpy(lifr.lifr_name, pi->pi_name, sizeof (lifr.lifr_name)); in phyint_init_from_k()
443 lifr.lifr_ifinfo.lir_maxhops = pi->pi_CurHopLimit; in phyint_init_from_k()
444 lifr.lifr_ifinfo.lir_reachtime = pi->pi_ReachableTime; in phyint_init_from_k()
445 lifr.lifr_ifinfo.lir_reachretrans = pi->pi_RetransTimer; in phyint_init_from_k()
449 logperror_pi(pi, "phyint_init_from_k: SIOCSLIFLNKINFO"); in phyint_init_from_k()
454 pi->pi_name); in phyint_init_from_k()
460 pi->pi_kernel_state &= ~PI_PRESENT; in phyint_init_from_k()
462 (void) close(pi->pi_sock); in phyint_init_from_k()
463 pi->pi_sock = -1; in phyint_init_from_k()
473 phyint_delete(struct phyint *pi) in phyint_delete() argument
476 logmsg(LOG_DEBUG, "phyint_delete(%s)\n", pi->pi_name); in phyint_delete()
480 while (pi->pi_router_list) in phyint_delete()
481 router_delete(pi->pi_router_list); in phyint_delete()
482 while (pi->pi_prefix_list) { in phyint_delete()
483 prefix_update_ipadm_addrobj(pi->pi_prefix_list, _B_FALSE); in phyint_delete()
484 prefix_delete(pi->pi_prefix_list); in phyint_delete()
486 while (pi->pi_adv_prefix_list) in phyint_delete()
487 adv_prefix_delete(pi->pi_adv_prefix_list); in phyint_delete()
489 if (pi->pi_sock != -1) { in phyint_delete()
490 (void) poll_remove(pi->pi_sock); in phyint_delete()
491 if (close(pi->pi_sock) < 0) { in phyint_delete()
492 logperror_pi(pi, "phyint_delete: close"); in phyint_delete()
494 pi->pi_sock = -1; in phyint_delete()
497 if (pi->pi_prev == NULL) { in phyint_delete()
498 if (phyints == pi) in phyint_delete()
499 phyints = pi->pi_next; in phyint_delete()
501 pi->pi_prev->pi_next = pi->pi_next; in phyint_delete()
503 if (pi->pi_next != NULL) in phyint_delete()
504 pi->pi_next->pi_prev = pi->pi_prev; in phyint_delete()
505 pi->pi_next = pi->pi_prev = NULL; in phyint_delete()
506 free(pi); in phyint_delete()
518 phyint_timer(struct phyint *pi, uint_t elapsed) in phyint_timer() argument
522 if (pi->pi_AdvSendAdvertisements) { in phyint_timer()
523 if (pi->pi_adv_state != NO_ADV) { in phyint_timer()
524 int old_state = pi->pi_adv_state; in phyint_timer()
528 "state %d\n", pi->pi_name, (int)old_state); in phyint_timer()
530 next = advertise_event(pi, ADV_TIMER, elapsed); in phyint_timer()
534 pi->pi_name, (int)old_state, in phyint_timer()
535 (int)pi->pi_adv_state); in phyint_timer()
539 if (pi->pi_sol_state != NO_SOLICIT) { in phyint_timer()
540 int old_state = pi->pi_sol_state; in phyint_timer()
544 "state %d\n", pi->pi_name, (int)old_state); in phyint_timer()
546 next = solicit_event(pi, SOL_TIMER, elapsed); in phyint_timer()
550 pi->pi_name, (int)old_state, in phyint_timer()
551 (int)pi->pi_sol_state); in phyint_timer()
560 if ((pi->pi_AdvSendAdvertisements && (pi->pi_adv_state != NO_ADV)) || in phyint_timer()
561 (!pi->pi_AdvSendAdvertisements && in phyint_timer()
562 (pi->pi_sol_state != NO_SOLICIT))) { in phyint_timer()
563 pi->pi_reach_time_since_random += elapsed; in phyint_timer()
564 if (pi->pi_reach_time_since_random >= MAX_REACH_RANDOM_INTERVAL) in phyint_timer()
565 phyint_reach_random(pi, _B_TRUE); in phyint_timer()
572 phyint_print(struct phyint *pi) in phyint_print() argument
581 pi->pi_name, pi->pi_index, pi->pi_state, pi->pi_kernel_state, in phyint_print()
582 pi->pi_num_k_routers); in phyint_print()
584 inet_ntop(AF_INET6, (void *)&pi->pi_ifaddr, in phyint_print()
585 abuf, sizeof (abuf)), pi->pi_flags); in phyint_print()
586 logmsg(LOG_DEBUG, "\tsock %d mtu %d\n", pi->pi_sock, pi->pi_mtu); in phyint_print()
587 logmsg(LOG_DEBUG, "\ttoken: len %d %s\n", pi->pi_token_length, in phyint_print()
588 inet_ntop(AF_INET6, (void *)&pi->pi_token, in phyint_print()
590 if (pi->pi_TmpAddrsEnabled) { in phyint_print()
592 inet_ntop(AF_INET6, (void *)&pi->pi_tmp_token, in phyint_print()
596 pi->pi_TmpPreferredLifetime, pi->pi_TmpValidLifetime, in phyint_print()
597 pi->pi_TmpMaxDesyncFactor, pi->pi_TmpDesyncFactor, in phyint_print()
598 pi->pi_TmpRegenAdvance); in phyint_print()
600 if (pi->pi_flags & IFF_POINTOPOINT) { in phyint_print()
602 inet_ntop(AF_INET6, (void *)&pi->pi_dst_token, in phyint_print()
607 pi->pi_LinkMTU, pi->pi_CurHopLimit, pi->pi_BaseReachableTime, in phyint_print()
608 pi->pi_ReachableTime, pi->pi_RetransTimer); in phyint_print()
609 if (!pi->pi_AdvSendAdvertisements) { in phyint_print()
612 pi->pi_sol_time_left, pi->pi_sol_state, pi->pi_sol_count); in phyint_print()
617 pi->pi_adv_time_left, pi->pi_adv_state, pi->pi_adv_count, in phyint_print()
618 pi->pi_adv_time_since_sent); in phyint_print()
619 print_iflist(pi->pi_config); in phyint_print()
621 for (pr = pi->pi_prefix_list; pr != NULL; pr = pr->pr_next) in phyint_print()
624 for (adv_pr = pi->pi_adv_prefix_list; adv_pr != NULL; in phyint_print()
629 for (dr = pi->pi_router_list; dr != NULL; dr = dr->dr_next) in phyint_print()
644 phyint_get_lla(struct phyint *pi, struct lifreq *lifrp) in phyint_get_lla() argument
649 if (!(pi->pi_flags & IFF_MULTICAST) || in phyint_get_lla()
650 (pi->pi_flags & IFF_POINTOPOINT)) { in phyint_get_lla()
654 (void) strlcpy(lifrp->lifr_name, pi->pi_name, LIFNAMSIZ); in phyint_get_lla()
657 sin6->sin6_addr = pi->pi_ifaddr; in phyint_get_lla()
658 if (ioctl(pi->pi_sock, SIOCLIFGETND, lifrp) < 0) { in phyint_get_lla()
665 if (!(pi->pi_flags & IFF_IPMP) || errno != ESRCH) in phyint_get_lla()
666 logperror_pi(pi, "phyint_get_lla: SIOCLIFGETND"); in phyint_get_lla()
680 phyint_reach_random(struct phyint *pi, boolean_t set_needed) in phyint_reach_random() argument
684 pi->pi_ReachableTime = GET_RANDOM( in phyint_reach_random()
685 (int)(ND_MIN_RANDOM_FACTOR * pi->pi_BaseReachableTime), in phyint_reach_random()
686 (int)(ND_MAX_RANDOM_FACTOR * pi->pi_BaseReachableTime)); in phyint_reach_random()
689 (void) strlcpy(lifr.lifr_name, pi->pi_name, LIFNAMSIZ); in phyint_reach_random()
690 lifr.lifr_ifinfo.lir_reachtime = pi->pi_ReachableTime; in phyint_reach_random()
691 if (ioctl(pi->pi_sock, SIOCSLIFLNKINFO, (char *)&lifr) < 0) { in phyint_reach_random()
692 logperror_pi(pi, in phyint_reach_random()
697 pi->pi_reach_time_since_random = 0; in phyint_reach_random()
715 struct phyint *pi; in tmptoken_isvalid() local
739 for (pi = phyints; pi != NULL; pi = pi->pi_next) { in tmptoken_isvalid()
740 if (((pi->pi_token_length == TMP_TOKEN_BITS) && in tmptoken_isvalid()
741 IN6_ARE_ADDR_EQUAL(&pi->pi_token, token)) || in tmptoken_isvalid()
742 IN6_ARE_ADDR_EQUAL(&pi->pi_tmp_token, token)) in tmptoken_isvalid()
759 tmptoken_create(struct phyint *pi) in tmptoken_create() argument
795 pi->pi_name, pi->pi_name); in tmptoken_create()
796 pi->pi_TmpAddrsEnabled = 0; in tmptoken_create()
800 pi->pi_tmp_token = token; in tmptoken_create()
804 "token %s\n", pi->pi_name, in tmptoken_create()
805 inet_ntop(AF_INET6, &pi->pi_tmp_token, buf, sizeof (buf))); in tmptoken_create()
807 pi->pi_TmpRegenCountdown = (pi->pi_TmpPreferredLifetime - in tmptoken_create()
808 pi->pi_TmpDesyncFactor - pi->pi_TmpRegenAdvance) * MILLISEC; in tmptoken_create()
809 if (pi->pi_TmpRegenCountdown != 0) in tmptoken_create()
810 timer_schedule(pi->pi_TmpRegenCountdown); in tmptoken_create()
826 tmptoken_delete(struct phyint *pi) in tmptoken_delete() argument
830 for (pr = pi->pi_prefix_list; pr != NULL; pr = pr->pr_next) { in tmptoken_delete()
833 (!token_equal(pr->pr_address, pi->pi_tmp_token, in tmptoken_delete()
842 (void) memset(&pi->pi_tmp_token, 0, sizeof (pi->pi_tmp_token)); in tmptoken_delete()
852 tmptoken_timer(struct phyint *pi, uint_t elapsed) in tmptoken_timer() argument
860 pi->pi_name, (int)elapsed, pi->pi_TmpRegenCountdown); in tmptoken_timer()
862 if (!pi->pi_TmpAddrsEnabled || in tmptoken_timer()
863 (pi->pi_TmpRegenCountdown == TIMER_INFINITY)) in tmptoken_timer()
866 if (pi->pi_TmpRegenCountdown > elapsed) { in tmptoken_timer()
867 pi->pi_TmpRegenCountdown -= elapsed; in tmptoken_timer()
868 return (pi->pi_TmpRegenCountdown); in tmptoken_timer()
876 if (!tmptoken_create(pi)) in tmptoken_timer()
883 for (pr = pi->pi_prefix_list; pr != NULL; pr = pr->pr_next) { in tmptoken_timer()
890 newpr = prefix_create(pi, pr->pr_prefix, pr->pr_prefix_len, in tmptoken_timer()
897 (void) inet_ntop(AF_INET6, &pi->pi_tmp_token, tbuf, in tmptoken_timer()
900 "(%s, %s, %s)\n", pi->pi_name, pbuf, tbuf); in tmptoken_timer()
928 if (!incoming_prefix_addrconf_process(pi, newpr, in tmptoken_timer()
934 (void) inet_ntop(AF_INET6, &pi->pi_tmp_token, tbuf, in tmptoken_timer()
937 "(%s, %s, %s)\n", pi->pi_name, pbuf, tbuf); in tmptoken_timer()
992 prefix_lookup(struct phyint *pi, struct in6_addr prefix, int prefixlen) in prefix_lookup() argument
998 logmsg(LOG_DEBUG, "prefix_lookup(%s, %s/%u)\n", pi->pi_name, in prefix_lookup()
1003 for (pr = pi->pi_prefix_list; pr != NULL; pr = pr->pr_next) { in prefix_lookup()
1069 prefix_lookup_name(struct phyint *pi, char *name) in prefix_lookup_name() argument
1075 pi->pi_name, name); in prefix_lookup_name()
1080 for (pr = pi->pi_prefix_list; pr != NULL; pr = pr->pr_next) { in prefix_lookup_name()
1096 struct phyint *pi; in prefix_lookup_addr_match() local
1108 for (pi = phyints; pi != NULL; pi = pi->pi_next) { in prefix_lookup_addr_match()
1109 otherpr = prefix_lookup(pi, prefix, prefixlen); in prefix_lookup_addr_match()
1124 prefix_create(struct phyint *pi, struct in6_addr prefix, int prefixlen, in prefix_create() argument
1132 pi->pi_name, inet_ntop(AF_INET6, (void *)&prefix, in prefix_create()
1151 prefix_insert(pi, pr); in prefix_create()
1160 prefix_create_name(struct phyint *pi, char *name) in prefix_create_name() argument
1166 pi->pi_name, name); in prefix_create_name()
1175 prefix_insert(pi, pr); in prefix_create_name()
1181 prefix_insert(struct phyint *pi, struct prefix *pr) in prefix_insert() argument
1183 pr->pr_next = pi->pi_prefix_list; in prefix_insert()
1185 if (pi->pi_prefix_list != NULL) in prefix_insert()
1186 pi->pi_prefix_list->pr_prev = pr; in prefix_insert()
1187 pi->pi_prefix_list = pr; in prefix_insert()
1188 pr->pr_physical = pi; in prefix_insert()
1230 struct phyint *pi = pr->pr_physical; in prefix_init_from_k() local
1244 for (pr2 = pi->pi_prefix_list; pr2 != NULL; in prefix_init_from_k()
1265 (void) check_to_solicit(pi, RESTART_INIT_SOLICIT); in prefix_init_from_k()
1367 struct phyint *pi; in prefix_delete() local
1376 pi = pr->pr_physical; in prefix_delete()
1384 if (pi != NULL) in prefix_delete()
1385 pi->pi_prefix_list = pr->pr_next; in prefix_delete()
1404 struct phyint *pi = pr->pr_physical; in prefix_modify_flags() local
1419 strcmp(pr->pr_name, pi->pi_name) == 0) { in prefix_modify_flags()
1422 pi->pi_name, onflags, offflags); in prefix_modify_flags()
1428 if (ioctl(pi->pi_sock, SIOCGLIFFLAGS, (char *)&lifr) < 0) { in prefix_modify_flags()
1441 if (ioctl(pi->pi_sock, SIOCSLIFFLAGS, (char *)&lifr) < 0) { in prefix_modify_flags()
1489 struct phyint *pi = pr->pr_physical; in prefix_update_k() local
1529 (void) strncpy(lifr.lifr_name, pi->pi_name, in prefix_update_k()
1533 if (ioctl(pi->pi_sock, SIOCLIFADDIF, (char *)&lifr) < 0) { in prefix_update_k()
1576 strcmp(pr->pr_name, pi->pi_name) == 0) { in prefix_update_k()
1578 "name matches if\n", pi->pi_name); in prefix_update_k()
1584 if (ioctl(pi->pi_sock, SIOCLIFREMOVEIF, (char *)&lifr) < 0 && in prefix_update_k()
1612 if (ioctl(pi->pi_sock, SIOCSLIFADDR, (char *)&lifr) < 0) { in prefix_update_k()
1634 if (ioctl(pi->pi_sock, SIOCSLIFSUBNET, (char *)&lifr) < 0) { in prefix_update_k()
1644 if (pi->pi_flags & IFF_POINTOPOINT) { in prefix_update_k()
1653 pi->pi_dst_token.s6_addr[i]; in prefix_update_k()
1662 if (ioctl(pi->pi_sock, SIOCSLIFDSTADDR, in prefix_update_k()
1693 if (ioctl(pi->pi_sock, SIOCSLIFADDR, (char *)&lifr) < 0) { in prefix_update_k()
1729 if (ioctl(pi->pi_sock, SIOCSLIFSUBNET, (char *)&lifr) < 0) { in prefix_update_k()
1760 if (ioctl(pi->pi_sock, SIOCSLIFSUBNET, (char *)&lifr) < 0) { in prefix_update_k()
1920 adv_prefix_lookup(struct phyint *pi, struct in6_addr prefix, int prefixlen) in adv_prefix_lookup() argument
1927 pi->pi_name, inet_ntop(AF_INET6, (void *)&prefix, in adv_prefix_lookup()
1931 for (adv_pr = pi->pi_adv_prefix_list; adv_pr != NULL; in adv_prefix_lookup()
1944 adv_prefix_create(struct phyint *pi, struct in6_addr prefix, int prefixlen) in adv_prefix_create() argument
1951 pi->pi_name, inet_ntop(AF_INET6, (void *)&prefix, in adv_prefix_create()
1965 adv_prefix_insert(pi, adv_pr); in adv_prefix_create()
1971 adv_prefix_insert(struct phyint *pi, struct adv_prefix *adv_pr) in adv_prefix_insert() argument
1973 adv_pr->adv_pr_next = pi->pi_adv_prefix_list; in adv_prefix_insert()
1975 if (pi->pi_adv_prefix_list != NULL) in adv_prefix_insert()
1976 pi->pi_adv_prefix_list->adv_pr_prev = adv_pr; in adv_prefix_insert()
1977 pi->pi_adv_prefix_list = adv_pr; in adv_prefix_insert()
1978 adv_pr->adv_pr_physical = pi; in adv_prefix_insert()
1989 struct phyint *pi; in adv_prefix_delete() local
1998 pi = adv_pr->adv_pr_physical; in adv_prefix_delete()
2001 if (pi != NULL) in adv_prefix_delete()
2002 pi->pi_adv_prefix_list = adv_pr->adv_pr_next; in adv_prefix_delete()
2058 router_lookup(struct phyint *pi, struct in6_addr addr) in router_lookup() argument
2064 logmsg(LOG_DEBUG, "router_lookup(%s, %s)\n", pi->pi_name, in router_lookup()
2069 for (dr = pi->pi_router_list; dr != NULL; dr = dr->dr_next) { in router_lookup()
2082 router_create(struct phyint *pi, struct in6_addr addr, uint_t lifetime) in router_create() argument
2088 logmsg(LOG_DEBUG, "router_create(%s, %s, %u)\n", pi->pi_name, in router_create()
2100 router_insert(pi, dr); in router_create()
2108 router_insert(struct phyint *pi, struct router *dr) in router_insert() argument
2110 dr->dr_next = pi->pi_router_list; in router_insert()
2112 if (pi->pi_router_list != NULL) in router_insert()
2113 pi->pi_router_list->dr_prev = dr; in router_insert()
2114 pi->pi_router_list = dr; in router_insert()
2115 dr->dr_physical = pi; in router_insert()
2126 struct phyint *pi; in router_delete() local
2135 pi = dr->dr_physical; in router_delete()
2136 if (dr->dr_inkernel && (pi->pi_kernel_state & PI_PRESENT)) in router_delete()
2140 if (pi != NULL) in router_delete()
2141 pi->pi_router_list = dr->dr_next; in router_delete()
2225 struct phyint *pi = dr->dr_physical; in router_add_k() local
2238 rta_ifp->sdl_index = if_nametoindex(pi->pi_name); in router_add_k()
2240 logperror_pi(pi, "router_add_k: if_nametoindex"); in router_add_k()
2250 logperror_pi(pi, "router_add_k: RTM_ADD"); in router_add_k()
2255 "only %d for rlen (interface %s)\n", rlen, pi->pi_name); in router_add_k()
2259 pi->pi_num_k_routers++; in router_add_k()
2269 struct phyint *pi = dr->dr_physical; in router_delete_k() local
2282 rta_ifp->sdl_index = if_nametoindex(pi->pi_name); in router_delete_k()
2284 logperror_pi(pi, "router_delete_k: if_nametoindex"); in router_delete_k()
2294 logperror_pi(pi, "router_delete_k: RTM_DELETE"); in router_delete_k()
2298 "only %d for rlen (interface %s)\n", rlen, pi->pi_name); in router_delete_k()
2301 pi->pi_num_k_routers--; in router_delete_k()
2317 struct phyint *pi; in phyint_print_all() local
2319 for (pi = phyints; pi != NULL; pi = pi->pi_next) { in phyint_print_all()
2320 phyint_print(pi); in phyint_print_all()
2325 phyint_cleanup(struct phyint *pi) in phyint_cleanup() argument
2327 pi->pi_state = 0; in phyint_cleanup()
2328 pi->pi_kernel_state = 0; in phyint_cleanup()
2330 if (pi->pi_AdvSendAdvertisements) { in phyint_cleanup()
2331 check_to_advertise(pi, ADV_OFF); in phyint_cleanup()
2333 check_to_solicit(pi, SOLICIT_OFF); in phyint_cleanup()
2336 while (pi->pi_router_list) in phyint_cleanup()
2337 router_delete(pi->pi_router_list); in phyint_cleanup()
2338 (void) poll_remove(pi->pi_sock); in phyint_cleanup()
2339 (void) close(pi->pi_sock); in phyint_cleanup()
2340 pi->pi_sock = -1; in phyint_cleanup()
2341 pi->pi_stateless = pi->pi_StatelessAddrConf; in phyint_cleanup()
2342 pi->pi_stateful = pi->pi_StatefulAddrConf; in phyint_cleanup()
2343 pi->pi_ipadm_aobjname[0] = '\0'; in phyint_cleanup()
2352 struct phyint *pi = pr->pr_physical; in prefix_update_ipadm_addrobj() local
2364 if (pi->pi_ipadm_aobjname[0] == '\0' || in prefix_update_ipadm_addrobj()
2379 status = ipadm_add_aobjname(iph, pi->pi_name, AF_INET6, in prefix_update_ipadm_addrobj()
2380 pi->pi_ipadm_aobjname, IPADM_ADDR_IPV6_ADDRCONF, lnum); in prefix_update_ipadm_addrobj()
2382 status = ipadm_delete_aobjname(iph, pi->pi_name, AF_INET6, in prefix_update_ipadm_addrobj()
2383 pi->pi_ipadm_aobjname, IPADM_ADDR_IPV6_ADDRCONF, lnum); in prefix_update_ipadm_addrobj()
2388 (add ? "adding" : "deleting"), pi->pi_ipadm_aobjname, in prefix_update_ipadm_addrobj()