diff options
author | Dan Klein <danklein10@gmail.com> | 2016-01-08 13:54:36 +0200 |
---|---|---|
committer | Dan Klein <danklein10@gmail.com> | 2016-01-08 13:54:36 +0200 |
commit | 8e037c2bd51844dc7c42ce7b2339806d9dcb964b (patch) | |
tree | cd45e5214e3db13f214a0e68b3fd37f366438b80 /scripts/automation/trex_control_plane/common/trex_streams.py | |
parent | 8db09096b9dcf030b7dc744fbd7ee463d8e6fd1b (diff) | |
parent | 9fc980b8aa43cf53446eeeb5184f10a86476da28 (diff) |
Merge branch 'dan_stateless'
Added the support for "streams" command
Missing:
1. "--full" output
2. sync with server after crash
3. merging output for identical port streams
Diffstat (limited to 'scripts/automation/trex_control_plane/common/trex_streams.py')
-rwxr-xr-x | scripts/automation/trex_control_plane/common/trex_streams.py | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/scripts/automation/trex_control_plane/common/trex_streams.py b/scripts/automation/trex_control_plane/common/trex_streams.py index 007e2464..800b6d49 100755 --- a/scripts/automation/trex_control_plane/common/trex_streams.py +++ b/scripts/automation/trex_control_plane/common/trex_streams.py @@ -10,7 +10,7 @@ import copy import os StreamPack = namedtuple('StreamPack', ['stream_id', 'stream']) -LoadedStreamList = namedtuple('LoadedStreamList', ['loaded', 'compiled']) +LoadedStreamList = namedtuple('LoadedStreamList', ['name', 'loaded', 'compiled']) class CStreamList(object): @@ -176,9 +176,11 @@ class CStream(object): def __init__(self): self.is_loaded = False self._is_compiled = False + self._pkt_bld_obj = CTRexPktBuilder() for field in CStream.FIELDS: setattr(self, field, None) + def load_data(self, **kwargs): try: for k in CStream.FIELDS: @@ -206,8 +208,13 @@ class CStream(object): binary = kwargs[k]["binary"] if isinstance(binary, list): setattr(self, k, kwargs[k]) + # TODO: load to _pkt_bld_obj also when passed as byte array! elif isinstance(binary, str) and binary.endswith(".pcap"): - self.load_packet_from_pcap(binary, kwargs[k]["meta"]) + # self.load_packet_from_pcap(binary, kwargs[k]["meta"]) + self._pkt_bld_obj.load_packet_from_pcap(binary) + self._pkt_bld_obj.metadata = kwargs[k]["meta"] + self.packet = self._pkt_bld_obj.dump_pkt() + else: raise ValueError("Packet binary attribute has been loaded with unsupported value." "Supported values are reference to pcap file with SINGLE packet, " @@ -254,6 +261,10 @@ class CStream(object): else: raise RuntimeError("CStream object isn't loaded with data. Use 'load_data' method.") + def get_stream_layers(self, depth_limit=Ellipsis): + stream_layers = self._pkt_bld_obj.get_packet_layers(depth_limit) + return "/".join(stream_layers) + # describes a stream DB @@ -271,20 +282,23 @@ class CStreamsDB(object): stream_list = CStreamList() loaded_obj = stream_list.load_yaml(filename) - compiled_streams = stream_list.compile_streams() - rc = self.load_streams(stream_pack_name, - LoadedStreamList(loaded_obj, - [StreamPack(v.stream_id, v.stream.dump()) - for k, v in compiled_streams.items()])) + try: + compiled_streams = stream_list.compile_streams() + rc = self.load_streams(LoadedStreamList(stream_pack_name, + loaded_obj, + [StreamPack(v.stream_id, v.stream.dump()) + for k, v in compiled_streams.items()])) + except Exception as e: + return None return self.get_stream_pack(stream_pack_name) - def load_streams(self, name, LoadedStreamList_obj): - if name in self.stream_packs: + def load_streams(self, LoadedStreamList_obj): + if LoadedStreamList_obj.name in self.stream_packs: return False else: - self.stream_packs[name] = LoadedStreamList_obj + self.stream_packs[LoadedStreamList_obj.name] = LoadedStreamList_obj return True def remove_stream_packs(self, *names): |