• Home
  • Raw
  • Download

Lines Matching refs:rap

322 	struct ra *rap;  in ipv6nd_expire()  local
327 TAILQ_FOREACH(rap, ifp->ctx->ipv6->ra_routers, next) { in ipv6nd_expire()
328 if (rap->iface == ifp) { in ipv6nd_expire()
329 rap->received = now; in ipv6nd_expire()
330 rap->expired = seconds ? 0 : 1; in ipv6nd_expire()
335 rap->lifetime = seconds; in ipv6nd_expire()
336 TAILQ_FOREACH(ap, &rap->addrs, next) { in ipv6nd_expire()
342 ipv6_addaddrs(&rap->addrs); in ipv6nd_expire()
343 TAILQ_FOREACH(rao, &rap->options, next) { in ipv6nd_expire()
356 ipv6nd_reachable(struct ra *rap, int flags) in ipv6nd_reachable() argument
360 if (rap->lifetime && rap->expired) { in ipv6nd_reachable()
361 logger(rap->iface->ctx, LOG_INFO, in ipv6nd_reachable()
363 rap->iface->name, rap->sfrom); in ipv6nd_reachable()
364 rap->expired = 0; in ipv6nd_reachable()
365 ipv6_buildroutes(rap->iface->ctx); in ipv6nd_reachable()
367 script_runreason(rap->iface, "ROUTERADVERT"); in ipv6nd_reachable()
370 if (rap->lifetime && !rap->expired) { in ipv6nd_reachable()
371 logger(rap->iface->ctx, LOG_WARNING, in ipv6nd_reachable()
373 rap->iface->name, rap->sfrom); in ipv6nd_reachable()
374 rap->expired = 1; in ipv6nd_reachable()
375 ipv6_buildroutes(rap->iface->ctx); in ipv6nd_reachable()
377 script_runreason(rap->iface, "ROUTERADVERT"); in ipv6nd_reachable()
385 struct ra *rap; in ipv6nd_neighbour() local
388 TAILQ_FOREACH(rap, ctx->ipv6->ra_routers, next) { in ipv6nd_neighbour()
389 if (IN6_ARE_ADDR_EQUAL(&rap->from, addr)) { in ipv6nd_neighbour()
390 ipv6nd_reachable(rap, flags); in ipv6nd_neighbour()
398 ipv6nd_free_opts(struct ra *rap) in ipv6nd_free_opts() argument
402 while ((rao = TAILQ_FIRST(&rap->options))) { in ipv6nd_free_opts()
403 TAILQ_REMOVE(&rap->options, rao, next); in ipv6nd_free_opts()
413 struct ra *rap; in ipv6nd_findaddr() local
419 TAILQ_FOREACH(rap, ctx->ipv6->ra_routers, next) { in ipv6nd_findaddr()
420 TAILQ_FOREACH(ap, &rap->addrs, next) { in ipv6nd_findaddr()
435 void ipv6nd_freedrop_ra(struct ra *rap, int drop) in ipv6nd_freedrop_ra() argument
438 eloop_timeout_delete(rap->iface->ctx->eloop, NULL, rap->iface); in ipv6nd_freedrop_ra()
439 eloop_timeout_delete(rap->iface->ctx->eloop, NULL, rap); in ipv6nd_freedrop_ra()
441 TAILQ_REMOVE(rap->iface->ctx->ipv6->ra_routers, rap, next); in ipv6nd_freedrop_ra()
442 ipv6_freedrop_addrs(&rap->addrs, drop, NULL); in ipv6nd_freedrop_ra()
443 ipv6nd_free_opts(rap); in ipv6nd_freedrop_ra()
444 free(rap->data); in ipv6nd_freedrop_ra()
445 free(rap); in ipv6nd_freedrop_ra()
452 struct ra *rap, *ran; in ipv6nd_free() local
464 TAILQ_FOREACH_SAFE(rap, ifp->ctx->ipv6->ra_routers, next, ran) { in ipv6nd_free()
465 if (rap->iface == ifp) { in ipv6nd_free()
466 ipv6nd_free_ra(rap); in ipv6nd_free()
490 rtpref(struct ra *rap) in rtpref() argument
493 switch (rap->flags & ND_RA_FLAG_RTPREF_MASK) { in rtpref()
502 logger(rap->iface->ctx, LOG_ERR, in rtpref()
503 "rtpref: impossible RA flag %x", rap->flags); in rtpref()
512 struct ra *rap; in add_router() local
514 TAILQ_FOREACH(rap, ctx->ra_routers, next) { in add_router()
515 if (router->iface->metric < rap->iface->metric || in add_router()
516 (router->iface->metric == rap->iface->metric && in add_router()
517 rtpref(router) > rtpref(rap))) in add_router()
519 TAILQ_INSERT_BEFORE(rap, router, next); in add_router()
527 ipv6nd_scriptrun(struct ra *rap) in ipv6nd_scriptrun() argument
535 TAILQ_FOREACH(ap, &rap->addrs, next) { in ipv6nd_scriptrun()
547 rap->iface->name); in ipv6nd_scriptrun()
554 if (!(rap->iface->options->options & DHCPCD_IPV6RA_REQRDNSS)) in ipv6nd_scriptrun()
558 TAILQ_FOREACH(rao, &rap->options, next) { in ipv6nd_scriptrun()
569 script_runreason(rap->iface, "ROUTERADVERT"); in ipv6nd_scriptrun()
572 !(rap->flags & (ND_RA_FLAG_MANAGED | ND_RA_FLAG_OTHER)))) in ipv6nd_scriptrun()
573 pid = dhcpcd_daemonise(rap->iface->ctx); in ipv6nd_scriptrun()
577 logger(rap->iface->ctx, LOG_WARNING, in ipv6nd_scriptrun()
597 const struct ra *rap; in ipv6nd_dadcompleted() local
600 TAILQ_FOREACH(rap, ifp->ctx->ipv6->ra_routers, next) { in ipv6nd_dadcompleted()
601 if (rap->iface != ifp) in ipv6nd_dadcompleted()
603 TAILQ_FOREACH(ap, &rap->addrs, next) { in ipv6nd_dadcompleted()
618 struct ra *rap; in ipv6nd_dadcallback() local
683 TAILQ_FOREACH(rap, ifp->ctx->ipv6->ra_routers, next) { in ipv6nd_dadcallback()
684 if (rap->iface != ifp) in ipv6nd_dadcallback()
688 TAILQ_FOREACH(rapap, &rap->addrs, next) { in ipv6nd_dadcallback()
701 logger(rap->iface->ctx, LOG_DEBUG, in ipv6nd_dadcallback()
703 rap->iface->name); in ipv6nd_dadcallback()
704 if (ipv6nd_scriptrun(rap)) in ipv6nd_dadcallback()
712 ipv6nd_ra_has_public_addr(const struct ra *rap) in ipv6nd_ra_has_public_addr() argument
716 TAILQ_FOREACH(ia, &rap->addrs, next) { in ipv6nd_ra_has_public_addr()
741 struct ra *rap; in ipv6nd_handlera() local
795 TAILQ_FOREACH(rap, ctx->ra_routers, next) { in ipv6nd_handlera()
796 if (ifp == rap->iface && in ipv6nd_handlera()
797 IN6_ARE_ADDR_EQUAL(&rap->from, &ctx->from.sin6_addr)) in ipv6nd_handlera()
805 if (rap == NULL || (rap->data_len != len || in ipv6nd_handlera()
806 memcmp(rap->data, (unsigned char *)icp, rap->data_len) != 0)) in ipv6nd_handlera()
808 if (rap) { in ipv6nd_handlera()
809 free(rap->data); in ipv6nd_handlera()
810 rap->data_len = 0; in ipv6nd_handlera()
811 rap->no_public_warned = 0; in ipv6nd_handlera()
820 if (rap == NULL) { in ipv6nd_handlera()
821 rap = calloc(1, sizeof(*rap)); in ipv6nd_handlera()
822 if (rap == NULL) { in ipv6nd_handlera()
826 rap->iface = ifp; in ipv6nd_handlera()
827 rap->from = ctx->from.sin6_addr; in ipv6nd_handlera()
828 strlcpy(rap->sfrom, ctx->sfrom, sizeof(rap->sfrom)); in ipv6nd_handlera()
829 TAILQ_INIT(&rap->addrs); in ipv6nd_handlera()
830 TAILQ_INIT(&rap->options); in ipv6nd_handlera()
834 if (rap->data_len == 0) { in ipv6nd_handlera()
835 rap->data = malloc(len); in ipv6nd_handlera()
836 if (rap->data == NULL) { in ipv6nd_handlera()
839 free(rap); in ipv6nd_handlera()
842 memcpy(rap->data, icp, len); in ipv6nd_handlera()
843 rap->data_len = len; in ipv6nd_handlera()
846 get_monotonic(&rap->received); in ipv6nd_handlera()
847 rap->flags = nd_ra->nd_ra_flags_reserved; in ipv6nd_handlera()
848 if (new_rap == 0 && rap->lifetime == 0) in ipv6nd_handlera()
850 ifp->name, rap->sfrom); in ipv6nd_handlera()
851 rap->lifetime = ntohs(nd_ra->nd_ra_router_lifetime); in ipv6nd_handlera()
853 rap->reachable = ntohl(nd_ra->nd_ra_reachable); in ipv6nd_handlera()
854 if (rap->reachable > MAX_REACHABLE_TIME) in ipv6nd_handlera()
855 rap->reachable = 0; in ipv6nd_handlera()
858 rap->retrans = ntohl(nd_ra->nd_ra_retransmit); in ipv6nd_handlera()
859 if (rap->lifetime) in ipv6nd_handlera()
860 rap->expired = 0; in ipv6nd_handlera()
863 TAILQ_FOREACH(ap, &rap->addrs, next) { in ipv6nd_handlera()
919 TAILQ_FOREACH(ap, &rap->addrs, next) in ipv6nd_handlera()
933 ap->iface = rap->iface; in ipv6nd_handlera()
966 ap->created = ap->acquired = rap->received; in ipv6nd_handlera()
967 TAILQ_INSERT_TAIL(&rap->addrs, ap, next); in ipv6nd_handlera()
986 ap->acquired = rap->received; in ipv6nd_handlera()
1037 rap->mtu = mtuv; in ipv6nd_handlera()
1128 TAILQ_FOREACH(rao, &rap->options, next) { in ipv6nd_handlera()
1135 TAILQ_REMOVE(&rap->options, rao, next); in ipv6nd_handlera()
1152 TAILQ_INSERT_TAIL(&rap->options, rao, next); in ipv6nd_handlera()
1160 timespecadd(&rap->received, &expire, &rao->expire); in ipv6nd_handlera()
1171 add_router(ifp->ctx->ipv6, rap); in ipv6nd_handlera()
1172 if (!ipv6nd_ra_has_public_addr(rap) && in ipv6nd_handlera()
1173 !(rap->iface->options->options & DHCPCD_IPV6RA_ACCEPT_NOPUBLIC) && in ipv6nd_handlera()
1174 (!(rap->flags & ND_RA_FLAG_MANAGED) || in ipv6nd_handlera()
1175 !dhcp6_has_public_addr(rap->iface))) in ipv6nd_handlera()
1177 logger(rap->iface->ctx, in ipv6nd_handlera()
1178 rap->no_public_warned ? LOG_DEBUG : LOG_WARNING, in ipv6nd_handlera()
1181 rap->iface->name, rap->sfrom); in ipv6nd_handlera()
1182 rap->no_public_warned = 1; in ipv6nd_handlera()
1189 ipv6_addaddrs(&rap->addrs); in ipv6nd_handlera()
1191 ipv6_addtempaddrs(ifp, &rap->received); in ipv6nd_handlera()
1200 if (ipv6nd_scriptrun(rap)) in ipv6nd_handlera()
1204 eloop_timeout_delete(ifp->ctx->eloop, NULL, rap); /* reachable timer */ in ipv6nd_handlera()
1209 if (rap->flags & ND_RA_FLAG_MANAGED) { in ipv6nd_handlera()
1213 } else if (rap->flags & ND_RA_FLAG_OTHER) { in ipv6nd_handlera()
1237 struct ra *rap; in ipv6nd_runignoredra() local
1239 TAILQ_FOREACH(rap, ifp->ctx->ipv6->ra_routers, next) { in ipv6nd_runignoredra()
1240 if (rap->iface == ifp && in ipv6nd_runignoredra()
1241 !rap->expired && in ipv6nd_runignoredra()
1242 rap->no_public_warned) in ipv6nd_runignoredra()
1244 rap->no_public_warned = 0; in ipv6nd_runignoredra()
1245 logger(rap->iface->ctx, LOG_INFO, in ipv6nd_runignoredra()
1247 rap->iface->name, rap->sfrom); in ipv6nd_runignoredra()
1252 if (ipv6nd_scriptrun(rap)) in ipv6nd_runignoredra()
1255 eloop_timeout_delete(ifp->ctx->eloop, NULL, rap); in ipv6nd_runignoredra()
1263 const struct ra *rap; in ipv6nd_hasra() local
1266 TAILQ_FOREACH(rap, ifp->ctx->ipv6->ra_routers, next) in ipv6nd_hasra()
1267 if (rap->iface == ifp && !rap->expired) in ipv6nd_hasra()
1276 const struct ra *rap; in ipv6nd_hasradhcp() local
1279 TAILQ_FOREACH(rap, ifp->ctx->ipv6->ra_routers, next) { in ipv6nd_hasradhcp()
1280 if (rap->iface == ifp && in ipv6nd_hasradhcp()
1281 !rap->expired && in ipv6nd_hasradhcp()
1282 (rap->flags & (ND_RA_FLAG_MANAGED | ND_RA_FLAG_OTHER))) in ipv6nd_hasradhcp()
1293 const struct ra *rap; in ipv6nd_env() local
1300 TAILQ_FOREACH(rap, ifp->ctx->ipv6->ra_routers, next) { in ipv6nd_env()
1301 if (rap->iface != ifp) in ipv6nd_env()
1307 setvar(ifp->ctx, &env, prefix, buffer, rap->sfrom); in ipv6nd_env()
1312 TAILQ_FOREACH(rao, &rap->options, next) { in ipv6nd_env()
1408 struct ra *rap; in ipv6nd_handleifa() local
1412 TAILQ_FOREACH(rap, ctx->ipv6->ra_routers, next) { in ipv6nd_handleifa()
1413 if (strcmp(rap->iface->name, ifname)) in ipv6nd_handleifa()
1415 ipv6_handleifa_addrs(cmd, &rap->addrs, addr, flags); in ipv6nd_handleifa()
1423 struct ra *rap, *ran; in ipv6nd_expirera() local
1434 TAILQ_FOREACH_SAFE(rap, ifp->ctx->ipv6->ra_routers, next, ran) { in ipv6nd_expirera()
1435 if (rap->iface != ifp) in ipv6nd_expirera()
1438 if (rap->lifetime) { in ipv6nd_expirera()
1439 lt.tv_sec = (time_t)rap->lifetime; in ipv6nd_expirera()
1441 timespecadd(&rap->received, &lt, &expire); in ipv6nd_expirera()
1442 if (rap->lifetime == 0 || timespeccmp(&now, &expire, >)) in ipv6nd_expirera()
1444 if (!rap->expired) { in ipv6nd_expirera()
1447 ifp->name, rap->sfrom); in ipv6nd_expirera()
1448 rap->expired = expired = 1; in ipv6nd_expirera()
1449 rap->lifetime = 0; in ipv6nd_expirera()
1462 TAILQ_FOREACH_SAFE(rao, &rap->options, next, raon) { in ipv6nd_expirera()
1463 if (rap->expired) { in ipv6nd_expirera()
1471 TAILQ_REMOVE(&rap->options, rao, next); in ipv6nd_expirera()
1485 ifp->name, rap->sfrom, rao->type); in ipv6nd_expirera()
1486 TAILQ_REMOVE(&rap->options, rao, next); in ipv6nd_expirera()
1500 if (!valid && TAILQ_FIRST(&rap->addrs) == NULL) in ipv6nd_expirera()
1501 ipv6nd_free_ra(rap); in ipv6nd_expirera()
1522 struct ra *rap; in ipv6nd_drop() local
1531 TAILQ_FOREACH(rap, ifp->ctx->ipv6->ra_routers, next) { in ipv6nd_drop()
1532 if (rap->iface == ifp) { in ipv6nd_drop()
1533 rap->expired = expired = 1; in ipv6nd_drop()
1534 TAILQ_REMOVE(ifp->ctx->ipv6->ra_routers, rap, next); in ipv6nd_drop()
1535 TAILQ_INSERT_TAIL(&rtrs, rap, next); in ipv6nd_drop()
1539 while ((rap = TAILQ_FIRST(&rtrs))) { in ipv6nd_drop()
1540 TAILQ_REMOVE(&rtrs, rap, next); in ipv6nd_drop()
1541 ipv6nd_drop_ra(rap); in ipv6nd_drop()
1557 struct ra *rap; in ipv6nd_handlena() local
1588 TAILQ_FOREACH(rap, ctx->ra_routers, next) { in ipv6nd_handlena()
1589 if (rap->iface == ifp && in ipv6nd_handlena()
1590 IN6_ARE_ADDR_EQUAL(&rap->from, &nd_na->nd_na_target)) in ipv6nd_handlena()
1593 if (rap == NULL) { in ipv6nd_handlena()
1607 if (!is_router && !rap->expired) { in ipv6nd_handlena()
1610 rap->expired = 1; in ipv6nd_handlena()
1616 if (is_solicited && is_router && rap->lifetime) { in ipv6nd_handlena()
1617 if (rap->expired) { in ipv6nd_handlena()
1618 rap->expired = 0; in ipv6nd_handlena()
1622 script_runreason(rap->iface, "ROUTERADVERT"); /* XXX */ in ipv6nd_handlena()