Lines Matching defs:ifi

351 			struct ifinfo *ifi;
358 TAILQ_FOREACH(ifi, &ifinfo_head, ifi_next) {
359 if (ifi->state != IFS_DOWN && ifi->racnt == 0)
362 if (ifi == NULL)
400 struct ifinfo *ifi;
442 if ((ifi = malloc(sizeof(*ifi))) == NULL) {
447 memset(ifi, 0, sizeof(*ifi));
448 ifi->sdl = sdl;
449 ifi->ifi_rdnss = IFI_DNSOPT_STATE_NOINFO;
450 ifi->ifi_dnssl = IFI_DNSOPT_STATE_NOINFO;
451 TAILQ_INIT(&ifi->ifi_rainfo);
452 strlcpy(ifi->ifname, ifname, sizeof(ifi->ifname));
455 if (make_packet(ifi))
460 if (inet_zoneid(AF_INET6, 2, ifname, &ifi->linkid))
464 ifi->linkid = ifi->sdl->sdl_index;
471 ifi->mediareqok = 1;
472 ifi->active = interface_status(ifi);
473 if (!ifi->mediareqok) {
478 ifi->probeinterval = PROBE_INTERVAL;
482 flags = interface_up(ifi->ifname);
484 ifi->state = IFS_DELAY;
486 ifi->state = IFS_TENTATIVE;
488 ifi->state = IFS_DOWN;
490 rtsol_timer_update(ifi);
492 TAILQ_INSERT_TAIL(&ifinfo_head, ifi, ifi_next);
496 free(ifi->sdl);
497 free(ifi);
504 struct ifinfo *ifi;
506 while ((ifi = TAILQ_FIRST(&ifinfo_head)) != NULL) {
507 TAILQ_REMOVE(&ifinfo_head, ifi, ifi_next);
508 if (ifi->sdl != NULL)
509 free(ifi->sdl);
510 if (ifi->rs_data != NULL)
511 free(ifi->rs_data);
512 free(ifi);
520 struct ifinfo *ifi, *prev;
524 TAILQ_FOREACH(ifi, &ifinfo_head, ifi_next) {
525 if (strncmp(ifi->ifname, ifname, sizeof(ifi->ifname)) == 0)
527 prev = ifi;
529 prev->next = ifi->next;
533 /* reclaim it after ifconfig() in case ifname is pointer inside ifi */
534 if (ifi->rs_data)
535 free(ifi->rs_data);
536 free(ifi->sdl);
537 free(ifi);
544 find_rainfo(struct ifinfo *ifi, struct sockaddr_in6 *sin6)
548 TAILQ_FOREACH(rai, &ifi->ifi_rainfo, rai_next)
559 struct ifinfo *ifi;
561 TAILQ_FOREACH(ifi, &ifinfo_head, ifi_next) {
562 if (ifi->sdl->sdl_index == ifindex)
563 return (ifi);
569 make_packet(struct ifinfo *ifi)
575 if ((lladdroptlen = lladdropt_length(ifi->sdl)) == 0) {
578 " on %s. Treat as not included.", ifi->ifname);
581 ifi->rs_datalen = packlen;
586 "memory allocation failed for %s", ifi->ifname);
589 ifi->rs_data = buf;
601 lladdropt_fill(ifi->sdl, (struct nd_opt_hdr *)buf);
611 struct ifinfo *ifi;
620 TAILQ_FOREACH(ifi, &ifinfo_head, ifi_next) {
621 if (timercmp(&ifi->expire, &now, <=)) {
623 "state = %d", ifi->ifname, ifi->state);
625 while((rai = TAILQ_FIRST(&ifi->ifi_rainfo)) != NULL) {
627 TAILQ_REMOVE(&ifi->ifi_rainfo, rai, rai_next);
638 switch (ifi->state) {
642 flags = interface_up(ifi->ifname);
644 ifi->state = IFS_DELAY;
646 ifi->state = IFS_TENTATIVE;
648 ifi->state = IFS_DOWN;
652 int oldstatus = ifi->active;
655 ifi->active = interface_status(ifi);
657 if (oldstatus != ifi->active) {
661 ifi->ifname,
662 oldstatus, ifi->active);
664 ifi->state = IFS_DELAY;
665 } else if (ifi->probeinterval &&
666 (ifi->probetimer -=
667 ifi->timer.tv_sec) <= 0) {
669 ifi->probetimer =
670 ifi->probeinterval;
672 ifi->state = IFS_PROBE;
680 ifi->otherconfig = 0;
683 defrouter_probe(ifi);
687 ifi->state = IFS_PROBE;
688 sendpacket(ifi);
691 if (ifi->probes < MAX_RTR_SOLICITATIONS)
692 sendpacket(ifi);
696 ifi->probes);
697 ifi->probes = 0;
698 ifi->state = IFS_IDLE;
702 rtsol_timer_update(ifi);
707 TAILQ_FOREACH(rai, &ifi->ifi_rainfo, rai_next) {
729 ra_opt_handler(ifi);
731 if (timercmp(&ifi->expire, &rtsol_timer, <))
732 rtsol_timer = ifi->expire;
753 rtsol_timer_update(struct ifinfo *ifi)
760 bzero(&ifi->timer, sizeof(ifi->timer));
762 switch (ifi->state) {
765 if (++ifi->dadcount > DADRETRY) {
766 ifi->dadcount = 0;
767 ifi->timer.tv_sec = PROBE_INTERVAL;
769 ifi->timer.tv_sec = 1;
774 ifi->timer.tv_sec = 3;
777 ifi->timer = tm_max; /* stop timer(valid?) */
785 ifi->timer.tv_sec = interval / MILLION;
786 ifi->timer.tv_usec = interval % MILLION;
789 if (ifi->probes < MAX_RTR_SOLICITATIONS)
790 ifi->timer.tv_sec = RTR_SOLICITATION_INTERVAL;
799 ifi->timer.tv_sec = MAX_RTR_SOLICITATION_DELAY;
805 ifi->state, ifi->ifname);
810 if (timercmp(&ifi->timer, &tm_max, ==)) {
811 ifi->expire = tm_max;
813 "stop timer for %s", ifi->ifname);
816 timeradd(&now, &ifi->timer, &ifi->expire);
818 now.tv_sec += ifi->timer.tv_sec;
819 now.tv_usec += ifi->timer.tv_usec;
821 ifi->ifname, sec2str(&now));