Lines Matching refs:rai

240 	/* clean up rai if any */
280 rm_rainfo(struct rainfo *rai)
291 TAILQ_REMOVE(&railist, rai, rai_next);
292 if (rai->rai_ifinfo != NULL)
294 __func__, rai->rai_ifinfo->ifi_ifindex);
296 if (rai->rai_ra_data != NULL)
297 free(rai->rai_ra_data);
299 while ((pfx = TAILQ_FIRST(&rai->rai_prefix)) != NULL)
301 while ((sol = TAILQ_FIRST(&rai->rai_soliciter)) != NULL) {
302 TAILQ_REMOVE(&rai->rai_soliciter, sol, sol_next);
305 while ((rdn = TAILQ_FIRST(&rai->rai_rdnss)) != NULL) {
306 TAILQ_REMOVE(&rai->rai_rdnss, rdn, rd_next);
313 while ((dns = TAILQ_FIRST(&rai->rai_dnssl)) != NULL) {
314 TAILQ_REMOVE(&rai->rai_dnssl, dns, dn_next);
317 while ((rti = TAILQ_FIRST(&rai->rai_route)) != NULL) {
318 TAILQ_REMOVE(&rai->rai_route, rti, rti_next);
321 free(rai);
333 struct rainfo *rai;
360 ELM_MALLOC(rai, exit(1));
361 TAILQ_INIT(&rai->rai_prefix);
362 TAILQ_INIT(&rai->rai_route);
363 TAILQ_INIT(&rai->rai_rdnss);
364 TAILQ_INIT(&rai->rai_dnssl);
365 TAILQ_INIT(&rai->rai_soliciter);
366 rai->rai_ifinfo = ifi;
370 rai->rai_advifprefix = 0;
372 rai->rai_advifprefix = 1;
376 rai->rai_advlinkopt = 0;
378 rai->rai_advlinkopt = 1;
379 if (rai->rai_advlinkopt) {
399 rai->rai_maxinterval = (uint16_t)val;
401 MAYHAVE(val, "mininterval", rai->rai_maxinterval/3);
403 (uint16_t)val > (rai->rai_maxinterval * 3) / 4) {
408 (rai->rai_maxinterval * 3) / 4);
411 rai->rai_mininterval = (uint16_t)val;
414 rai->rai_hoplimit = val & 0xff;
435 rai->rai_managedflg = val & ND_RA_FLAG_MANAGED;
436 rai->rai_otherflg = val & ND_RA_FLAG_OTHER;
441 rai->rai_rtpref = val & ND_RA_FLAG_RTPREF_MASK;
442 if (rai->rai_rtpref == ND_RA_FLAG_RTPREF_RSV) {
444 __func__, rai->rai_rtpref, ifi->ifi_ifname);
448 MAYHAVE(val, "rltime", rai->rai_maxinterval * 3);
449 if ((uint16_t)val && ((uint16_t)val < rai->rai_maxinterval ||
454 __func__, val, ifi->ifi_ifname, rai->rai_maxinterval,
458 rai->rai_lifetime = val & 0xffff;
468 rai->rai_reachabletime = (uint32_t)val;
476 rai->rai_retranstimer = (uint32_t)val64;
492 rai->rai_clockskew = val;
494 rai->rai_pfxs = 0;
505 pfx->pfx_rainfo = rai;
590 TAILQ_INSERT_TAIL(&rai->rai_prefix, pfx, pfx_next);
591 rai->rai_pfxs++;
596 if (rai->rai_advifprefix && rai->rai_pfxs == 0)
597 get_prefix(rai);
606 rai->rai_linkmtu = (uint32_t)val64;
607 if (rai->rai_linkmtu == 0) {
612 rai->rai_linkmtu = ifi->ifi_phymtu;
614 else if (rai->rai_linkmtu < IPV6_MMTU ||
615 rai->rai_linkmtu > ifi->ifi_phymtu) {
619 __func__, rai->rai_linkmtu, ifi->ifi_ifname,
641 ndi.ndi.chlim = rai->rai_hoplimit;
642 ndi.ndi.retrans = rai->rai_retranstimer;
643 ndi.ndi.basereachable = rai->rai_reachabletime;
653 rai->rai_routes = 0;
774 val64 = rai->rai_lifetime;
787 TAILQ_INSERT_TAIL(&rai->rai_route, rti, rti_next);
788 rai->rai_routes++;
824 MAYHAVE(val, entbuf, (rai->rai_maxinterval * 3 / 2));
825 if ((uint16_t)val < rai->rai_maxinterval ||
826 (uint16_t)val > rai->rai_maxinterval * 2) {
829 entbuf, val, ifi->ifi_ifname, rai->rai_maxinterval,
830 rai->rai_maxinterval * 2);
836 TAILQ_INSERT_TAIL(&rai->rai_rdnss, rdn, rd_next);
873 MAYHAVE(val, entbuf, (rai->rai_maxinterval * 3 / 2));
874 if ((uint16_t)val < rai->rai_maxinterval ||
875 (uint16_t)val > rai->rai_maxinterval * 2) {
878 entbuf, val, ifi->ifi_ifname, rai->rai_maxinterval,
879 rai->rai_maxinterval * 2);
885 TAILQ_INSERT_TAIL(&rai->rai_dnssl, dns, dn_next);
895 make_packet(rai);
914 /* The same two rai mean initial burst */
915 ifi->ifi_rainfo = rai;
916 ifi->ifi_rainfo_trans = rai;
917 TAILQ_INSERT_TAIL(&railist, rai, rai_next);
963 ifi->ifi_rainfo = rai;
964 TAILQ_INSERT_TAIL(&railist, rai, rai_next);
971 ifi->ifi_rainfo = rai;
972 ifi->ifi_rainfo_trans = rai;
980 ifi->ifi_rainfo = rai;
982 TAILQ_INSERT_TAIL(&railist, rai, rai_next);
992 rm_rainfo(rai);
1002 free(rai);
1007 get_prefix(struct rainfo *rai)
1022 ifi = rai->rai_ifinfo;
1047 if (find_prefix(rai, a, plen)) {
1079 pfx->pfx_rainfo = rai;
1082 TAILQ_INSERT_TAIL(&rai->rai_prefix, pfx, pfx_next);
1085 rai->rai_pfxs++;
1109 add_prefix(struct rainfo *rai, struct in6_prefixreq *ipr)
1115 ifi = rai->rai_ifinfo;
1124 pfx->pfx_rainfo = rai;
1126 TAILQ_INSERT_TAIL(&rai->rai_prefix, pfx, pfx_next);
1133 rai->rai_pfxs++;
1144 struct rainfo *rai;
1148 rai = pfx->pfx_rainfo;
1149 ifi = rai->rai_ifinfo;
1150 TAILQ_REMOVE(&rai->rai_prefix, pfx, pfx_next);
1159 rai->rai_pfxs--;
1166 struct rainfo *rai;
1170 rai = pfx->pfx_rainfo;
1171 ifi = rai->rai_ifinfo;
1208 struct rainfo *rai;
1212 rai = pfx->pfx_rainfo;
1213 ifi = rai->rai_ifinfo;
1281 make_prefix(struct rainfo *rai, int ifindex, struct in6_addr *addr, int plen)
1299 add_prefix(rai, &ipr);
1303 make_packet(struct rainfo *rai)
1320 ifi = rai->rai_ifinfo;
1323 if (rai->rai_advlinkopt) {
1329 rai->rai_advlinkopt = 0;
1333 if (rai->rai_pfxs)
1334 packlen += sizeof(struct nd_opt_prefix_info) * rai->rai_pfxs;
1335 if (rai->rai_linkmtu)
1338 TAILQ_FOREACH(rti, &rai->rai_route, rti_next)
1342 TAILQ_FOREACH(rdn, &rai->rai_rdnss, rd_next) {
1349 TAILQ_FOREACH(dns, &rai->rai_dnssl, dn_next) {
1371 if (rai->rai_ra_data) /* Free old data if any. */
1372 free(rai->rai_ra_data);
1373 rai->rai_ra_data = buf;
1375 rai->rai_ra_datalen = packlen;
1384 ra->nd_ra_curhoplimit = (uint8_t)(0xff & rai->rai_hoplimit);
1390 ra->nd_ra_flags_reserved = 0xff & rai->rai_rtpref;
1392 rai->rai_managedflg ? ND_RA_FLAG_MANAGED : 0;
1394 rai->rai_otherflg ? ND_RA_FLAG_OTHER : 0;
1395 ra->nd_ra_router_lifetime = htons(rai->rai_lifetime);
1396 ra->nd_ra_reachable = htonl(rai->rai_reachabletime);
1397 ra->nd_ra_retransmit = htonl(rai->rai_retranstimer);
1400 if (rai->rai_advlinkopt) {
1405 if (rai->rai_linkmtu) {
1410 ndopt_mtu->nd_opt_mtu_mtu = htonl(rai->rai_linkmtu);
1414 TAILQ_FOREACH(pfx, &rai->rai_prefix, pfx_next) {
1464 TAILQ_FOREACH(rti, &rai->rai_route, rti_next) {
1477 TAILQ_FOREACH(rdn, &rai->rai_rdnss, rd_next) {
1498 TAILQ_FOREACH(dns, &rai->rai_dnssl, dn_next) {