diff options
| author | Roy Marples <roy@marples.name> | 2016-08-22 19:52:11 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2016-08-22 19:52:11 +0000 |
| commit | cb7faf7017666aa952c44755f269d799c1ed0d1b (patch) | |
| tree | 500396cab7d534406297d05cdddcc52f04806c07 /if-bsd.c | |
| parent | 23ff2cc6fb4154e6a8d7d9e7d6d668409e75f25c (diff) | |
| download | dhcpcd-cb7faf7017666aa952c44755f269d799c1ed0d1b.tar.xz | |
OpenBSD does not refresh address lifetimes on subsequent calls.
Luckily dhcpcd will expire the address regardless, so just se
infinite lifetimes, except for privacy addresses.
Fixes [277e6848da].
Diffstat (limited to 'if-bsd.c')
| -rw-r--r-- | if-bsd.c | 16 |
1 files changed, 15 insertions, 1 deletions
@@ -973,7 +973,7 @@ if_address6(unsigned char cmd, const struct ipv6_addr *ia) */ #if !((defined(__NetBSD_Version__) && __NetBSD_Version__ >= 799003600) || \ - (defined(OpenBSD) && OpenBSD >= 201605)) + (defined(__OpenBSD__))) if (cmd == RTM_NEWADDR && !(ia->flags & IPV6_AF_ADDED)) { ifa.ifra_lifetime.ia6t_vltime = ND6_INFINITE_LIFETIME; ifa.ifra_lifetime.ia6t_pltime = ND6_INFINITE_LIFETIME; @@ -981,8 +981,22 @@ if_address6(unsigned char cmd, const struct ipv6_addr *ia) } #endif +#if defined(__OpenBSD__) + /* BUT OpenBSD does not reset the address lifetime + * for subsequent calls... + * Luckily dhcpcd will remove the lease when it expires so + * just set an infinite lifetime, unless a temporary address. */ + if (ifa.ifra_flags & IN6_IFF_PRIVACY) { + ifa.ifra_lifetime.ia6t_vltime = ia->prefix_vltime; + ifa.ifra_lifetime.ia6t_pltime = ia->prefix_pltime; + } else { + ifa.ifra_lifetime.ia6t_vltime = ND6_INFINITE_LIFETIME; + ifa.ifra_lifetime.ia6t_pltime = ND6_INFINITE_LIFETIME; + } +#else ifa.ifra_lifetime.ia6t_vltime = ia->prefix_vltime; ifa.ifra_lifetime.ia6t_pltime = ia->prefix_pltime; +#endif return ioctl(priv->pf_inet6_fd, cmd == RTM_DELADDR ? SIOCDIFADDR_IN6 : SIOCAIFADDR_IN6, &ifa); |
