1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
#!/usr/bin/env python3
import dialog
import os
from pyroute2 import IPRoute, IPDB
import subprocess
d = dialog.Dialog()
ipdb = IPDB()
class Bridge():
def __init__(self, name, interfaces=[]):
self.name = name
self.interfaces = interfaces
def create(self):
global ipdb
with ipdb.create(kind='bridge', ifname=self.name) as master:
for slave in self.interfaces:
master.add_port(ipdb.interfaces[slave])
class VLAN():
def __init__(self, name, master, vid):
self.name = name
self.master = master
self.vid = int(vid)
def create(self):
global ipdb
underlying = ipdb.interfaces[self.master]
ipdb.create(
kind='vlan',
ifname=self.name,
link=underlying,
vlan_id=self.vid
).commit()
def create_bridge():
choices = [(str(i), '', False) for i in ipdb.by_name.keys()]
code, interfaces = d.checklist('Select the interfaces to add to the bridge.', choices=choices)
if code == d.ESC or code == d.CANCEL:
return
code, name = d.inputbox('Please name your new bridge.')
if code == d.ESC or code == d.CANCEL:
return
bridge = Bridge(name, interfaces)
bridge.create()
def create_vlan():
# We need to list the interfaces from the sysfs.
choices = [(str(i), '') for i in ipdb.by_name.keys()]
code, master = d.menu('Select the master interface to use.', choices=choices)
if code == d.ESC or code == d.CANCEL:
return
code, vid = d.inputbox('Please give the VLAN ID.')
if code == d.ESC or code == d.CANCEL:
return
default_newname = master + '.' + vid
code, name = d.inputbox('Please name your new VLAN interface.', init=default_newname)
if code == d.ESC or code == d.CANCEL:
return
vlan = VLAN(name, master, vid)
vlan.create()
def main():
d.set_background_title('ip-link add menu')
choices = (
('bridge', 'Create a Bridge'),
('vlan', 'Create a VLAN'),
)
code, tag = d.menu('Select the type of interface you want to create.', choices=choices)
if code == d.ESC or code == d.CANCEL:
return
if tag == 'bridge':
create_bridge()
elif tag == 'vlan':
create_vlan()
if __name__ == '__main__':
main()
|