summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Gayot <olivier.gayot@sigexec.com>2022-01-05 00:45:35 +0100
committerOlivier Gayot <olivier.gayot@sigexec.com>2022-01-05 00:45:35 +0100
commit30d4bc452eb7798445ce6b5d24749945eb47895f (patch)
treea011ccc0b3d2c721c5d92e6f92716b1e1b72ca11
parent578cb04310806679496bef3d911e26b8b641eff5 (diff)
Add support for TUN/TAP interfacesHEADmaster
Signed-off-by: Olivier Gayot <olivier.gayot@sigexec.com>
-rwxr-xr-xip-link-add-menu.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/ip-link-add-menu.py b/ip-link-add-menu.py
index 84f9172..c52b436 100755
--- a/ip-link-add-menu.py
+++ b/ip-link-add-menu.py
@@ -1,5 +1,9 @@
#!/usr/bin/env python3
+from dataclasses import dataclass
+from enum import Enum
+from typing import Optional
+
import dialog
from pyroute2 import IPRoute, IPDB
@@ -51,6 +55,30 @@ class MACVLAN():
mode=self.mode
).commit()
+
+class TuntapMode(Enum):
+ TAP = "tap"
+ TUN = "tun"
+
+
+@dataclass
+class TunTap:
+ name: str
+ mode: TuntapMode
+ uid: Optional[int] = None
+ gid: Optional[int] = None
+
+ def create(self) -> None:
+ global ipdb
+ ipdb.create(
+ kind="tuntap",
+ ifname=self.name,
+ mode=self.mode.value,
+ uid=self.uid,
+ gid=self.gid,
+ ).commit()
+
+
def create_bridge():
choices = [(str(i), '', False) for i in ipdb.by_name.keys()]
@@ -119,6 +147,25 @@ def create_macvlan():
macvlan.create()
+
+def create_tuntap(mode: TuntapMode) -> None:
+ code, name = d.inputbox(f"Please name your {mode.value.upper()} interface.")
+ if code in (d.ESC, d.CANCEL):
+ return
+
+ code, input_ = d.inputbox(f"UID of the interface (leave empty for default)")
+ if code in (d.ESC, d.CANCEL):
+ return
+ uid = int(input_) if input_ else None
+ code, input_ = d.inputbox(f"GID of the interface (leave empty for default)")
+ if code in (d.ESC, d.CANCEL):
+ return
+ gid = int(input_) if input_ else None
+
+ interface = TunTap(name=name, uid=uid, gid=gid, mode=mode)
+ interface.create()
+
+
def main():
d.set_background_title('ip-link add menu')
@@ -126,6 +173,8 @@ def main():
('bridge', 'Create a Bridge'),
('vlan', 'Create a VLAN'),
('macvlan', 'Create a MACVLAN'),
+ ('tun', 'Create a TUN interface'),
+ ('tap', 'Create a TAP interface'),
)
code, tag = d.menu('Select the type of interface you want to create.', choices=choices)
@@ -139,6 +188,10 @@ def main():
create_vlan()
elif tag == 'macvlan':
create_macvlan()
+ elif tag == 'tun':
+ create_tuntap(TuntapMode.TUN)
+ elif tag == 'tap':
+ create_tuntap(TuntapMode.TAP)
if __name__ == '__main__':
main()