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