mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 16:30:52 +07:00
[TUNTAP]: Allow setting the linktype of the tap device from userspace
Currently tun/tap only supports the EN10MB ARP type. For use with wireless and other networking types it should be possible to set the ARP type via an ioctl. Patch v2: Included check that the tap interface is down before changing the link type out from underneath it Signed-off-by: Mike Kershaw <dragorn@kismetwireless.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
80ac2912f8
commit
ff4cc3ac93
@ -18,6 +18,9 @@
|
||||
/*
|
||||
* Changes:
|
||||
*
|
||||
* Mike Kershaw <dragorn@kismetwireless.net> 2005/08/14
|
||||
* Add TUNSETLINK ioctl to set the link encapsulation
|
||||
*
|
||||
* Mark Smith <markzzzsmith@yahoo.com.au>
|
||||
* Use random_ether_addr() for tap MAC address.
|
||||
*
|
||||
@ -612,6 +615,18 @@ static int tun_chr_ioctl(struct inode *inode, struct file *file,
|
||||
DBG(KERN_INFO "%s: owner set to %d\n", tun->dev->name, tun->owner);
|
||||
break;
|
||||
|
||||
case TUNSETLINK:
|
||||
/* Only allow setting the type when the interface is down */
|
||||
if (tun->dev->flags & IFF_UP) {
|
||||
DBG(KERN_INFO "%s: Linktype set failed because interface is up\n",
|
||||
tun->dev->name);
|
||||
return -EBUSY;
|
||||
} else {
|
||||
tun->dev->type = (int) arg;
|
||||
DBG(KERN_INFO "%s: linktype set to %d\n", tun->dev->name, tun->dev->type);
|
||||
}
|
||||
break;
|
||||
|
||||
#ifdef TUN_DEBUG
|
||||
case TUNSETDEBUG:
|
||||
tun->debug = arg;
|
||||
|
@ -77,6 +77,7 @@ struct tun_struct {
|
||||
#define TUNSETIFF _IOW('T', 202, int)
|
||||
#define TUNSETPERSIST _IOW('T', 203, int)
|
||||
#define TUNSETOWNER _IOW('T', 204, int)
|
||||
#define TUNSETLINK _IOW('T', 205, int)
|
||||
|
||||
/* TUNSETIFF ifr flags */
|
||||
#define IFF_TUN 0x0001
|
||||
|
Loading…
Reference in New Issue
Block a user