Lines Matching refs:pi

40 		    struct phyint *pi, struct sockaddr_in6 *from);
42 static void incoming_rs(struct phyint *pi, struct nd_router_solicit *rs,
45 void incoming_ra(struct phyint *pi, struct nd_router_advert *ra,
47 static void incoming_prefix_opt(struct phyint *pi, uchar_t *opt,
49 static void incoming_prefix_onlink(struct phyint *pi, uchar_t *opt);
53 static boolean_t incoming_prefix_addrconf(struct phyint *pi,
56 boolean_t incoming_prefix_addrconf_process(struct phyint *pi,
60 static void incoming_mtu_opt(struct phyint *pi, uchar_t *opt,
62 static void incoming_lla_opt(struct phyint *pi, uchar_t *opt,
65 static void verify_ra_consistency(struct phyint *pi,
68 static void verify_prefix_opt(struct phyint *pi, uchar_t *opt,
70 static void verify_mtu_opt(struct phyint *pi, uchar_t *opt,
73 static void update_ra_flag(const struct phyint *pi,
96 in_data(struct phyint *pi) in in_data() argument
121 if ((len = recvmsg(pi->pi_sock, &msg, 0)) < 0) { in in_data()
122 logperror_pi(pi, "in_data: recvfrom"); in in_data()
148 len, msgbuf, pi->pi_name); in in_data()
156 msgbuf, pi->pi_name); in in_data()
165 msgbuf, pi->pi_name); in in_data()
170 if (!pi->pi_AdvSendAdvertisements) in in_data()
172 if (pi->pi_flags & IFF_NORTEXCH) { in in_data()
176 pi->pi_name); in in_data()
187 hoplimit, msgbuf, pi->pi_name); in in_data()
193 icmp->icmp6_code, msgbuf, pi->pi_name); in in_data()
200 len, msgbuf, pi->pi_name); in in_data()
206 len - sizeof (struct nd_router_solicit), pi, &from)) in in_data()
210 print_route_sol("Received valid solicit from ", pi, in in_data()
213 incoming_rs(pi, rs, len, &from); in in_data()
226 if (pi->pi_flags & IFF_NORTEXCH) { in in_data()
230 pi->pi_name); in in_data()
241 msgbuf, pi->pi_name); in in_data()
247 hoplimit, msgbuf, pi->pi_name); in in_data()
253 icmp->icmp6_code, msgbuf, pi->pi_name); in in_data()
260 len, msgbuf, pi->pi_name); in in_data()
266 len - sizeof (struct nd_router_advert), pi, &from)) in in_data()
270 print_route_adv("Received valid advert from ", pi, in in_data()
273 if (pi->pi_AdvSendAdvertisements) in in_data()
274 verify_ra_consistency(pi, ra, len, &from); in in_data()
276 incoming_ra(pi, ra, len, &from, _B_FALSE); in in_data()
287 incoming_rs(struct phyint *pi, struct nd_router_solicit *rs, int len, in incoming_rs() argument
300 incoming_lla_opt(pi, (uchar_t *)opt, in incoming_rs()
310 check_to_advertise(pi, RECEIVED_SOLICIT); in incoming_rs()
317 dhcp_op(struct phyint *pi, int type) in dhcp_op() argument
323 request = dhcp_ipc_alloc_request(type | DHCP_V6, pi->pi_name, NULL, 0, in dhcp_op()
329 pi->pi_ra_flags &= in dhcp_op()
339 "%s: %s\n", pi->pi_name, dhcp_ipc_strerror(error)); in dhcp_op()
354 start_dhcp(struct phyint *pi) in start_dhcp() argument
362 pi->pi_ra_flags &= ~ND_RA_FLAG_MANAGED & ~ND_RA_FLAG_OTHER; in start_dhcp()
366 else if (pi->pi_ra_flags & ND_RA_FLAG_MANAGED) in start_dhcp()
371 error = dhcp_op(pi, type); in start_dhcp()
379 pi->pi_name, dhcp_ipc_strerror(error)); in start_dhcp()
388 release_dhcp(struct phyint *pi) in release_dhcp() argument
395 error = dhcp_op(pi, type); in release_dhcp()
406 pi->pi_name, dhcp_ipc_strerror(error)); in release_dhcp()
433 incoming_ra(struct phyint *pi, struct nd_router_advert *ra, int len, in incoming_ra() argument
450 (void) strlcpy(lifr.lifr_name, pi->pi_name, sizeof (lifr.lifr_name)); in incoming_ra()
453 ra->nd_ra_curhoplimit != pi->pi_CurHopLimit) { in incoming_ra()
454 pi->pi_CurHopLimit = ra->nd_ra_curhoplimit; in incoming_ra()
455 lifr.lifr_ifinfo.lir_maxhops = pi->pi_CurHopLimit; in incoming_ra()
458 if (pi->pi_CurHopLimit < bad_hopcount_threshhold) { in incoming_ra()
464 pi->pi_CurHopLimit, pi->pi_name, in incoming_ra()
474 reachable != pi->pi_BaseReachableTime) { in incoming_ra()
475 pi->pi_BaseReachableTime = reachable; in incoming_ra()
479 if (pi->pi_reach_time_since_random < MIN_REACH_RANDOM_INTERVAL || in incoming_ra()
481 phyint_reach_random(pi, _B_FALSE); in incoming_ra()
484 lifr.lifr_ifinfo.lir_reachtime = pi->pi_ReachableTime; in incoming_ra()
488 pi->pi_RetransTimer != retrans) { in incoming_ra()
489 pi->pi_RetransTimer = retrans; in incoming_ra()
490 lifr.lifr_ifinfo.lir_reachretrans = pi->pi_RetransTimer; in incoming_ra()
495 if (ioctl(pi->pi_sock, SIOCSLIFLNKINFO, (char *)&lifr) < 0) { in incoming_ra()
496 logperror_pi(pi, "incoming_ra: SIOCSLIFLNKINFO"); in incoming_ra()
515 if (pi->pi_autoconf && pi->pi_stateful && in incoming_ra()
516 (ra->nd_ra_flags_reserved & ~pi->pi_ra_flags & in incoming_ra()
521 (ra->nd_ra_flags_reserved & ~pi->pi_ra_flags & in incoming_ra()
523 pi->pi_name); in incoming_ra()
525 pi->pi_ra_flags |= ra->nd_ra_flags_reserved; in incoming_ra()
526 start_dhcp(pi); in incoming_ra()
532 dr = router_lookup(pi, from->sin6_addr); in incoming_ra()
536 dr = router_create(pi, from->sin6_addr, in incoming_ra()
556 incoming_prefix_opt(pi, (uchar_t *)opt, from, in incoming_ra()
560 incoming_mtu_opt(pi, (uchar_t *)opt, from); in incoming_ra()
565 incoming_lla_opt(pi, (uchar_t *)opt, in incoming_ra()
577 update_ra_flag(pi, from, NDF_ISROUTER_ON); in incoming_ra()
579 check_to_solicit(pi, SOLICIT_DONE); in incoming_ra()
591 incoming_prefix_opt(struct phyint *pi, uchar_t *opt, in incoming_prefix_opt() argument
604 abuf, pi->pi_name, in incoming_prefix_opt()
615 abuf, pi->pi_name); in incoming_prefix_opt()
619 pi->pi_stateless && pi->pi_autoconf) { in incoming_prefix_opt()
620 good_prefix = incoming_prefix_addrconf(pi, opt, from, loopback); in incoming_prefix_opt()
624 incoming_prefix_onlink(pi, opt); in incoming_prefix_opt()
626 if (pi->pi_stateful && pi->pi_autoconf) in incoming_prefix_opt()
627 incoming_prefix_stateful(pi, opt); in incoming_prefix_opt()
642 incoming_prefix_onlink(struct phyint *pi, uchar_t *opt) in incoming_prefix_onlink() argument
651 for (pr = pi->pi_prefix_list; pr != NULL; pr = pr->pr_next) { in incoming_prefix_onlink()
669 pr = prefix_create(pi, po->nd_opt_pi_prefix, plen, 0); in incoming_prefix_onlink()
726 incoming_prefix_stateful(struct phyint *pi, uchar_t *opt) in incoming_prefix_stateful() argument
743 pi->pi_name, inet_ntop(AF_INET6, in incoming_prefix_stateful()
747 for (pr = pi->pi_prefix_list; pr != NULL; pr = pr->pr_next) { in incoming_prefix_stateful()
773 pr = prefix_create(pi, po->nd_opt_pi_prefix, in incoming_prefix_stateful()
793 incoming_prefix_addrconf(struct phyint *pi, uchar_t *opt, in incoming_prefix_addrconf() argument
819 pbuf, plen, abuf, pi->pi_name, in incoming_prefix_addrconf()
824 for (pr = pi->pi_prefix_list; pr != NULL; pr = pr->pr_next) { in incoming_prefix_addrconf()
840 !token_equal(pi->pi_tmp_token, in incoming_prefix_addrconf()
846 (void) incoming_prefix_addrconf_process(pi, pr, opt, in incoming_prefix_addrconf()
857 (found_pub && (!pi->pi_TmpAddrsEnabled || found_tmp))) in incoming_prefix_addrconf()
861 pr = prefix_create(pi, po->nd_opt_pi_prefix, plen, 0); in incoming_prefix_addrconf()
864 ret = incoming_prefix_addrconf_process(pi, pr, opt, from, in incoming_prefix_addrconf()
874 if (pi->pi_TmpAddrsEnabled && !found_tmp) { in incoming_prefix_addrconf()
875 pr = prefix_create(pi, po->nd_opt_pi_prefix, plen, in incoming_prefix_addrconf()
879 ret = incoming_prefix_addrconf_process(pi, pr, opt, from, in incoming_prefix_addrconf()
887 incoming_prefix_addrconf_process(struct phyint *pi, struct prefix *pr, in incoming_prefix_addrconf_process() argument
929 pbuf, plen, abuf, pi->pi_name, in incoming_prefix_addrconf_process()
950 pbuf, plen, abuf, pi->pi_name, in incoming_prefix_addrconf_process()
963 pi->pi_TmpPreferredLifetime - pi->pi_TmpDesyncFactor; in incoming_prefix_addrconf_process()
966 validtime = MIN(validtime, pi->pi_TmpValidLifetime); in incoming_prefix_addrconf_process()
972 cur_vexp = pr->pr_CreateTime + pi->pi_TmpValidLifetime; in incoming_prefix_addrconf_process()
984 !token_equal(pr->pr_address, pi->pi_tmp_token, in incoming_prefix_addrconf_process()
992 if ((preftime != 0) && (preftime <= pi->pi_TmpRegenAdvance)) { in incoming_prefix_addrconf_process()
1001 pbuf, plen, abuf, pi->pi_name, preftime, in incoming_prefix_addrconf_process()
1002 pi->pi_TmpRegenAdvance); in incoming_prefix_addrconf_process()
1021 if (IN6_IS_ADDR_UNSPECIFIED(&pi->pi_tmp_token)) { in incoming_prefix_addrconf_process()
1022 if (!tmptoken_create(pi)) { in incoming_prefix_addrconf_process()
1028 token = &pi->pi_tmp_token; in incoming_prefix_addrconf_process()
1030 tokenlen = pi->pi_token_length; in incoming_prefix_addrconf_process()
1031 token = &pi->pi_token; in incoming_prefix_addrconf_process()
1042 pbuf, plen, abuf, pi->pi_name, in incoming_prefix_addrconf_process()
1066 sizeof (abuf)), pi->pi_name); in incoming_prefix_addrconf_process()
1150 incoming_mtu_opt(struct phyint *pi, uchar_t *opt, in incoming_mtu_opt() argument
1164 abuf, pi->pi_name, in incoming_mtu_opt()
1169 if (pi->pi_LinkMTU == mtu) in incoming_mtu_opt()
1171 if (mtu > pi->pi_mtu) { in incoming_mtu_opt()
1178 "MTU %d - %d\n", abuf, pi->pi_name, mtu, pi->pi_mtu); in incoming_mtu_opt()
1187 "MTU (%d)\n", abuf, pi->pi_name, mtu); in incoming_mtu_opt()
1191 pi->pi_LinkMTU = mtu; in incoming_mtu_opt()
1193 (void) strlcpy(lifr.lifr_name, pi->pi_name, sizeof (lifr.lifr_name)); in incoming_mtu_opt()
1194 lifr.lifr_ifinfo.lir_maxmtu = pi->pi_LinkMTU; in incoming_mtu_opt()
1195 if (ioctl(pi->pi_sock, SIOCSLIFLNKINFO, (char *)&lifr) < 0) { in incoming_mtu_opt()
1196 logperror_pi(pi, "incoming_mtu_opt: SIOCSLIFLNKINFO"); in incoming_mtu_opt()
1206 incoming_lla_opt(struct phyint *pi, uchar_t *opt, in incoming_lla_opt() argument
1218 if (phyint_get_lla(pi, &lifr) != 0) in incoming_lla_opt()
1235 "physaddr length (%d vs. %d bytes)\n", abuf, pi->pi_name, in incoming_lla_opt()
1255 (void) strlcpy(lifr.lifr_name, pi->pi_name, sizeof (lifr.lifr_name)); in incoming_lla_opt()
1256 if (ioctl(pi->pi_sock, SIOCLIFSETND, (char *)&lifr) < 0) { in incoming_lla_opt()
1257 logperror_pi(pi, "incoming_lla_opt: SIOCLIFSETND"); in incoming_lla_opt()
1267 verify_ra_consistency(struct phyint *pi, struct nd_router_advert *ra, int len, in verify_ra_consistency() argument
1280 pi->pi_AdvCurHopLimit != 0 && in verify_ra_consistency()
1281 ra->nd_ra_curhoplimit != pi->pi_AdvCurHopLimit) { in verify_ra_consistency()
1284 frombuf, pi->pi_name, in verify_ra_consistency()
1285 ra->nd_ra_curhoplimit, pi->pi_AdvCurHopLimit); in verify_ra_consistency()
1289 if (reachable != 0 && pi->pi_AdvReachableTime != 0 && in verify_ra_consistency()
1290 reachable != pi->pi_AdvReachableTime) { in verify_ra_consistency()
1293 frombuf, pi->pi_name, in verify_ra_consistency()
1294 reachable, pi->pi_AdvReachableTime); in verify_ra_consistency()
1298 if (retrans != 0 && pi->pi_AdvRetransTimer != 0 && in verify_ra_consistency()
1299 retrans != pi->pi_AdvRetransTimer) { in verify_ra_consistency()
1302 frombuf, pi->pi_name, in verify_ra_consistency()
1303 retrans, pi->pi_AdvRetransTimer); in verify_ra_consistency()
1307 myflag = (pi->pi_AdvManagedFlag != 0); in verify_ra_consistency()
1311 frombuf, pi->pi_name, in verify_ra_consistency()
1316 myflag = (pi->pi_AdvOtherConfigFlag != 0); in verify_ra_consistency()
1320 frombuf, pi->pi_name, in verify_ra_consistency()
1332 verify_prefix_opt(pi, (uchar_t *)opt, frombuf); in verify_ra_consistency()
1335 verify_mtu_opt(pi, (uchar_t *)opt, frombuf); in verify_ra_consistency()
1350 verify_prefix_opt(struct phyint *pi, uchar_t *opt, char *frombuf) in verify_prefix_opt() argument
1362 frombuf, pi->pi_name, in verify_prefix_opt()
1369 frombuf, pi->pi_name); in verify_prefix_opt()
1373 adv_pr = adv_prefix_lookup(pi, po->nd_opt_pi_prefix, plen); in verify_prefix_opt()
1388 frombuf, pi->pi_name, prefixbuf, adv_pr->adv_pr_prefix_len, in verify_prefix_opt()
1398 frombuf, pi->pi_name, prefixbuf, adv_pr->adv_pr_prefix_len, in verify_prefix_opt()
1420 frombuf, pi->pi_name, prefixbuf, in verify_prefix_opt()
1429 frombuf, pi->pi_name, prefixbuf, in verify_prefix_opt()
1444 frombuf, pi->pi_name, prefixbuf, in verify_prefix_opt()
1453 frombuf, pi->pi_name, prefixbuf, in verify_prefix_opt()
1464 verify_mtu_opt(struct phyint *pi, uchar_t *opt, char *frombuf) in verify_mtu_opt() argument
1472 frombuf, pi->pi_name, in verify_mtu_opt()
1477 if (pi->pi_AdvLinkMTU != 0 && in verify_mtu_opt()
1478 pi->pi_AdvLinkMTU != mtu) { in verify_mtu_opt()
1481 frombuf, pi->pi_name, in verify_mtu_opt()
1482 mtu, pi->pi_AdvLinkMTU); in verify_mtu_opt()
1492 struct phyint *pi, struct sockaddr_in6 *from) in verify_opt_len() argument
1504 opt->nd_opt_type, abuf, pi->pi_name); in verify_opt_len()
1518 abuf, pi->pi_name); in verify_opt_len()
1531 update_ra_flag(const struct phyint *pi, const struct sockaddr_in6 *from, in update_ra_flag() argument
1551 (void) strlcpy(lifr.lifr_name, pi->pi_name, sizeof (lifr.lifr_name)); in update_ra_flag()
1553 if (ioctl(pi->pi_sock, SIOCLIFGETND, (char *)&lifr) < 0) { in update_ra_flag()
1560 logperror_pi(pi, "update_ra_flag: SIOCLIFGETND"); in update_ra_flag()
1583 if ((ioctl(pi->pi_sock, SIOCLIFSETND, (char *)&lifr)) < 0) { in update_ra_flag()
1584 logperror_pi(pi, "update_ra_flag: SIOCLIFSETND"); in update_ra_flag()