diff options
| author | Roy Marples <roy@marples.name> | 2019-11-09 22:03:19 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2019-11-09 22:03:19 +0000 |
| commit | e252a8b3271e4463d750622ff5b10c08c574a0fa (patch) | |
| tree | cfc602dfd67c97a3fa313b89cc4c7bc6179730a9 /src/if-bsd.c | |
| parent | 5c1c0c7f3aa4b8de4b487b55f0508e03bef46b3f (diff) | |
| download | dhcpcd-e252a8b3271e4463d750622ff5b10c08c574a0fa.tar.xz | |
INET6: Apply hoplimit, reachable and retrans timer values from RA.
Only tested thus far on NetBSD.
While here, fix prior to not lose the first sorted route.
Diffstat (limited to 'src/if-bsd.c')
| -rw-r--r-- | src/if-bsd.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/if-bsd.c b/src/if-bsd.c index d2e910ef..eb7673a2 100644 --- a/src/if-bsd.c +++ b/src/if-bsd.c @@ -1484,6 +1484,22 @@ inet6_sysctl(int code, int val, int action) } #endif +int +if_applyra(const struct ra *rap) +{ + struct in6_ndireq ndi = { .ndi.chlim = 0 }; + struct priv *priv = rap->iface->ctx->priv; + + strncpy(ndi.ifname, rap->iface->name, sizeof(ndi.ifname)); + if (ioctl(priv->pf_inet6_fd, SIOCGIFINFO_IN6, &ndi) == -1) + return -1; + + ndi.ndi.chlim = rap->hoplimit; + ndi.ndi.retrans = rap->retrans; + ndi.ndi.basereachable = rap->reachable; + return ioctl(priv->pf_inet6_fd, SIOCSIFINFO_IN6, &ndi); +} + #ifdef IPV6_MANAGETEMPADDR #ifndef IPV6CTL_TEMPVLTIME #define get_inet6_sysctlbyname(code) inet6_sysctlbyname(code, 0, 0) |
