Mercurial > hg > dhcpcd
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)
