summaryrefslogtreecommitdiffstats
path: root/src/if-bsd.c
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2019-11-09 22:03:19 +0000
committerRoy Marples <roy@marples.name>2019-11-09 22:03:19 +0000
commite252a8b3271e4463d750622ff5b10c08c574a0fa (patch)
treecfc602dfd67c97a3fa313b89cc4c7bc6179730a9 /src/if-bsd.c
parent5c1c0c7f3aa4b8de4b487b55f0508e03bef46b3f (diff)
downloaddhcpcd-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.c16
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)