Skip to content

Commit

Permalink
Fixed linking of network interfaces. Only thing remaining is the swit…
Browse files Browse the repository at this point in the history
…ch->router trunk connection. Everything else is using generic functions to achieve the result, except that part.
  • Loading branch information
Torxed committed Jan 21, 2020
1 parent 4cd8384 commit 59d98ee
Show file tree
Hide file tree
Showing 8 changed files with 58 additions and 31 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@
**/*.snap*
**/*.qcow2*
**/*.raw*
**/*.bak*
**/*db.json
**/*__pycache__
19 changes: 14 additions & 5 deletions api_modules/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ def get_overview():
'ip' : vmanager.nics[nic_name].ip,
'MAC' : vmanager.nics[nic_name].mac,
'state' : vmanager.nics[nic_name].state,
'gateway' : vmanager.nics[nic_name].ports['sink_name'],
'routes' : None,
'connected_to' : None
'gateway' : vmanager.nics[nic_name].gateway,
'routes' : vmanager.nics[nic_name].routes,
'connected_to' : vmanager.nics[nic_name].connected_to
}

for nic_name in vmanager.interfaces:
Expand All @@ -26,8 +26,6 @@ def get_overview():

class parser():
def process(self, path, client, data, headers, fileno, addr, *args, **kwargs):
print('### nic ###\n', data, client)

if 'state' in data and 'target' in data:
if data['target'] in vmanager.nics:
if data['state']:
Expand All @@ -52,4 +50,15 @@ def process(self, path, client, data, headers, fileno, addr, *args, **kwargs):
else:
print(f'[N] Could not locate {data["target"]}')

return get_overview()

if 'connect_to' in data and 'target' in data:
if data['target'] in vmanager.nics:
vmanager.nics[data['target']].connect(data['connect_to'])
elif data['target'] in vmanager.interfaces:
vmanager.interfaces[data['target']].connect(data['connect_to'])
elif data['target'] in vmanager.routers:
vmanager.routers[data['target']].connect(data['connect_to'])
elif data['target'] in vmanager.switches:
vmanager.switches[data['target']].connect(data['connect_to'])
return get_overview()
2 changes: 0 additions & 2 deletions api_modules/machines.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ def get_machine_info(target=None):

class parser():
def process(self, path, client, data, headers, fileno, addr, *args, **kwargs):
print('### Machines ###\n', data, client)

if not 'machines' in data:
return get_overview()

Expand Down
8 changes: 3 additions & 5 deletions api_modules/router.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ def get_overview():
'ip' : vmanager.nics[nic_name].ip,
'MAC' : vmanager.nics[nic_name].mac,
'state' : vmanager.nics[nic_name].state,
'gateway' : vmanager.nics[nic_name].ports['sink_name'],
'routes' : None,
'connected_to' : None
'gateway' : vmanager.nics[nic_name].gateway,
'routes' : vmanager.nics[nic_name].routes,
'connected_to' : vmanager.nics[nic_name].connected_to
}

for nic_name in vmanager.interfaces:
Expand All @@ -26,8 +26,6 @@ def get_overview():

class parser():
def process(self, path, client, data, headers, fileno, addr, *args, **kwargs):
print('### router ###\n', data, client)

if 'new' in data:
vmanager.Router(trunk=data['new']['trunk'], ifname=data['new']['name'])

Expand Down
8 changes: 3 additions & 5 deletions api_modules/switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ def get_overview():
'ip' : vmanager.nics[nic_name].ip,
'MAC' : vmanager.nics[nic_name].mac,
'state' : vmanager.nics[nic_name].state,
'gateway' : vmanager.nics[nic_name].ports['sink_name'],
'routes' : None,
'connected_to' : None
'gateway' : vmanager.nics[nic_name].gateway,
'routes' : vmanager.nics[nic_name].routes,
'connected_to' : vmanager.nics[nic_name].connected_to
}

for nic_name in vmanager.interfaces:
Expand All @@ -26,8 +26,6 @@ def get_overview():

class parser():
def process(self, path, client, data, headers, fileno, addr, *args, **kwargs):
print('### switch ###\n', data, client)

if 'new' in data:
vmanager.Switch(data['new']['name'])

Expand Down
10 changes: 4 additions & 6 deletions api_modules/virtualnic.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ def get_overview():
'ip' : vmanager.nics[nic_name].ip,
'MAC' : vmanager.nics[nic_name].mac,
'state' : vmanager.nics[nic_name].state,
'gateway' : vmanager.nics[nic_name].ports['sink_name'],
'routes' : None,
'connected_to' : None
'gateway' : vmanager.nics[nic_name].gateway,
'routes' : vmanager.nics[nic_name].routes,
'connected_to' : vmanager.nics[nic_name].connected_to
}

for nic_name in vmanager.interfaces:
Expand All @@ -26,9 +26,7 @@ def get_overview():

class parser():
def process(self, path, client, data, headers, fileno, addr, *args, **kwargs):
print('### nic ###\n', data, client)

if 'new' in data:
vmanager.VirtualNic(data['new']['name'])
vmanager.VirtualNic(ifname=data['new']['name'])

return get_overview()
9 changes: 5 additions & 4 deletions api_modules/virtualnics.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ def get_overview():
'ip' : vmanager.nics[nic_name].ip,
'MAC' : vmanager.nics[nic_name].mac,
'state' : vmanager.nics[nic_name].state,
'gateway' : vmanager.nics[nic_name].ports['sink_name'],
'routes' : None,
'connected_to' : None
'gateway' : vmanager.nics[nic_name].gateway,
'routes' : vmanager.nics[nic_name].routes,
'connected_to' : vmanager.nics[nic_name].connected_to
}

for nic_name in vmanager.interfaces:
Expand All @@ -29,7 +29,8 @@ def get_machine_info(target=None):

class parser():
def process(self, path, client, data, headers, fileno, addr, *args, **kwargs):
print('### NICS ###\n', data, client)
if 'virtualnics' in data and ('refresh' in data['virtualnics'] or 'update' in data['virtualnics']):
vmanager.update_interface_cache()

if not 'target' in data:
return get_overview()
31 changes: 27 additions & 4 deletions web_root/vmanager-gui.js
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ function connected_to(row, column, data) {
let dropdown = document.createElement('select');
dropdown.classList = 'dropdown';
dropdown.id = row+'_connect_to';
dropdown.setAttribute('nic', row);

let none = document.createElement('option');
none.classList = 'bold';
Expand All @@ -148,9 +149,20 @@ function connected_to(row, column, data) {
option.value = iface_name;
option.innerHTML = iface_name;
dropdown.appendChild(option);
if(data.indexOf(iface_name) >= 0)
dropdown.value = iface_name;
})
}
})

dropdown.addEventListener('change', (event) => {
socket.send({
'_module' : 'interface',
'target' : dropdown.getAttribute('nic'),
'connect_to' : dropdown.options[dropdown.selectedIndex].value
})
})

return dropdown;
}

Expand Down Expand Up @@ -365,18 +377,20 @@ class networkinterfaces {
build() {
this.container.innerHTML = '';
socket.clear_subscribers();

this.main_area = create_html_obj('div', {'classList' : 'overview'}, this.container);
this.submenu = create_html_obj('div', {'classList' : 'submenu'}, this.main_area);
let add_interface = create_html_obj('div', {'classList' : 'button'}, this.submenu);
let add_switch = create_html_obj('div', {'classList' : 'button'}, this.submenu);
let add_router = create_html_obj('div', {'classList' : 'button'}, this.submenu);
let refresh_interfaces = create_html_obj('div', {'classList' : 'button'}, this.submenu);
let plus_icon = create_html_obj('i', {'classList' : 'fas fa-plus-square'}, add_interface);
let refresh_icon = create_html_obj('i', {'classList' : 'fas fa-sync-alt'}, refresh_interfaces);
plus_icon = create_html_obj('i', {'classList' : 'fas fa-plus-square'}, add_switch);
plus_icon = create_html_obj('i', {'classList' : 'fas fa-plus-square'}, add_router);
add_interface.innerHTML = add_interface.innerHTML + ' Add Virtual Interface';
add_switch.innerHTML = add_switch.innerHTML + ' Add Virtual Switch'
add_router.innerHTML = add_router.innerHTML + ' Add Virtual Router'
add_switch.innerHTML = add_switch.innerHTML + ' Add Virtual Switch';
add_router.innerHTML = add_router.innerHTML + ' Add Virtual Router';
refresh_interfaces.innerHTML = refresh_interfaces.innerHTML + ' Refresh interfaces';

add_interface.addEventListener('click', () => {
let popup_body = document.createElement('div');
Expand Down Expand Up @@ -451,6 +465,15 @@ class networkinterfaces {
});
})

refresh_interfaces.addEventListener('click', () => {
socket.send({
"_module": "virtualnics",
"virtualnics": {
"update" : true
}
})
})

socket.subscribe('vnics', (json_payload) => {
console.log(json_payload)

Expand Down Expand Up @@ -530,7 +553,7 @@ class networkinterfaces {

let routers_header = h3('Virtual Routers', {}, this.vnics);
let routers_list = table(
['NIC Name', 'IP(s)', 'MAC', 'State', 'Gateway', 'Routes', 'Input Link'],
['NIC Name', 'IP(s)', 'MAC', 'State', 'Gateway', 'Routes', 'Trunk Connection'],
json_payload['routers'],
{'classList' : 'table routers'}, this.vnics, (row) => {
view_router(row);
Expand Down

0 comments on commit 59d98ee

Please sign in to comment.