diff --git a/server/__pycache__/gns3.cpython-36.pyc b/server/__pycache__/gns3.cpython-36.pyc index 0d46a1e4e32c07ca592b45698856de2191a0415a..53742264b3cf9ba6d500f54ddb1cc925e0791cdd 100644 Binary files a/server/__pycache__/gns3.cpython-36.pyc and b/server/__pycache__/gns3.cpython-36.pyc differ diff --git a/server/__pycache__/gns3_helper.cpython-36.pyc b/server/__pycache__/gns3_helper.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..745646374da305b41ff475d36728bc237db394c5 Binary files /dev/null and b/server/__pycache__/gns3_helper.cpython-36.pyc differ diff --git a/server/client.py b/server/client.py index 54a68463db8d52894c068a45c12cd7606d42aba3..3a3f2d5506a42314d33805f9fc0ce6c1584729af 100644 --- a/server/client.py +++ b/server/client.py @@ -2,14 +2,16 @@ import socket -TCP_IP = '127.0.0.1' -TCP_PORT = 5005 +# TCP_IP = '127.0.0.1' +# TCP_PORT = 5006 BUFFER_SIZE = 1024 +UDP_IP = "127.0.0.1" +UDP_PORT = 5005 +# MESSAGE = "Hello, World!" -s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -s.connect((TCP_IP, TCP_PORT)) +sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) +# sock.connect((TCP_IP, TCP_PORT)) -#print index instruction f = open('index_instruction.txt', 'r') file_contents = '' file_contents += f.read() @@ -22,15 +24,15 @@ while 1: index = input() while not index: index = input(file_contents) - s.send(index.encode('utf-8')) - data = s.recv(BUFFER_SIZE).decode('utf-8') + sock.sendto(index.encode('utf-8'), (UDP_IP, UDP_PORT)) + msg, addr = sock.recvfrom(BUFFER_SIZE) + data = msg.decode() text += data while text.find('END') == -1: - data = s.recv(BUFFER_SIZE).decode('utf-8') + msg, addr = sock.recvfrom(BUFFER_SIZE) + data = msg.decode() text += data print(text[:-3]) if text[:-3] == 'close': break -s.close() - -# print("received text:", text) \ No newline at end of file +# sock.close() diff --git a/server/gns3.py b/server/gns3.py index 5b4142df46a6ad8d3c1904109c6f0265c528d10a..a23a96f4c0e123c57dd5a3f9eecc85aab60b3a7d 100644 --- a/server/gns3.py +++ b/server/gns3.py @@ -90,7 +90,7 @@ GNS3_AUTH = HTTPBasicAuth(GNS3_USERNAME, GNS3_PASSWORD) ##########Appliance ################################################################################ -def gns3_get_appliances_list(): +def get_appliances_list(): r = requests.get('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['appliances']), auth=GNS3_AUTH) return r.json() @@ -100,22 +100,22 @@ def gns3_get_appliances_list(): ##########Drawing ################################################################################ -def gns3_get_drawings_list(project_id): +def get_drawings_list(project_id): drawings_url = GNS3_URLS['drawings'].format(project_id=project_id) r = requests.get('{0}/{1}'.format(GNS3_ADDR, drawings_url), auth=GNS3_AUTH) return r.json() -def gns3_get_drawing(project_id, drawing_id): +def get_drawing(project_id, drawing_id): drawing_url = GNS3_URLS['drawing_instance'].format(project_id=project_id, drawing_id=drawing_id) r = requests.get('{0}/{1}'.format(GNS3_ADDR, drawing_url), auth=GNS3_AUTH) return r.json() -def gns3_update_drawing(project_id, drawing_id): +def update_drawing(project_id, drawing_id): drawing_url = GNS3_URLS['drawing_instance'].format(project_id=project_id, drawing_id=drawing_id) r = requests.put('{0}/{1}'.format(GNS3_ADDR, drawing_url), auth=GNS3_AUTH) return r.json() -def gns3_delete_drawing(project_id, drawing_id): +def delete_drawing(project_id, drawing_id): drawing_url = GNS3_URLS['drawing_instance'].format(project_id=project_id, drawing_id=drawing_id) r = requests.delete('{0}/{1}'.format(GNS3_ADDR, drawing_url), auth=GNS3_AUTH) #TODO what do we return? @@ -127,25 +127,25 @@ def gns3_delete_drawing(project_id, drawing_id): #########Server ################################################################################ -def gns3_dump_debug_info(): +def dump_debug_info(): r = requests.post('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['debug']), auth=GNS3_AUTH) #TODO what do we return? return r -def gns3_get_settings(): +def get_settings(): r = requests.get('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['settings']), auth=GNS3_AUTH) return r.json() -def gns3_shutdown_server(): +def shutdown_server(): r = requests.get('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['shutdown']), auth=GNS3_AUTH) #TODO what do we return? return r -def gns3_get_version(): +def get_version(): r = requests.get('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['version']), auth=GNS3_AUTH) return r.json() -def gns3_compare_version(version_to_compare): +def compare_version(version_to_compare): r = requests.post('{0}/{1}'.format(GNS3_ADDR, GNS3_URLS['version']), auth=GNS3_AUTH, json={'version': str(version_to_compare)}) return r @@ -154,20 +154,64 @@ def gns3_compare_version(version_to_compare): ################################################################################ ##########Implementation ################################################################################ -def gns3_nodes_information(project_id): +def nodes_information(project_id): url = GNS3_URLS['nodes'].format(project_id=project_id) r = requests.get('{0}/{1}'.format(GNS3_ADDR, url), auth=GNS3_AUTH) return r.json() -def gns3_links_information(project_id): +def links_information(project_id): url = GNS3_URLS['links'].format(project_id=project_id) r = requests.get('{0}/{1}'.format(GNS3_ADDR, url), auth=GNS3_AUTH) return r.json() +def node_create(project_id, name): + para = '{"compute_id": "local", "name": "'+str(name)+'", "node_type": "vpcs"}' + url = GNS3_URLS['nodes'].format(project_id=project_id) + r = requests.post('{0}/{1}'.format(GNS3_ADDR, url), auth=GNS3_AUTH, data=para) + return r.json() + +def node_delete(project_id, node_id): + url = GNS3_URLS['nodes'].format(project_id=project_id) + r = requests.delete('{0}/{1}/{2}'.format(GNS3_ADDR, url, node_id), auth=GNS3_AUTH) + return r + +def link_create(project_id, node_id_1, node_id_2, adapter_1, adapter_2, port_1, port_2): + para = '{"nodes": [{"adapter_number": '+adapter_1+', "label": {"text": "Text", "x": 0, "y": 0}, "node_id": "'+node_id_1+'", "port_number": '+port_1+'}, {"adapter_number": '+adapter_2+', "node_id": "'+node_id_2+'", "port_number": '+port_2+'}]}' + r = requests.post('{0}/{1}'.format(GNS3_ADDR, url), auth=GNS3_AUTH, data=para) + return r + +def link_delete(): + return + +def node_start_all(project_id): + url = GNS3_URLS['start_all_nodes'].format(project_id=project_id) + r = requests.post('{0}/{1}'.format(GNS3_ADDR, url), auth=GNS3_AUTH) + return r + +def node_stop_all(project_id): + url = GNS3_URLS['stop_all_nodes'].format(project_id=project_id) + r = requests.post('{0}/{1}'.format(GNS3_ADDR, url), auth=GNS3_AUTH) + return r + +def node_suspend_all(project_id): + url = GNS3_URLS['suspend__all_nodes'].format(project_id=project_id) + r = requests.post('{0}/{1}'.format(GNS3_ADDR, url), auth=GNS3_AUTH) + return r + +def node_start(): + return + +def node_stop(): + return + +def node_suspend(): + return + + #Testing -# print(gns3_get_version()) -# gns3_get_settings() -# print(gns3_shutdown_server()) -# print(gns3_compare_version('2.1.12dev1')) -# print(gns3_get_drawings_list('a')) \ No newline at end of file +# print(get_version()) +# get_settings() +# print(shutdown_server()) +# print(compare_version('2.1.12dev1')) +# print(get_drawings_list('a')) \ No newline at end of file diff --git a/server/gns3_helper.py b/server/gns3_helper.py new file mode 100644 index 0000000000000000000000000000000000000000..2ef94a20c607121f8a2da16e4fbf77187384749f --- /dev/null +++ b/server/gns3_helper.py @@ -0,0 +1,29 @@ +import gns3 + +project_id ='83b40958-ede6-4dec-9cff-e11bdf38bbcc' + +def update_nodes_info(): + nodes_info = [] + info = gns3.nodes_information(project_id) + data = '' + for node in info: + node_info = {} + node_info['name'] = node.get('name') + node_info['node_id'] = node.get('node_id') + if node.get('properties').get('platform'): + node_info['platform'] = node.get('properties').get('platform') + nodes_info.append(node_info) + print('nodes updated') + return nodes_info + +def update_links_info(): + links_info = [] + info = gns3.links_information(project_id) + for link in info: + link_info = {} + link_info['link_id'] = link.get('link_id') + link_info['node_id_1'] = link.get('nodes')[0].get('node_id') + link_info['node_id_2'] = link.get('nodes')[1].get('node_id') + links_info.append(link_info) + print('link updated') + return links_info \ No newline at end of file diff --git a/server/index_instruction.txt b/server/index_instruction.txt index 8f2fc130f5d6c50a147059642e736fcb07836f69..f02ed0b82ceabe32a15e7cb1778c7ccea1cf6760 100644 --- a/server/index_instruction.txt +++ b/server/index_instruction.txt @@ -1,10 +1,18 @@ Provided functionality in GNS3: 0: version information -1: drawing list -2: setting information -3: nodes information -4: links information +1: nodes information +2: links information +3: create node +4: delete node +5: create link +6: delete link +7: start all nodes +8: stop all nodes +9: suspend all nodes +10: start one node +11: stop one node +12: suspend one node -1: close connection Enter index: \ No newline at end of file diff --git a/server/server.py b/server/server.py index ea4d0b1851d9c230e37c6ac67bd8c40f5afcff74..21081ac37cc14d2e5b6e31d7cfcaaae1736bad1f 100644 --- a/server/server.py +++ b/server/server.py @@ -2,61 +2,76 @@ import socket import gns3 +import gns3_helper as gn +import time -TCP_IP = '127.0.0.1' -TCP_PORT = 5005 +# TCP_IP = '127.0.0.1' +# TCP_PORT = 5006 BUFFER_SIZE = 1024 # Normally 1024, but we want fast response project_id ='83b40958-ede6-4dec-9cff-e11bdf38bbcc' +UDP_IP = "127.0.0.1" +UDP_PORT = 5005 -s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -s.bind((TCP_IP, TCP_PORT)) -s.listen(1) +sock = socket.socket(socket.AF_INET, # Internet + socket.SOCK_DGRAM) # UDP +sock.bind((UDP_IP, UDP_PORT)) + +# s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +# s.bind((TCP_IP, TCP_PORT)) +# s.listen(1) + +# conn, addr = s.accept() +# print('Connection address:', addr) + +############update information######### +nodes_info = gn.update_nodes_info() +links_info = gn.update_links_info() -conn, addr = s.accept() -print('Connection address:', addr) while 1: - index = conn.recv(BUFFER_SIZE).decode('utf-8') + msg, addr = sock.recvfrom(BUFFER_SIZE) + index = msg.decode('utf-8') if index == '0': - data = str(gns3.gns3_get_version())+str('END') + data = str(gns3.get_version())+str('END') elif index == '1': - data = str(gns3.gns3_get_drawings_list(project_id))+str('END') + nodes_info = gn.update_nodes_info() + data = str(nodes_info)+str('END') elif index == '2': - data = str(gns3.gns3_get_settings())+str('END') + links_info = gn.update_links_info() + data = str(links_info)+str('END') elif index == '3': - info = gns3.gns3_nodes_information(project_id) - data = '' - for nodes in info: - data += str('name: ') + str(nodes.get('name')) + '\n' - data += str('node_id: ') + str(nodes.get('node_id')) + '\n' - if nodes.get('properties').get('platform'): - data += str('platform: ') + str(nodes.get('properties').get('platform')) + '\n' - data += '\n' - data += str('END') + nodes_info = gn.update_nodes_info() + name = len(nodes_info)+1 + # gns3.node_create(project_id, name) + data = str(gns3.node_create(project_id, name))+str('END') + # data = str('OK 4') elif index == '4': - info = gns3.gns3_links_information(project_id) - data = '' - for links in info: - data += str('link_id: ') + str(links.get('link_id')) + '\n' - nodes = links.get('nodes') - for node in nodes: - data += str('node_id: ') + str(node.get('node_id')) + '\n' - data += '\n' - data += str('END') + nodes_info = gn.update_nodes_info() + node_id = nodes_info[-1].get('node_id') + data = str(gns3.node_delete(project_id, node_id))+str('END') + + elif index == '7': + data = str(gns3.node_start_all(project_id))+str('END') + + elif index == '8': + data = str(gns3.node_stop_all(project_id))+str('END') + + elif index == '9': + data = str(gns3.node_suspend_all(project_id))+str('END') elif index == '-1': data = str('close')+str('END') - conn.send(data.encode('utf-8')) # echo - break + + elif not index: break + else: data = str('incorrect msg')+str('END') - conn.send(data.encode('utf-8')) # echo - -conn.close() + sock.sendto(data.encode('utf-8'), addr) # echo +# conn.close()