Lines Matching defs:rai
393 struct rainfo *rai, *ran;
420 TAILQ_FOREACH_SAFE(rai, &ralist, next, ran) {
421 if (rai->leaving) {
422 TAILQ_REMOVE(&ralist, rai, next);
423 TAILQ_INSERT_HEAD(&ralist, rai->leaving, next);
424 rai->leaving->leaving = rai->leaving;
425 rai->leaving->leaving_for = rai->leaving;
426 free_rainfo(rai);
429 rai->lifetime = 0;
430 TAILQ_FOREACH(rdnss, &rai->rdnss, next)
432 TAILQ_FOREACH(dnssl, &rai->dnssl, next)
434 make_packet(rai);
435 rai->leaving = rai;
436 rai->leaving_for = rai;
437 rai->initcounter = MAX_INITIAL_RTR_ADVERTISEMENTS;
438 rai->mininterval = MIN_DELAY_BETWEEN_RAS;
439 rai->maxinterval = MIN_DELAY_BETWEEN_RAS;
440 rai->leaving_adv = MAX_FINAL_RTR_ADVERTISEMENTS;
441 ra_output(rai, false);
442 ra_timer_update(rai, &rai->timer->tm);
443 rtadvd_set_timer(&rai->timer->tm, rai->timer);
449 ra_timer_reset(struct rainfo *rai)
452 rtadvd_remove_timer(&rai->timer);
453 rai->timer = rtadvd_add_timer(ra_timeout, ra_timer_update, rai, rai);
454 ra_timer_update(rai, &rai->timer->tm);
455 rtadvd_set_timer(&rai->timer->tm, rai->timer);
456 rtadvd_remove_timer(&rai->timer_sol);
457 rai->timer_sol = rtadvd_add_timer(ra_timeout_sol, NULL, rai, NULL);
472 struct rainfo *rai;
569 if ((rai = if_indextorainfo(ifindex)) == NULL) {
580 oldifflags = rai->ifflags;
585 rai->ifflags = if_getflags(ifindex, rai->ifflags);
600 prefix = find_prefix(rai, addr, plen);
617 plen, rai->ifname);
621 add_prefix(rai, ifindex, addr, plen);
626 rai->ifflags = if_getflags(ifindex, rai->ifflags);
642 prefix = find_prefix(rai, addr, plen);
652 plen, rai
662 rai->ifflags = if_getflags(ifindex, rai->ifflags);
665 rai->ifflags = get_ifm_flags(next);
672 __func__, rai->ifname);
673 TAILQ_REMOVE(&ralist, rai, next);
674 if (rai->leaving)
675 free_rainfo(rai->leaving);
676 free_rainfo(rai);
694 (rai->ifflags & IFF_UP) == 0) {
697 __func__, rai->ifname);
698 rtadvd_remove_timer(&rai->timer);
700 (rai->ifflags & IFF_UP) != 0) {
703 __func__, rai->ifname);
705 rai->initcounter = 0; /* reset the counter */
706 rai->waiting = 0; /* XXX */
707 ra_timer_reset(rai);
708 } else if (prefixchange && rai->ifflags & IFF_UP) {
713 rai->initcounter = 0;
714 ra_timer_set_short_delay(rai, rai->timer);
731 struct rainfo *rai;
774 if ((rai = if_indextorainfo(pi->ipi6_ifindex)) == NULL) {
788 if ((rai->ifflags & IFF_UP) == 0) {
900 struct rainfo *rai;
940 if ((rai = if_indextorainfo(pi->ipi6_ifindex)) == NULL) {
948 if (rai->leaving) {
951 __func__, rai->ifname);
955 rai->rsinput++; /* increment statistics */
963 TAILQ_FOREACH(sol, &rai->soliciter, next) {
975 TAILQ_INSERT_TAIL(&rai->soliciter, sol, next);
983 if (rai->waiting++)
986 ra_timer_set_short_delay(rai, rai->timer_sol);
993 ra_timer_set_short_delay(struct rainfo *rai, struct rtadvd_timer *timer)
1008 rest = rtadvd_timer_rest(rai->timer);
1023 timespecsub(&now, &rai->lastsent, &tm_tmp);
1037 struct rainfo *rai;
1073 if ((rai = if_indextorainfo(pi->ipi6_ifindex)) == 0) {
1083 if (rai->leaving) {
1086 __func__, rai->ifname);
1089 rai->rainput++; /* increment statistics */
1092 if (ra->nd_ra_curhoplimit && rai->hoplimit &&
1093 ra->nd_ra_curhoplimit != rai->hoplimit) {
1098 rai->ifname,
1102 rai->hoplimit);
1107 rai->managedflg) {
1112 rai->ifname,
1113 on_off[!rai->managedflg],
1116 on_off[rai->managedflg]);
1121 rai->otherflg) {
1126 rai->ifname,
1127 on_off[!rai->otherflg],
1130 on_off[rai->otherflg]);
1135 if (reachabletime && rai->reachabletime &&
1136 reachabletime != rai->reachabletime) {
1141 rai->ifname,
1145 rai->reachabletime);
1150 if (retranstimer && rai->retranstimer &&
1151 retranstimer != rai->retranstimer) {
1156 rai->ifname,
1160 rai->retranstimer);
1166 if (mtu && rai->linkmtu && mtu != rai->linkmtu) {
1171 rai->ifname, mtu,
1174 rai->linkmtu);
1180 if (prefix_check(ndopts.nd_opts_pi, rai, from))
1184 rai, from))
1188 rai->rainconsistent++;
1197 struct rainfo *rai, struct sockaddr_in6 *from)
1226 rai->ifname);
1229 if ((pp = find_prefix(rai, &prefix,
1239 rai->ifname);
1255 if (!pp->timer && rai->clockskew &&
1256 llabs((long long)preferred_time - pp->pltimeexpire) > rai->clockskew) {
1265 rai->ifname, preferred_time,
1280 rai->ifname, preferred_time,
1291 if (!pp->timer && rai->clockskew &&
1292 llabs((long long)valid_time - pp->vltimeexpire) > rai->clockskew) {
1301 rai->ifname, preferred_time,
1316 rai->ifname, valid_time,
1327 find_prefix(struct rainfo *rai, const struct in6_addr *prefix, int plen)
1333 TAILQ_FOREACH(pp, &rai->prefix, next) {
1627 struct rainfo *rai;
1629 TAILQ_FOREACH(rai, &ralist, next) {
1630 if (rai->ifindex == idx)
1631 return rai;
1638 ra_output(struct rainfo *rai, bool solicited)
1645 if ((rai->ifflags & IFF_UP) == 0) {
1647 __func__, rai->ifname);
1651 make_packet(rai); /* XXX: inefficient */
1654 sndmhdr.msg_iov[0].iov_base = (void *)rai->ra_data;
1655 sndmhdr.msg_iov[0].iov_len = rai->ra_datalen;
1664 pi->ipi6_ifindex = rai->ifindex;
1668 __func__, rai->ifname, rai->waiting);
1672 while ((sol = TAILQ_FIRST(&rai->soliciter)) != NULL) {
1675 if (i < 0 || (size_t)i != rai->ra_datalen) {
1679 __func__, rai->ifname);
1682 TAILQ_REMOVE(&rai->soliciter, sol, next);
1687 rai->waiting = 0;
1690 rai->timer_sol->enabled = false;
1692 return rai;
1696 if (i < 0 || (size_t)i != rai->ra_datalen) {
1699 __func__, rai->ifname);
1703 if (rai->leaving_adv > 0) {
1704 if (--(rai->leaving_adv) == 0) {
1706 if (rai->leaving_for == rai) {
1707 TAILQ_REMOVE(&ralist, rai, next);
1708 free_rainfo(rai);
1714 __func__, rai->ifname);
1715 ra_timer_reset(rai->leaving_for);
1716 rai->leaving_for->leaving = NULL;
1717 free_rainfo(rai);
1723 if (rai->initcounter < MAX_INITIAL_RTR_ADVERTISEMENTS)
1724 rai->initcounter++;
1725 rai->raoutput++;
1728 prog_clock_gettime(CLOCK_MONOTONIC, &rai->lastsent);
1729 return rai;
1736 struct rainfo *rai = (struct rainfo *)data;
1740 __func__, rai->ifname);
1742 if (ra_output(rai, false))
1743 return rai->timer;
1751 struct rainfo *rai = (struct rainfo *)data;
1755 __func__, rai->ifname);
1757 if (ra_output(rai, true))
1758 return rai->timer_sol;
1766 struct rainfo *rai = (struct rainfo *)data;
1775 interval = rai->mininterval;
1776 if (rai->mininterval != rai->maxinterval)
1777 interval += arc4random() % (rai->maxinterval-rai->mininterval);
1786 if (rai->initcounter < MAX_INITIAL_RTR_ADVERTISEMENTS &&
1795 __func__, rai->ifname,