Skip to content
Snippets Groups Projects
Commit a3cbf01d authored by Yang Yuechun's avatar Yang Yuechun
Browse files

server

parent f2eeaa01
No related branches found
No related tags found
No related merge requests found
No preview for this file type
File added
......@@ -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()
......@@ -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
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
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
......@@ -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()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment