Lines Matching defs:rai

245 	/* clean up rai if any */
287 rm_rainfo(struct rainfo *rai)
298 TAILQ_REMOVE(&railist, rai, rai_next);
299 if (rai->rai_ifinfo != NULL)
301 __func__, rai->rai_ifinfo->ifi_ifindex);
303 if (rai->rai_ra_data != NULL)
304 free(rai->rai_ra_data);
306 while ((pfx = TAILQ_FIRST(&rai->rai_prefix)) != NULL)
308 while ((sol = TAILQ_FIRST(&rai->rai_soliciter)) != NULL) {
309 TAILQ_REMOVE(&rai->rai_soliciter, sol, sol_next);
312 while ((rdn = TAILQ_FIRST(&rai->rai_rdnss)) != NULL) {
313 TAILQ_REMOVE(&rai->rai_rdnss, rdn, rd_next);
320 while ((dns = TAILQ_FIRST(&rai->rai_dnssl)) != NULL) {
321 TAILQ_REMOVE(&rai->rai_dnssl, dns, dn_next);
324 while ((rti = TAILQ_FIRST(&rai->rai_route)) != NULL) {
325 TAILQ_REMOVE(&rai->rai_route, rti, rti_next);
328 free(rai);
340 struct rainfo *rai;
367 ELM_MALLOC(rai, exit(1));
368 TAILQ_INIT(&rai->rai_prefix);
369 TAILQ_INIT(&rai->rai_route);
370 TAILQ_INIT(&rai->rai_rdnss);
371 TAILQ_INIT(&rai->rai_dnssl);
372 TAILQ_INIT(&rai->rai_soliciter);
373 rai->rai_ifinfo = ifi;
377 rai->rai_advifprefix = 0;
379 rai->rai_advifprefix = 1;
383 rai->rai_advlinkopt = 0;
385 rai->rai_advlinkopt = 1;
386 if (rai->rai_advlinkopt) {
406 rai->rai_maxinterval = (uint16_t)val;
408 MAYHAVE(val, "mininterval", rai->rai_maxinterval/3);
410 (uint16_t)val > (rai->rai_maxinterval * 3) / 4) {
415 (rai->rai_maxinterval * 3) / 4);
418 rai->rai_mininterval = (uint16_t)val;
421 rai->rai_hoplimit = val & 0xff;
446 rai->rai_managedflg = val & ND_RA_FLAG_MANAGED;
447 rai->rai_otherflg = val & ND_RA_FLAG_OTHER;
452 rai->rai_rtpref = val & ND_RA_FLAG_RTPREF_MASK;
453 if (rai->rai_rtpref == ND_RA_FLAG_RTPREF_RSV) {
455 __func__, rai->rai_rtpref, ifi->ifi_ifname);
459 rai->rai_ipv6onlyflg = val & ND_RA_FLAG_IPV6_ONLY;
462 MAYHAVE(val, "rltime", rai->rai_maxinterval * 3);
463 if ((uint16_t)val && ((uint16_t)val < rai->rai_maxinterval ||
468 __func__, val, ifi->ifi_ifname, rai->rai_maxinterval,
472 rai->rai_lifetime = val & 0xffff;
482 rai->rai_reachabletime = (uint32_t)val;
490 rai->rai_retranstimer = (uint32_t)val64;
506 rai->rai_clockskew = val;
508 rai->rai_pfxs = 0;
519 pfx->pfx_rainfo = rai;
606 TAILQ_INSERT_TAIL(&rai->rai_prefix, pfx, pfx_next);
607 rai->rai_pfxs++;
612 if (rai->rai_advifprefix && rai->rai_pfxs == 0)
613 get_prefix(rai);
622 rai->rai_linkmtu = (uint32_t)val64;
623 if (rai->rai_linkmtu == 0) {
628 rai->rai_linkmtu = ifi->ifi_phymtu;
630 else if (rai->rai_linkmtu < IPV6_MMTU ||
631 rai->rai_linkmtu > ifi->ifi_phymtu) {
635 __func__, rai->rai_linkmtu, ifi->ifi_ifname,
657 ndi.ndi.chlim = rai->rai_hoplimit;
658 ndi.ndi.retrans = rai->rai_retranstimer;
659 ndi.ndi.basereachable = rai->rai_reachabletime;
669 rai->rai_routes = 0;
790 val64 = rai->rai_lifetime;
803 TAILQ_INSERT_TAIL(&rai->rai_route, rti, rti_next);
804 rai->rai_routes++;
840 MAYHAVE(val, entbuf, (rai->rai_maxinterval * 3 / 2));
841 if ((uint16_t)val < rai->rai_maxinterval ||
842 (uint16_t)val > rai->rai_maxinterval * 2) {
845 entbuf, val, ifi->ifi_ifname, rai->rai_maxinterval,
846 rai->rai_maxinterval * 2);
852 TAILQ_INSERT_TAIL(&rai->rai_rdnss, rdn, rd_next);
894 MAYHAVE(val, entbuf, (rai->rai_maxinterval * 3 / 2));
895 if ((uint16_t)val < rai->rai_maxinterval ||
896 (uint16_t)val > rai->rai_maxinterval * 2) {
899 entbuf, val, ifi->ifi_ifname, rai->rai_maxinterval,
900 rai->rai_maxinterval * 2);
906 TAILQ_INSERT_TAIL(&rai->rai_dnssl, dns, dn_next);
919 rai->rai_pref64.p64_enabled = false;
922 if (inet_pton(AF_INET6, addr, &rai->rai_pref64.p64_prefix) != 1) {
926 rai->rai_pref64.p64_enabled = true;
931 rai->rai_pref64.p64_plc = 0;
934 rai->rai_pref64.p64_plc = 1;
937 rai->rai_pref64.p64_plc = 2;
940 rai->rai_pref64.p64_plc = 3;
943 rai->rai_pref64.p64_plc = 4;
946 rai->rai_pref64.p64_plc = 5;
952 rai->rai_pref64.p64_enabled = 0;
959 val64 = rai->rai_lifetime * 3;
963 rai->rai_pref64.p64_sl = (uint16_t) (uint64_t) val64;
968 make_packet(rai);
987 /* The same two rai mean initial burst */
988 ifi->ifi_rainfo = rai;
989 ifi->ifi_rainfo_trans = rai;
990 TAILQ_INSERT_TAIL(&railist, rai, rai_next);
1036 ifi->ifi_rainfo = rai;
1037 TAILQ_INSERT_TAIL(&railist, rai, rai_next);
1044 ifi->ifi_rainfo = rai;
1045 ifi->ifi_rainfo_trans = rai;
1053 ifi->ifi_rainfo = rai;
1055 TAILQ_INSERT_TAIL(&railist, rai, rai_next);
1065 rm_rainfo(rai);
1075 free(rai);
1080 get_prefix(struct rainfo *rai)
1095 ifi = rai->rai_ifinfo;
1120 if (find_prefix(rai, a, plen)) {
1152 pfx->pfx_rainfo = rai;
1155 TAILQ_INSERT_TAIL(&rai->rai_prefix, pfx, pfx_next);
1158 rai->rai_pfxs++;
1182 add_prefix(struct rainfo *rai, struct in6_prefixreq *ipr)
1188 ifi = rai->rai_ifinfo;
1197 pfx->pfx_rainfo = rai;
1199 TAILQ_INSERT_TAIL(&rai->rai_prefix, pfx, pfx_next);
1206 rai->rai_pfxs++;
1217 struct rainfo *rai;
1221 rai = pfx->pfx_rainfo;
1222 ifi = rai->rai_ifinfo;
1223 TAILQ_REMOVE(&rai->rai_prefix, pfx, pfx_next);
1232 rai->rai_pfxs--;
1239 struct rainfo *rai;
1243 rai = pfx->pfx_rainfo;
1244 ifi = rai->rai_ifinfo;
1281 struct rainfo *rai;
1285 rai = pfx->pfx_rainfo;
1286 ifi = rai->rai_ifinfo;
1354 make_prefix(struct rainfo *rai, int ifindex, struct in6_addr *addr, int plen)
1372 add_prefix(rai, &ipr);
1376 make_packet(struct rainfo *rai)
1394 ifi = rai->rai_ifinfo;
1397 if (rai->rai_advlinkopt) {
1403 rai->rai_advlinkopt = 0;
1407 if (rai->rai_pfxs)
1408 packlen += sizeof(struct nd_opt_prefix_info) * rai->rai_pfxs;
1409 if (rai->rai_linkmtu)
1411 if (rai->rai_pref64.p64_enabled)
1414 TAILQ_FOREACH(rti, &rai->rai_route, rti_next)
1418 TAILQ_FOREACH(rdn, &rai->rai_rdnss, rd_next) {
1425 TAILQ_FOREACH(dns, &rai->rai_dnssl, dn_next) {
1447 if (rai->rai_ra_data) /* Free old data if any. */
1448 free(rai->rai_ra_data);
1449 rai->rai_ra_data = buf;
1451 rai->rai_ra_datalen = packlen;
1460 ra->nd_ra_curhoplimit = (uint8_t)(0xff & rai->rai_hoplimit);
1465 ra->nd_ra_flags_reserved = 0xff & rai->rai_rtpref;
1467 rai->rai_managedflg ? ND_RA_FLAG_MANAGED : 0;
1469 rai->rai_otherflg ? ND_RA_FLAG_OTHER : 0;
1472 rai->rai_ipv6onlyflg ? ND_RA_FLAG_IPV6_ONLY : 0;
1474 ra->nd_ra_router_lifetime = htons(rai->rai_lifetime);
1475 ra->nd_ra_reachable = htonl(rai->rai_reachabletime);
1476 ra->nd_ra_retransmit = htonl(rai->rai_retranstimer);
1479 if (rai->rai_advlinkopt) {
1484 if (rai->rai_linkmtu) {
1489 ndopt_mtu->nd_opt_mtu_mtu = htonl(rai->rai_linkmtu);
1493 if (rai->rai_pref64.p64_enabled) {
1498 (htons(rai->rai_pref64.p64_sl << 3)) |
1499 htons((rai->rai_pref64.p64_plc & 0x7));
1501 &rai->rai_pref64.p64_prefix,
1506 TAILQ_FOREACH(pfx, &rai->rai_prefix, pfx_next) {
1556 TAILQ_FOREACH(rti, &rai->rai_route, rti_next) {
1569 TAILQ_FOREACH(rdn, &rai->rai_rdnss, rd_next) {
1590 TAILQ_FOREACH(dns, &rai->rai_dnssl, dn_next) {