diff src/if-linux.c @ 5557:e65d193a1960 draft

Linux: Support wireless IP roaming This is achieved by checking that the interface is wireless, IFF_UP and IFF_LOWER_UP are present, but IFF_RUNNING is missing. This gives exactly the same support as modern NetBSD when carrier loss is detected, but without the address verifications when the carrier comes back as that needs to be handled in the kernel. While IP setup is maintained, other configuration data is discarded. Note that this should be improved in the future. Thanks to Boris Krasnovskiy <borkra@gmail.com> for helping with this.
author Roy Marples <roy@marples.name>
date Sat, 12 Dec 2020 13:12:26 +0000
parents 605f7f9a20c0
children dd1e6f7adadd
line wrap: on
line diff
--- a/src/if-linux.c	Wed Dec 09 11:15:30 2020 +0000
+++ b/src/if-linux.c	Sat Dec 12 13:12:26 2020 +0000
@@ -515,6 +515,21 @@
 	return ifp->flags & IFF_RUNNING ? LINK_UP : LINK_DOWN;
 }
 
+bool
+if_roaming(struct interface *ifp)
+{
+
+#ifdef IFF_LOWER_UP
+	if (!ifp->wireless ||
+	    ifp->flags & IFF_RUNNING ||
+	    (ifp->flags & (IFF_UP | IFF_LOWER_UP)) != (IFF_UP | IFF_LOWER_UP))
+		return false;
+	return true;
+#else
+	return false;
+#endif
+}
+
 int
 if_getnetlink(struct dhcpcd_ctx *ctx, struct iovec *iov, int fd, int flags,
     int (*cb)(struct dhcpcd_ctx *, void *, struct nlmsghdr *), void *cbarg)