mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
linux: add sysctl to pass untranslated interface names
Reviewed by: kib MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D33792
This commit is contained in:
parent
96c524d8b2
commit
1f70a85b4c
6 changed files with 29 additions and 15 deletions
|
|
@ -1412,11 +1412,6 @@ linprocfs_doprocmem(PFS_FILL_ARGS)
|
|||
return (error);
|
||||
}
|
||||
|
||||
/*
|
||||
* Criteria for interface name translation
|
||||
*/
|
||||
#define IFP_IS_ETH(ifp) (ifp->if_type == IFT_ETHER)
|
||||
|
||||
static int
|
||||
linux_ifname(struct ifnet *ifp, char *buffer, size_t buflen)
|
||||
{
|
||||
|
|
@ -1426,7 +1421,7 @@ linux_ifname(struct ifnet *ifp, char *buffer, size_t buflen)
|
|||
IFNET_RLOCK_ASSERT();
|
||||
|
||||
/* Short-circuit non ethernet interfaces */
|
||||
if (!IFP_IS_ETH(ifp))
|
||||
if (linux_use_real_ifname(ifp))
|
||||
return (strlcpy(buffer, ifp->if_xname, buflen));
|
||||
|
||||
/* Determine the (relative) unit number for ethernet interfaces */
|
||||
|
|
@ -1434,7 +1429,7 @@ linux_ifname(struct ifnet *ifp, char *buffer, size_t buflen)
|
|||
CK_STAILQ_FOREACH(ifscan, &V_ifnet, if_link) {
|
||||
if (ifscan == ifp)
|
||||
return (snprintf(buffer, buflen, "eth%d", ethno));
|
||||
if (IFP_IS_ETH(ifscan))
|
||||
if (!linux_use_real_ifname(ifscan))
|
||||
ethno++;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -55,12 +55,6 @@
|
|||
#define LINUX_IFHWADDRLEN 6
|
||||
#define LINUX_IFNAMSIZ 16
|
||||
|
||||
/*
|
||||
* Criteria for interface name translation
|
||||
*/
|
||||
#define IFP_IS_ETH(ifp) (ifp->if_type == IFT_ETHER)
|
||||
#define IFP_IS_LOOP(ifp) (ifp->if_type == IFT_LOOP)
|
||||
|
||||
struct l_sockaddr {
|
||||
unsigned short sa_family;
|
||||
char sa_data[14];
|
||||
|
|
|
|||
|
|
@ -2121,7 +2121,7 @@ linux_ioctl_ifname(struct thread *td, struct l_ifreq *uifr)
|
|||
error = ENODEV;
|
||||
CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) {
|
||||
if (ifr.ifr_ifindex == index) {
|
||||
if (IFP_IS_ETH(ifp))
|
||||
if (!linux_use_real_ifname(ifp))
|
||||
snprintf(ifr.ifr_name, LINUX_IFNAMSIZ,
|
||||
"eth%d", ethno);
|
||||
else
|
||||
|
|
@ -2130,7 +2130,7 @@ linux_ioctl_ifname(struct thread *td, struct l_ifreq *uifr)
|
|||
error = 0;
|
||||
break;
|
||||
}
|
||||
if (IFP_IS_ETH(ifp))
|
||||
if (!linux_use_real_ifname(ifp))
|
||||
ethno++;
|
||||
index++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,6 +50,10 @@ __FBSDID("$FreeBSD$");
|
|||
#include <sys/systm.h>
|
||||
#include <sys/vnode.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/if_var.h>
|
||||
#include <net/if_types.h>
|
||||
|
||||
#include <machine/stdarg.h>
|
||||
|
||||
#include <compat/linux/linux_dtrace.h>
|
||||
|
|
@ -82,6 +86,11 @@ SYSCTL_STRING(_compat_linux, OID_AUTO, emul_path, CTLFLAG_RWTUN,
|
|||
linux_emul_path, sizeof(linux_emul_path),
|
||||
"Linux runtime environment path");
|
||||
|
||||
static bool use_real_ifnames = false;
|
||||
SYSCTL_BOOL(_compat_linux, OID_AUTO, use_real_ifnames, CTLFLAG_RWTUN,
|
||||
&use_real_ifnames, 0,
|
||||
"Use FreeBSD interface names instead of generating ethN aliases");
|
||||
|
||||
/*
|
||||
* Search an alternate path before passing pathname arguments on to
|
||||
* system calls. Useful for keeping a separate 'emulation tree'.
|
||||
|
|
@ -315,3 +324,9 @@ linux_device_unregister_handler(struct linux_device_handler *d)
|
|||
|
||||
return (EINVAL);
|
||||
}
|
||||
|
||||
bool
|
||||
linux_use_real_ifname(const struct ifnet *ifp)
|
||||
{
|
||||
return (use_real_ifnames || !IFP_IS_ETH(ifp));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -120,6 +120,15 @@ int linux_vn_get_major_minor(const struct vnode *vn, int *major, int *minor);
|
|||
char *linux_get_char_devices(void);
|
||||
void linux_free_get_char_devices(char *string);
|
||||
|
||||
/*
|
||||
* Criteria for interface name translation
|
||||
*/
|
||||
#define IFP_IS_ETH(ifp) ((ifp)->if_type == IFT_ETHER)
|
||||
#define IFP_IS_LOOP(ifp) ((ifp)->if_type == IFT_LOOP)
|
||||
|
||||
struct ifnet;
|
||||
bool linux_use_real_ifname(const struct ifnet *ifp);
|
||||
|
||||
#if defined(KTR)
|
||||
|
||||
#define KTR_LINUX KTR_SUBSYS
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ EXPORT_SYMS=
|
|||
EXPORT_SYMS+= linux_emul_path
|
||||
EXPORT_SYMS+= linux_get_osname
|
||||
EXPORT_SYMS+= linux_get_osrelease
|
||||
EXPORT_SYMS+= linux_use_real_ifname
|
||||
|
||||
.if !defined(KERNBUILDDIR)
|
||||
.warning Building Linuxulator outside of a kernel does not make sense
|
||||
|
|
|
|||
Loading…
Reference in a new issue