aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Chagin <dchagin@FreeBSD.org>2023-03-04 09:11:38 +0000
committerDmitry Chagin <dchagin@FreeBSD.org>2023-03-04 09:11:38 +0000
commita927409ce820909c344b8f1323285fd01046cc4f (patch)
tree4bda4ade2398e39ba1399593e6ec3c3b1cbe2c1b
parentcabbfb60d050f21eda60fb7d9a95718059048686 (diff)
downloadsrc-a927409ce820909c344b8f1323285fd01046cc4f.tar.gz
src-a927409ce820909c344b8f1323285fd01046cc4f.zip
linux(4): Rename struct l_ifreq members names to avoid conflicts with FreeBSD
For now we are using mixed names to access struct ifreq members, some of Linux (ifr_name, ifr_ifindex), others of FreeBSD. To avoid conflicts switch to use FreeBSD names. Reviewed by: jhibbits Differential Revision: https://reviews.freebsd.org/D38792
-rw-r--r--sys/compat/linux/linux_ioctl.c2
-rw-r--r--sys/compat/linux/linux_socket.c10
-rw-r--r--sys/compat/linux/linux_socket.h17
3 files changed, 21 insertions, 8 deletions
diff --git a/sys/compat/linux/linux_ioctl.c b/sys/compat/linux/linux_ioctl.c
index 8551ba180aa4..9f1fdd3a6671 100644
--- a/sys/compat/linux/linux_ioctl.c
+++ b/sys/compat/linux/linux_ioctl.c
@@ -2097,7 +2097,7 @@ linux_ioctl_ifname(struct thread *td, struct l_ifreq *uifr)
error = copyin(uifr, &ifr, sizeof(ifr));
if (error != 0)
return (error);
- ret = ifname_bsd_to_linux_idx(ifr.ifr_ifindex, ifr.ifr_name,
+ ret = ifname_bsd_to_linux_idx(ifr.ifr_index, ifr.ifr_name,
LINUX_IFNAMSIZ);
if (ret > 0)
return (copyout(&ifr, uifr, sizeof(ifr)));
diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c
index a3a8cc6733c1..3748c1bedd3c 100644
--- a/sys/compat/linux/linux_socket.c
+++ b/sys/compat/linux/linux_socket.c
@@ -72,6 +72,16 @@ __FBSDID("$FreeBSD$");
#include <compat/linux/linux_time.h>
#include <compat/linux/linux_util.h>
+_Static_assert(offsetof(struct l_ifreq, ifr_ifru) ==
+ offsetof(struct ifreq, ifr_ifru),
+ "Linux ifreq members names should be equal to FreeeBSD");
+_Static_assert(offsetof(struct l_ifreq, ifr_index) ==
+ offsetof(struct ifreq, ifr_index),
+ "Linux ifreq members names should be equal to FreeeBSD");
+_Static_assert(offsetof(struct l_ifreq, ifr_name) ==
+ offsetof(struct ifreq, ifr_name),
+ "Linux ifreq members names should be equal to FreeeBSD");
+
#define SECURITY_CONTEXT_STRING "unconfined"
static int linux_sendmsg_common(struct thread *, l_int, struct l_msghdr *,
diff --git a/sys/compat/linux/linux_socket.h b/sys/compat/linux/linux_socket.h
index 9b332a7a9b86..ab9ab2100a96 100644
--- a/sys/compat/linux/linux_socket.h
+++ b/sys/compat/linux/linux_socket.h
@@ -336,11 +336,13 @@ struct l_ifmap {
/* 3 bytes spare */
};
+/*
+ * Careful changing the declaration of this structure.
+ * To use FreeBSD names to access the struct l_ifreq members the
+ * member names of struct l_ifreq should be equal to the FreeBSD.
+ */
struct l_ifreq {
- union {
- char ifrn_name[LINUX_IFNAMSIZ];
- } ifr_ifrn;
-
+ char ifr_name[LINUX_IFNAMSIZ];
union {
struct l_sockaddr ifru_addr;
struct l_sockaddr ifru_dstaddr;
@@ -348,7 +350,7 @@ struct l_ifreq {
struct l_sockaddr ifru_netmask;
struct l_sockaddr ifru_hwaddr;
l_short ifru_flags[1];
- l_int ifru_ivalue;
+ l_int ifru_index;
l_int ifru_mtu;
struct l_ifmap ifru_map;
char ifru_slave[LINUX_IFNAMSIZ];
@@ -357,8 +359,9 @@ struct l_ifreq {
} ifr_ifru;
};
-#define ifr_name ifr_ifrn.ifrn_name /* Interface name */
+/*
+ * Define here members which are not exists in the FreeBSD struct ifreq.
+ */
#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
-#define ifr_ifindex ifr_ifru.ifru_ivalue /* Interface index */
#endif /* _LINUX_SOCKET_H_ */