Lines Matching full:ifi

121 	struct ifinfo *ifi;  in main()  local
314 TAILQ_FOREACH(ifi, &ifinfo_head, ifi_next) { in main()
315 if (ifi->state != IFS_DOWN && ifi->racnt == 0) in main()
318 if (ifi == NULL) in main()
386 struct ifinfo *ifi; in ifconfig() local
390 ifi = NULL; in ifconfig()
428 if ((ifi = malloc(sizeof(*ifi))) == NULL) { in ifconfig()
432 memset(ifi, 0, sizeof(*ifi)); in ifconfig()
433 ifi->sdl = sdl; in ifconfig()
434 ifi->ifi_rdnss = IFI_DNSOPT_STATE_NOINFO; in ifconfig()
435 ifi->ifi_dnssl = IFI_DNSOPT_STATE_NOINFO; in ifconfig()
436 TAILQ_INIT(&ifi->ifi_rainfo); in ifconfig()
437 strlcpy(ifi->ifname, ifname, sizeof(ifi->ifname)); in ifconfig()
440 if (make_packet(ifi)) in ifconfig()
445 if (inet_zoneid(AF_INET6, 2, ifname, &ifi->linkid)) in ifconfig()
449 ifi->linkid = ifi->sdl->sdl_index; in ifconfig()
456 ifi->mediareqok = 1; in ifconfig()
457 ifi->active = interface_status(ifi); in ifconfig()
458 if (!ifi->mediareqok) { in ifconfig()
463 ifi->probeinterval = PROBE_INTERVAL; in ifconfig()
467 flags = interface_up(ifi->ifname); in ifconfig()
469 ifi->state = IFS_DELAY; in ifconfig()
471 ifi->state = IFS_TENTATIVE; in ifconfig()
473 ifi->state = IFS_DOWN; in ifconfig()
475 rtsol_timer_update(ifi); in ifconfig()
477 TAILQ_INSERT_TAIL(&ifinfo_head, ifi, ifi_next); in ifconfig()
482 free(ifi); in ifconfig()
487 find_rainfo(struct ifinfo *ifi, struct sockaddr_in6 *sin6) in find_rainfo() argument
491 TAILQ_FOREACH(rai, &ifi->ifi_rainfo, rai_next) in find_rainfo()
502 struct ifinfo *ifi; in find_ifinfo() local
504 TAILQ_FOREACH(ifi, &ifinfo_head, ifi_next) { in find_ifinfo()
505 if (ifi->sdl->sdl_index == ifindex) in find_ifinfo()
506 return (ifi); in find_ifinfo()
512 make_packet(struct ifinfo *ifi) in make_packet() argument
518 if ((lladdroptlen = lladdropt_length(ifi->sdl)) == 0) { in make_packet()
521 " on %s. Treat as not included.", ifi->ifname); in make_packet()
524 ifi->rs_datalen = packlen; in make_packet()
529 "memory allocation failed for %s", ifi->ifname); in make_packet()
532 ifi->rs_data = buf; in make_packet()
544 lladdropt_fill(ifi->sdl, (struct nd_opt_hdr *)buf); in make_packet()
554 struct ifinfo *ifi; in rtsol_check_timer() local
563 TAILQ_FOREACH(ifi, &ifinfo_head, ifi_next) { in rtsol_check_timer()
564 if (TS_CMP(&ifi->expire, &now, <=)) { in rtsol_check_timer()
566 "state = %d", ifi->ifname, ifi->state); in rtsol_check_timer()
568 while((rai = TAILQ_FIRST(&ifi->ifi_rainfo)) != NULL) { in rtsol_check_timer()
570 TAILQ_REMOVE(&ifi->ifi_rainfo, rai, rai_next); in rtsol_check_timer()
581 switch (ifi->state) { in rtsol_check_timer()
585 flags = interface_up(ifi->ifname); in rtsol_check_timer()
587 ifi->state = IFS_DELAY; in rtsol_check_timer()
589 ifi->state = IFS_TENTATIVE; in rtsol_check_timer()
591 ifi->state = IFS_DOWN; in rtsol_check_timer()
595 int oldstatus = ifi->active; in rtsol_check_timer()
598 ifi->active = interface_status(ifi); in rtsol_check_timer()
600 if (oldstatus != ifi->active) { in rtsol_check_timer()
604 ifi->ifname, in rtsol_check_timer()
605 oldstatus, ifi->active); in rtsol_check_timer()
607 ifi->state = IFS_DELAY; in rtsol_check_timer()
608 } else if (ifi->probeinterval && in rtsol_check_timer()
609 (ifi->probetimer -= in rtsol_check_timer()
610 ifi->timer.tv_sec) <= 0) { in rtsol_check_timer()
612 ifi->probetimer = in rtsol_check_timer()
613 ifi->probeinterval; in rtsol_check_timer()
615 ifi->state = IFS_PROBE; in rtsol_check_timer()
623 ifi->managedconfig = 0; in rtsol_check_timer()
624 ifi->otherconfig = 0; in rtsol_check_timer()
625 ifi->alwaysconfig = 0; in rtsol_check_timer()
629 ifi); in rtsol_check_timer()
638 ifi->state = IFS_PROBE; in rtsol_check_timer()
639 (void)cap_rssend(capsendmsg, ifi); in rtsol_check_timer()
642 if (ifi->probes < MAX_RTR_SOLICITATIONS) in rtsol_check_timer()
643 (void)cap_rssend(capsendmsg, ifi); in rtsol_check_timer()
647 ifi->probes); in rtsol_check_timer()
648 ifi->probes = 0; in rtsol_check_timer()
649 ifi->state = IFS_IDLE; in rtsol_check_timer()
653 rtsol_timer_update(ifi); in rtsol_check_timer()
658 TAILQ_FOREACH(rai, &ifi->ifi_rainfo, rai_next) { in rtsol_check_timer()
681 ra_opt_handler(ifi); in rtsol_check_timer()
683 if (TS_CMP(&ifi->expire, &rtsol_timer, <)) in rtsol_check_timer()
684 rtsol_timer = ifi->expire; in rtsol_check_timer()
705 rtsol_timer_update(struct ifinfo *ifi) in rtsol_timer_update() argument
712 bzero(&ifi->timer, sizeof(ifi->timer)); in rtsol_timer_update()
714 switch (ifi->state) { in rtsol_timer_update()
717 if (++ifi->dadcount > DADRETRY) { in rtsol_timer_update()
718 ifi->dadcount = 0; in rtsol_timer_update()
719 ifi->timer.tv_sec = PROBE_INTERVAL; in rtsol_timer_update()
721 ifi->timer.tv_sec = 1; in rtsol_timer_update()
726 ifi->timer.tv_sec = 3; in rtsol_timer_update()
728 ifi->timer = tm_max; /* stop timer(valid?) */ in rtsol_timer_update()
735 ifi->timer.tv_sec = interval / MILLION; in rtsol_timer_update()
736 ifi->timer.tv_nsec = (interval % MILLION) * 1000; in rtsol_timer_update()
739 if (ifi->probes < MAX_RTR_SOLICITATIONS) in rtsol_timer_update()
740 ifi->timer.tv_sec = RTR_SOLICITATION_INTERVAL; in rtsol_timer_update()
749 ifi->timer.tv_sec = MAX_RTR_SOLICITATION_DELAY; in rtsol_timer_update()
754 ifi->state, ifi->ifname); in rtsol_timer_update()
759 if (TS_CMP(&ifi->timer, &tm_max, ==)) { in rtsol_timer_update()
760 ifi->expire = tm_max; in rtsol_timer_update()
762 "stop timer for %s", ifi->ifname); in rtsol_timer_update()
765 TS_ADD(&now, &ifi->timer, &ifi->expire); in rtsol_timer_update()
767 now.tv_sec += ifi->timer.tv_sec; in rtsol_timer_update()
768 now.tv_nsec += ifi->timer.tv_nsec; in rtsol_timer_update()
770 ifi->ifname, sec2str(&now)); in rtsol_timer_update()