Lines Matching refs:pi

36 		    struct phyint *pi, struct sockaddr_in6 *from);
38 static void incoming_rs(struct phyint *pi, struct nd_router_solicit *rs,
41 void incoming_ra(struct phyint *pi, struct nd_router_advert *ra,
43 static void incoming_prefix_opt(struct phyint *pi, uchar_t *opt,
45 static void incoming_prefix_onlink(struct phyint *pi, uchar_t *opt);
49 static boolean_t incoming_prefix_addrconf(struct phyint *pi,
52 boolean_t incoming_prefix_addrconf_process(struct phyint *pi,
56 static void incoming_mtu_opt(struct phyint *pi, uchar_t *opt,
58 static void incoming_lla_opt(struct phyint *pi, uchar_t *opt,
61 static void verify_ra_consistency(struct phyint *pi,
64 static void verify_prefix_opt(struct phyint *pi, uchar_t *opt,
66 static void verify_mtu_opt(struct phyint *pi, uchar_t *opt,
69 static void update_ra_flag(const struct phyint *pi,
92 in_data(struct phyint *pi)
117 if ((len = recvmsg(pi->pi_sock, &msg, 0)) < 0) {
118 logperror_pi(pi, "in_data: recvfrom");
144 len, msgbuf, pi->pi_name);
152 msgbuf, pi->pi_name);
161 msgbuf, pi->pi_name);
166 if (!pi->pi_AdvSendAdvertisements)
168 if (pi->pi_flags & IFF_NORTEXCH) {
172 pi->pi_name);
183 hoplimit, msgbuf, pi->pi_name);
189 icmp->icmp6_code, msgbuf, pi->pi_name);
196 len, msgbuf, pi->pi_name);
202 len - sizeof (struct nd_router_solicit), pi, &from))
206 print_route_sol("Received valid solicit from ", pi,
209 incoming_rs(pi, rs, len, &from);
222 if (pi->pi_flags & IFF_NORTEXCH) {
226 pi->pi_name);
237 msgbuf, pi->pi_name);
243 hoplimit, msgbuf, pi->pi_name);
249 icmp->icmp6_code, msgbuf, pi->pi_name);
256 len, msgbuf, pi->pi_name);
262 len - sizeof (struct nd_router_advert), pi, &from))
266 print_route_adv("Received valid advert from ", pi,
269 if (pi->pi_AdvSendAdvertisements)
270 verify_ra_consistency(pi, ra, len, &from);
272 incoming_ra(pi, ra, len, &from, _B_FALSE);
283 incoming_rs(struct phyint *pi, struct nd_router_solicit *rs, int len,
296 incoming_lla_opt(pi, (uchar_t *)opt,
306 check_to_advertise(pi, RECEIVED_SOLICIT);
313 dhcp_op(struct phyint *pi, int type)
319 request = dhcp_ipc_alloc_request(type | DHCP_V6, pi->pi_name, NULL, 0,
325 pi->pi_ra_flags &=
335 "%s: %s\n", pi->pi_name, dhcp_ipc_strerror(error));
350 start_dhcp(struct phyint *pi)
358 pi->pi_ra_flags &= ~ND_RA_FLAG_MANAGED & ~ND_RA_FLAG_OTHER;
362 else if (pi->pi_ra_flags & ND_RA_FLAG_MANAGED)
367 error = dhcp_op(pi, type);
375 pi->pi_name, dhcp_ipc_strerror(error));
384 release_dhcp(struct phyint *pi)
391 error = dhcp_op(pi, type);
402 pi->pi_name, dhcp_ipc_strerror(error));
412 incoming_ra(struct phyint *pi, struct nd_router_advert *ra, int len,
429 (void) strlcpy(lifr.lifr_name, pi->pi_name, sizeof (lifr.lifr_name));
432 ra->nd_ra_curhoplimit != pi->pi_CurHopLimit) {
433 pi->pi_CurHopLimit = ra->nd_ra_curhoplimit;
434 lifr.lifr_ifinfo.lir_maxhops = pi->pi_CurHopLimit;
440 reachable != pi->pi_BaseReachableTime) {
441 pi->pi_BaseReachableTime = reachable;
445 if (pi->pi_reach_time_since_random < MIN_REACH_RANDOM_INTERVAL ||
447 phyint_reach_random(pi, _B_FALSE);
450 lifr.lifr_ifinfo.lir_reachtime = pi->pi_ReachableTime;
454 pi->pi_RetransTimer != retrans) {
455 pi->pi_RetransTimer = retrans;
456 lifr.lifr_ifinfo.lir_reachretrans = pi->pi_RetransTimer;
461 if (ioctl(pi->pi_sock, SIOCSLIFLNKINFO, (char *)&lifr) < 0) {
462 logperror_pi(pi, "incoming_ra: SIOCSLIFLNKINFO");
481 if (pi->pi_autoconf && pi->pi_stateful &&
482 (ra->nd_ra_flags_reserved & ~pi->pi_ra_flags &
487 (ra->nd_ra_flags_reserved & ~pi->pi_ra_flags &
489 pi->pi_name);
491 pi->pi_ra_flags |= ra->nd_ra_flags_reserved;
492 start_dhcp(pi);
498 dr = router_lookup(pi, from->sin6_addr);
502 dr = router_create(pi, from->sin6_addr,
522 incoming_prefix_opt(pi, (uchar_t *)opt, from,
526 incoming_mtu_opt(pi, (uchar_t *)opt, from);
531 incoming_lla_opt(pi, (uchar_t *)opt,
543 update_ra_flag(pi, from, NDF_ISROUTER_ON);
545 check_to_solicit(pi, SOLICIT_DONE);
557 incoming_prefix_opt(struct phyint *pi, uchar_t *opt,
570 abuf, pi->pi_name,
581 abuf, pi->pi_name);
585 pi->pi_stateless && pi->pi_autoconf) {
586 good_prefix = incoming_prefix_addrconf(pi, opt, from, loopback);
590 incoming_prefix_onlink(pi, opt);
592 if (pi->pi_stateful && pi->pi_autoconf)
593 incoming_prefix_stateful(pi, opt);
608 incoming_prefix_onlink(struct phyint *pi, uchar_t *opt)
617 for (pr = pi->pi_prefix_list; pr != NULL; pr = pr->pr_next) {
635 pr = prefix_create(pi, po->nd_opt_pi_prefix, plen, 0);
692 incoming_prefix_stateful(struct phyint *pi, uchar_t *opt)
709 pi->pi_name, inet_ntop(AF_INET6,
713 for (pr = pi->pi_prefix_list; pr != NULL; pr = pr->pr_next) {
739 pr = prefix_create(pi, po->nd_opt_pi_prefix,
759 incoming_prefix_addrconf(struct phyint *pi, uchar_t *opt,
785 pbuf, plen, abuf, pi->pi_name,
790 for (pr = pi->pi_prefix_list; pr != NULL; pr = pr->pr_next) {
806 !token_equal(pi->pi_tmp_token,
812 (void) incoming_prefix_addrconf_process(pi, pr, opt,
823 (found_pub && (!pi->pi_TmpAddrsEnabled || found_tmp)))
827 pr = prefix_create(pi, po->nd_opt_pi_prefix, plen, 0);
830 ret = incoming_prefix_addrconf_process(pi, pr, opt, from,
840 if (pi->pi_TmpAddrsEnabled && !found_tmp) {
841 pr = prefix_create(pi, po->nd_opt_pi_prefix, plen,
845 ret = incoming_prefix_addrconf_process(pi, pr, opt, from,
853 incoming_prefix_addrconf_process(struct phyint *pi, struct prefix *pr,
895 pbuf, plen, abuf, pi->pi_name,
916 pbuf, plen, abuf, pi->pi_name,
929 pi->pi_TmpPreferredLifetime - pi->pi_TmpDesyncFactor;
932 validtime = MIN(validtime, pi->pi_TmpValidLifetime);
938 cur_vexp = pr->pr_CreateTime + pi->pi_TmpValidLifetime;
950 !token_equal(pr->pr_address, pi->pi_tmp_token,
958 if ((preftime != 0) && (preftime <= pi->pi_TmpRegenAdvance)) {
967 pbuf, plen, abuf, pi->pi_name, preftime,
968 pi->pi_TmpRegenAdvance);
987 if (IN6_IS_ADDR_UNSPECIFIED(&pi->pi_tmp_token)) {
988 if (!tmptoken_create(pi)) {
994 token = &pi->pi_tmp_token;
996 tokenlen = pi->pi_token_length;
997 token = &pi->pi_token;
1008 pbuf, plen, abuf, pi->pi_name,
1032 sizeof (abuf)), pi->pi_name);
1116 incoming_mtu_opt(struct phyint *pi, uchar_t *opt,
1130 abuf, pi->pi_name,
1135 if (pi->pi_LinkMTU == mtu)
1137 if (mtu > pi->pi_mtu) {
1144 "MTU %d - %d\n", abuf, pi->pi_name, mtu, pi->pi_mtu);
1153 "MTU (%d)\n", abuf, pi->pi_name, mtu);
1157 pi->pi_LinkMTU = mtu;
1159 (void) strlcpy(lifr.lifr_name, pi->pi_name, sizeof (lifr.lifr_name));
1160 lifr.lifr_ifinfo.lir_maxmtu = pi->pi_LinkMTU;
1161 if (ioctl(pi->pi_sock, SIOCSLIFLNKINFO, (char *)&lifr) < 0) {
1162 logperror_pi(pi, "incoming_mtu_opt: SIOCSLIFLNKINFO");
1172 incoming_lla_opt(struct phyint *pi, uchar_t *opt,
1184 if (phyint_get_lla(pi, &lifr) != 0)
1201 "physaddr length (%d vs. %d bytes)\n", abuf, pi->pi_name,
1221 (void) strlcpy(lifr.lifr_name, pi->pi_name, sizeof (lifr.lifr_name));
1222 if (ioctl(pi->pi_sock, SIOCLIFSETND, (char *)&lifr) < 0) {
1223 logperror_pi(pi, "incoming_lla_opt: SIOCLIFSETND");
1233 verify_ra_consistency(struct phyint *pi, struct nd_router_advert *ra, int len,
1246 pi->pi_AdvCurHopLimit != 0 &&
1247 ra->nd_ra_curhoplimit != pi->pi_AdvCurHopLimit) {
1250 frombuf, pi->pi_name,
1251 ra->nd_ra_curhoplimit, pi->pi_AdvCurHopLimit);
1255 if (reachable != 0 && pi->pi_AdvReachableTime != 0 &&
1256 reachable != pi->pi_AdvReachableTime) {
1259 frombuf, pi->pi_name,
1260 reachable, pi->pi_AdvReachableTime);
1264 if (retrans != 0 && pi->pi_AdvRetransTimer != 0 &&
1265 retrans != pi->pi_AdvRetransTimer) {
1268 frombuf, pi->pi_name,
1269 retrans, pi->pi_AdvRetransTimer);
1273 myflag = (pi->pi_AdvManagedFlag != 0);
1277 frombuf, pi->pi_name,
1282 myflag = (pi->pi_AdvOtherConfigFlag != 0);
1286 frombuf, pi->pi_name,
1298 verify_prefix_opt(pi, (uchar_t *)opt, frombuf);
1301 verify_mtu_opt(pi, (uchar_t *)opt, frombuf);
1316 verify_prefix_opt(struct phyint *pi, uchar_t *opt, char *frombuf)
1328 frombuf, pi->pi_name,
1335 frombuf, pi->pi_name);
1339 adv_pr = adv_prefix_lookup(pi, po->nd_opt_pi_prefix, plen);
1354 frombuf, pi->pi_name, prefixbuf, adv_pr->adv_pr_prefix_len,
1364 frombuf, pi->pi_name, prefixbuf, adv_pr->adv_pr_prefix_len,
1386 frombuf, pi->pi_name, prefixbuf,
1395 frombuf, pi->pi_name, prefixbuf,
1410 frombuf, pi->pi_name, prefixbuf,
1419 frombuf, pi->pi_name, prefixbuf,
1430 verify_mtu_opt(struct phyint *pi, uchar_t *opt, char *frombuf)
1438 frombuf, pi->pi_name,
1443 if (pi->pi_AdvLinkMTU != 0 &&
1444 pi->pi_AdvLinkMTU != mtu) {
1447 frombuf, pi->pi_name,
1448 mtu, pi->pi_AdvLinkMTU);
1458 struct phyint *pi, struct sockaddr_in6 *from)
1470 opt->nd_opt_type, abuf, pi->pi_name);
1484 abuf, pi->pi_name);
1497 update_ra_flag(const struct phyint *pi, const struct sockaddr_in6 *from,
1517 (void) strlcpy(lifr.lifr_name, pi->pi_name, sizeof (lifr.lifr_name));
1519 if (ioctl(pi->pi_sock, SIOCLIFGETND, (char *)&lifr) < 0) {
1526 logperror_pi(pi, "update_ra_flag: SIOCLIFGETND");
1549 if ((ioctl(pi->pi_sock, SIOCLIFSETND, (char *)&lifr)) < 0) {
1550 logperror_pi(pi, "update_ra_flag: SIOCLIFSETND");