git: 5c32488de0bb - main - linux(4): Add a counterpart to linux_ifflags
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 04 Mar 2023 09:26:58 UTC
The branch main has been updated by dchagin:
URL: https://cgit.FreeBSD.org/src/commit/?id=5c32488de0bbd9f7b52e3ff8be8ca2facc3169ba
commit 5c32488de0bbd9f7b52e3ff8be8ca2facc3169ba
Author: Dmitry Chagin <dchagin@FreeBSD.org>
AuthorDate: 2023-03-04 09:26:48 +0000
Commit: Dmitry Chagin <dchagin@FreeBSD.org>
CommitDate: 2023-03-04 09:26:48 +0000
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
---
sys/compat/linux/linux.c | 13 ++++++++++---
sys/compat/linux/linux_common.h | 1 +
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,