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