aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Chagin <dchagin@FreeBSD.org>2023-03-04 09:26:48 +0000
committerDmitry Chagin <dchagin@FreeBSD.org>2023-03-04 09:26:48 +0000
commit5c32488de0bbd9f7b52e3ff8be8ca2facc3169ba (patch)
tree76547b284310813c9d885974eaef64d2e9219b73
parent945a7f0d21a0bcbcce3f308e080f54dfb7da54b1 (diff)
downloadsrc-5c32488de0bbd9f7b52e3ff8be8ca2facc3169ba.tar.gz
src-5c32488de0bbd9f7b52e3ff8be8ca2facc3169ba.zip
linux(4): Add a counterpart to linux_ifflags
For further use in linux_ioctl_socket add bsd_to_linux_ifflags() which accepts FreeBSD interface flags and translate it to Linux if flags. Reviewed by: melifaro Differential Revision: https://reviews.freebsd.org/D38873
-rw-r--r--sys/compat/linux/linux.c13
-rw-r--r--sys/compat/linux/linux_common.h1
2 files changed, 11 insertions, 3 deletions
diff --git a/sys/compat/linux/linux.c b/sys/compat/linux/linux.c
index 53a874ebfab7..252645cf2ae5 100644
--- a/sys/compat/linux/linux.c
+++ b/sys/compat/linux/linux.c
@@ -434,10 +434,17 @@ ifname_linux_to_bsd(struct thread *td, const char *lxname, char *bsdname)
unsigned short
linux_ifflags(struct ifnet *ifp)
{
- unsigned short fl, flags;
+ unsigned short flags;
+
+ flags = if_getflags(ifp) | if_getdrvflags(ifp);
+ return (bsd_to_linux_ifflags(flags));
+}
+
+unsigned short
+bsd_to_linux_ifflags(int fl)
+{
+ unsigned short flags = 0;
- fl = (if_getflags(ifp) | if_getdrvflags(ifp)) & 0xffff;
- flags = 0;
if (fl & IFF_UP)
flags |= LINUX_IFF_UP;
if (fl & IFF_BROADCAST)
diff --git a/sys/compat/linux/linux_common.h b/sys/compat/linux/linux_common.h
index 3392f55672f3..94ff5e49b57a 100644
--- a/sys/compat/linux/linux_common.h
+++ b/sys/compat/linux/linux_common.h
@@ -39,6 +39,7 @@ int ifname_linux_to_bsd(struct thread *, const char *, char *);
unsigned short linux_ifflags(struct ifnet *);
int linux_ifhwaddr(struct ifnet *ifp, struct l_sockaddr *lsa);
+unsigned short bsd_to_linux_ifflags(int);
int linux_to_bsd_domain(int domain);
int bsd_to_linux_domain(int domain);
int bsd_to_linux_sockaddr(const struct sockaddr *sa,