1
0
mirror of https://github.com/GNS3/gns3-server synced 2024-11-15 12:59:06 +00:00

Data link type is on the capture not on the link

This commit is contained in:
Julien Duponchelle 2016-04-21 13:49:29 +02:00
parent 04a1b2df3b
commit 549a6280c0
No known key found for this signature in database
GPG Key ID: CE8B29639E07F5E8
5 changed files with 24 additions and 13 deletions

View File

@ -94,4 +94,4 @@ class Link:
"adapter_number": side["adapter_number"],
"port_number": side["port_number"]
})
return {"vms": res, "link_id": self._id, "data_link_type": self._data_link_type}
return {"vms": res, "link_id": self._id}

View File

@ -24,8 +24,8 @@ from .link import Link
class UDPLink(Link):
def __init__(self, project, data_link_type="DLT_EN10MB"):
super().__init__(project, data_link_type)
def __init__(self, project):
super().__init__(project)
self._capture_vm = None
@asyncio.coroutine
@ -80,14 +80,14 @@ class UDPLink(Link):
yield from vm2.delete("/adapters/{adapter_number}/ports/{port_number}/nio".format(adapter_number=adapter_number2, port_number=port_number2))
@asyncio.coroutine
def start_capture(self):
def start_capture(self, data_link_type="DLT_EN10MB"):
"""
Start capture on a link
"""
self._capture_vm = self._choose_capture_side()
data = {
"capture_file_name": self.capture_file_name(),
"data_link_type": self._data_link_type
"data_link_type": data_link_type
}
yield from self._capture_vm["vm"].post("/adapters/{adapter_number}/ports/{port_number}/start_capture".format(adapter_number=self._capture_vm["adapter_number"], port_number=self._capture_vm["port_number"]), data=data)

View File

@ -16,7 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from ....web.route import Route
from ....schemas.link import LINK_OBJECT_SCHEMA
from ....schemas.link import LINK_OBJECT_SCHEMA, LINK_CAPTURE_SCHEMA
from ....controller.project import Project
from ....controller import Controller
@ -63,13 +63,14 @@ class LinkHandler:
204: "Capture started",
400: "Invalid request"
},
description="Start capture on a link instance")
input=LINK_CAPTURE_SCHEMA,
description="Start capture on a link instance. By default we consider it as an ethernet link")
def start_capture(request, response):
controller = Controller.instance()
project = controller.getProject(request.match_info["project_id"])
link = project.getLink(request.match_info["link_id"])
yield from link.start_capture()
yield from link.start_capture(request.json.get("data_link_type", "DLT_EN10MB"))
response.set_status(204)
@classmethod

View File

@ -28,10 +28,6 @@ LINK_OBJECT_SCHEMA = {
"maxLength": 36,
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
},
"data_link_type": {
"description": "PCAP data link type (http://www.tcpdump.org/linktypes.html)",
"enum": ["DLT_ATM_RFC1483", "DLT_EN10MB", "DLT_FRELAY", "DLT_C_HDLC"]
},
"vms": {
"description": "List of the VMS",
"type": "array",
@ -62,3 +58,17 @@ LINK_OBJECT_SCHEMA = {
"required": ["vms"],
"additionalProperties": False
}
LINK_CAPTURE_SCHEMA = {
"$schema": "http://json-schema.org/draft-04/schema#",
"description": "Request validation to start a packet capture on a link",
"type": "object",
"properties": {
"data_link_type": {
"description": "PCAP data link type (http://www.tcpdump.org/linktypes.html)",
"enum": ["DLT_ATM_RFC1483", "DLT_EN10MB", "DLT_FRELAY", "DLT_C_HDLC"]
}
},
"additionalProperties": False
}

View File

@ -57,7 +57,6 @@ def test_json(async_run, project, compute):
async_run(link.addVM(vm2, 1, 3))
assert link.__json__() == {
"link_id": link.id,
"data_link_type": "DLT_EN10MB",
"vms": [
{
"vm_id": vm1.id,
@ -72,6 +71,7 @@ def test_json(async_run, project, compute):
]
}
def test_capture_filename(project, compute, async_run):
vm1 = VM(project, compute, name="Hello@")
vm2 = VM(project, compute, name="w0.rld")