130 lines
3.6 KiB
Python
130 lines
3.6 KiB
Python
import os
|
|
from functools import wraps
|
|
from threading import Lock
|
|
|
|
from werkzeug.exceptions import abort
|
|
|
|
save_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "uploads")
|
|
CORE_LOCK = Lock()
|
|
|
|
|
|
def synchronized(function):
|
|
global CORE_LOCK
|
|
|
|
@wraps(function)
|
|
def wrapper(*args, **kwargs):
|
|
with CORE_LOCK:
|
|
return function(*args, **kwargs)
|
|
|
|
return wrapper
|
|
|
|
|
|
def get_config_groups(model, config):
|
|
config_options = []
|
|
for configuration in model.configurations():
|
|
value = config[configuration.id]
|
|
config_options.append({
|
|
"label": configuration.label,
|
|
"name": configuration.id,
|
|
"value": value,
|
|
"type": configuration.type.value,
|
|
"select": configuration.options
|
|
})
|
|
|
|
response = []
|
|
for config_group in model.config_groups():
|
|
start = config_group.start - 1
|
|
stop = config_group.stop
|
|
response.append({
|
|
"name": config_group.name,
|
|
"options": config_options[start: stop]
|
|
})
|
|
|
|
return response
|
|
|
|
|
|
def convert_value(value):
|
|
if value is None:
|
|
return value
|
|
else:
|
|
return str(value)
|
|
|
|
|
|
def convert_link(session, link_data):
|
|
interface_one = None
|
|
interface_two = None
|
|
|
|
if link_data.interface1_id is not None:
|
|
node = session.get_object(link_data.node1_id)
|
|
interface = node.netif(link_data.interface1_id)
|
|
interface_one = {
|
|
"id": link_data.interface1_id,
|
|
"name": interface.name,
|
|
"mac": convert_value(link_data.interface1_mac),
|
|
"ip4": convert_value(link_data.interface1_ip4),
|
|
"ip4mask": link_data.interface1_ip4_mask,
|
|
"ip6": convert_value(link_data.interface1_ip6),
|
|
"ip6mask": link_data.interface1_ip6_mask,
|
|
}
|
|
|
|
if link_data.interface2_id is not None:
|
|
node = session.get_object(link_data.node2_id)
|
|
interface = node.netif(link_data.interface2_id)
|
|
interface_two = {
|
|
"id": link_data.interface2_id,
|
|
"name": interface.name,
|
|
"mac": convert_value(link_data.interface2_mac),
|
|
"ip4": convert_value(link_data.interface2_ip4),
|
|
"ip4mask": link_data.interface2_ip4_mask,
|
|
"ip6": convert_value(link_data.interface2_ip6),
|
|
"ip6mask": link_data.interface2_ip6_mask,
|
|
}
|
|
|
|
return {
|
|
"node_one": link_data.node1_id,
|
|
"node_two": link_data.node2_id,
|
|
"type": link_data.link_type,
|
|
"interface_one": interface_one,
|
|
"interface_two": interface_two,
|
|
"options": {
|
|
"opaque": link_data.opaque,
|
|
"jitter": link_data.jitter,
|
|
"key": link_data.key,
|
|
"mburst": link_data.mburst,
|
|
"mer": link_data.mer,
|
|
"per": link_data.per,
|
|
"bandwidth": link_data.bandwidth,
|
|
"burst": link_data.burst,
|
|
"delay": link_data.delay,
|
|
"dup": link_data.dup,
|
|
"unidirectional": link_data.unidirectional
|
|
}
|
|
}
|
|
|
|
|
|
def link_data_str(link, key):
|
|
value = link.get(key)
|
|
if value is not None:
|
|
link[key] = str(value)
|
|
|
|
|
|
def get_session(coreemu, session_id):
|
|
session = coreemu.sessions.get(session_id)
|
|
if not session:
|
|
abort(404, "session does not exist")
|
|
return session
|
|
|
|
|
|
def get_node(session, node_id):
|
|
if node_id.isdigit():
|
|
node_id = int(node_id)
|
|
node = session.objects.get(node_id)
|
|
if not node:
|
|
abort(404, "node does not exist")
|
|
return node
|
|
|
|
|
|
def get_node_id(node_id):
|
|
if node_id.isdigit():
|
|
node_id = int(node_id)
|
|
return node_id
|