From ccba4ec25f5f3370ee8cef678ab6cf4f5dd11d0f Mon Sep 17 00:00:00 2001 From: Constantin Cretu Date: Tue, 5 Dec 2023 20:33:38 -0800 Subject: [PATCH] preparing for 10.0 release --- .gitignore | 1 + .../Modules/bps_restpy/restPyWrapper.py | 9299 +++++++++-------- .../Modules/bps_restpy/restPyWrapper3.py | 9299 +++++++++-------- .../rest_samples/s07_TestModel_Run.py | 18 +- 4 files changed, 9410 insertions(+), 9207 deletions(-) diff --git a/.gitignore b/.gitignore index d3e7eed..1c022d6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.pyc .vscode +.venv launch.json settings.json \ No newline at end of file diff --git a/RestApi/Python/RestApi_v2/Modules/bps_restpy/restPyWrapper.py b/RestApi/Python/RestApi_v2/Modules/bps_restpy/restPyWrapper.py index 97ffedd..e4f3c4f 100644 --- a/RestApi/Python/RestApi_v2/Modules/bps_restpy/restPyWrapper.py +++ b/RestApi/Python/RestApi_v2/Modules/bps_restpy/restPyWrapper.py @@ -15,7 +15,7 @@ class TlsAdapter(HTTPAdapter): def init_poolmanager(self, connections, maxsize, block): self.poolmanager = PoolManager(num_pools=connections, maxsize=maxsize, block=block) -### this BPS REST API wrapper is generated for version: 9.38.1.27 +### this BPS REST API wrapper is generated for version: 0.0.14+20231204.064306.06705625 class BPS(object): def __init__(self, host, user, password, checkVersion=True): @@ -25,23 +25,24 @@ def __init__(self, host, user, password, checkVersion=True): self.sessionId = None self.session = requests.Session() self.session.mount('https://', TlsAdapter()) - self.clientVersion = '9.38' + self.clientVersion = '0.0' self.serverVersions = None self.checkVersion = checkVersion - self.strikeList = DataModelProxy(wrapper=self, name='strikeList') - self.administration = DataModelProxy(wrapper=self, name='administration') - self.statistics = DataModelProxy(wrapper=self, name='statistics') - self.capture = DataModelProxy(wrapper=self, name='capture') - self.evasionProfile = DataModelProxy(wrapper=self, name='evasionProfile') - self.loadProfile = DataModelProxy(wrapper=self, name='loadProfile') + self.printRequests = False self.topology = DataModelProxy(wrapper=self, name='topology') + self.statistics = DataModelProxy(wrapper=self, name='statistics') + self.reports = DataModelProxy(wrapper=self, name='reports') + self.administration = DataModelProxy(wrapper=self, name='administration') self.testmodel = DataModelProxy(wrapper=self, name='testmodel') - self.results = DataModelProxy(wrapper=self, name='results') - self.superflow = DataModelProxy(wrapper=self, name='superflow') self.network = DataModelProxy(wrapper=self, name='network') + self.superflow = DataModelProxy(wrapper=self, name='superflow') + self.strikeList = DataModelProxy(wrapper=self, name='strikeList') self.strikes = DataModelProxy(wrapper=self, name='strikes') - self.reports = DataModelProxy(wrapper=self, name='reports') + self.loadProfile = DataModelProxy(wrapper=self, name='loadProfile') + self.evasionProfile = DataModelProxy(wrapper=self, name='evasionProfile') + self.results = DataModelProxy(wrapper=self, name='results') self.appProfile = DataModelProxy(wrapper=self, name='appProfile') + self.capture = DataModelProxy(wrapper=self, name='capture') self.remote = DataModelProxy(wrapper=self, name='remote') ### connect to the system @@ -55,6 +56,22 @@ def __connect(self): else: raise Exception('Failed connecting to %s: (%s, %s)' % (self.host, r.status_code, r.content)) + ### Get from data model + def __delete(self, path): + requestUrl = 'https://' + self.host + '/bps/api/v2/core/'+ path + headers = {'content-type': 'application/json'} + if self.printRequests: + import re + print("DELETE, %s, h=%s" %(re.sub(".*/bps/api/v2/core/", "", requestUrl), json.dumps(headers))) + r = self.session.delete(url=requestUrl, headers=headers, verify=False) + if(r.status_code == 400): + methodCall = '%s'%path.replace('/', '.').replace('.operations', '') + content_message = r.content + ' Execute: help(%s) for more information about the method.'%methodCall + raise Exception({'status_code': r.status_code, 'content': content_message}) + if(r.status_code in [200, 204]): + return self.__json_load(r) + raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) + ### disconnect from the system def __disconnect(self): r = self.session.delete(url='https://' + self.host + '/bps/api/v1/auth/session', verify=False) @@ -67,78 +84,52 @@ def __disconnect(self): else: raise Exception('Failed disconnecting from %s: (%s, %s)' % (self.host, r.status_code, r.content)) - def printVersions(self): - apiServerVersion = 'N/A' - if self.serverVersions != None and 'apiServer' in self.serverVersions: - apiServerVersion = self.serverVersions['apiServer'] - print('Client version: %s \nServer version: %s' % (self.clientVersion, apiServerVersion)) - - def __json_load(self, r): - try: - return r.json() - except: - return r.content.decode() if r.content is not None else None - - ### login into the bps system - def login(self): - self.__connect() - r = self.session.post(url='https://' + self.host + '/bps/api/v2/core/auth/login', data=json.dumps({'username': self.user, 'password': self.password, 'sessionId': self.sessionId}), headers={'content-type': 'application/json'}, verify=False) - if(r.status_code == 200): - self.serverVersions = self.__json_load(r) - apiServerVersion = 'N/A' - if self.serverVersions != None and 'apiServer' in self.serverVersions: - apiServerVersion = self.serverVersions['apiServer'] - if self.checkVersion: - if not apiServerVersion.startswith(self.clientVersion): - if apiServerVersion > self.clientVersion: - self.logout() - #self.printVersions() - raise Exception('Keysight Python REST-API Wrapper version is older than the BPS server version.\nThis is not a supported combination.\nPlease use the updated version of the wrapper provided with BPS system.') - if apiServerVersion < self.clientVersion: - print("Warning: Keysight Python REST-API Wrapper version is newer than the BPS server version.\nSome of the functionalities included in the Python wrapper might not be supported by the REST API.") - #print('Login successful.\nWelcome %s. \nYour session id is %s' % (self.user, self.sessionId)) - else: - raise Exception('Login failed.\ncode:%s, content:%s' % (r.status_code, r.content)) - return self.serverVersions - - ### logout from the bps system - def logout(self): - self.serverVersions = None - r = self.session.post(url='https://' + self.host + '/bps/api/v2/core/auth/logout', data=json.dumps({'username': self.user, 'password': self.password, 'sessionId': self.sessionId}), headers={'content-type': 'application/json'}, verify=False) - if(r.status_code == 200): - #print('Logout successful. \nBye %s.' % self.user) - self.__disconnect() + ### generic post operation + def __export(self, path, **kwargs): + requestUrl = 'https://' + self.host + '/bps/api/v2/core/' + path + if self.printRequests: + import re + print("POST, %s, h=%s, d=%s" %(re.sub(".*/bps/api/v2/core/", "", requestUrl), json.dumps(headers), json.dumps(kwargs))) + r = self.session.post(url=requestUrl, headers={'content-type': 'application/json'}, data=json.dumps(kwargs), verify=False) + if(r.status_code == 400): + methodCall = '%s'%path.replace('/', '.').replace('.operations', '') + content_message = r.content + ' Execute: help(%s) for more information about the method.'%methodCall + raise Exception({'status_code': r.status_code, 'content': content_message}) + if(r.status_code == 200) or r.status_code == 204: + get_url = 'https://' + self.host + r.content + get_req = self.session.get(url = get_url, verify = False) + with open(kwargs['filepath'], 'wb') as fd: + for chunk in get_req.iter_content(chunk_size=1024): + fd.write(chunk) + fd.close() + get_req.close() + return {'status_code': r.status_code, 'content': 'success'} else: - raise Exception('Logout failed: (%s, %s)' % (r.status_code, r.content)) + raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) ### Get from data model - def _get(self, path, responseDepth=None, **kwargs): + def __get(self, path, responseDepth=None, **kwargs): requestUrl = 'https://%s/bps/api/v2/core%s%s' % (self.host, path, '?responseDepth=%s' % responseDepth if responseDepth else '') for key, value in kwargs.items(): requestUrl = requestUrl + "&%s=%s" % (key, value) headers = {'content-type': 'application/json'} + if self.printRequests: + import re + print("GET, %s, %s" %(re.sub(".*/bps/api/v2/core/", "", requestUrl), json.dumps(headers))) r = self.session.get(url=requestUrl, headers=headers, verify=False) if(r.status_code in [200, 204]): return self.__json_load(r) raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) - ### Get from data model - def _patch(self, path, value): - r = self.session.patch(url='https://' + self.host + '/bps/api/v2/core/' + path, headers={'content-type': 'application/json'}, data=json.dumps(value), verify=False) - if(r.status_code != 204): - raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) - - ### Get from data model - def _put(self, path, value): - r = self.session.put(url='https://' + self.host + '/bps/api/v2/core/' + path, headers={'content-type': 'application/json'}, data=json.dumps(value), verify=False) - if(r.status_code != 204): - raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) - - ### Get from data model - def _delete(self, path): - requestUrl = 'https://' + self.host + '/bps/api/v2/core/'+ path - headers = {'content-type': 'application/json'} - r = self.session.delete(url=requestUrl, headers=headers, verify=False) + ### generic import operation + def __import(self, path, filename, **kwargs): + requestUrl = 'https://' + self.host + '/bps/api/v2/core/' + path + files = {'file': (kwargs['name'], open(filename, 'rb'), 'application/xml')} + data = {'fileInfo':str(kwargs)} + if self.printRequests: + import re + print("POST, %s, h=%s, d=%s" %(re.sub(".*/bps/api/v2/core/", "", requestUrl), json.dumps(headers), json.dumps(data))) + r = self.session.post(url=requestUrl, files=files, data=data, verify=False) if(r.status_code == 400): methodCall = '%s'%path.replace('/', '.').replace('.operations', '') content_message = r.content + ' Execute: help(%s) for more information about the method.'%methodCall @@ -147,8 +138,14 @@ def _delete(self, path): return self.__json_load(r) raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) + def __json_load(self, r): + try: + return r.json() + except: + return r.content.decode() if r.content is not None else None + ### OPTIONS request - def _options(self, path): + def __options(self, path): r = self.session.options('https://' + self.host + '/bps/api/v2/core/'+ path) if(r.status_code == 400): methodCall = '%s'%path.replace('/', '.').replace('.operations', '') @@ -158,10 +155,22 @@ def _options(self, path): return self.__json_load(r) raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) + ### Get from data model + def __patch(self, path, value): + headers = {'content-type': 'application/json'} + if self.printRequests: + print("patch, %s, h=%s, d=%s" %(path, json.dumps(headers), json.dumps(value))) + r = self.session.patch(url='https://' + self.host + '/bps/api/v2/core/' + path, headers=headers, data=json.dumps(value), verify=False) + if(r.status_code != 204): + raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) + ### generic post operation - def _post(self, path, **kwargs): + def __post(self, path, **kwargs): requestUrl = 'https://' + self.host + '/bps/api/v2/core/' + path - r = self.session.post(url=requestUrl, headers={'content-type': 'application/json'}, data=json.dumps(kwargs), verify=False) + headers = {'content-type': 'application/json'} + if self.printRequests: + print("POST, %s, h=%s, d=%s" %(path, json.dumps(headers), json.dumps(kwargs))) + r = self.session.post(url=requestUrl, headers=headers, data=json.dumps(kwargs), verify=False) if(r.status_code == 400): methodCall = '%s'%path.replace('/', '.').replace('.operations', '') content_message = r.content + ' Execute: help(%s) for more information about the method.'%methodCall @@ -170,329 +179,267 @@ def _post(self, path, **kwargs): return self.__json_load(r) raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) - ### generic import operation - def _import(self, path, filename, **kwargs): - requestUrl = 'https://' + self.host + '/bps/api/v2/core/' + path - files = {'file': (kwargs['name'], open(filename, 'rb'), 'application/xml')} - r = self.session.post(url=requestUrl, files=files, data={'fileInfo':str(kwargs)}, verify=False) - if(r.status_code == 400): - methodCall = '%s'%path.replace('/', '.').replace('.operations', '') - content_message = r.content + ' Execute: help(%s) for more information about the method.'%methodCall - raise Exception({'status_code': r.status_code, 'content': content_message}) - if(r.status_code in [200, 204]): - return self.__json_load(r) - raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) - - ### generic post operation - def _export(self, path, **kwargs): - requestUrl = 'https://' + self.host + '/bps/api/v2/core/' + path - r = self.session.post(url=requestUrl, headers={'content-type': 'application/json'}, data=json.dumps(kwargs), verify=False) - if(r.status_code == 400): - methodCall = '%s'%path.replace('/', '.').replace('.operations', '') - content_message = r.content + ' Execute: help(%s) for more information about the method.'%methodCall - raise Exception({'status_code': r.status_code, 'content': content_message}) - if(r.status_code == 200) or r.status_code == 204: - get_url = 'https://' + self.host + r.content - get_req = self.session.get(url = get_url, verify = False) - with open(kwargs['filepath'], 'wb') as fd: - for chunk in get_req.iter_content(chunk_size=1024): - fd.write(chunk) - fd.close() - get_req.close() - return {'status_code': r.status_code, 'content': 'success'} - else: + ### Get from data model + def __put(self, path, value): + headers = {'content-type': 'application/json'} + if self.printRequests: + print("put, %s, h=%s, d=%s" %(path, json.dumps(headers), json.dumps(value))) + r = self.session.put(url='https://' + self.host + '/bps/api/v2/core/' + path, headers=headers, data=json.dumps(value), verify=False) + if(r.status_code != 204): raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) - ### Imports a resource model to be used in flow traffic as .txt files, certificates, keys etc, given as a file. File will be uploaded to '/chroot/resources' by default if 'type' is not specifed otherwise the destination will be '/chroot/resources/'+ (clientcerts / clientkeys / cacerts ...). This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Imports an ATI License file (.lic) on a hardware platform. This operation is NOT recommended to be used on BPS Virtual platforms. @staticmethod - def _superflow_operations_importResource(self, name, filename, force, type='resource'): + def _administration_atiLicensing_operations_importAtiLicense(self, filename, name): """ - Imports a resource model to be used in flow traffic as .txt files, certificates, keys etc, given as a file. File will be uploaded to '/chroot/resources' by default if 'type' is not specifed otherwise the destination will be '/chroot/resources/'+ (clientcerts / clientkeys / cacerts ...). This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): The name of the object being imported - :param filename (string): The file containing the object - :param force (bool): Force to import the file and the object having the same name will be replaced. - :param type (string): File type to import. Accepted types: clientcert, clientkey, resource, cacert, dhparams. Default value is 'resource'. + Imports an ATI License file (.lic) on a hardware platform. This operation is NOT recommended to be used on BPS Virtual platforms. + :param filename (string): import file path + :param name (string): the name of the license file """ - return self._wrapper._import('/superflow/operations/importResource', **{'name': name, 'filename': filename, 'force': force, 'type': type}) + return self._wrapper.__import('/administration/atiLicensing/operations/importAtiLicense', **{'filename': filename, 'name': name}) - ### Deletes a Test Report from the database. + ### Exports everything including test models, network configurations and others from system.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _reports_operations_delete(self, runid): + def _administration_operations_exportAllTests(self, filepath): """ - Deletes a Test Report from the database. - :param runid (number): The test run id that generated the report you want to delete. + Exports everything including test models, network configurations and others from system.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param filepath (string): The local path where to save the compressed file with all the models. The path must contain the file name and extension (.tar.gz): '/d/c/f/AllTests.tar.gz' """ - return self._wrapper._post('/reports/operations/delete', **{'runid': runid}) + return self._wrapper.__export('/administration/operations/exportAllTests', **{'filepath': filepath}) - ### Get information about an action in the current working Superflow, retrieving also the choices for each action setting. + ### Imports all test models, actually imports everything from 'exportAllTests'. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _superflow_actions_operations_getActionInfo(self, id): + def _administration_operations_importAllTests(self, name, filename, force): """ - Get information about an action in the current working Superflow, retrieving also the choices for each action setting. - :param id (number): The action id - :return result (list): - list of object with fields - label (string): - name (string): - description (string): - choice (object): + Imports all test models, actually imports everything from 'exportAllTests'. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): String name to append to each test name. + :param filename (string): The file containing the object. + :param force (bool): Force to import the file and the object having the same name will be replaced. """ - return self._wrapper._post('/superflow/actions/operations/getActionInfo', **{'id': id}) + return self._wrapper.__import('/administration/operations/importAllTests', **{'name': name, 'filename': filename, 'force': force}) ### null @staticmethod - def _capture_operations_search(self, searchString, limit, sort, sortorder): + def _administration_operations_logs(self, error=False, messages=False, web=False, all=False, audit=False, info=False, system=False, lines=20, drop=0): """ - :param searchString (string): Search capture name matching the string given. - :param limit (string): The limit of rows to return - :param sort (string): Parameter to sort by. - :param sortorder (string): The sort order (ascending/descending) - :return item (list): - list of object with fields - name (string): - totalPackets (string): - duration (string): - ipv4Packets (string): - ipv6Packets (string): - avgPacketSize (string): - udpPackets (string): - contentType (string): - pcapFilesize (string): - tcpPackets (string): - avgFlowLength (string): + :param error (bool): + :param messages (bool): + :param web (bool): + :param all (bool): + :param audit (bool): + :param info (bool): + :param system (bool): + :param lines (number): number lines to return + :param drop (number): number lines to drop """ - return self._wrapper._post('/capture/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) + return self._wrapper.__post('/administration/operations/logs', **{'error': error, 'messages': messages, 'web': web, 'all': all, 'audit': audit, 'info': info, 'system': system, 'lines': lines, 'drop': drop}) - ### Exports the Strike List identified by its name and all of its dependenciesThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### close active session @staticmethod - def _strikeList_operations_exportStrikeList(self, name, filepath): + def _administration_sessions_operations_close(self, session): """ - Exports the Strike List identified by its name and all of its dependenciesThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): The name of the strike list to be exported. - :param filepath (string): The local path where to save the exported object. The file should have .bap extension + close active session + :param session (string): """ - return self._wrapper._export('/strikeList/operations/exportStrikeList', **{'name': name, 'filepath': filepath}) + return self._wrapper.__post('/administration/sessions/operations/close', **{'session': session}) - ### Imports an ATI License file (.lic) on a hardware platform. This operation is NOT recommended to be used on BPS Virtual platforms. + ### list active sessions @staticmethod - def _administration_atiLicensing_operations_importAtiLicense(self, filename, name): + def _administration_sessions_operations_list(self): """ - Imports an ATI License file (.lic) on a hardware platform. This operation is NOT recommended to be used on BPS Virtual platforms. - :param filename (string): import file path - :param name (string): the name of the license file + list active sessions + :return result (list): """ - return self._wrapper._import('/administration/atiLicensing/operations/importAtiLicense', **{'filename': filename, 'name': name}) + return self._wrapper.__post('/administration/sessions/operations/list', **{}) - ### Create a new custom Load Profile. + ### Sets a User Preference. @staticmethod - def _loadProfile_operations_createNewCustom(self, loadProfile): + def _administration_userSettings_operations_changeUserSetting(self, name, value): """ - Create a new custom Load Profile. - :param loadProfile (string): The Name of The load profile object to create. + Sets a User Preference. + :param name (string): The setting name. + :param value (string): The new value for setting. """ - return self._wrapper._post('/loadProfile/operations/createNewCustom', **{'loadProfile': loadProfile}) + return self._wrapper.__post('/administration/userSettings/operations/changeUserSetting', **{'name': name, 'value': value}) - ### Clones a component in the current working Test Model + ### null @staticmethod - def _testmodel_operations_clone(self, template, type, active): + def _administration_userSettings_operations_setAutoReserve(self, resourceType, units): """ - Clones a component in the current working Test Model - :param template (string): The ID of the test component to clone. - :param type (string): Component Type: appsim, sesionsender .. - :param active (bool): Set component enable (by default is active) or disable + :param resourceType (string): Valid values: >l47< or >l23< + :param units (number): """ - return self._wrapper._post('/testmodel/operations/clone', **{'template': template, 'type': type, 'active': active}) + return self._wrapper.__post('/administration/userSettings/operations/setAutoReserve', **{'resourceType': resourceType, 'units': units}) - ### Exports the result report of a test, identified by its run id and all of its dependenciesThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Adds a list of SuperFlow to the current working Application Profile. ([{'superflow':'adadad', 'weight':'20'},{..}]) @staticmethod - def _reports_operations_exportReport(self, filepath, runid, reportType, sectionIds='', dataType='ALL'): - """ - Exports the result report of a test, identified by its run id and all of its dependenciesThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param filepath (string): The local path where to export the report, including the report name and proper file extension. - :param runid (number): Test RUN ID - :param reportType (string): Report file format to be exported in.Supported types: gwt, csv, pdf, xls, rtf, html, zip, score_img, user_img, xml, stats. For exporting 'extended stats' use 'stats'and use '.zip' as file extension in 'filepath'. - :param sectionIds (string): Chapter Ids. Can be extracted a chapter or many, a sub-chapter or many or the entire report: (sectionIds='6' / sectionIds='5,6,7' / sectionIds='7.4,8.5.2,8.6.3.1' / sectionIds=''(to export the entire report)) - :param dataType (string): Report content data type to export. Default value is 'all data'. For tabular only use 'TABLE' and for graphs only use 'CHARTS'. + def _appProfile_operations_add(self, add): """ - return self._wrapper._export('/reports/operations/exportReport', **{'filepath': filepath, 'runid': runid, 'reportType': reportType, 'sectionIds': sectionIds, 'dataType': dataType}) - - ### Gets the card Fanout modes of a board. - @staticmethod - def _topology_operations_getFanoutModes(self, cardId): - """ - Gets the card Fanout modes of a board. - :param cardId (number): Slot ID. - :return modes (object): Fanout mode id per card type. - """ - return self._wrapper._post('/topology/operations/getFanoutModes', **{'cardId': cardId}) - - ### Saves the current working Application Profiles and gives it a new name. - @staticmethod - def _superflow_operations_saveAs(self, name, force): - """ - Saves the current working Application Profiles and gives it a new name. - :param name (string): The new name given for the current working Super Flow - :param force (bool): Force to save the working Super Flow using the given name. + Adds a list of SuperFlow to the current working Application Profile. ([{'superflow':'adadad', 'weight':'20'},{..}]) + :param add (list): + list of object with fields + superflow (string): The name of the super flow + weight (string): The weight of the super flow """ - return self._wrapper._post('/superflow/operations/saveAs', **{'name': name, 'force': force}) + return self._wrapper.__post('/appProfile/operations/add', **{'add': add}) - ### Saves the working Super Flow using the current name + ### Deletes a given Application Profile from the database. @staticmethod - def _superflow_operations_save(self, name=None, force=True): + def _appProfile_operations_delete(self, name): """ - Saves the working Super Flow using the current name - :param name (string): The name of the template that should be empty. - :param force (bool): Force to save the working Super Flow with the same name. + Deletes a given Application Profile from the database. + :param name (string): The name of the Application Profiles. """ - return self._wrapper._post('/superflow/operations/save', **{'name': name, 'force': force}) + return self._wrapper.__post('/appProfile/operations/delete', **{'name': name}) - ### Search Networks. + ### Exports an Application profile and all of its dependencies.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _network_operations_search(self, searchString, userid, clazz, sortorder, sort, limit, offset): + def _appProfile_operations_exportAppProfile(self, name, attachments, filepath): """ - Search Networks. - :param searchString (string): Search networks matching the string given. - :param userid (string): The owner to search for - :param clazz (string): The 'class' of the object (usually 'canned' or 'custom') - :param sortorder (string): The order in which to sort: ascending/descending - :param sort (string): Parameter to sort by: 'name'/'class'/'createdBy'/'interfaces'/'timestamp' - :param limit (number): The limit of network elements to return - :param offset (number): The offset to begin from. - :return network (list): - list of object with fields - name (string): - label (string): - createdBy (string): - revision (number): - description (string): - type (enum): + Exports an Application profile and all of its dependencies.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): The name of the test model to be exported. + :param attachments (bool): True if object attachments are needed. + :param filepath (string): The local path where to save the exported object. """ - return self._wrapper._post('/network/operations/search', **{'searchString': searchString, 'userid': userid, 'clazz': clazz, 'sortorder': sortorder, 'sort': sort, 'limit': limit, 'offset': offset}) + return self._wrapper.__export('/appProfile/operations/exportAppProfile', **{'name': name, 'attachments': attachments, 'filepath': filepath}) - ### Adds an action to the current working SuperFlow + ### Imports an application profile, given as a file. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _superflow_operations_addAction(self, flowid, type, actionid, source): + def _appProfile_operations_importAppProfile(self, name, filename, force): """ - Adds an action to the current working SuperFlow - :param flowid (number): The flow id. - :param type (string): The type of the action definition. - :param actionid (number): The new action id. - :param source (string): The action source. + Imports an application profile, given as a file. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): The name of the object being imported + :param filename (string): The file containing the object + :param force (bool): Force to import the file and the object having the same name will be replaced. """ - return self._wrapper._post('/superflow/operations/addAction', **{'flowid': flowid, 'type': type, 'actionid': actionid, 'source': source}) + return self._wrapper.__import('/appProfile/operations/importAppProfile', **{'name': name, 'filename': filename, 'force': force}) - ### Load an existing Strike List and sets it as the current one. + ### Load an existing Application Profile and sets it as the current one. @staticmethod - def _strikeList_operations_load(self, template): + def _appProfile_operations_load(self, template): """ - Load an existing Strike List and sets it as the current one. - :param template (string): The name of the Strike List template + Load an existing Application Profile and sets it as the current one. + :param template (string): The name of the template application profile """ - return self._wrapper._post('/strikeList/operations/load', **{'template': template}) + return self._wrapper.__post('/appProfile/operations/load', **{'template': template}) - ### Creates a new Strike List. + ### Creates a new Application Profile. @staticmethod - def _strikeList_operations_new(self, template=None): + def _appProfile_operations_new(self, template=None): """ - Creates a new Strike List. - :param template (string): The name of the template. In this case will be empty. + Creates a new Application Profile. + :param template (string): This argument must remain unset. Do not set any value for it. """ - return self._wrapper._post('/strikeList/operations/new', **{'template': template}) + return self._wrapper.__post('/appProfile/operations/new', **{'template': template}) - ### Connects to a remote chassis in order to use some of its resources.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Recompute percentages in the current working Application Profile @staticmethod - def _remote_operations_connectChassis(self, address, remote): + def _appProfile_operations_recompute(self): """ - Connects to a remote chassis in order to use some of its resources.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param address (string): Local chassis address. - :param remote (string): remote chassis address. + Recompute percentages in the current working Application Profile """ - return self._wrapper._post('/remote/operations/connectChassis', **{'address': address, 'remote': remote}) + return self._wrapper.__post('/appProfile/operations/recompute', **{}) - ### list active sessions + ### Removes a SuperFlow from the current working Application Profile. @staticmethod - def _administration_sessions_operations_list(self): + def _appProfile_operations_remove(self, superflow): """ - list active sessions - :return result (list): + Removes a SuperFlow from the current working Application Profile. + :param superflow (string): The name of the super flow. """ - return self._wrapper._post('/administration/sessions/operations/list', **{}) + return self._wrapper.__post('/appProfile/operations/remove', **{'superflow': superflow}) - ### Add a host to the current working Superflow + ### Saves the current working application profile using the current name. No need to use any parameter. @staticmethod - def _superflow_operations_addHost(self, hostParams, force): + def _appProfile_operations_save(self, name=None, force=True): """ - Add a host to the current working Superflow - :param hostParams (object): - object of object with fields - name (string): The host name. - hostname (string): The NickName of the host. - iface (string): The traffic direction.Values can be: 'origin'(means client) and 'target'(means server) - :param force (bool): The flow id. + Saves the current working application profile using the current name. No need to use any parameter. + :param name (string): The name of the template. No need to configure. The current name is used. + :param force (bool): Force to save the working Application Profile with the same name. No need to configure. The default is used. """ - return self._wrapper._post('/superflow/operations/addHost', **{'hostParams': hostParams, 'force': force}) + return self._wrapper.__post('/appProfile/operations/save', **{'name': name, 'force': force}) - ### Deletes a specified load profile from the database. + ### Saves the current working Application Profiles and gives it a new name. @staticmethod - def _loadProfile_operations_delete(self, name): + def _appProfile_operations_saveAs(self, name, force): """ - Deletes a specified load profile from the database. - :param name (string): The name of the loadProfile object to delete. + Saves the current working Application Profiles and gives it a new name. + :param name (string): The new name given for the current working Application Profile + :param force (bool): Force to save the working Application Profile using the given name. """ - return self._wrapper._post('/loadProfile/operations/delete', **{'name': name}) + return self._wrapper.__post('/appProfile/operations/saveAs', **{'name': name, 'force': force}) ### null @staticmethod - def _testmodel_operations_search(self, searchString, limit, sort, sortorder): + def _appProfile_operations_search(self, searchString, limit, sort, sortorder): """ - :param searchString (string): Search test name matching the string given. + :param searchString (string): Search application profile name matching the string given. :param limit (string): The limit of rows to return - :param sort (string): Parameter to sort by: 'createdOn'/'timestamp'/'bandwidth'/'result'/'lastrunby'/'createdBy'/'interfaces'/'testLabType' - :param sortorder (string): The sort order: ascending/descending - :return testmodel (list): + :param sort (string): Parameter to sort by. + :param sortorder (string): The sort order (ascending/descending) + :return appprofile (list): list of object with fields name (string): label (string): createdBy (string): - network (string): - duration (number): + createdOn (string): + revision (number): description (string): """ - return self._wrapper._post('/testmodel/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) + return self._wrapper.__post('/appProfile/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) - ### Returns main groups of statistics for a single BPS Test Component. These groups can be used then in requesting statistics values from the history of a test run. + ### Imports a capture file to the systemThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _results_operations_getGroups(self, name, dynamicEnums=True, includeOutputs=True): + def _capture_operations_importCapture(self, name, filename, force): """ - Returns main groups of statistics for a single BPS Test Component. These groups can be used then in requesting statistics values from the history of a test run. - :param name (string): BPS Component name. This argument is actually the component type which can be get from 'statistics' table - :param dynamicEnums (bool): - :param includeOutputs (bool): - :return results (object): - object of object with fields - name (string): - label (string): - groups (list): + Imports a capture file to the systemThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): The name of the capture being imported + :param filename (string): The file containing the capture object + :param force (bool): Force to import the file and the object having the same name will be replaced. """ - return self._wrapper._post('/results/operations/getGroups', **{'name': name, 'dynamicEnums': dynamicEnums, 'includeOutputs': includeOutputs}) + return self._wrapper.__import('/capture/operations/importCapture', **{'name': name, 'filename': filename, 'force': force}) ### null @staticmethod - def _evasionProfile_operations_search(self, searchString, limit, sort, sortorder): + def _capture_operations_search(self, searchString, limit, sort, sortorder): """ - :param searchString (string): Search evasion profile name matching the string given. + :param searchString (string): Search capture name matching the string given. :param limit (string): The limit of rows to return - :param sort (string): Parameter to sort by. (name/createdBy ...) + :param sort (string): Parameter to sort by. :param sortorder (string): The sort order (ascending/descending) - :return attackprofile (list): + :return item (list): list of object with fields name (string): - label (string): - createdBy (string): - revision (number): - description (string): + totalPackets (string): + duration (string): + ipv4Packets (string): + ipv6Packets (string): + avgPacketSize (string): + udpPackets (string): + contentType (string): + pcapFilesize (string): + tcpPackets (string): + avgFlowLength (string): + """ + return self._wrapper.__post('/capture/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) + + ### Retrieves all the security options + @staticmethod + def _evasionProfile_StrikeOptions_operations_getStrikeOptions(self): + """ + Retrieves all the security options + :return result (list): + """ + return self._wrapper.__post('/evasionProfile/StrikeOptions/operations/getStrikeOptions', **{}) + + ### Deletes a given Evasion Profile from the database. + @staticmethod + def _evasionProfile_operations_delete(self, name): + """ + Deletes a given Evasion Profile from the database. + :param name (string): The name of the profile to delete. """ - return self._wrapper._post('/evasionProfile/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) + return self._wrapper.__post('/evasionProfile/operations/delete', **{'name': name}) ### Load an existing Evasion Profile and sets it as the current one. @staticmethod @@ -501,7 +448,7 @@ def _evasionProfile_operations_load(self, template): Load an existing Evasion Profile and sets it as the current one. :param template (string): The name of an Evasion profile template. """ - return self._wrapper._post('/evasionProfile/operations/load', **{'template': template}) + return self._wrapper.__post('/evasionProfile/operations/load', **{'template': template}) ### Creates a new Evasion Profile. @staticmethod @@ -510,153 +457,229 @@ def _evasionProfile_operations_new(self, template=None): Creates a new Evasion Profile. :param template (string): The name should be empty to create a new object. """ - return self._wrapper._post('/evasionProfile/operations/new', **{'template': template}) + return self._wrapper.__post('/evasionProfile/operations/new', **{'template': template}) - ### Reboots the metwork processors on the given card card. Only available for APS cards. + ### Saves the working Test Model using the current name. No need to configure. The current name is used. @staticmethod - def _topology_operations_softReboot(self, board, cnId): + def _evasionProfile_operations_save(self, name=None, force=True): """ - Reboots the metwork processors on the given card card. Only available for APS cards. - :param board (number): - :param cnId (string): + Saves the working Test Model using the current name. No need to configure. The current name is used. + :param name (string): This argument should be empty for saving the profile using it's actual name. + :param force (bool): Force to save the working profile with the same name. """ - return self._wrapper._post('/topology/operations/softReboot', **{'board': board, 'cnId': cnId}) + return self._wrapper.__post('/evasionProfile/operations/save', **{'name': name, 'force': force}) - ### Returns stats series for a given component group stat output for a given timestamp + ### Saves the current working Test Model under specified name. @staticmethod - def _results_operations_getHistoricalSeries(self, runid, componentid, dataindex, group): + def _evasionProfile_operations_saveAs(self, name, force): """ - Returns stats series for a given component group stat output for a given timestamp - :param runid (number): The test identifier - :param componentid (string): The component identifier. Each component has an id and can be get loading the testand checking it's components info - :param dataindex (number): The table index, equivalent with timestamp. - :param group (string): The data group or one of the BPS component main groups. The group name can be get by executing the operation 'getGroups' from results node. - :return param (list): - list of object with fields - name (string): - content (string): - datasetvals (string): + Saves the current working Test Model under specified name. + :param name (string): The new name given for the current working Evasion Profile + :param force (bool): Force to save the working Evasion Profile using a new name. """ - return self._wrapper._post('/results/operations/getHistoricalSeries', **{'runid': runid, 'componentid': componentid, 'dataindex': dataindex, 'group': group}) + return self._wrapper.__post('/evasionProfile/operations/saveAs', **{'name': name, 'force': force}) - ### Searches a strike inside all BPS strike database.To list all the available strikes, leave the arguments empty. + ### null @staticmethod - def _strikes_operations_search(self, searchString='', limit=10, sort='name', sortorder='ascending', offset=0): + def _evasionProfile_operations_search(self, searchString, limit, sort, sortorder): """ - Searches a strike inside all BPS strike database.To list all the available strikes, leave the arguments empty. - :param searchString (string): The string used as a criteria to search a strike by.Example: 'strike_name', 'year:2019', 'path:strikes/xml..' - :param limit (number): The limit of rows to return. Use empty string or empty box to get all the available strikes. - :param sort (string): Parameter to sort by. + :param searchString (string): Search evasion profile name matching the string given. + :param limit (string): The limit of rows to return + :param sort (string): Parameter to sort by. (name/createdBy ...) :param sortorder (string): The sort order (ascending/descending) - :param offset (number): The offset to begin from. Default is 0. - :return strike (list): + :return attackprofile (list): list of object with fields - id (string): - protocol (string): - category (string): - direction (string): - keyword (string): name (string): - path (string): - variants (number): - severity (string): - reference (string): - fileSize (string): - fileExtension (string): - year (string): + label (string): + createdBy (string): + revision (number): + description (string): """ - return self._wrapper._post('/strikes/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder, 'offset': offset}) + return self._wrapper.__post('/evasionProfile/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) - ### null + ### Create a new custom Load Profile. @staticmethod - def _administration_userSettings_operations_setAutoReserve(self, resourceType, units): - """ - :param resourceType (string): Valid values: >l47< or >l23< - :param units (number): + def _loadProfile_operations_createNewCustom(self, loadProfile): """ - return self._wrapper._post('/administration/userSettings/operations/setAutoReserve', **{'resourceType': resourceType, 'units': units}) + Create a new custom Load Profile. + :param loadProfile (string): The Name of The load profile object to create. + """ + return self._wrapper.__post('/loadProfile/operations/createNewCustom', **{'loadProfile': loadProfile}) - ### Deletes a given Evasion Profile from the database. + ### Deletes a specified load profile from the database. @staticmethod - def _evasionProfile_operations_delete(self, name): + def _loadProfile_operations_delete(self, name): """ - Deletes a given Evasion Profile from the database. - :param name (string): The name of the profile to delete. + Deletes a specified load profile from the database. + :param name (string): The name of the loadProfile object to delete. """ - return self._wrapper._post('/evasionProfile/operations/delete', **{'name': name}) + return self._wrapper.__post('/loadProfile/operations/delete', **{'name': name}) - ### Gives abbreviated information about all Canned Flow Names. + ### null @staticmethod - def _superflow_flows_operations_getCannedFlows(self): + def _loadProfile_operations_load(self, template): """ - Gives abbreviated information about all Canned Flow Names. - :return flow (list): + :param template (string): + """ + return self._wrapper.__post('/loadProfile/operations/load', **{'template': template}) + + ### null + @staticmethod + def _loadProfile_operations_save(self): + return self._wrapper.__post('/loadProfile/operations/save', **{}) + + ### Save the active editing LoadProfile under specified name + @staticmethod + def _loadProfile_operations_saveAs(self, name): + """ + Save the active editing LoadProfile under specified name + :param name (string): + """ + return self._wrapper.__post('/loadProfile/operations/saveAs', **{'name': name}) + + ### Deletes a given Network Neighborhood Config from the database. + @staticmethod + def _network_operations_delete(self, name): + """ + Deletes a given Network Neighborhood Config from the database. + :param name (string): The name of the Network Neighborhood Config. + """ + return self._wrapper.__post('/network/operations/delete', **{'name': name}) + + ### Imports a network neighborhood model, given as a file.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + @staticmethod + def _network_operations_importNetwork(self, name, filename, force): + """ + Imports a network neighborhood model, given as a file.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): The name of the object being imported + :param filename (string): The file containing the object + :param force (bool): Force to import the file and replace the object having the same name. + """ + return self._wrapper.__import('/network/operations/importNetwork', **{'name': name, 'filename': filename, 'force': force}) + + ### null + @staticmethod + def _network_operations_list(self, userid, clazz, sortorder, sort, limit, offset): + """ + :param userid (string): + :param clazz (string): + :param sortorder (string): + :param sort (string): + :param limit (number): + :param offset (number): + :return returnArg (list): list of object with fields name (string): - label (string): + type (string): + author (string): + createdOn (string): """ - return self._wrapper._post('/superflow/flows/operations/getCannedFlows', **{}) + return self._wrapper.__post('/network/operations/list', **{'userid': userid, 'clazz': clazz, 'sortorder': sortorder, 'sort': sort, 'limit': limit, 'offset': offset}) - ### Deletes a given Strike List from the database. + ### Loads an existing network config by name. @staticmethod - def _strikeList_operations_delete(self, name): + def _network_operations_load(self, template): """ - Deletes a given Strike List from the database. - :param name (string): The name of the Strike List to be deleted. + Loads an existing network config by name. + :param template (string): The name of the network neighborhood template """ - return self._wrapper._post('/strikeList/operations/delete', **{'name': name}) + return self._wrapper.__post('/network/operations/load', **{'template': template}) - ### Load an existing test model template. + ### Creates a new Network Neighborhood configuration with no name. The template value must remain empty. @staticmethod - def _testmodel_operations_load(self, template): + def _network_operations_new(self, template=None): """ - Load an existing test model template. - :param template (string): The name of the template testmodel + Creates a new Network Neighborhood configuration with no name. The template value must remain empty. + :param template (string): The name of the template. In this case will be empty. No need to configure. """ - return self._wrapper._post('/testmodel/operations/load', **{'template': template}) + return self._wrapper.__post('/network/operations/new', **{'template': template}) - ### Creates a new Test Model + ### Save the current working network config. @staticmethod - def _testmodel_operations_new(self, template=None): + def _network_operations_save(self, name=None, regenerateOldStyle=True, force=True): """ - Creates a new Test Model - :param template (string): The name of the template. In this case will be empty. + Save the current working network config. + :param name (string): The new name given for the current working network config. No need to configure. The current name is used. + :param regenerateOldStyle (bool): No need to configure. The default is used. + :param force (bool): No need to configure. The default is used. """ - return self._wrapper._post('/testmodel/operations/new', **{'template': template}) + return self._wrapper.__post('/network/operations/save', **{'name': name, 'regenerateOldStyle': regenerateOldStyle, 'force': force}) - ### Reserves the specified resource of the given type. + ### Saves the working network config and gives it a new name. @staticmethod - def _topology_operations_reserveResource(self, group, resourceId, resourceType): + def _network_operations_saveAs(self, name, regenerateOldStyle=True, force=False): """ - Reserves the specified resource of the given type. - :param group (number): - :param resourceId (number): - :param resourceType (string): + Saves the working network config and gives it a new name. + :param name (string): The new name given for the current working network config + :param regenerateOldStyle (bool): Force to apply the changes made on the loaded network configuration. Force to generate a network from the old one. + :param force (bool): Force to save the network config. It replaces a pre-existing config having the same name. """ - return self._wrapper._post('/topology/operations/reserveResource', **{'group': group, 'resourceId': resourceId, 'resourceType': resourceType}) + return self._wrapper.__post('/network/operations/saveAs', **{'name': name, 'regenerateOldStyle': regenerateOldStyle, 'force': force}) - ### null + ### Search Networks. @staticmethod - def _topology_operations_unreserve(self, unreservation): + def _network_operations_search(self, searchString, userid, clazz, sortorder, sort, limit, offset): """ - :param unreservation (list): + Search Networks. + :param searchString (string): Search networks matching the string given. + :param userid (string): The owner to search for + :param clazz (string): The 'class' of the object (usually 'canned' or 'custom') + :param sortorder (string): The order in which to sort: ascending/descending + :param sort (string): Parameter to sort by: 'name'/'class'/'createdBy'/'interfaces'/'timestamp' + :param limit (number): The limit of network elements to return + :param offset (number): The offset to begin from. + :return network (list): list of object with fields - slot (number): - port (number): + name (string): + label (string): + createdBy (string): + revision (number): + description (string): + type (enum): """ - return self._wrapper._post('/topology/operations/unreserve', **{'unreservation': unreservation}) + return self._wrapper.__post('/network/operations/search', **{'searchString': searchString, 'userid': userid, 'clazz': clazz, 'sortorder': sortorder, 'sort': sort, 'limit': limit, 'offset': offset}) - ### Adds a list of SuperFlow to the current working Application Profile. ([{'superflow':'adadad', 'weight':'20'},{..}]) + ### Connects to a remote chassis in order to use some of its resources.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _appProfile_operations_add(self, add): + def _remote_operations_connectChassis(self, address, remote): """ - Adds a list of SuperFlow to the current working Application Profile. ([{'superflow':'adadad', 'weight':'20'},{..}]) - :param add (list): - list of object with fields - superflow (string): The name of the super flow - weight (string): The weight of the super flow + Connects to a remote chassis in order to use some of its resources.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param address (string): Local chassis address. + :param remote (string): remote chassis address. + """ + return self._wrapper.__post('/remote/operations/connectChassis', **{'address': address, 'remote': remote}) + + ### Disconnects from a remote chassis in order to release remote resources.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + @staticmethod + def _remote_operations_disconnectChassis(self, address, port): + """ + Disconnects from a remote chassis in order to release remote resources.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param address (string): Remote chassis address. + :param port (number): Remote connection port. + """ + return self._wrapper.__post('/remote/operations/disconnectChassis', **{'address': address, 'port': port}) + + ### Deletes a Test Report from the database. + @staticmethod + def _reports_operations_delete(self, runid): + """ + Deletes a Test Report from the database. + :param runid (number): The test run id that generated the report you want to delete. + """ + return self._wrapper.__post('/reports/operations/delete', **{'runid': runid}) + + ### Exports the result report of a test, identified by its run id and all of its dependenciesThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + @staticmethod + def _reports_operations_exportReport(self, filepath, runid, reportType, sectionIds='', dataType='ALL'): + """ + Exports the result report of a test, identified by its run id and all of its dependenciesThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param filepath (string): The local path where to export the report, including the report name and proper file extension. + :param runid (number): Test RUN ID + :param reportType (string): Report file format to be exported in.Supported types: gwt, csv, pdf, xls, rtf, html, zip, score_img, user_img, xml, stats. For exporting 'extended stats' use 'stats'and use '.zip' as file extension in 'filepath'. + :param sectionIds (string): Chapter Ids. Can be extracted a chapter or many, a sub-chapter or many or the entire report: (sectionIds='6' / sectionIds='5,6,7' / sectionIds='7.4,8.5.2,8.6.3.1' / sectionIds=''(to export the entire report)) + :param dataType (string): Report content data type to export. Default value is 'all data'. For tabular only use 'TABLE' and for graphs only use 'CHARTS'. """ - return self._wrapper._post('/appProfile/operations/add', **{'add': add}) + return self._wrapper.__export('/reports/operations/exportReport', **{'filepath': filepath, 'runid': runid, 'reportType': reportType, 'sectionIds': sectionIds, 'dataType': dataType}) ### Returns the report Table of Contents using the test run id. @staticmethod @@ -670,7 +693,7 @@ def _reports_operations_getReportContents(self, runid, getTableOfContents=True): Section Name (string): Section ID (string): """ - return self._wrapper._post('/reports/operations/getReportContents', **{'runid': runid, 'getTableOfContents': getTableOfContents}) + return self._wrapper.__post('/reports/operations/getReportContents', **{'runid': runid, 'getTableOfContents': getTableOfContents}) ### Returns the section of a report @staticmethod @@ -681,175 +704,144 @@ def _reports_operations_getReportTable(self, runid, sectionId): :param sectionId (string): The section id of the table desired to extract. :return results (object): """ - return self._wrapper._post('/reports/operations/getReportTable', **{'runid': runid, 'sectionId': sectionId}) + return self._wrapper.__post('/reports/operations/getReportTable', **{'runid': runid, 'sectionId': sectionId}) ### null @staticmethod - def _topology_operations_releaseAllCnResources(self, cnId): + def _reports_operations_search(self, searchString, limit, sort, sortorder): """ - :param cnId (string): + :param searchString (string): Search test name matching the string given. + :param limit (string): The limit of rows to return + :param sort (string): Parameter to sort by: 'name'/'endTime'/'duration'/'result'/'startTime'/'iteration'/'network'/'dut'/'user'/'size' + :param sortorder (string): The sort order: ascending/descending """ - return self._wrapper._post('/topology/operations/releaseAllCnResources', **{'cnId': cnId}) + return self._wrapper.__post('/reports/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) - ### Exports a wanted test model by giving its name or its test run id.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Returns main groups of statistics for a single BPS Test Component. These groups can be used then in requesting statistics values from the history of a test run. @staticmethod - def _testmodel_operations_exportModel(self, name, attachments, filepath, runid=None): + def _results_operations_getGroups(self, name, dynamicEnums=True, includeOutputs=True): """ - Exports a wanted test model by giving its name or its test run id.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): The name of the test model to be exported. - :param attachments (bool): True if object attachments are needed. - :param filepath (string): The local path where to save the exported object. - :param runid (number): Test RUN ID + Returns main groups of statistics for a single BPS Test Component. These groups can be used then in requesting statistics values from the history of a test run. + :param name (string): BPS Component name. This argument is actually the component type which can be get from 'statistics' table + :param dynamicEnums (bool): + :param includeOutputs (bool): + :return results (object): + object of object with fields + name (string): + label (string): + groups (list): """ - return self._wrapper._export('/testmodel/operations/exportModel', **{'name': name, 'attachments': attachments, 'filepath': filepath, 'runid': runid}) + return self._wrapper.__post('/results/operations/getGroups', **{'name': name, 'dynamicEnums': dynamicEnums, 'includeOutputs': includeOutputs}) - ### Exports an Application profile and all of its dependencies.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### null @staticmethod - def _appProfile_operations_exportAppProfile(self, name, attachments, filepath): + def _results_operations_getHistoricalResultSize(self, runid, componentid, group): """ - Exports an Application profile and all of its dependencies.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): The name of the test model to be exported. - :param attachments (bool): True if object attachments are needed. - :param filepath (string): The local path where to save the exported object. + :param runid (number): The test run id + :param componentid (string): The component identifier + :param group (string): The data group or one of the BPS component main groups. The group name can be get by executing the operation 'getGroups' from results node + :return result (string): """ - return self._wrapper._export('/appProfile/operations/exportAppProfile', **{'name': name, 'attachments': attachments, 'filepath': filepath}) + return self._wrapper.__post('/results/operations/getHistoricalResultSize', **{'runid': runid, 'componentid': componentid, 'group': group}) - ### Lists all the component presets names. + ### Returns stats series for a given component group stat output for a given timestamp @staticmethod - def _testmodel_component_operations_getComponentPresetNames(self, type='None'): + def _results_operations_getHistoricalSeries(self, runid, componentid, dataindex, group): """ - Lists all the component presets names. - :param type (string): The Component type. - All the component types are listed under the node testComponentTypesDescription. - If this argument is not set, all the presets will be listed. - :return result (list): + Returns stats series for a given component group stat output for a given timestamp + :param runid (number): The test identifier + :param componentid (string): The component identifier. Each component has an id and can be get loading the testand checking it's components info + :param dataindex (number): The table index, equivalent with timestamp. + :param group (string): The data group or one of the BPS component main groups. The group name can be get by executing the operation 'getGroups' from results node. + :return param (list): list of object with fields - id (string): - label (string): - type (string): - description (string): + name (string): + content (string): + datasetvals (string): """ - return self._wrapper._post('/testmodel/component/operations/getComponentPresetNames', **{'type': type}) - - ### null - @staticmethod - def _loadProfile_operations_save(self): - return self._wrapper._post('/loadProfile/operations/save', **{}) + return self._wrapper.__post('/results/operations/getHistoricalSeries', **{'runid': runid, 'componentid': componentid, 'dataindex': dataindex, 'group': group}) - ### Save the active editing LoadProfile under specified name + ### Adds a list of strikes to the current working Strike List.([{id: 'b/b/v/f'}, {id: 'aa/f/h'}]) @staticmethod - def _loadProfile_operations_saveAs(self, name): + def _strikeList_operations_add(self, strike, validate=True, toList=None): """ - Save the active editing LoadProfile under specified name - :param name (string): + Adds a list of strikes to the current working Strike List.([{id: 'b/b/v/f'}, {id: 'aa/f/h'}]) + :param strike (list): The list of strikes to add. + list of object with fields + id (string): Strike path. + :param validate (bool): Validate the strikes in the given list. + :param toList (string): All provided strikes will be added to this list. If not existing it will be created """ - return self._wrapper._post('/loadProfile/operations/saveAs', **{'name': name}) + return self._wrapper.__post('/strikeList/operations/add', **{'strike': strike, 'validate': validate, 'toList': toList}) - ### Adds a note to given port. + ### Deletes a given Strike List from the database. @staticmethod - def _topology_operations_addPortNote(self, interface, note): + def _strikeList_operations_delete(self, name): """ - Adds a note to given port. - :param interface (object): Slot and Port ID. - object of object with fields - slot (number): - port (string): - :param note (string): Note info. + Deletes a given Strike List from the database. + :param name (string): The name of the Strike List to be deleted. """ - return self._wrapper._post('/topology/operations/addPortNote', **{'interface': interface, 'note': note}) + return self._wrapper.__post('/strikeList/operations/delete', **{'name': name}) - ### Imports a capture file to the systemThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Exports the Strike List identified by its name and all of its dependenciesThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _capture_operations_importCapture(self, name, filename, force): - """ - Imports a capture file to the systemThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): The name of the capture being imported - :param filename (string): The file containing the capture object - :param force (bool): Force to import the file and the object having the same name will be replaced. - """ - return self._wrapper._import('/capture/operations/importCapture', **{'name': name, 'filename': filename, 'force': force}) - - ### Runs a Test. - @staticmethod - def _testmodel_operations_run(self, modelname, group, allowMalware=False): - """ - Runs a Test. - :param modelname (string): Test Name to run - :param group (number): Group to run - :param allowMalware (bool): Enable this option to allow malware in test. - """ - return self._wrapper._post('/testmodel/operations/run', **{'modelname': modelname, 'group': group, 'allowMalware': allowMalware}) - - ### Runs a Test. - @staticmethod - def _topology_operations_run(self, modelname, group, allowMalware=False): + def _strikeList_operations_exportStrikeList(self, name, filepath): """ - Runs a Test. - :param modelname (string): Test Name to run - :param group (number): Group to run - :param allowMalware (bool): Enable this option to allow malware in test. + Exports the Strike List identified by its name and all of its dependenciesThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): The name of the strike list to be exported. + :param filepath (string): The local path where to save the exported object. The file should have .bap extension """ - return self._wrapper._post('/topology/operations/run', **{'modelname': modelname, 'group': group, 'allowMalware': allowMalware}) + return self._wrapper.__export('/strikeList/operations/exportStrikeList', **{'name': name, 'filepath': filepath}) - ### Retrieves the real time statistics for the running test, by giving the run id. + ### Imports a list of strikes residing in a file. @staticmethod - def _testmodel_operations_realTimeStats(self, runid, rtsgroup, numSeconds, numDataPoints=1): + def _strikeList_operations_importStrikeList(self, name, filename, force): """ - Retrieves the real time statistics for the running test, by giving the run id. - :param runid (number): Test RUN ID - :param rtsgroup (string): Real Time Stats group name. Values for this can be get from 'statistics' node, inside 'statNames' from each component at 'realtime Group' key/column. Examples: 'l7STats', 'all', 'bpslite', 'summary', 'clientStats' etc.Instead of a group name, it can be used a statistic name and the usage is: `fields:`Example: 'fields:txFrames' or 'fields:ethTxFrames, appIncomplete, rxFrameRate, etc'. - :param numSeconds (number): The number of seconds. If negative, means counting from the end. Example -1 means the last second from the moment of request. - :param numDataPoints (number): The number of data points, or set of values, on server side. The default is 1. In case of missing stats,because of requesting to many stats per second in real time,increase the value (grater than 1) - :return result (object): - object of object with fields - testStuck (bool): - time (number): - progress (number): - values (string): + Imports a list of strikes residing in a file. + :param name (string): The name of the object being imported + :param filename (string): The file containing the object to be imported. + :param force (bool): Force to import the file and the object having the same name will be replaced. """ - return self._wrapper._post('/testmodel/operations/realTimeStats', **{'runid': runid, 'rtsgroup': rtsgroup, 'numSeconds': numSeconds, 'numDataPoints': numDataPoints}) + return self._wrapper.__import('/strikeList/operations/importStrikeList', **{'name': name, 'filename': filename, 'force': force}) - ### Deletes a given Network Neighborhood Config from the database. + ### Load an existing Strike List and sets it as the current one. @staticmethod - def _network_operations_delete(self, name): + def _strikeList_operations_load(self, template): """ - Deletes a given Network Neighborhood Config from the database. - :param name (string): The name of the Network Neighborhood Config. + Load an existing Strike List and sets it as the current one. + :param template (string): The name of the Strike List template """ - return self._wrapper._post('/network/operations/delete', **{'name': name}) + return self._wrapper.__post('/strikeList/operations/load', **{'template': template}) - ### Switch port fan-out mode. + ### Creates a new Strike List. @staticmethod - def _topology_operations_setPortFanoutMode(self, board, port, mode): + def _strikeList_operations_new(self, template=None): """ - Switch port fan-out mode. - :param board (number): - :param port (string): - :param mode (string): + Creates a new Strike List. + :param template (string): The name of the template. In this case will be empty. """ - return self._wrapper._post('/topology/operations/setPortFanoutMode', **{'board': board, 'port': port, 'mode': mode}) + return self._wrapper.__post('/strikeList/operations/new', **{'template': template}) - ### Adds a flow to the current working SuperFlow + ### Removes a strike from the current working Strike List.([{id: 'bb/c/d'}, {id: 'aa/f/g'}]) @staticmethod - def _superflow_operations_addFlow(self, flowParams): + def _strikeList_operations_remove(self, strike): """ - Adds a flow to the current working SuperFlow - :param flowParams (object): The flow object to add. - object of object with fields - name (string): The name of the flow - from (string): Traffic initiator. - to (string): Traffic responder. + Removes a strike from the current working Strike List.([{id: 'bb/c/d'}, {id: 'aa/f/g'}]) + :param strike (list): The list of strike ids to remove. The strike id is in fact the it's path. + list of object with fields + id (string): """ - return self._wrapper._post('/superflow/operations/addFlow', **{'flowParams': flowParams}) + return self._wrapper.__post('/strikeList/operations/remove', **{'strike': strike}) - ### Retrieves all the security options + ### Saves the current working Strike List using the current name @staticmethod - def _evasionProfile_StrikeOptions_operations_getStrikeOptions(self): + def _strikeList_operations_save(self, name=None, force=True): """ - Retrieves all the security options - :return result (list): + Saves the current working Strike List using the current name + :param name (string): The name of the template. Default is empty. + :param force (bool): Force to save the working Strike List with the same name. """ - return self._wrapper._post('/evasionProfile/StrikeOptions/operations/getStrikeOptions', **{}) + return self._wrapper.__post('/strikeList/operations/save', **{'name': name, 'force': force}) ### Saves the current working Strike List and gives it a new name. @staticmethod @@ -859,186 +851,178 @@ def _strikeList_operations_saveAs(self, name, force): :param name (string): The new name given for the current working Strike List :param force (bool): Force to save the working Strike List using the given name. """ - return self._wrapper._post('/strikeList/operations/saveAs', **{'name': name, 'force': force}) + return self._wrapper.__post('/strikeList/operations/saveAs', **{'name': name, 'force': force}) - ### Saves the current working Strike List using the current name + ### null @staticmethod - def _strikeList_operations_save(self, name=None, force=True): + def _strikeList_operations_search(self, searchString='', limit=10, sort='name', sortorder='ascending'): """ - Saves the current working Strike List using the current name - :param name (string): The name of the template. Default is empty. - :param force (bool): Force to save the working Strike List with the same name. + :param searchString (string): Search strike list name matching the string given. + :param limit (number): The limit of rows to return + :param sort (string): Parameter to sort by. Default is by name. + :param sortorder (string): The sort order (ascending/descending). Default is ascending. """ - return self._wrapper._post('/strikeList/operations/save', **{'name': name, 'force': force}) + return self._wrapper.__post('/strikeList/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) - ### Imports a test model, given as a file. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Searches a strike inside all BPS strike database.To list all the available strikes, leave the arguments empty. @staticmethod - def _testmodel_operations_importModel(self, name, filename, force): + def _strikes_operations_search(self, searchString='', limit=10, sort='name', sortorder='ascending', offset=0): """ - Imports a test model, given as a file. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): The name of the object being imported - :param filename (string): The file containing the object - :param force (bool): Force to import the file and the object having the same name will be replaced. + Searches a strike inside all BPS strike database.To list all the available strikes, leave the arguments empty. + :param searchString (string): The string used as a criteria to search a strike by.Example: 'strike_name', 'year:2019', 'path:strikes/xml..' + :param limit (number): The limit of rows to return. Use empty string or empty box to get all the available strikes. + :param sort (string): Parameter to sort by. + :param sortorder (string): The sort order (ascending/descending) + :param offset (number): The offset to begin from. Default is 0. + :return strike (list): + list of object with fields + id (string): + protocol (string): + category (string): + direction (string): + keyword (string): + name (string): + path (string): + variants (number): + severity (string): + reference (string): + fileSize (string): + fileExtension (string): + year (string): """ - return self._wrapper._import('/testmodel/operations/importModel', **{'name': name, 'filename': filename, 'force': force}) + return self._wrapper.__post('/strikes/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder, 'offset': offset}) - ### Imports an application profile, given as a file. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### null @staticmethod - def _appProfile_operations_importAppProfile(self, name, filename, force): + def _superflow_actions_operations_getActionChoices(self, id): """ - Imports an application profile, given as a file. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): The name of the object being imported - :param filename (string): The file containing the object - :param force (bool): Force to import the file and the object having the same name will be replaced. + :param id (number): the flow id """ - return self._wrapper._import('/appProfile/operations/importAppProfile', **{'name': name, 'filename': filename, 'force': force}) + return self._wrapper.__post('/superflow/actions/operations/getActionChoices', **{'id': id}) - ### Imports a network neighborhood model, given as a file.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Get information about an action in the current working Superflow, retrieving also the choices for each action setting. @staticmethod - def _network_operations_importNetwork(self, name, filename, force): + def _superflow_actions_operations_getActionInfo(self, id): """ - Imports a network neighborhood model, given as a file.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): The name of the object being imported - :param filename (string): The file containing the object - :param force (bool): Force to import the file and replace the object having the same name. + Get information about an action in the current working Superflow, retrieving also the choices for each action setting. + :param id (number): The action id + :return result (list): + list of object with fields + label (string): + name (string): + description (string): + choice (object): """ - return self._wrapper._import('/network/operations/importNetwork', **{'name': name, 'filename': filename, 'force': force}) + return self._wrapper.__post('/superflow/actions/operations/getActionInfo', **{'id': id}) - ### Reserves the specified number of resources of given type. + ### Gives abbreviated information about all Canned Flow Names. @staticmethod - def _topology_operations_reserveResources(self, group, count, resourceType, slotId): + def _superflow_flows_operations_getCannedFlows(self): """ - Reserves the specified number of resources of given type. - :param group (number): - :param count (number): - :param resourceType (string): - :param slotId (number): + Gives abbreviated information about all Canned Flow Names. + :return flow (list): + list of object with fields + name (string): + label (string): """ - return self._wrapper._post('/topology/operations/reserveResources', **{'group': group, 'count': count, 'resourceType': resourceType, 'slotId': slotId}) + return self._wrapper.__post('/superflow/flows/operations/getCannedFlows', **{}) ### null @staticmethod - def _topology_operations_setPortSettings(self, linkState, autoNegotiation, precoder, slotId, portId): + def _superflow_flows_operations_getFlowChoices(self, id, name): """ - :param linkState (string): - :param autoNegotiation (bool): - :param precoder (bool): - :param slotId (number): - :param portId (string): + :param id (number): The flow id. + :param name (string): The flow type/name. + :return result (list): """ - return self._wrapper._post('/topology/operations/setPortSettings', **{'linkState': linkState, 'autoNegotiation': autoNegotiation, 'precoder': precoder, 'slotId': slotId, 'portId': portId}) + return self._wrapper.__post('/superflow/flows/operations/getFlowChoices', **{'id': id, 'name': name}) - ### Adds a new test component to the current working test model + ### Adds an action to the current working SuperFlow @staticmethod - def _testmodel_operations_add(self, name, component, type, active): + def _superflow_operations_addAction(self, flowid, type, actionid, source): """ - Adds a new test component to the current working test model - :param name (string): Component Name - :param component (string): Component template, preset. - :param type (string): Component Type: appsim, sesionsender .. - :param active (bool): Set component enable (by default is active) or disable + Adds an action to the current working SuperFlow + :param flowid (number): The flow id. + :param type (string): The type of the action definition. + :param actionid (number): The new action id. + :param source (string): The action source. """ - return self._wrapper._post('/testmodel/operations/add', **{'name': name, 'component': component, 'type': type, 'active': active}) + return self._wrapper.__post('/superflow/operations/addAction', **{'flowid': flowid, 'type': type, 'actionid': actionid, 'source': source}) - ### Sets the card mode of a board. + ### Adds a flow to the current working SuperFlow @staticmethod - def _topology_operations_setCardMode(self, board, mode): + def _superflow_operations_addFlow(self, flowParams): """ - Sets the card mode of a board. - :param board (number): Slot ID. - :param mode (number): The new mode: 10(BPS-L23), 7(BPS L4-7), 3(IxLoad), - 11(BPS QT L2-3), 12(BPS QT L4-7) + Adds a flow to the current working SuperFlow + :param flowParams (object): The flow object to add. + object of object with fields + name (string): The name of the flow + from (string): Traffic initiator. + to (string): Traffic responder. """ - return self._wrapper._post('/topology/operations/setCardMode', **{'board': board, 'mode': mode}) + return self._wrapper.__post('/superflow/operations/addFlow', **{'flowParams': flowParams}) - ### Sets the card speed of a board + ### Add a host to the current working Superflow @staticmethod - def _topology_operations_setCardSpeed(self, board, speed): + def _superflow_operations_addHost(self, hostParams, force): """ - Sets the card speed of a board - :param board (number): Slot ID. - :param speed (number): The new speed.(the int value for 1G is 1000, 10G(10000), 40G(40000)) + Add a host to the current working Superflow + :param hostParams (object): + object of object with fields + name (string): The host name. + hostname (string): The NickName of the host. + iface (string): The traffic direction.Values can be: 'origin'(means client) and 'target'(means server) + :param force (bool): The flow id. """ - return self._wrapper._post('/topology/operations/setCardSpeed', **{'board': board, 'speed': speed}) + return self._wrapper.__post('/superflow/operations/addHost', **{'hostParams': hostParams, 'force': force}) - ### Sets the card fanout of a board + ### Deletes a given Super Flow from the database. @staticmethod - def _topology_operations_setCardFanout(self, board, fanid): + def _superflow_operations_delete(self, name): """ - Sets the card fanout of a board - :param board (number): Slot ID. - :param fanid (number): The fan type represented by an integer id. - Get card specific fanout modes by calling 'topology.getFanoutModes()'. - For CloudStorm: 0(100G), 1(40G), 2(25G), 3(10G), 4(50G). - For PerfectStorm 40G: 0(40G), 1(10G). - For PerfectStorm 100G: 0(100G), 1(40G), 2(10G) + Deletes a given Super Flow from the database. + :param name (string): The name of the Super Flow. """ - return self._wrapper._post('/topology/operations/setCardFanout', **{'board': board, 'fanid': fanid}) + return self._wrapper.__post('/superflow/operations/delete', **{'name': name}) - ### Enables/Disables the performance acceleration for a BPS VE blade. + ### Imports a resource model to be used in flow traffic as .txt files, certificates, keys etc, given as a file. File will be uploaded to '/chroot/resources' by default if 'type' is not specifed otherwise the destination will be '/chroot/resources/'+ (clientcerts / clientkeys / cacerts ...). This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _topology_operations_setPerfAcc(self, board, perfacc): + def _superflow_operations_importResource(self, name, filename, force, type='resource'): """ - Enables/Disables the performance acceleration for a BPS VE blade. - :param board (number): Slot ID. - :param perfacc (bool): Boolean value: 'True' to enable the performance Acceleration and 'False' otherwise. + Imports a resource model to be used in flow traffic as .txt files, certificates, keys etc, given as a file. File will be uploaded to '/chroot/resources' by default if 'type' is not specifed otherwise the destination will be '/chroot/resources/'+ (clientcerts / clientkeys / cacerts ...). This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): The name of the object being imported + :param filename (string): The file containing the object + :param force (bool): Force to import the file and the object having the same name will be replaced. + :param type (string): File type to import. Accepted types: clientcert, clientkey, resource, cacert, dhparams. Default value is 'resource'. """ - return self._wrapper._post('/topology/operations/setPerfAcc', **{'board': board, 'perfacc': perfacc}) + return self._wrapper.__import('/superflow/operations/importResource', **{'name': name, 'filename': filename, 'force': force, 'type': type}) - ### Reboots the slot with slotId. + ### Load an existing Super Flow and sets it as the current one. @staticmethod - def _topology_operations_reboot(self, board): + def _superflow_operations_load(self, template): """ - Reboots the slot with slotId. - :param board (number): + Load an existing Super Flow and sets it as the current one. + :param template (string): The name of the existing Super Flow template """ - return self._wrapper._post('/topology/operations/reboot', **{'board': board}) + return self._wrapper.__post('/superflow/operations/load', **{'template': template}) - ### null + ### Creates a new Super Flow. @staticmethod - def _topology_operations_releaseResources(self, count, resourceType, slotId): + def _superflow_operations_new(self, template=None): """ - :param count (number): - :param resourceType (string): - :param slotId (number): - """ - return self._wrapper._post('/topology/operations/releaseResources', **{'count': count, 'resourceType': resourceType, 'slotId': slotId}) - - ### Saves the working network config and gives it a new name. - @staticmethod - def _network_operations_saveAs(self, name, regenerateOldStyle=True, force=False): - """ - Saves the working network config and gives it a new name. - :param name (string): The new name given for the current working network config - :param regenerateOldStyle (bool): Force to apply the changes made on the loaded network configuration. Force to generate a network from the old one. - :param force (bool): Force to save the network config. It replaces a pre-existing config having the same name. - """ - return self._wrapper._post('/network/operations/saveAs', **{'name': name, 'regenerateOldStyle': regenerateOldStyle, 'force': force}) - - ### Save the current working network config. - @staticmethod - def _network_operations_save(self, name=None, regenerateOldStyle=True, force=True): - """ - Save the current working network config. - :param name (string): The new name given for the current working network config. No need to configure. The current name is used. - :param regenerateOldStyle (bool): No need to configure. The default is used. - :param force (bool): No need to configure. The default is used. + Creates a new Super Flow. + :param template (string): The name of the template. In this case will be empty. """ - return self._wrapper._post('/network/operations/save', **{'name': name, 'regenerateOldStyle': regenerateOldStyle, 'force': force}) + return self._wrapper.__post('/superflow/operations/new', **{'template': template}) - ### null + ### Removes an action from the current working SuperFlow. @staticmethod - def _topology_operations_reserve(self, reservation, force=False): + def _superflow_operations_removeAction(self, id): """ - :param reservation (list): Reserves one or more ports - list of object with fields - group (number): - slot (number): - port (string): - capture (bool): - :param force (bool): + Removes an action from the current working SuperFlow. + :param id (number): The action ID. """ - return self._wrapper._post('/topology/operations/reserve', **{'reservation': reservation, 'force': force}) + return self._wrapper.__post('/superflow/operations/removeAction', **{'id': id}) ### Removes a flow from the current working SuperFlow. @staticmethod @@ -1047,91 +1031,78 @@ def _superflow_operations_removeFlow(self, id): Removes a flow from the current working SuperFlow. :param id (number): The flow ID. """ - return self._wrapper._post('/superflow/operations/removeFlow', **{'id': id}) + return self._wrapper.__post('/superflow/operations/removeFlow', **{'id': id}) - ### Exports everything including test models, network configurations and others from system.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Saves the working Super Flow using the current name @staticmethod - def _administration_operations_exportAllTests(self, filepath): + def _superflow_operations_save(self, name=None, force=True): """ - Exports everything including test models, network configurations and others from system.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param filepath (string): The local path where to save the compressed file with all the models. The path must contain the file name and extension (.tar.gz): '/d/c/f/AllTests.tar.gz' + Saves the working Super Flow using the current name + :param name (string): The name of the template that should be empty. + :param force (bool): Force to save the working Super Flow with the same name. """ - return self._wrapper._export('/administration/operations/exportAllTests', **{'filepath': filepath}) + return self._wrapper.__post('/superflow/operations/save', **{'name': name, 'force': force}) - ### Reboots the compute node with cnId. + ### Saves the current working Application Profiles and gives it a new name. @staticmethod - def _topology_operations_rebootComputeNode(self, cnId): + def _superflow_operations_saveAs(self, name, force): """ - Reboots the compute node with cnId. - :param cnId (string): Compute node id + Saves the current working Application Profiles and gives it a new name. + :param name (string): The new name given for the current working Super Flow + :param force (bool): Force to save the working Super Flow using the given name. """ - return self._wrapper._post('/topology/operations/rebootComputeNode', **{'cnId': cnId}) + return self._wrapper.__post('/superflow/operations/saveAs', **{'name': name, 'force': force}) - ### Deletes a given Application Profile from the database. + ### null @staticmethod - def _appProfile_operations_delete(self, name): + def _superflow_operations_search(self, searchString, limit, sort, sortorder): """ - Deletes a given Application Profile from the database. - :param name (string): The name of the Application Profiles. + :param searchString (string): Search Super Flow name matching the string given. + :param limit (string): The limit of rows to return + :param sort (string): Parameter to sort by. + :param sortorder (string): The sort order (ascending/descending) """ - return self._wrapper._post('/appProfile/operations/delete', **{'name': name}) + return self._wrapper.__post('/superflow/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) - ### null + ### Lists all the component presets names. @staticmethod - def _network_operations_list(self, userid, clazz, sortorder, sort, limit, offset): + def _testmodel_component_operations_getComponentPresetNames(self, type='None'): """ - :param userid (string): - :param clazz (string): - :param sortorder (string): - :param sort (string): - :param limit (number): - :param offset (number): - :return returnArg (list): + Lists all the component presets names. + :param type (string): The Component type. + All the component types are listed under the node testComponentTypesDescription. + If this argument is not set, all the presets will be listed. + :return result (list): list of object with fields - name (string): + id (string): + label (string): type (string): - author (string): - createdOn (string): - """ - return self._wrapper._post('/network/operations/list', **{'userid': userid, 'clazz': clazz, 'sortorder': sortorder, 'sort': sort, 'limit': limit, 'offset': offset}) - - ### Removes an action from the current working SuperFlow. - @staticmethod - def _superflow_operations_removeAction(self, id): - """ - Removes an action from the current working SuperFlow. - :param id (number): The action ID. - """ - return self._wrapper._post('/superflow/operations/removeAction', **{'id': id}) - - ### Saves the current working Test Model under specified name. - @staticmethod - def _testmodel_operations_saveAs(self, name, force): - """ - Saves the current working Test Model under specified name. - :param name (string): The new name given for the current working Test Model - :param force (bool): Force to save the working Test Model using a new name. + description (string): """ - return self._wrapper._post('/testmodel/operations/saveAs', **{'name': name, 'force': force}) + return self._wrapper.__post('/testmodel/component/operations/getComponentPresetNames', **{'type': type}) - ### Saves the working Test Model using the current name. No need to configure. The current name is used. + ### Adds a new test component to the current working test model @staticmethod - def _testmodel_operations_save(self, name=None, force=True): + def _testmodel_operations_add(self, name, component, type, active): """ - Saves the working Test Model using the current name. No need to configure. The current name is used. - :param name (string): The name of the template that should be empty. - :param force (bool): Force to save the working Test Model with the same name. + Adds a new test component to the current working test model + :param name (string): Component Name + :param component (string): Component template, preset. + :param type (string): Component Type: appsim, sesionsender .. + :param active (bool): Set component enable (by default is active) or disable """ - return self._wrapper._post('/testmodel/operations/save', **{'name': name, 'force': force}) + return self._wrapper.__post('/testmodel/operations/add', **{'name': name, 'component': component, 'type': type, 'active': active}) - ### Removes a SuperFlow from the current working Application Profile. + ### Clones a component in the current working Test Model @staticmethod - def _appProfile_operations_remove(self, superflow): + def _testmodel_operations_clone(self, template, type, active): """ - Removes a SuperFlow from the current working Application Profile. - :param superflow (string): The name of the super flow. + Clones a component in the current working Test Model + :param template (string): The ID of the test component to clone. + :param type (string): Component Type: appsim, sesionsender .. + :param active (bool): Set component enable (by default is active) or disable """ - return self._wrapper._post('/appProfile/operations/remove', **{'superflow': superflow}) + return self._wrapper.__post('/testmodel/operations/clone', **{'template': template, 'type': type, 'active': active}) ### Deletes a given Test Model from the database. @staticmethod @@ -1140,653 +1111,699 @@ def _testmodel_operations_delete(self, name): Deletes a given Test Model from the database. :param name (string): The name of the Test Model. """ - return self._wrapper._post('/testmodel/operations/delete', **{'name': name}) + return self._wrapper.__post('/testmodel/operations/delete', **{'name': name}) - ### null + ### Exports a wanted test model by giving its name or its test run id.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _topology_operations_releaseResource(self, group, resourceId, resourceType): + def _testmodel_operations_exportModel(self, name, attachments, filepath, runid=None): """ - :param group (number): - :param resourceId (number): - :param resourceType (string): + Exports a wanted test model by giving its name or its test run id.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): The name of the test model to be exported. + :param attachments (bool): True if object attachments are needed. + :param filepath (string): The local path where to save the exported object. + :param runid (number): Test RUN ID """ - return self._wrapper._post('/topology/operations/releaseResource', **{'group': group, 'resourceId': resourceId, 'resourceType': resourceType}) + return self._wrapper.__export('/testmodel/operations/exportModel', **{'name': name, 'attachments': attachments, 'filepath': filepath, 'runid': runid}) - ### Imports all test models, actually imports everything from 'exportAllTests'. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Imports a test model, given as a file. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _administration_operations_importAllTests(self, name, filename, force): + def _testmodel_operations_importModel(self, name, filename, force): """ - Imports all test models, actually imports everything from 'exportAllTests'. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): String name to append to each test name. - :param filename (string): The file containing the object. + Imports a test model, given as a file. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): The name of the object being imported + :param filename (string): The file containing the object :param force (bool): Force to import the file and the object having the same name will be replaced. """ - return self._wrapper._import('/administration/operations/importAllTests', **{'name': name, 'filename': filename, 'force': force}) - - ### Loads an existing network config by name. - @staticmethod - def _network_operations_load(self, template): - """ - Loads an existing network config by name. - :param template (string): The name of the network neighborhood template - """ - return self._wrapper._post('/network/operations/load', **{'template': template}) + return self._wrapper.__import('/testmodel/operations/importModel', **{'name': name, 'filename': filename, 'force': force}) - ### Creates a new Network Neighborhood configuration with no name. The template value must remain empty. + ### Load an existing test model template. @staticmethod - def _network_operations_new(self, template=None): + def _testmodel_operations_load(self, template): """ - Creates a new Network Neighborhood configuration with no name. The template value must remain empty. - :param template (string): The name of the template. In this case will be empty. No need to configure. + Load an existing test model template. + :param template (string): The name of the template testmodel """ - return self._wrapper._post('/network/operations/new', **{'template': template}) + return self._wrapper.__post('/testmodel/operations/load', **{'template': template}) - ### null + ### Creates a new Test Model @staticmethod - def _superflow_flows_operations_getFlowChoices(self, id, name): + def _testmodel_operations_new(self, template=None): """ - :param id (number): The flow id. - :param name (string): The flow type/name. - :return result (list): + Creates a new Test Model + :param template (string): The name of the template. In this case will be empty. """ - return self._wrapper._post('/superflow/flows/operations/getFlowChoices', **{'id': id, 'name': name}) + return self._wrapper.__post('/testmodel/operations/new', **{'template': template}) - ### Reserves all l47 resources of given compute node id. + ### Retrieves the real time statistics for the running test, by giving the run id. @staticmethod - def _topology_operations_reserveAllCnResources(self, group, cnId): + def _testmodel_operations_realTimeStats(self, runid, rtsgroup, numSeconds, numDataPoints=1): """ - Reserves all l47 resources of given compute node id. - :param group (number): - :param cnId (string): + Retrieves the real time statistics for the running test, by giving the run id. + :param runid (number): Test RUN ID + :param rtsgroup (string): Real Time Stats group name. Values for this can be get from 'statistics' node, inside 'statNames' from each component at 'realtime Group' key/column. Examples: 'l7STats', 'all', 'bpslite', 'summary', 'clientStats' etc.Instead of a group name, it can be used a statistic name and the usage is: `fields:`Example: 'fields:txFrames' or 'fields:ethTxFrames, appIncomplete, rxFrameRate, etc'. + :param numSeconds (number): The number of seconds. If negative, means counting from the end. Example -1 means the last second from the moment of request. + :param numDataPoints (number): The number of data points, or set of values, on server side. The default is 1. In case of missing stats,because of requesting to many stats per second in real time,increase the value (grater than 1) + :return result (object): + object of object with fields + testStuck (bool): + time (number): + progress (number): + values (string): """ - return self._wrapper._post('/topology/operations/reserveAllCnResources', **{'group': group, 'cnId': cnId}) + return self._wrapper.__post('/testmodel/operations/realTimeStats', **{'runid': runid, 'rtsgroup': rtsgroup, 'numSeconds': numSeconds, 'numDataPoints': numDataPoints}) - ### Load an existing Super Flow and sets it as the current one. + ### Removes a component from the current working Test Model. @staticmethod - def _superflow_operations_load(self, template): + def _testmodel_operations_remove(self, id): """ - Load an existing Super Flow and sets it as the current one. - :param template (string): The name of the existing Super Flow template + Removes a component from the current working Test Model. + :param id (string): The component id. """ - return self._wrapper._post('/superflow/operations/load', **{'template': template}) + return self._wrapper.__post('/testmodel/operations/remove', **{'id': id}) - ### Creates a new Super Flow. + ### Runs a Test. @staticmethod - def _superflow_operations_new(self, template=None): + def _testmodel_operations_run(self, modelname, group, allowMalware=False): """ - Creates a new Super Flow. - :param template (string): The name of the template. In this case will be empty. + Runs a Test. + :param modelname (string): Test Name to run + :param group (number): Group to run + :param allowMalware (bool): Enable this option to allow malware in test. """ - return self._wrapper._post('/superflow/operations/new', **{'template': template}) + return self._wrapper.__post('/testmodel/operations/run', **{'modelname': modelname, 'group': group, 'allowMalware': allowMalware}) - ### null + ### Saves the working Test Model using the current name. No need to configure. The current name is used. @staticmethod - def _administration_operations_logs(self, error=False, messages=False, web=False, all=False, audit=False, info=False, system=False, lines=20, drop=0): + def _testmodel_operations_save(self, name=None, force=True): """ - :param error (bool): - :param messages (bool): - :param web (bool): - :param all (bool): - :param audit (bool): - :param info (bool): - :param system (bool): - :param lines (number): number lines to return - :param drop (number): number lines to drop + Saves the working Test Model using the current name. No need to configure. The current name is used. + :param name (string): The name of the template that should be empty. + :param force (bool): Force to save the working Test Model with the same name. """ - return self._wrapper._post('/administration/operations/logs', **{'error': error, 'messages': messages, 'web': web, 'all': all, 'audit': audit, 'info': info, 'system': system, 'lines': lines, 'drop': drop}) + return self._wrapper.__post('/testmodel/operations/save', **{'name': name, 'force': force}) - ### null + ### Saves the current working Test Model under specified name. @staticmethod - def _superflow_operations_search(self, searchString, limit, sort, sortorder): + def _testmodel_operations_saveAs(self, name, force): """ - :param searchString (string): Search Super Flow name matching the string given. - :param limit (string): The limit of rows to return - :param sort (string): Parameter to sort by. - :param sortorder (string): The sort order (ascending/descending) + Saves the current working Test Model under specified name. + :param name (string): The new name given for the current working Test Model + :param force (bool): Force to save the working Test Model using a new name. """ - return self._wrapper._post('/superflow/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) + return self._wrapper.__post('/testmodel/operations/saveAs', **{'name': name, 'force': force}) ### null @staticmethod - def _appProfile_operations_search(self, searchString, limit, sort, sortorder): + def _testmodel_operations_search(self, searchString, limit, sort, sortorder): """ - :param searchString (string): Search application profile name matching the string given. + :param searchString (string): Search test name matching the string given. :param limit (string): The limit of rows to return - :param sort (string): Parameter to sort by. - :param sortorder (string): The sort order (ascending/descending) - :return appprofile (list): + :param sort (string): Parameter to sort by: 'createdOn'/'timestamp'/'bandwidth'/'result'/'lastrunby'/'createdBy'/'interfaces'/'testLabType' + :param sortorder (string): The sort order: ascending/descending + :return testmodel (list): list of object with fields name (string): label (string): createdBy (string): - createdOn (string): - revision (number): + network (string): + duration (number): description (string): """ - return self._wrapper._post('/appProfile/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) + return self._wrapper.__post('/testmodel/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) - ### Load an existing Application Profile and sets it as the current one. + ### Stops the test run. @staticmethod - def _appProfile_operations_load(self, template): + def _testmodel_operations_stopRun(self, runid): """ - Load an existing Application Profile and sets it as the current one. - :param template (string): The name of the template application profile + Stops the test run. + :param runid (number): Test RUN ID """ - return self._wrapper._post('/appProfile/operations/load', **{'template': template}) + return self._wrapper.__post('/testmodel/operations/stopRun', **{'runid': runid}) - ### Creates a new Application Profile. + ### Adds a note to given port. @staticmethod - def _appProfile_operations_new(self, template=None): + def _topology_operations_addPortNote(self, interface, note): """ - Creates a new Application Profile. - :param template (string): This argument must remain unset. Do not set any value for it. + Adds a note to given port. + :param interface (object): Slot and Port ID. + object of object with fields + slot (number): + port (string): + :param note (string): Note info. """ - return self._wrapper._post('/appProfile/operations/new', **{'template': template}) + return self._wrapper.__post('/topology/operations/addPortNote', **{'interface': interface, 'note': note}) - ### Removes a strike from the current working Strike List.([{id: 'bb/c/d'}, {id: 'aa/f/g'}]) + ### Adds a note to given resource. @staticmethod - def _strikeList_operations_remove(self, strike): + def _topology_operations_addResourceNote(self, resourceId, resourceType): """ - Removes a strike from the current working Strike List.([{id: 'bb/c/d'}, {id: 'aa/f/g'}]) - :param strike (list): The list of strike ids to remove. The strike id is in fact the it's path. - list of object with fields - id (string): + Adds a note to given resource. + :param resourceId (string): Resource Id. + :param resourceType (string): Resource type. """ - return self._wrapper._post('/strikeList/operations/remove', **{'strike': strike}) + return self._wrapper.__post('/topology/operations/addResourceNote', **{'resourceId': resourceId, 'resourceType': resourceType}) - ### close active session + ### Exports a port capture from a test run.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _administration_sessions_operations_close(self, session): + def _topology_operations_exportCapture(self, filepath, args): """ - close active session - :param session (string): + Exports a port capture from a test run.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param filepath (string): The local path where to save the exported object. + :param args (object): Export filters. The Possible values for: 'dir'(direction) are 'tx','rx','both';for 'sizetype' and 'starttype'(units for size and start) are 'megabytes' or 'frames' + object of object with fields + port (string): Port label + slot (number): Slot number + dir (string): Capturing direction (rx, tx, both) + size (number): The size of the capture to be exported. + start (number): Start at point. + sizetype (string): The size unit: megabytes or frames. + starttype (string): The start unit: megabytes or frames. """ - return self._wrapper._post('/administration/sessions/operations/close', **{'session': session}) + return self._wrapper.__export('/topology/operations/exportCapture', **{'filepath': filepath, 'args': args}) - ### Imports a list of strikes residing in a file. + ### Gets the card Fanout modes of a board. @staticmethod - def _strikeList_operations_importStrikeList(self, name, filename, force): + def _topology_operations_getFanoutModes(self, cardId): """ - Imports a list of strikes residing in a file. - :param name (string): The name of the object being imported - :param filename (string): The file containing the object to be imported. - :param force (bool): Force to import the file and the object having the same name will be replaced. + Gets the card Fanout modes of a board. + :param cardId (number): Slot ID. + :return modes (object): Fanout mode id per card type. """ - return self._wrapper._import('/strikeList/operations/importStrikeList', **{'name': name, 'filename': filename, 'force': force}) + return self._wrapper.__post('/topology/operations/getFanoutModes', **{'cardId': cardId}) - ### null + ### Get available port fan-out modes. @staticmethod - def _superflow_actions_operations_getActionChoices(self, id): + def _topology_operations_getPortAvailableModes(self, cardId, port): """ - :param id (number): the flow id + Get available port fan-out modes. + :param cardId (number): Slot id + :param port (number): Port id to be interrogated + :return modes (object): Available port switch modes. """ - return self._wrapper._post('/superflow/actions/operations/getActionChoices', **{'id': id}) + return self._wrapper.__post('/topology/operations/getPortAvailableModes', **{'cardId': cardId, 'port': port}) - ### null + ### Reboots the slot with slotId. @staticmethod - def _reports_operations_search(self, searchString, limit, sort, sortorder): + def _topology_operations_reboot(self, board): """ - :param searchString (string): Search test name matching the string given. - :param limit (string): The limit of rows to return - :param sort (string): Parameter to sort by: 'name'/'endTime'/'duration'/'result'/'startTime'/'iteration'/'network'/'dut'/'user'/'size' - :param sortorder (string): The sort order: ascending/descending + Reboots the slot with slotId. + :param board (number): + """ + return self._wrapper.__post('/topology/operations/reboot', **{'board': board}) + + ### Reboots the compute node with cnId. + @staticmethod + def _topology_operations_rebootComputeNode(self, cnId): + """ + Reboots the compute node with cnId. + :param cnId (string): Compute node id """ - return self._wrapper._post('/reports/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) + return self._wrapper.__post('/topology/operations/rebootComputeNode', **{'cnId': cnId}) ### null @staticmethod - def _results_operations_getHistoricalResultSize(self, runid, componentid, group): + def _topology_operations_releaseAllCnResources(self, cnId): """ - :param runid (number): The test run id - :param componentid (string): The component identifier - :param group (string): The data group or one of the BPS component main groups. The group name can be get by executing the operation 'getGroups' from results node - :return result (string): + :param cnId (string): """ - return self._wrapper._post('/results/operations/getHistoricalResultSize', **{'runid': runid, 'componentid': componentid, 'group': group}) + return self._wrapper.__post('/topology/operations/releaseAllCnResources', **{'cnId': cnId}) - ### Disconnects from a remote chassis in order to release remote resources.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### null @staticmethod - def _remote_operations_disconnectChassis(self, address, port): + def _topology_operations_releaseResource(self, group, resourceId, resourceType): """ - Disconnects from a remote chassis in order to release remote resources.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param address (string): Remote chassis address. - :param port (number): Remote connection port. + :param group (number): + :param resourceId (number): + :param resourceType (string): """ - return self._wrapper._post('/remote/operations/disconnectChassis', **{'address': address, 'port': port}) + return self._wrapper.__post('/topology/operations/releaseResource', **{'group': group, 'resourceId': resourceId, 'resourceType': resourceType}) - ### Removes a component from the current working Test Model. + ### null @staticmethod - def _testmodel_operations_remove(self, id): + def _topology_operations_releaseResources(self, count, resourceType, slotId): """ - Removes a component from the current working Test Model. - :param id (string): The component id. + :param count (number): + :param resourceType (string): + :param slotId (number): """ - return self._wrapper._post('/testmodel/operations/remove', **{'id': id}) + return self._wrapper.__post('/topology/operations/releaseResources', **{'count': count, 'resourceType': resourceType, 'slotId': slotId}) - ### Get available port fan-out modes. + ### null @staticmethod - def _topology_operations_getPortAvailableModes(self, cardId, port): + def _topology_operations_reserve(self, reservation, force=False): """ - Get available port fan-out modes. - :param cardId (number): Slot id - :param port (number): Port id to be interrogated - :return modes (object): Available port switch modes. + :param reservation (list): Reserves one or more ports + list of object with fields + group (number): + slot (number): + port (string): + capture (bool): + :param force (bool): """ - return self._wrapper._post('/topology/operations/getPortAvailableModes', **{'cardId': cardId, 'port': port}) + return self._wrapper.__post('/topology/operations/reserve', **{'reservation': reservation, 'force': force}) - ### Recompute percentages in the current working Application Profile + ### Reserves all l47 resources of given compute node id. @staticmethod - def _appProfile_operations_recompute(self): + def _topology_operations_reserveAllCnResources(self, group, cnId): """ - Recompute percentages in the current working Application Profile + Reserves all l47 resources of given compute node id. + :param group (number): + :param cnId (string): """ - return self._wrapper._post('/appProfile/operations/recompute', **{}) + return self._wrapper.__post('/topology/operations/reserveAllCnResources', **{'group': group, 'cnId': cnId}) - ### null + ### Reserves the specified resource of the given type. @staticmethod - def _loadProfile_operations_load(self, template): + def _topology_operations_reserveResource(self, group, resourceId, resourceType): """ - :param template (string): + Reserves the specified resource of the given type. + :param group (number): + :param resourceId (number): + :param resourceType (string): """ - return self._wrapper._post('/loadProfile/operations/load', **{'template': template}) + return self._wrapper.__post('/topology/operations/reserveResource', **{'group': group, 'resourceId': resourceId, 'resourceType': resourceType}) - ### Adds a list of strikes to the current working Strike List.([{id: 'b/b/v/f'}, {id: 'aa/f/h'}]) + ### Reserves the specified number of resources of given type. @staticmethod - def _strikeList_operations_add(self, strike, validate=True, toList=None): + def _topology_operations_reserveResources(self, group, count, resourceType, slotId): """ - Adds a list of strikes to the current working Strike List.([{id: 'b/b/v/f'}, {id: 'aa/f/h'}]) - :param strike (list): The list of strikes to add. - list of object with fields - id (string): Strike path. - :param validate (bool): Validate the strikes in the given list. - :param toList (string): All provided strikes will be added to this list. If not existing it will be created + Reserves the specified number of resources of given type. + :param group (number): + :param count (number): + :param resourceType (string): + :param slotId (number): """ - return self._wrapper._post('/strikeList/operations/add', **{'strike': strike, 'validate': validate, 'toList': toList}) + return self._wrapper.__post('/topology/operations/reserveResources', **{'group': group, 'count': count, 'resourceType': resourceType, 'slotId': slotId}) - ### Adds a note to given resource. + ### Runs a Test. @staticmethod - def _topology_operations_addResourceNote(self, resourceId, resourceType): + def _topology_operations_run(self, modelname, group, allowMalware=False): """ - Adds a note to given resource. - :param resourceId (string): Resource Id. - :param resourceType (string): Resource type. + Runs a Test. + :param modelname (string): Test Name to run + :param group (number): Group to run + :param allowMalware (bool): Enable this option to allow malware in test. """ - return self._wrapper._post('/topology/operations/addResourceNote', **{'resourceId': resourceId, 'resourceType': resourceType}) + return self._wrapper.__post('/topology/operations/run', **{'modelname': modelname, 'group': group, 'allowMalware': allowMalware}) - ### Saves the current working Test Model under specified name. + ### Sets the card fanout of a board @staticmethod - def _evasionProfile_operations_saveAs(self, name, force): + def _topology_operations_setCardFanout(self, board, fanid): """ - Saves the current working Test Model under specified name. - :param name (string): The new name given for the current working Evasion Profile - :param force (bool): Force to save the working Evasion Profile using a new name. + Sets the card fanout of a board + :param board (number): Slot ID. + :param fanid (number): The fan type represented by an integer id. + Get card specific fanout modes by calling 'topology.getFanoutModes()'. + For CloudStorm: 0(100G), 1(40G), 2(25G), 3(10G), 4(50G). + For PerfectStorm 40G: 0(40G), 1(10G). + For PerfectStorm 100G: 0(100G), 1(40G), 2(10G) """ - return self._wrapper._post('/evasionProfile/operations/saveAs', **{'name': name, 'force': force}) + return self._wrapper.__post('/topology/operations/setCardFanout', **{'board': board, 'fanid': fanid}) - ### Saves the working Test Model using the current name. No need to configure. The current name is used. + ### Sets the card mode of a board. @staticmethod - def _evasionProfile_operations_save(self, name=None, force=True): + def _topology_operations_setCardMode(self, board, mode): """ - Saves the working Test Model using the current name. No need to configure. The current name is used. - :param name (string): This argument should be empty for saving the profile using it's actual name. - :param force (bool): Force to save the working profile with the same name. + Sets the card mode of a board. + :param board (number): Slot ID. + :param mode (number): The new mode: 10(BPS-L23), 7(BPS L4-7), 3(IxLoad), + 11(BPS QT L2-3), 12(BPS QT L4-7) """ - return self._wrapper._post('/evasionProfile/operations/save', **{'name': name, 'force': force}) + return self._wrapper.__post('/topology/operations/setCardMode', **{'board': board, 'mode': mode}) - ### Stops the test run. + ### Sets the card speed of a board @staticmethod - def _testmodel_operations_stopRun(self, runid): + def _topology_operations_setCardSpeed(self, board, speed): """ - Stops the test run. - :param runid (number): Test RUN ID + Sets the card speed of a board + :param board (number): Slot ID. + :param speed (number): The new speed.(the int value for 1G is 1000, 10G(10000), 40G(40000)) """ - return self._wrapper._post('/testmodel/operations/stopRun', **{'runid': runid}) + return self._wrapper.__post('/topology/operations/setCardSpeed', **{'board': board, 'speed': speed}) - ### Stops the test run. + ### Enables/Disables the performance acceleration for a BPS VE blade. @staticmethod - def _topology_operations_stopRun(self, runid): + def _topology_operations_setPerfAcc(self, board, perfacc): """ - Stops the test run. - :param runid (number): Test RUN ID + Enables/Disables the performance acceleration for a BPS VE blade. + :param board (number): Slot ID. + :param perfacc (bool): Boolean value: 'True' to enable the performance Acceleration and 'False' otherwise. """ - return self._wrapper._post('/topology/operations/stopRun', **{'runid': runid}) + return self._wrapper.__post('/topology/operations/setPerfAcc', **{'board': board, 'perfacc': perfacc}) - ### Deletes a given Super Flow from the database. + ### Switch port fan-out mode. @staticmethod - def _superflow_operations_delete(self, name): + def _topology_operations_setPortFanoutMode(self, board, port, mode): """ - Deletes a given Super Flow from the database. - :param name (string): The name of the Super Flow. + Switch port fan-out mode. + :param board (number): + :param port (string): + :param mode (string): """ - return self._wrapper._post('/superflow/operations/delete', **{'name': name}) + return self._wrapper.__post('/topology/operations/setPortFanoutMode', **{'board': board, 'port': port, 'mode': mode}) - ### Saves the current working Application Profiles and gives it a new name. + ### null @staticmethod - def _appProfile_operations_saveAs(self, name, force): + def _topology_operations_setPortSettings(self, linkState, autoNegotiation, precoder, slotId, portId): """ - Saves the current working Application Profiles and gives it a new name. - :param name (string): The new name given for the current working Application Profile - :param force (bool): Force to save the working Application Profile using the given name. + :param linkState (string): + :param autoNegotiation (bool): + :param precoder (bool): + :param slotId (number): + :param portId (string): """ - return self._wrapper._post('/appProfile/operations/saveAs', **{'name': name, 'force': force}) + return self._wrapper.__post('/topology/operations/setPortSettings', **{'linkState': linkState, 'autoNegotiation': autoNegotiation, 'precoder': precoder, 'slotId': slotId, 'portId': portId}) - ### Saves the current working application profile using the current name. No need to use any parameter. + ### Reboots the metwork processors on the given card card. Only available for APS cards. @staticmethod - def _appProfile_operations_save(self, name=None, force=True): + def _topology_operations_softReboot(self, board, cnId): """ - Saves the current working application profile using the current name. No need to use any parameter. - :param name (string): The name of the template. No need to configure. The current name is used. - :param force (bool): Force to save the working Application Profile with the same name. No need to configure. The default is used. + Reboots the metwork processors on the given card card. Only available for APS cards. + :param board (number): + :param cnId (string): """ - return self._wrapper._post('/appProfile/operations/save', **{'name': name, 'force': force}) + return self._wrapper.__post('/topology/operations/softReboot', **{'board': board, 'cnId': cnId}) - ### null + ### Stops the test run. @staticmethod - def _strikeList_operations_search(self, searchString='', limit=10, sort='name', sortorder='ascending'): + def _topology_operations_stopRun(self, runid): """ - :param searchString (string): Search strike list name matching the string given. - :param limit (number): The limit of rows to return - :param sort (string): Parameter to sort by. Default is by name. - :param sortorder (string): The sort order (ascending/descending). Default is ascending. + Stops the test run. + :param runid (number): Test RUN ID """ - return self._wrapper._post('/strikeList/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) + return self._wrapper.__post('/topology/operations/stopRun', **{'runid': runid}) - ### Exports a port capture from a test run.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### null @staticmethod - def _topology_operations_exportCapture(self, filepath, args): + def _topology_operations_unreserve(self, unreservation): """ - Exports a port capture from a test run.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param filepath (string): The local path where to save the exported object. - :param args (object): Export filters. The Possible values for: 'dir'(direction) are 'tx','rx','both';for 'sizetype' and 'starttype'(units for size and start) are 'megabytes' or 'frames' - object of object with fields - port (string): Port label - slot (number): Slot number - dir (string): Capturing direction (rx, tx, both) - size (number): The size of the capture to be exported. - start (number): Start at point. - sizetype (string): The size unit: megabytes or frames. - starttype (string): The start unit: megabytes or frames. + :param unreservation (list): + list of object with fields + slot (number): + port (number): """ - return self._wrapper._export('/topology/operations/exportCapture', **{'filepath': filepath, 'args': args}) + return self._wrapper.__post('/topology/operations/unreserve', **{'unreservation': unreservation}) - ### Sets a User Preference. - @staticmethod - def _administration_userSettings_operations_changeUserSetting(self, name, value): - """ - Sets a User Preference. - :param name (string): The setting name. - :param value (string): The new value for setting. - """ - return self._wrapper._post('/administration/userSettings/operations/changeUserSetting', **{'name': name, 'value': value}) + ### login into the bps system + def login(self, **kwargs): + self.__connect() + loginData = {'username': self.user, 'password': self.password, 'sessionId': self.sessionId} + loginData.update(kwargs) + r = self.session.post(url='https://' + self.host + '/bps/api/v2/core/auth/login', data=json.dumps(loginData), headers={'content-type': 'application/json'}, verify=False) + if(r.status_code == 200): + self.serverVersions = self.__json_load(r) + apiServerVersion = 'N/A' + if self.serverVersions != None and 'apiServer' in self.serverVersions: + apiServerVersion = self.serverVersions['apiServer'] + if self.checkVersion: + if not apiServerVersion.startswith(self.clientVersion): + if self.serverVersions and apiServerVersion > self.clientVersion: + self.logout() + #self.printVersions() + raise Exception('Keysight Python REST-API Wrapper version is older than the BPS server version.\nThis is not a supported combination.\nPlease use the updated version of the wrapper provided with BPS system.') + if not self.serverVersions or apiServerVersion < self.clientVersion: + print("Warning: Keysight Python REST-API Wrapper version is newer than the BPS server version.\nSome of the functionalities included in the Python wrapper might not be supported by the REST API.") + #print('Login successful.\nWelcome %s. \nYour session id is %s' % (self.user, self.sessionId)) + else: + raise Exception('Login failed.\ncode:%s, content:%s' % (r.status_code, r.content)) + return self.serverVersions + + ### logout from the bps system + def logout(self): + self.serverVersions = None + r = self.session.post(url='https://' + self.host + '/bps/api/v2/core/auth/logout', data=json.dumps({'username': self.user, 'password': self.password, 'sessionId': self.sessionId}), headers={'content-type': 'application/json'}, verify=False) + if(r.status_code == 200): + #print('Logout successful. \nBye %s.' % self.user) + self.__disconnect() + else: + raise Exception('Logout failed: (%s, %s)' % (r.status_code, r.content)) + + def printVersions(self): + apiServerVersion = 'N/A' + if self.serverVersions != None and 'apiServer' in self.serverVersions: + apiServerVersion = self.serverVersions['apiServer'] + print('Client version: %s \nServer version: %s' % (self.clientVersion, apiServerVersion)) class DataModelMeta(type): _dataModel = { - 'strikeList': { - 'strikes': [{ - 'severity': { - }, - 'year': { - }, - 'variants': { - }, - 'reference': [{ - 'label': { + 'administration': { + 'atiLicensing': { + 'license': [{ + 'boardserialno': { }, - 'type': { + 'expires': { }, - 'value': { + 'issued': { + }, + 'issuedBy': { + }, + 'maintenance': { + 'maintenanceExpiration': { + } + }, + 'name': { + }, + 'serialno': { + }, + 'slotNo': { } }], - 'path': { - }, - 'protocol': { + 'operations': { + 'importAtiLicense': [{ + }] + } + }, + 'operations': { + 'exportAllTests': [{ + }], + 'importAllTests': [{ + }], + 'logs': [{ + }] + }, + 'sessions': [{ + 'age': { }, - 'fileSize': { + 'dataContext': { }, - 'fileExtension': { + 'inactivity': { }, - 'name': { + 'inactivityTimeout': { }, - 'id': { + 'note': { }, - 'category': { + 'operations': { + 'close': [{ + }], + 'list': [{ + 'age': { + }, + 'dataContext': { + }, + 'inactivity': { + }, + 'inactivityTimeout': { + }, + 'note': { + }, + 'session': { + }, + 'type': { + }, + 'user': { + } + }] }, - 'keyword': [{ - 'name': { - } - }], - 'direction': { + 'session': { }, - 'strike': { + 'type': { }, - 'strikeset': { + 'user': { } }], - 'author': { - }, - 'description': { - }, - 'label': { - }, - 'queryString': { - }, - 'SecurityBehavior': { - }, - 'StrikeOptions': { - }, - 'createdOn': { - }, - 'revision': { - }, - 'lockedBy': { - }, - 'createdBy': { - }, - 'name': { - }, - 'clazz': { - }, - 'numStrikes': { - }, - 'operations': { - 'exportStrikeList': [{ - }], - 'load': [{ - }], - 'new': [{ - }], - 'delete': [{ - }], - 'saveAs': [{ - }], - 'save': [{ - }], - 'remove': [{ - }], - 'importStrikeList': [{ - }], - 'add': [{ - }], - 'search': [{ - }] - } - }, - 'administration': { 'systemSettings': { - 'strikepackUpdate': { - 'password': { - }, - 'interval': { - }, - 'check': { - }, - 'username': { - } - }, 'author': { }, - 'description': { + 'clazz': { }, - 'label': { + 'createdBy': { + }, + 'createdOn': { + }, + 'description': { }, 'guardrailSettings': { 'enableStrictMode': { }, - 'testStop': { - }, - 'testStatusWarning': { - }, 'stopOnLinkdown': { }, 'testStartPrevention': { - } - }, - 'createdOn': { - }, - 'revision': { - }, - 'vacuumSettings': { - 'vacuumWindowHigh': { - }, - 'autoVacuum': { }, - 'vacuumWindowLow': { + 'testStatusWarning': { }, - 'vacuumWindowTZ': { + 'testStop': { } }, + 'label': { + }, 'lockedBy': { }, - 'createdBy': { + 'revision': { }, 'softwareUpdate': { - 'password': { + 'check': { }, 'interval': { }, - 'check': { + 'password': { }, 'username': { } }, - 'clazz': { - } - }, - 'atiLicensing': { - 'license': [{ - 'expires': { + 'strikepackUpdate': { + 'check': { }, - 'issuedBy': { + 'interval': { }, - 'name': { + 'password': { }, - 'boardserialno': { + 'username': { + } + }, + 'vacuumSettings': { + 'autoVacuum': { }, - 'issued': { + 'vacuumWindowHigh': { }, - 'slotNo': { + 'vacuumWindowLow': { }, - 'maintenance': { - 'maintenanceExpiration': { - } - }, - 'serialno': { + 'vacuumWindowTZ': { } - }], - 'operations': { - 'importAtiLicense': [{ - }] } }, 'userSettings': [{ - 'name': { - }, 'content': { }, + 'name': { + }, 'operations': { - 'setAutoReserve': [{ - }], 'changeUserSetting': [{ + }], + 'setAutoReserve': [{ }] } - }], - 'sessions': [{ - 'inactivityTimeout': { + }] + }, + 'appProfile': { + 'author': { + }, + 'clazz': { + }, + 'createdBy': { + }, + 'createdOn': { + }, + 'description': { + }, + 'label': { + }, + 'lockedBy': { + }, + 'name': { + }, + 'operations': { + 'add': [{ + }], + 'delete': [{ + }], + 'exportAppProfile': [{ + }], + 'importAppProfile': [{ + }], + 'load': [{ + }], + 'new': [{ + }], + 'recompute': [{ + }], + 'remove': [{ + }], + 'save': [{ + }], + 'saveAs': [{ + }], + 'search': [{ + }] + }, + 'revision': { + }, + 'superflow': [{ + 'author': { }, - 'session': { + 'clazz': { }, - 'inactivity': { + 'constraints': { }, - 'type': { + 'createdBy': { }, - 'user': { + 'createdOn': { }, - 'age': { + 'description': { }, - 'operations': { - 'list': [{ - 'inactivityTimeout': { - }, - 'session': { - }, - 'inactivity': { - }, - 'type': { - }, - 'user': { - }, - 'age': { - } - }], - 'close': [{ - }] - } - }], - 'operations': { - 'exportAllTests': [{ - }], - 'importAllTests': [{ - }], - 'logs': [{ - }] - } - }, - 'statistics': { - 'component': [{ - 'statNames': [{ - 'name': { - }, + 'estimate_bytes': { + }, + 'estimate_flows': { + }, + 'generated': { + }, + 'label': { + }, + 'lockedBy': { + }, + 'name': { + }, + 'params': { + }, + 'percentBandwidth': { + }, + 'percentFlows': { + }, + 'revision': { + }, + 'seed': { + }, + 'settings': [{ 'description': { }, - 'realtimeGroup': { - }, 'label': { }, + 'name': { + }, + 'realtimeGroup': { + }, 'units': { } }], - 'label': { + 'weight': { } - }] + }], + 'weightType': { + } }, 'capture': { - 'pcapFilesize': { - }, - 'avgPacketSize': { - }, 'author': { }, - 'udpPackets': { + 'avgFlowLength': { }, - 'description': { + 'avgPacketSize': { }, - 'label': { + 'clazz': { }, - 'createdOn': { + 'createdBy': { }, - 'name': { + 'createdOn': { }, - 'revision': { + 'description': { }, 'duration': { }, @@ -1794,4507 +1811,4563 @@ class DataModelMeta(type): }, 'ipv6Packets': { }, - 'lockedBy': { - }, - 'tcpPackets': { - }, - 'createdBy': { - }, - 'avgFlowLength': { + 'label': { }, - 'totalPackets': { + 'lockedBy': { }, - 'clazz': { + 'name': { }, 'operations': { - 'search': [{ - }], 'importCapture': [{ + }], + 'search': [{ }] - } - }, - 'evasionProfile': { - 'lockedBy': { }, - 'createdBy': { - }, - 'author': { + 'pcapFilesize': { }, - 'name': { + 'revision': { }, - 'description': { + 'tcpPackets': { }, - 'label': { + 'totalPackets': { }, + 'udpPackets': { + } + }, + 'evasionProfile': { 'StrikeOptions': { - 'TCP': { - 'DuplicateBadSyn': { - }, - 'DuplicateBadChecksum': { + 'COMMAND': { + 'Malicious': { }, - 'SneakAckHandshake': { + 'PadCommandWhitespace': { }, - 'AcknowledgeAllSegments': { + 'PadPathSlashes': { + } + }, + 'DCERPC': { + 'MaxFragmentSize': { }, - 'DuplicateBadSeq': { + 'MultiContextBind': { }, - 'SkipHandshake': { + 'MultiContextBindHead': { }, - 'SourcePort': { + 'MultiContextBindTail': { }, - 'MaxSegmentSize': { + 'UseObjectID': { + } + }, + 'EMAIL': { + 'EnvelopeType': { }, - 'DestinationPort': { + 'From': { }, - 'DuplicateBadReset': { + 'ShuffleHeaders': { }, - 'DestinationPortType': { + 'To': { + } + }, + 'Ethernet': { + 'MTU': { + } + }, + 'FILETRANSFER': { + 'CompressionMethod': { }, - 'DuplicateLastSegment': { + 'FtpTransferMethod': { }, - 'DuplicateNullFlags': { + 'Imap4Encoding': { }, - 'SegmentOrder': { + 'Pop3Encoding': { }, - 'SourcePortType': { - } - }, - 'JAVASCRIPT': { - 'Obfuscate': { + 'SmtpEncoding': { }, - 'Encoding': { + 'TransportProtocol': { } }, 'FTP': { - 'PadCommandWhitespace': { - }, - 'Username': { + 'AuthenticationType': { }, 'FTPEvasionLevel': { }, - 'AuthenticationType': { + 'PadCommandWhitespace': { }, 'Password': { + }, + 'Username': { } }, - 'IPv6': { - 'TC': { - } - }, - 'DCERPC': { - 'MultiContextBindHead': { + 'Global': { + 'AllowDeprecated': { }, - 'MultiContextBind': { + 'BehaviorOnTimeout': { }, - 'MultiContextBindTail': { + 'CachePoisoning': { }, - 'MaxFragmentSize': { + 'FalsePositives': { }, - 'UseObjectID': { + 'IOTimeout': { + }, + 'MaxTimeoutPerStrike': { } }, - 'RTF': { - 'FictitiousCW': { + 'HTML': { + 'HTMLUnicodeEncoding': { }, - 'ASCII_Escaping': { + 'HTMLUnicodeUTF7EncodingMode': { }, - 'MixedCase': { + 'HTMLUnicodeUTF8EncodingMode': { }, - 'WhiteSpace': { + 'HTMLUnicodeUTF8EncodingSize': { } }, - 'POP3': { - 'PadCommandWhitespace': { + 'HTTP': { + 'AuthenticationType': { }, - 'Username': { + 'Base64EncodePOSTData': { }, - 'POP3UseProxyMode': { + 'ClientChunkedTransfer': { }, - 'AuthenticationType': { + 'ClientChunkedTransferSize': { }, - 'Password': { - } - }, - 'Variations': { - 'Subset': { + 'DirectoryFakeRelative': { }, - 'Shuffle': { + 'DirectorySelfReference': { }, - 'VariantTesting': { + 'EncodeDoubleNibbleHex': { }, - 'Limit': { + 'EncodeDoublePercentHex': { }, - 'TestType': { - } - }, - 'OLE': { - 'RefragmentData': { - } - }, - 'HTML': { - 'HTMLUnicodeUTF8EncodingMode': { + 'EncodeFirstNibbleHex': { }, - 'HTMLUnicodeUTF8EncodingSize': { + 'EncodeHexAll': { }, - 'HTMLUnicodeEncoding': { + 'EncodeHexRandom': { }, - 'HTMLUnicodeUTF7EncodingMode': { - } - }, - 'EMAIL': { - 'EnvelopeType': { + 'EncodeSecondNibbleHex': { }, - 'ShuffleHeaders': { + 'EncodeUnicodeAll': { }, - 'To': { + 'EncodeUnicodeBareByte': { }, - 'From': { - } - }, - 'Global': { - 'FalsePositives': { + 'EncodeUnicodeInvalid': { }, - 'IOTimeout': { + 'EncodeUnicodePercentU': { }, - 'AllowDeprecated': { + 'EncodeUnicodeRandom': { }, - 'BehaviorOnTimeout': { + 'EndRequestFakeHTTPHeader': { }, - 'MaxTimeoutPerStrike': { + 'ForwardToBackSlashes': { }, - 'CachePoisoning': { - } - }, - 'MS_Exchange_Ports': { - 'SystemAttendant': { - } - }, - 'PDF': { - 'HexEncodeNames': { + 'GetParameterRandomPrepend': { }, - 'ShortFilterNames': { + 'HTTPServerProfile': { }, - 'RandomizeDictKeyOrder': { + 'HTTPTransportMethods': { }, - 'Version': { + 'IgnoreHeaders': { }, - 'PreHeaderData': { - } - }, - 'SNMP': { - 'CommunityString': { - } - }, - 'COMMAND': { - 'PadCommandWhitespace': { + 'MethodRandomInvalid': { }, - 'PadPathSlashes': { + 'MethodRandomizeCase': { }, - 'Malicious': { - } - }, - 'ICMP': { - 'DoEcho': { - } - }, - 'UDP': { - 'DestinationPortType': { + 'MethodURINull': { }, - 'SourcePort': { + 'MethodURISpaces': { }, - 'SourcePortType': { + 'MethodURITabs': { }, - 'DestinationPort': { - } - }, - 'IP': { - 'ReadWriteWindowSize': { + 'PadHTTPPost': { }, - 'RFC3128FakePort': { + 'Password': { }, - 'FragEvasion': { + 'PostParameterRandomPrepend': { }, - 'RFC3128': { + 'RequestFullURL': { }, - 'TTL': { + 'RequireLeadingSlash': { }, - 'MaxReadSize': { + 'ServerChunkedTransfer': { }, - 'RFC3514': { + 'ServerChunkedTransferSize': { }, - 'FragPolicy': { + 'ServerCompression': { }, - 'MaxFragSize': { + 'ShuffleHeaders': { }, - 'FragOrder': { + 'URIAppendAltSpaces': { }, - 'TOS': { + 'URIAppendAltSpacesSize': { }, - 'IPEvasionsOnBothSides': { + 'URIPrependAltSpaces': { + }, + 'URIPrependAltSpacesSize': { + }, + 'URIRandomizeCase': { }, - 'MaxWriteSize': { - } - }, - 'SMB': { 'Username': { }, - 'RandomPipeOffset': { + 'VersionRandomInvalid': { }, - 'MaxReadSize': { + 'VersionRandomizeCase': { }, - 'MaxWriteSize': { + 'VersionUse0_9': { }, - 'AuthenticationType': { + 'VirtualHostname': { }, - 'Password': { + 'VirtualHostnameType': { + } + }, + 'ICMP': { + 'DoEcho': { } }, 'IMAP4': { - 'Username': { + 'AuthenticationType': { }, 'IMAPUseProxyMode': { }, - 'AuthenticationType': { - }, 'Password': { + }, + 'Username': { } }, - 'HTTP': { - 'ClientChunkedTransferSize': { + 'IP': { + 'FragEvasion': { }, - 'EncodeUnicodeBareByte': { + 'FragOrder': { }, - 'VirtualHostname': { + 'FragPolicy': { }, - 'EncodeUnicodePercentU': { + 'IPEvasionsOnBothSides': { }, - 'GetParameterRandomPrepend': { + 'MaxFragSize': { }, - 'EncodeSecondNibbleHex': { + 'MaxReadSize': { }, - 'EncodeUnicodeInvalid': { + 'MaxWriteSize': { }, - 'ServerChunkedTransferSize': { + 'RFC3128': { }, - 'VersionRandomizeCase': { + 'RFC3128FakePort': { }, - 'URIRandomizeCase': { + 'RFC3514': { }, - 'AuthenticationType': { + 'ReadWriteWindowSize': { }, - 'ServerCompression': { + 'TOS': { }, - 'VirtualHostnameType': { + 'TTL': { + } + }, + 'IPv6': { + 'TC': { + } + }, + 'JAVASCRIPT': { + 'Encoding': { }, - 'URIPrependAltSpaces': { + 'Obfuscate': { + } + }, + 'MALWARE': { + 'CompressionMethod': { }, - 'URIPrependAltSpacesSize': { + 'FilenameInsertEnvVar': { }, - 'EncodeFirstNibbleHex': { + 'FtpTransferMethod': { }, - 'MethodRandomInvalid': { + 'Imap4Encoding': { }, - 'VersionRandomInvalid': { + 'Pop3Encoding': { }, - 'ServerChunkedTransfer': { + 'SmtpEncoding': { }, - 'EncodeDoublePercentHex': { + 'TransportProtocol': { + } + }, + 'MS_Exchange_Ports': { + 'SystemAttendant': { + } + }, + 'OLE': { + 'RefragmentData': { + } + }, + 'PDF': { + 'HexEncodeNames': { }, - 'URIAppendAltSpacesSize': { + 'PreHeaderData': { }, - 'EncodeHexRandom': { + 'RandomizeDictKeyOrder': { }, - 'DirectorySelfReference': { + 'ShortFilterNames': { }, - 'EndRequestFakeHTTPHeader': { + 'Version': { + } + }, + 'POP3': { + 'AuthenticationType': { }, - 'EncodeUnicodeAll': { + 'POP3UseProxyMode': { }, - 'EncodeUnicodeRandom': { + 'PadCommandWhitespace': { }, - 'Base64EncodePOSTData': { + 'Password': { }, - 'IgnoreHeaders': { + 'Username': { + } + }, + 'RTF': { + 'ASCII_Escaping': { }, - 'RequestFullURL': { + 'FictitiousCW': { }, - 'HTTPTransportMethods': { + 'MixedCase': { }, - 'Password': { + 'WhiteSpace': { + } + }, + 'SELF': { + 'AREA-ID': { }, - 'MethodRandomizeCase': { + 'AS-ID': { }, - 'MethodURISpaces': { + 'AppSimAppProfile': { }, - 'ShuffleHeaders': { + 'AppSimSmartflow': { }, - 'DirectoryFakeRelative': { + 'AppSimSuperflow': { }, - 'URIAppendAltSpaces': { + 'AppSimUseNewTuple': { }, - 'MethodURITabs': { + 'ApplicationPings': { }, - 'RequireLeadingSlash': { + 'DelaySeconds': { }, - 'EncodeDoubleNibbleHex': { + 'EndingFuzzerOffset': { }, - 'ForwardToBackSlashes': { + 'FileTransferExtension': { }, - 'PadHTTPPost': { + 'FileTransferFile': { }, - 'MethodURINull': { + 'FileTransferName': { }, - 'Username': { + 'FileTransferRandCase': { }, - 'VersionUse0_9': { + 'HTMLPadding': { }, - 'EncodeHexAll': { + 'MaximumIterations': { }, - 'PostParameterRandomPrepend': { + 'MaximumRuntime': { }, - 'ClientChunkedTransfer': { + 'Password': { }, - 'HTTPServerProfile': { - } - }, - 'SELF': { - 'ApplicationPings': { + 'ROUTER-ID': { }, - 'TraversalVirtualDirectory': { + 'Repetitions': { }, - 'AppSimUseNewTuple': { + 'ReportCLSIDs': { }, 'StartingFuzzerOffset': { }, - 'URI': { - }, - 'FileTransferRandCase': { - }, - 'UnicodeTraversalWindowsDirectory': { - }, - 'AREA-ID': { + 'TraversalRequestFilename': { }, - 'AppSimAppProfile': { + 'TraversalVirtualDirectory': { }, - 'Repetitions': { + 'TraversalWindowsDirectory': { }, - 'FileTransferExtension': { + 'URI': { }, - 'Password': { + 'UnicodeTraversalVirtualDirectory': { }, - 'AppSimSmartflow': { + 'UnicodeTraversalWindowsDirectory': { }, - 'HTMLPadding': { + 'Username': { + } + }, + 'SHELLCODE': { + 'RandomNops': { + } + }, + 'SIP': { + 'CompactHeaders': { }, - 'MaximumIterations': { + 'EnvelopeType': { }, - 'FileTransferFile': { + 'From': { }, - 'AS-ID': { + 'PadHeadersLineBreak': { }, - 'AppSimSuperflow': { + 'PadHeadersWhitespace': { }, - 'EndingFuzzerOffset': { + 'RandomizeCase': { }, - 'ReportCLSIDs': { + 'ShuffleHeaders': { }, - 'DelaySeconds': { + 'To': { + } + }, + 'SMB': { + 'AuthenticationType': { }, - 'Username': { + 'MaxReadSize': { }, - 'UnicodeTraversalVirtualDirectory': { + 'MaxWriteSize': { }, - 'TraversalWindowsDirectory': { + 'Password': { }, - 'FileTransferName': { + 'RandomPipeOffset': { }, - 'MaximumRuntime': { + 'Username': { + } + }, + 'SMTP': { + 'PadCommandWhitespace': { }, - 'ROUTER-ID': { + 'SMTPUseProxyMode': { }, - 'TraversalRequestFilename': { + 'ShuffleHeaders': { } }, - 'SHELLCODE': { - 'RandomNops': { + 'SNMP': { + 'CommunityString': { } }, 'SSL': { - 'ClientCertificateFile': { + 'Cipher': { }, - 'EnableOnAllTCP': { + 'ClientCertificateFile': { }, - 'SecurityProtocol': { + 'ClientKeyFile': { }, 'DestPortOverride': { }, - 'ServerCertificateFile': { - }, - 'ServerKeyFile': { + 'DisableDefaultStrikeSSL': { }, 'EnableOnAllHTTP': { }, - 'ClientKeyFile': { + 'EnableOnAllTCP': { }, - 'Cipher': { + 'SecurityProtocol': { }, - 'DisableDefaultStrikeSSL': { + 'ServerCertificateFile': { + }, + 'ServerKeyFile': { } }, 'SUNRPC': { + 'NullCredentialPadding': { + }, 'OneFragmentMultipleTCPSegmentsCount': { }, 'RPCFragmentTCPSegmentDistribution': { }, 'TCPFragmentSize': { - }, - 'NullCredentialPadding': { } }, - 'FILETRANSFER': { - 'SmtpEncoding': { + 'TCP': { + 'AcknowledgeAllSegments': { }, - 'CompressionMethod': { + 'DestinationPort': { }, - 'FtpTransferMethod': { + 'DestinationPortType': { }, - 'TransportProtocol': { + 'DuplicateBadChecksum': { }, - 'Imap4Encoding': { + 'DuplicateBadReset': { }, - 'Pop3Encoding': { - } - }, - 'UNIX': { - 'PadCommandWhitespace': { + 'DuplicateBadSeq': { }, - 'PadPathSlashes': { - } - }, - 'SMTP': { - 'SMTPUseProxyMode': { + 'DuplicateBadSyn': { }, - 'PadCommandWhitespace': { + 'DuplicateLastSegment': { }, - 'ShuffleHeaders': { - } - }, - 'Ethernet': { - 'MTU': { - } - }, - 'MALWARE': { - 'FilenameInsertEnvVar': { + 'DuplicateNullFlags': { }, - 'SmtpEncoding': { + 'MaxSegmentSize': { }, - 'CompressionMethod': { + 'SegmentOrder': { }, - 'FtpTransferMethod': { + 'SkipHandshake': { }, - 'TransportProtocol': { + 'SneakAckHandshake': { }, - 'Imap4Encoding': { + 'SourcePort': { }, - 'Pop3Encoding': { + 'SourcePortType': { } }, - 'SIP': { - 'EnvelopeType': { + 'UDP': { + 'DestinationPort': { }, - 'CompactHeaders': { + 'DestinationPortType': { }, - 'PadHeadersWhitespace': { + 'SourcePort': { }, - 'RandomizeCase': { + 'SourcePortType': { + } + }, + 'UNIX': { + 'PadCommandWhitespace': { }, - 'ShuffleHeaders': { + 'PadPathSlashes': { + } + }, + 'Variations': { + 'Limit': { }, - 'To': { + 'Shuffle': { }, - 'From': { + 'Subset': { }, - 'PadHeadersLineBreak': { + 'TestType': { + }, + 'VariantTesting': { } }, 'operations': { 'getStrikeOptions': [{ - 'name': { - }, 'description': { }, - 'realtimeGroup': { - }, 'label': { }, + 'name': { + }, + 'realtimeGroup': { + }, 'units': { } }] } }, - 'createdOn': { + 'author': { }, 'clazz': { }, - 'revision': { + 'createdBy': { }, - 'operations': { - 'search': [{ - }], - 'load': [{ - }], - 'new': [{ - }], + 'createdOn': { + }, + 'description': { + }, + 'label': { + }, + 'lockedBy': { + }, + 'name': { + }, + 'operations': { 'delete': [{ }], - 'saveAs': [{ + 'load': [{ + }], + 'new': [{ }], 'save': [{ + }], + 'saveAs': [{ + }], + 'search': [{ }] + }, + 'revision': { } }, 'loadProfile': { + 'author': { + }, + 'clazz': { + }, + 'createdBy': { + }, + 'createdOn': { + }, + 'description': { + }, + 'label': { + }, + 'lockedBy': { + }, + 'name': { + }, + 'operations': { + 'createNewCustom': [{ + }], + 'delete': [{ + }], + 'load': [{ + }], + 'save': [{ + }], + 'saveAs': [{ + }] + }, + 'phase': [{ + 'duration': { + }, + 'phaseId': { + }, + 'rampDist.steadyBehavior': { + }, + 'rateDist.min': { + }, + 'rateDist.scope': { + }, + 'rateDist.type': { + }, + 'rateDist.unit': { + }, + 'sessions.max': { + }, + 'sessions.maxPerSecond': { + }, + 'type': { + } + }], 'presets': [{ + 'author': { + }, + 'clazz': { + }, + 'createdBy': { + }, + 'createdOn': { + }, + 'description': { + }, + 'label': { + }, + 'lockedBy': { + }, + 'name': { + }, 'phase': [{ 'duration': { }, 'phaseId': { }, - 'type': { + 'rampDist.steadyBehavior': { }, - 'sessions.max': { + 'rateDist.min': { }, - 'sessions.maxPerSecond': { + 'rateDist.scope': { }, - 'rateDist.unit': { + 'rateDist.type': { }, - 'rateDist.min': { + 'rateDist.unit': { }, - 'rampDist.steadyBehavior': { + 'sessions.max': { }, - 'rateDist.type': { + 'sessions.maxPerSecond': { }, - 'rateDist.scope': { + 'type': { } }], - 'author': { - }, 'regen': { }, - 'description': { - }, - 'label': { - }, - 'createdOn': { + 'revision': { }, 'summaryData': { - 'deviceType': { - }, - 'unknownUdpAppNames': { + 'activeFlowsSum': { }, - 'unknownSslSuperflowName': { + 'appStat': [{ + }], + 'basisOfRegeneration': { }, - 'magicNumber': { + 'deviceType': { }, 'downloadBytesSum': { }, - 'version': { + 'dynamicAppNames': { }, - 'phaseDuration': { + 'dynamicSuperflowName': { }, - 'unknownTcpAppNames': { + 'endTime': { }, - 'uploadBytesSum': { + 'magicNumber': { }, - 'summaryName': { + 'miniSlotDuration': { }, - 'basisOfRegeneration': { + 'phaseDuration': { }, - 'activeFlowsSum': { + 'startTime': { }, - 'miniSlotDuration': { + 'summaryName': { }, 'unknownSslAppNames': { }, - 'dynamicSuperflowName': { + 'unknownSslSuperflowName': { }, - 'appStat': [{ - }], - 'startTime': { + 'unknownTcpAppNames': { }, - 'endTime': { + 'unknownUdpAppNames': { }, - 'dynamicAppNames': { + 'uploadBytesSum': { + }, + 'version': { } - }, - 'revision': { - }, - 'lockedBy': { - }, - 'createdBy': { - }, - 'name': { - }, - 'clazz': { } }], - 'phase': [{ - 'duration': { - }, - 'phaseId': { - }, - 'type': { - }, - 'sessions.max': { - }, - 'sessions.maxPerSecond': { - }, - 'rateDist.unit': { - }, - 'rateDist.min': { - }, - 'rampDist.steadyBehavior': { - }, - 'rateDist.type': { - }, - 'rateDist.scope': { - } - }], - 'author': { - }, 'regen': { }, - 'description': { - }, - 'label': { - }, - 'createdOn': { + 'revision': { }, 'summaryData': { - 'deviceType': { - }, - 'unknownUdpAppNames': { + 'activeFlowsSum': { }, - 'unknownSslSuperflowName': { + 'appStat': [{ + }], + 'basisOfRegeneration': { }, - 'magicNumber': { + 'deviceType': { }, 'downloadBytesSum': { }, - 'version': { + 'dynamicAppNames': { }, - 'phaseDuration': { + 'dynamicSuperflowName': { }, - 'unknownTcpAppNames': { + 'endTime': { }, - 'uploadBytesSum': { + 'magicNumber': { }, - 'summaryName': { + 'miniSlotDuration': { }, - 'basisOfRegeneration': { + 'phaseDuration': { }, - 'activeFlowsSum': { + 'startTime': { }, - 'miniSlotDuration': { + 'summaryName': { }, 'unknownSslAppNames': { }, - 'dynamicSuperflowName': { + 'unknownSslSuperflowName': { }, - 'appStat': [{ - }], - 'startTime': { + 'unknownTcpAppNames': { }, - 'endTime': { + 'unknownUdpAppNames': { }, - 'dynamicAppNames': { + 'uploadBytesSum': { + }, + 'version': { } + } + }, + 'network': { + 'author': { }, - 'revision': { - }, - 'lockedBy': { + 'clazz': { }, 'createdBy': { }, - 'name': { + 'createdOn': { }, - 'clazz': { + 'description': { }, - 'operations': { - 'createNewCustom': [{ - }], - 'delete': [{ - }], - 'save': [{ - }], - 'saveAs': [{ - }], - 'load': [{ - }] - } - }, - 'topology': { - 'ixoslicensed': { + 'interfaceCount': { }, - 'ixos': { + 'label': { }, - 'chain': { - 'name': { - }, - 'remotes': { - } + 'lockedBy': { }, - 'cnState': [{ - 'cnSlotNo': { - }, - 'licensed': { - }, - 'cnName': { - }, - 'firmwareUpgrade': { - }, - 'cnSerial': { - }, - 'cnId': { - }, - 'state': { - }, - 'marketingName': { - } - }], - 'runningTest': [{ - 'phase': { - }, - 'reservedEngines': [{ - }], - 'timeRemaining': { - }, - 'runtime': { - }, - 'label': { - }, - 'completed': { - }, - 'initProgress': { - }, - 'result': { - }, - 'port': [{ - }], - 'capturing': { - }, - 'progress': { - }, - 'testid': { - 'host': { + 'modelDefinition': { + }, + 'name': { + }, + 'networkModel': { + 'dhcpv6c_cfg': [{ + 'dhcp6c_duid_type': { }, - 'name': { + 'dhcp6c_ia_t1': { }, - 'iteration': { - } - }, - 'state': { - }, - 'user': { - }, - 'currentTest': { - } - }], - 'model': { - }, - 'slot': [{ - 'port': [{ - 'note': { + 'dhcp6c_ia_t2': { }, - 'auto': { + 'dhcp6c_ia_type': { }, - 'link': { + 'dhcp6c_initial_srate': { }, - 'media': { + 'dhcp6c_max_outstanding': { }, - 'speed': { + 'dhcp6c_renew_timer': { }, - 'number': { + 'dhcp6c_req_opts_config': { }, - 'ifname': { + 'dhcp6c_tout_and_retr_config': { }, - 'capturing': { + 'id': { + } + }], + 'dhcpv6c_req_opts_cfg': [{ + 'dhcpv6v_req_dns_list': { }, - 'model': { + 'dhcpv6v_req_dns_resolvers': { + }, + 'dhcpv6v_req_preference': { + }, + 'dhcpv6v_req_server_id': { }, 'id': { + } + }], + 'dhcpv6c_tout_and_retr_cfg': [{ + 'dhcp6c_inforeq_attempts': { }, - 'state': { + 'dhcp6c_initial_inforeq_tout': { }, - 'group': { + 'dhcp6c_initial_rebind_tout': { }, - 'owner': { + 'dhcp6c_initial_release_tout': { }, - 'portGroup': { + 'dhcp6c_initial_renew_tout': { }, - 'precoder': { + 'dhcp6c_initial_req_tout': { }, - 'capture': { + 'dhcp6c_initial_sol_tout': { }, - 'active': { + 'dhcp6c_max_inforeq_tout': { }, - 'mtu': { + 'dhcp6c_max_rebind_tout': { }, - 'currentMode': { + 'dhcp6c_max_renew_tout': { }, - 'exportProgress': { + 'dhcp6c_max_req_tout': { }, - 'ifmacaddr': { + 'dhcp6c_max_sol_tout': { }, - 'reservedBy': { + 'dhcp6c_release_attempts': { }, - 'fullduplex': { + 'dhcp6c_req_attempts': { }, - 'possibleModes': { + 'dhcp6c_sol_attempts': { }, - 'ignorepause': { + 'id': { } }], - 'np': [{ - 'note': { + 'ds_lite_aftr': [{ + 'b4_count': { }, - 'cnId': { + 'b4_ip_address': { }, - 'reservedBy': { + 'count': { }, - 'name': { + 'default_container': { + }, + 'gateway_ip_address': { }, 'id': { }, - 'state': { + 'ip_address': { }, - 'group': { + 'ipv6_addr_alloc_mode': { }, - 'resourceType': { + 'prefix_length': { } }], - 'mode': { - }, - 'fpga': [{ - 'note': { + 'ds_lite_b4': [{ + 'aftr_addr': { }, - 'reservedBy': { + 'aftr_count': { }, - 'name': { + 'count': { + }, + 'default_container': { + }, + 'gateway_ip_address': { + }, + 'host_ip_addr_alloc_mode': { + }, + 'host_ip_base_addr': { + }, + 'hosts_ip_increment': { }, 'id': { }, - 'state': { + 'ip_address': { }, - 'group': { + 'ipv6_addr_alloc_mode': { }, - 'resourceType': { + 'prefix_length': { } }], - 'firmwareUpgrade': { - }, - 'remoteInfo': { - 'host': { + 'enodeb': [{ + 'default_container': { }, - 'slotId': { + 'dns': { }, - 'state': { - } - }, - 'interfaceCount': { - }, - 'model': { - }, - 'state': { - }, - 'id': { - }, - 'serialNumber': { - } - }], - 'serialNumber': { - }, - 'resourceOverview': { - 'resourceOverviewList': [{ - 'l23Count': { + 'enodebs': [{ + 'enodebCount': { + }, + 'ip_address': { + }, + 'mme_ip_address': { + } + }], + 'gateway_ip_address': { }, - 'l47Count': { + 'id': { }, - 'portCount': { + 'netmask': { }, - 'userAndGroup': { + 'plmn': { + }, + 'psn': { + }, + 'psn_netmask': { + }, + 'sctp_over_udp': { + }, + 'sctp_sport': { } - }] - }, - 'operations': { - 'getFanoutModes': [{ - 'cardModel': { + }], + 'enodeb6': [{ + 'default_container': { }, - 'fanout': [{ - 'name': { + 'dns': { + }, + 'enodebs': [{ + 'enodebCount': { }, - 'fanoutId': { - } - }] - }], - 'softReboot': [{ - }], - 'reserveResource': [{ - }], - 'unreserve': [{ - }], - 'releaseAllCnResources': [{ - }], - 'addPortNote': [{ - }], - 'run': [{ - }], - 'setPortFanoutMode': [{ - }], - 'reserveResources': [{ - }], - 'setPortSettings': [{ - }], - 'setCardMode': [{ - }], - 'setCardSpeed': [{ - }], - 'setCardFanout': [{ - }], - 'setPerfAcc': [{ - }], - 'reboot': [{ - }], - 'releaseResources': [{ - }], - 'reserve': [{ - }], - 'rebootComputeNode': [{ - }], - 'releaseResource': [{ - }], - 'reserveAllCnResources': [{ - }], - 'getPortAvailableModes': [{ - 'modes': [{ - 'name': { - }, - 'fanoutId': { + 'ip_address': { + }, + 'mme_ip_address': { } }], - 'slot': { + 'gateway_ip_address': { }, - 'port': { + 'id': { + }, + 'plmn': { + }, + 'prefix_length': { + }, + 'sctp_over_udp': { + }, + 'sctp_sport': { } }], - 'addResourceNote': [{ - }], - 'stopRun': [{ - }], - 'exportCapture': [{ - }] - } - }, - 'testmodel': { - 'testComponentTypesDescription': [{ - 'template': { - }, - 'name': { - }, - 'description': { - }, - 'label': { - }, - 'type': { - } - }], - 'lastrunby': { - }, - 'summaryInfo': { - 'totalSubnets': { - }, - 'totalMacAddresses': { - }, - 'totalUniqueStrikes': { - }, - 'totalUniqueSuperflows': { - }, - 'requiredMTU': { - } - }, - 'author': { - }, - 'lastrun': { - }, - 'description': { - }, - 'label': { - }, - 'sharedComponentSettings': { - 'maximumConcurrentFlows': { - 'current': { + 'enodeb_mme': [{ + 'default_container': { }, - 'original': { + 'dns': { }, - 'content': { - } - }, - 'totalAttacks': { - 'current': { + 'enodebs': [{ + 'default_container': { + }, + 'enodebCount': { + }, + 'gateway_ip_address': { + }, + 'ip_address': { + }, + 'netmask': { + } + }], + 'gateway_ip_address': { }, - 'original': { + 'id': { }, - 'content': { - } - }, - 'totalBandwidth': { - 'current': { + 'ip_allocation_mode': { }, - 'original': { + 'mme_ip_address': { }, - 'content': { - } - }, - 'maxFlowCreationRate': { - 'current': { + 'netmask': { }, - 'original': { + 'pgw_ip_address': { }, - 'content': { - } - }, - 'totalAddresses': { - 'current': { + 'plmn': { }, - 'original': { + 'sgw_ip_address': { }, - 'content': { + 'ue_address': { } - }, - 'samplePeriod': { - 'current': { + }], + 'enodeb_mme6': [{ + 'default_container': { }, - 'original': { + 'dns': { }, - 'content': { - } - } - }, - 'createdOn': { - }, - 'network': { - }, - 'revision': { - }, - 'duration': { - }, - 'result': { - }, - 'component': [{ - 'author': { - }, - 'originalPreset': { - }, - 'active': { - }, - 'originalPresetLabel': { - }, - 'description': { - }, - 'label': { - }, - 'type': { - }, - '@type:liveappsim': { - 'app': { - 'removeUnknownTcpUdp': { - }, - 'replace_streams': { + 'enodebs': [{ + 'default_container': { }, - 'removeUnknownSSL': { + 'enodebCount': { }, - 'streamsPerSuperflow': { + 'gateway_ip_address': { }, - 'removedns': { + 'ip_address': { }, - 'fidelity': { + 'prefix_length': { } + }], + 'gateway_ip_address': { }, - 'tcp': { - 'disable_ack_piggyback': { - }, - 'delay_acks': { - }, - 'mss': { - }, - 'raw_flags': { - }, - 'psh_every_segment': { - }, - 'ecn': { - }, - 'tcp_window_scale': { - }, - 'initial_receive_window': { - }, - 'reset_at_end': { - }, - 'dynamic_receive_window_size': { - }, - 'tcp_connect_delay_ms': { - }, - 'aging_time_data_type': { - }, - 'tcp_4_way_close': { - }, - 'shutdown_data': { - }, - 'tcp_icw': { - }, - 'tcp_keepalive_timer': { - }, - 'aging_time': { - }, - 'add_timestamps': { - }, - 'retries': { - }, - 'handshake_data': { - }, - 'ack_every_n': { - }, - 'syn_data_padding': { - }, - 'retry_quantum_ms': { - }, - 'delay_acks_ms': { - } + 'id': { }, - 'inflateDeflate': { + 'ip_allocation_mode': { }, - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'unlimited': { - }, - 'scope': { - }, - 'type': { - } + 'mme_ip_address': { }, - 'sessions': { - 'openFast': { - }, - 'closeFast': { - }, - 'max': { - }, - 'allocationOverride': { - }, - 'targetPerSecond': { - }, - 'target': { - }, - 'targetMatches': { - }, - 'maxPerSecond': { - }, - 'engine': { - }, - 'statDetail': { - }, - 'emphasis': { - }, - 'maxActive': { - } + 'pgw_ip_address': { }, - 'loadprofile': { - 'name': { - }, - 'label': { - } + 'plmn': { }, - 'ip': { - 'tos': { - }, - 'ttl': { - } + 'prefix_length': { }, - 'ip6': { - 'flowlabel': { - }, - 'traffic_class': { - }, - 'hop_limit': { - } + 'sgw_ip_address': { }, - 'srcPortDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } + 'ue_address': { + } + }], + 'enodeb_mme_sgw': [{ + 'default_container': { }, - 'tputscalefactor': { + 'dns': { }, - 'rampUpProfile': { - 'min': { - }, - 'max': { - }, - 'increment': { - }, - 'interval': { - }, - 'type': { - } + 'gateway_ip_address': { }, - 'concurrencyscalefactor': { + 'id': { }, - 'delayStart': { + 'ip_allocation_mode': { }, - 'rampDist': { - 'upBehavior': { - }, - 'down': { - }, - 'steadyBehavior': { - }, - 'downBehavior': { - }, - 'up': { - }, - 'synRetryMode': { - }, - 'steady': { - } + 'mme_ip_address': { }, - 'sfratescalefactor': { + 'netmask': { }, - 'liveProfile': { + 'pgw_ip_address': { + }, + 'plmn': { + }, + 'ue_address': { } - }, - '@type:layer3advanced': { - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'rate': { - }, - 'increment': { - }, - 'type': { - }, - 'ramptype': { - } + }], + 'enodeb_mme_sgw6': [{ + 'default_container': { }, - 'bidirectional': { + 'dns': { }, - 'enableTCP': { + 'gateway_ip_address': { }, - 'slowStart': { + 'id': { }, - 'Templates': { - 'TemplateType': { - } + 'ip_allocation_mode': { }, - 'slowStartFps': { + 'mme_ip_address': { }, - 'duration': { - 'disable_nd_probes': { + 'pgw_ip_address': { + }, + 'plmn': { + }, + 'prefix_length': { + }, + 'ue_address': { + } + }], + 'geneve_tep': [{ + 'count': { + }, + 'default_container': { + }, + 'gateway_ip_address': { + }, + 'header_options': [{ + 'geneve_data': { }, - 'durationTime': { + 'geneve_option_class': { }, - 'durationFrames': { + 'geneve_type': { } + }], + 'id': { }, - 'enablePerStreamStats': { + 'ip_address': { }, - 'tuple_gen_seed': { + 'netmask': { }, - 'payload': { - 'data': { + 'vni_base': { + }, + 'vni_count': { + } + }], + 'ggsn': [{ + 'count': { + }, + 'default_container': { + }, + 'dns': { + }, + 'gateway_ip_address': { + }, + 'ggsn_advertised_control_ip_address': { + }, + 'ggsn_advertised_data_ip_address': { + }, + 'id': { + }, + 'ip_address': { + }, + 'lease_address': { + }, + 'lease_address_v6': { + }, + 'netmask': { + } + }], + 'ggsn6': [{ + 'count': { + }, + 'default_container': { + }, + 'dns': { + }, + 'gateway_ip_address': { + }, + 'ggsn_advertised_control_ip_address': { + }, + 'ggsn_advertised_data_ip_address': { + }, + 'id': { + }, + 'ip_address': { + }, + 'lease_address': { + }, + 'lease_address_v6': { + }, + 'prefix_length': { + } + }], + 'global_config': [{ + 'gtp': { + }, + 'id': { + } + }], + 'interface': [{ + 'description': { + }, + 'duplicate_mac_address': { + }, + 'id': { + }, + 'ignore_pause_frames': { + }, + 'impairments': { + 'corrupt_chksum': { }, - 'type': { + 'corrupt_gt256': { }, - 'dataWidth': { - } - }, - 'advancedUDP': { - 'lengthVal': { + 'corrupt_lt256': { }, - 'lengthField': { + 'corrupt_lt64': { }, - 'checksumVal': { + 'corrupt_rand': { }, - 'checksumField': { + 'drop': { + }, + 'frack': { + }, + 'rate': { } }, - 'delayStart': { + 'mac_address': { }, - 'payloadAdvanced': { - 'udfMode': { - }, - 'udfLength': { - }, - 'udfDataWidth': { - }, - 'udfOffset': { - } + 'mtu': { }, - 'sizeDist': { - 'increment': { - }, - 'type': { - }, - 'min': { - }, - 'rate': { - }, - 'mixlen2': { - }, - 'mixweight6': { - }, - 'mixlen1': { - }, - 'mixweight7': { - }, - 'mixlen4': { - }, - 'mixweight4': { - }, - 'mixlen3': { - }, - 'mixweight5': { - }, - 'mixlen6': { - }, - 'mixlen5': { - }, - 'mixlen8': { - }, - 'mixweight8': { + 'number': { + }, + 'packet_filter': { + 'dest_ip': { }, - 'mixlen7': { + 'dest_port': { }, - 'mixweight9': { + 'filter': { }, - 'mixlen9': { + 'not_dest_ip': { }, - 'mixweight2': { + 'not_dest_port': { }, - 'max': { + 'not_src_ip': { }, - 'mixweight3': { + 'not_src_port': { }, - 'mixweight1': { + 'not_vlan': { }, - 'mixlen10': { + 'src_ip': { }, - 'mixweight10': { + 'src_port': { }, - 'unit': { + 'vlan': { } }, - 'advancedIPv4': { - 'lengthVal': { - }, - 'optionHeaderField': { - }, - 'optionHeaderData': { - }, - 'lengthField': { - }, - 'checksumVal': { - }, - 'tos': { - }, - 'checksumField': { - }, - 'ttl': { - } + 'use_vnic_mac_address': { }, - 'advancedIPv6': { - 'flowLabel': { - }, - 'lengthVal': { - }, - 'extensionHeaderField': { - }, - 'lengthField': { - }, - 'nextHeader': { - }, - 'trafficClass': { - }, - 'extensionHeaderData': { - }, - 'hopLimit': { - } + 'vlan_key': { } - }, - '@type:appsim': { - 'app': { - 'replace_streams': { - }, - 'streamsPerSuperflow': { - }, - 'removedns': { - }, - 'fidelity': { - } + }], + 'ip6_dhcp_server': [{ + 'default_container': { }, - 'tcp': { - 'disable_ack_piggyback': { - }, - 'delay_acks': { - }, - 'mss': { - }, - 'raw_flags': { - }, - 'psh_every_segment': { - }, - 'ecn': { - }, - 'tcp_window_scale': { - }, - 'initial_receive_window': { - }, - 'reset_at_end': { - }, - 'dynamic_receive_window_size': { - }, - 'tcp_connect_delay_ms': { - }, - 'aging_time_data_type': { - }, - 'tcp_4_way_close': { - }, - 'shutdown_data': { - }, - 'tcp_icw': { - }, - 'tcp_keepalive_timer': { - }, - 'aging_time': { - }, - 'add_timestamps': { - }, - 'retries': { - }, - 'handshake_data': { - }, - 'ack_every_n': { - }, - 'syn_data_padding': { - }, - 'retry_quantum_ms': { - }, - 'delay_acks_ms': { - } + 'default_lease_time': { }, - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'unlimited': { - }, - 'scope': { - }, - 'type': { - } + 'gateway_ip_address': { }, - 'sessions': { - 'openFast': { - }, - 'closeFast': { - }, - 'max': { - }, - 'allocationOverride': { - }, - 'targetPerSecond': { - }, - 'target': { - }, - 'targetMatches': { - }, - 'maxPerSecond': { - }, - 'engine': { - }, - 'statDetail': { - }, - 'emphasis': { - }, - 'maxActive': { - } + 'ia_type': { }, - 'loadprofile': { - 'name': { - }, - 'label': { - } + 'id': { }, - 'profile': { + 'ip_address': { }, - 'ip': { - 'tos': { - }, - 'ttl': { - } + 'max_lease_time': { }, - 'resources': { - 'expand': { - } + 'offer_lifetime': { }, - 'experimental': { - 'tcpSegmentsBurst': { - }, - 'unify_l4_bufs': { - } + 'pool_base_address': { }, - 'ssl': { - 'ssl_client_keylog': { - }, - 'upgrade': { - }, - 'sslReuseType': { - }, - 'server_record_len': { - }, - 'client_record_len': { - }, - 'ssl_keylog_max_entries': { - } + 'pool_dns_address1': { }, - 'ip6': { - 'flowlabel': { - }, - 'traffic_class': { - }, - 'hop_limit': { - } + 'pool_dns_address2': { }, - 'srcPortDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } + 'pool_prefix_length': { }, - 'rampUpProfile': { - 'min': { - }, - 'max': { - }, - 'increment': { - }, - 'interval': { - }, - 'type': { - } + 'pool_size': { }, - 'delayStart': { + 'prefix_length': { + } + }], + 'ip6_dns_config': [{ + 'dns_domain': { }, - 'rampDist': { - 'upBehavior': { - }, - 'down': { - }, - 'steadyBehavior': { - }, - 'downBehavior': { - }, - 'up': { - }, - 'synRetryMode': { - }, - 'steady': { - } + 'dns_server_address': { + }, + 'id': { } - }, - '@type:security_all': { - 'maxConcurrAttacks': { + }], + 'ip6_dns_proxy': [{ + 'dns_proxy_ip_base': { }, - 'attackRetries': { + 'dns_proxy_ip_count': { }, - 'maxPacketsPerSecond': { + 'dns_proxy_src_ip_base': { }, - 'attackPlan': { + 'dns_proxy_src_ip_count': { }, - 'randomSeed': { + 'id': { + } + }], + 'ip6_external_hosts': [{ + 'behind_snapt': { }, - 'delayStart': { + 'count': { }, - 'attackProfile': { + 'id': { }, - 'attackPlanIterations': { + 'ip_address': { }, - 'attackPlanIterationDelay': { + 'proxy': { }, - 'maxAttacksPerSecond': { + 'tags': { } - }, - '@type:security_np': { - 'attackRetries': { + }], + 'ip6_geneve_tep': [{ + 'count': { }, - 'sessions': { - 'max': { - }, - 'maxPerSecond': { - } + 'default_container': { }, - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'unlimited': { + 'gateway_ip_address': { + }, + 'header_options': [{ + 'geneve_data': { }, - 'scope': { + 'geneve_option_class': { }, - 'type': { + 'geneve_type': { } + }], + 'id': { }, - 'attackPlan': { + 'ip_address': { }, - 'randomSeed': { + 'prefix_length': { }, - 'delayStart': { + 'vni_base': { }, - 'attackProfile': { + 'vni_count': { + } + }], + 'ip6_mac_static_hosts': [{ + 'behind_snapt': { }, - 'attackPlanIterations': { + 'count': { }, - 'attackPlanIterationDelay': { + 'default_container': { + }, + 'gateway_ip_address': { + }, + 'id': { + }, + 'ip_address': { + }, + 'mac_address': { + }, + 'mtu': { + }, + 'prefix_length': { + }, + 'proxy': { + }, + 'tags': { + }, + 'tep_vni_mapping': { } - }, - '@type:layer3': { - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'rate': { - }, - 'increment': { - }, - 'type': { - }, - 'ramptype': { - } + }], + 'ip6_router': [{ + 'default_container': { }, - 'bidirectional': { + 'gateway_ip_address': { }, - 'randomizeIP': { + 'hosts_ip_alloc_container': { }, - 'enableTCP': { + 'id': { }, - 'slowStart': { + 'ip_address': { }, - 'Templates': { - 'TemplateType': { - } + 'prefix_length': { + } + }], + 'ip6_static_hosts': [{ + 'behind_snapt': { }, - 'srcPort': { + 'count': { }, - 'slowStartFps': { + 'default_container': { }, - 'duration': { - 'disable_nd_probes': { - }, - 'durationTime': { - }, - 'durationFrames': { - } + 'dns': { }, - 'udpSrcPortMode': { + 'dns_proxy': { }, - 'dstPort': { + 'enable_stats': { }, - 'payload': { - 'data': { - }, - 'type': { - }, - 'dataWidth': { - } + 'gateway_ip_address': { }, - 'syncIP': { + 'host_ipv6_addr_alloc_mode': { }, - 'addrGenMode': { + 'id': { }, - 'maxStreams': { + 'ip_address': { }, - 'dstPortMask': { + 'ip_alloc_container': { }, - 'udpDstPortMode': { + 'ip_selection_type': { }, - 'advancedUDP': { - 'lengthVal': { - }, - 'lengthField': { - }, - 'checksumVal': { + 'maxmbps_per_host': { + }, + 'mpls_list': [{ + 'id': { }, - 'checksumField': { + 'value': { } + }], + 'prefix_length': { }, - 'delayStart': { + 'proxy': { }, - 'payloadAdvanced': { - 'udfMode': { - }, - 'udfLength': { - }, - 'udfDataWidth': { - }, - 'udfOffset': { - } + 'tags': { + } + }], + 'ip_dhcp_hosts': [{ + 'accept_local_offers_only': { }, - 'sizeDist': { - 'increment': { - }, - 'type': { - }, - 'min': { - }, - 'rate': { - }, - 'mixlen2': { - }, - 'mixweight6': { - }, - 'mixlen1': { - }, - 'mixweight7': { - }, - 'mixlen4': { - }, - 'mixweight4': { - }, - 'mixlen3': { - }, - 'mixweight5': { - }, - 'mixlen6': { - }, - 'mixlen5': { - }, - 'mixlen8': { - }, - 'mixweight8': { - }, - 'mixlen7': { - }, - 'mixweight9': { - }, - 'mixlen9': { - }, - 'mixweight2': { - }, - 'max': { - }, - 'mixweight3': { - }, - 'mixweight1': { - }, - 'mixlen10': { - }, - 'mixweight10': { - }, - 'unit': { - } + 'allocation_rate': { }, - 'advancedIPv4': { - 'lengthVal': { - }, - 'optionHeaderField': { - }, - 'optionHeaderData': { - }, - 'lengthField': { - }, - 'checksumVal': { - }, - 'tos': { - }, - 'checksumField': { - }, - 'ttl': { - } + 'behind_snapt': { }, - 'srcPortMask': { + 'count': { }, - 'advancedIPv6': { - 'flowLabel': { - }, - 'lengthVal': { - }, - 'extensionHeaderField': { - }, - 'lengthField': { - }, - 'nextHeader': { - }, - 'trafficClass': { - }, - 'extensionHeaderData': { - }, - 'hopLimit': { - } - } - }, - '@type:layer4': { - 'tcp': { - 'disable_ack_piggyback': { - }, - 'delay_acks': { - }, - 'mss': { - }, - 'raw_flags': { - }, - 'psh_every_segment': { - }, - 'ecn': { - }, - 'tcp_window_scale': { - }, - 'initial_receive_window': { - }, - 'reset_at_end': { - }, - 'dynamic_receive_window_size': { - }, - 'tcp_connect_delay_ms': { - }, - 'aging_time_data_type': { - }, - 'tcp_4_way_close': { - }, - 'shutdown_data': { - }, - 'tcp_icw': { - }, - 'tcp_keepalive_timer': { - }, - 'aging_time': { - }, - 'add_timestamps': { - }, - 'retries': { - }, - 'handshake_data': { - }, - 'ack_every_n': { - }, - 'syn_data_padding': { - }, - 'retry_quantum_ms': { - }, - 'delay_acks_ms': { - } + 'default_container': { }, - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'unlimited': { - }, - 'scope': { - }, - 'type': { - } + 'dns_proxy': { }, - 'sessions': { - 'openFast': { - }, - 'closeFast': { - }, - 'max': { - }, - 'allocationOverride': { - }, - 'targetPerSecond': { - }, - 'target': { - }, - 'targetMatches': { - }, - 'maxPerSecond': { - }, - 'engine': { - }, - 'statDetail': { - }, - 'emphasis': { - }, - 'maxActive': { - } + 'enable_stats': { }, - 'loadprofile': { - 'name': { - }, - 'label': { - } + 'id': { }, - 'ip': { - 'tos': { - }, - 'ttl': { - } + 'ldap': { }, - 'ip6': { - 'flowlabel': { - }, - 'traffic_class': { - }, - 'hop_limit': { - } + 'proxy': { }, - 'srcPortDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } + 'tags': { + } + }], + 'ip_dhcp_server': [{ + 'accept_local_requests_only': { }, - 'rampUpProfile': { - 'min': { - }, - 'max': { - }, - 'increment': { - }, - 'interval': { - }, - 'type': { - } + 'count': { }, - 'delayStart': { + 'default_container': { }, - 'payload': { - 'add_timestamp': { - }, - 'data': { - }, - 'http_type': { - }, - 'transport': { - }, - 'type': { - } + 'dns': { }, - 'rampDist': { - 'upBehavior': { - }, - 'down': { - }, - 'steadyBehavior': { - }, - 'downBehavior': { - }, - 'up': { - }, - 'synRetryMode': { - }, - 'steady': { - } + 'gateway_ip_address': { }, - 'packetsPerSession': { + 'id': { }, - 'payloadSizeDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } + 'ip_address': { }, - 'dstPortDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } + 'lease_address': { + }, + 'lease_time': { + }, + 'netmask': { } - }, - '@type:playback': { - 'tcp': { - 'disable_ack_piggyback': { - }, - 'delay_acks': { - }, - 'mss': { - }, - 'raw_flags': { - }, - 'psh_every_segment': { - }, - 'ecn': { - }, - 'tcp_window_scale': { - }, - 'initial_receive_window': { - }, - 'reset_at_end': { - }, - 'dynamic_receive_window_size': { - }, - 'tcp_connect_delay_ms': { - }, - 'aging_time_data_type': { - }, - 'tcp_4_way_close': { - }, - 'shutdown_data': { - }, - 'tcp_icw': { - }, - 'tcp_keepalive_timer': { - }, - 'aging_time': { - }, - 'add_timestamps': { - }, - 'retries': { - }, - 'handshake_data': { - }, - 'ack_every_n': { - }, - 'syn_data_padding': { - }, - 'retry_quantum_ms': { - }, - 'delay_acks_ms': { - } + }], + 'ip_dns_config': [{ + 'dns_domain': { }, - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'unlimited': { - }, - 'scope': { - }, - 'type': { - } + 'dns_server_address': { }, - 'sessions': { - 'openFast': { - }, - 'closeFast': { - }, - 'max': { - }, - 'allocationOverride': { - }, - 'targetPerSecond': { - }, - 'target': { - }, - 'targetMatches': { - }, - 'maxPerSecond': { - }, - 'engine': { - }, - 'statDetail': { - }, - 'emphasis': { - }, - 'maxActive': { - } + 'id': { + } + }], + 'ip_dns_proxy': [{ + 'dns_proxy_ip_base': { }, - 'loadprofile': { - 'name': { - }, - 'label': { - } + 'dns_proxy_ip_count': { }, - 'ip': { - 'tos': { - }, - 'ttl': { - } + 'dns_proxy_src_ip_base': { }, - 'modification': { - 'startpacket': { - }, - 'originalport': { - }, - 'newport': { - }, - 'replay': { - }, - 'bpfstring': { - }, - 'single': { - }, - 'loopcount': { - }, - 'endpacket': { - }, - 'independentflows': { - }, - 'serveripinjection': { - } + 'dns_proxy_src_ip_count': { }, - 'ip6': { - 'flowlabel': { - }, - 'traffic_class': { - }, - 'hop_limit': { - } + 'id': { + } + }], + 'ip_external_hosts': [{ + 'behind_snapt': { }, - 'srcPortDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } + 'count': { }, - 'rampUpProfile': { - 'min': { - }, - 'max': { - }, - 'increment': { - }, - 'interval': { - }, - 'type': { - } + 'id': { }, - 'delayStart': { + 'ip_address': { }, - 'file': { + 'proxy': { }, - 'rampDist': { - 'upBehavior': { - }, - 'down': { - }, - 'steadyBehavior': { - }, - 'downBehavior': { - }, - 'up': { - }, - 'synRetryMode': { - }, - 'steady': { - } + 'tags': { + } + }], + 'ip_ldap_server': [{ + 'auth_timeout': { }, - 'behavior': { + 'authentication_rate': { + }, + 'dn_fixed_val': { + }, + 'id': { + }, + 'ldap_password_start_tag': { + }, + 'ldap_server_address': { + }, + 'ldap_user_count': { + }, + 'ldap_user_max': { + }, + 'ldap_user_min': { + }, + 'ldap_username_start_tag': { } - }, - '@type:layer2': { - 'bidirectional': { + }], + 'ip_mac_static_hosts': [{ + 'behind_snapt': { }, - 'maxStreams': { + 'count': { }, - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'rate': { - }, - 'increment': { - }, - 'type': { - }, - 'ramptype': { - } + 'default_container': { }, - 'advanced': { - 'ethTypeField': { - }, - 'ethTypeVal': { - } + 'gateway_ip_address': { }, - 'slowStart': { + 'id': { }, - 'slowStartFps': { + 'ip_address': { }, - 'duration': { - 'disable_nd_probes': { - }, - 'durationTime': { - }, - 'durationFrames': { - } + 'mac_address': { }, - 'delayStart': { + 'mtu': { }, - 'payloadAdvanced': { - 'udfMode': { - }, - 'udfLength': { - }, - 'udfDataWidth': { - }, - 'udfOffset': { - } + 'netmask': { }, - 'sizeDist': { - 'increment': { - }, - 'type': { - }, - 'min': { - }, - 'rate': { - }, - 'mixlen2': { - }, - 'mixweight6': { - }, - 'mixlen1': { - }, - 'mixweight7': { - }, - 'mixlen4': { - }, - 'mixweight4': { - }, - 'mixlen3': { - }, - 'mixweight5': { - }, - 'mixlen6': { - }, - 'mixlen5': { - }, - 'mixlen8': { - }, - 'mixweight8': { - }, - 'mixlen7': { - }, - 'mixweight9': { - }, - 'mixlen9': { - }, - 'mixweight2': { - }, - 'max': { - }, - 'mixweight3': { - }, - 'mixweight1': { - }, - 'mixlen10': { - }, - 'mixweight10': { - }, - 'unit': { - } - }, - 'payload': { - 'data': { - }, - 'type': { - }, - 'dataWidth': { - } - } - }, - '@type:stackscrambler': { - 'tcp': { - 'disable_ack_piggyback': { - }, - 'delay_acks': { - }, - 'mss': { - }, - 'raw_flags': { - }, - 'psh_every_segment': { - }, - 'ecn': { - }, - 'tcp_window_scale': { - }, - 'initial_receive_window': { - }, - 'reset_at_end': { - }, - 'dynamic_receive_window_size': { - }, - 'tcp_connect_delay_ms': { - }, - 'aging_time_data_type': { - }, - 'tcp_4_way_close': { - }, - 'shutdown_data': { - }, - 'tcp_icw': { - }, - 'tcp_keepalive_timer': { - }, - 'aging_time': { - }, - 'add_timestamps': { - }, - 'retries': { - }, - 'handshake_data': { - }, - 'ack_every_n': { - }, - 'syn_data_padding': { - }, - 'retry_quantum_ms': { - }, - 'delay_acks_ms': { - } - }, - 'scrambleOptions': { - 'maxCorruptions': { - }, - 'badIPFlags': { - }, - 'badIPFragOffset': { - }, - 'badIPLength': { - }, - 'badUrgentPointer': { - }, - 'badIPFlowLabel': { - }, - 'badEthType': { - }, - 'badTCPOptions': { - }, - 'badGTPNext': { - }, - 'handshakeTCP': { - }, - 'badIPChecksum': { - }, - 'badSCTPLength': { - }, - 'badTCPFlags': { - }, - 'badICMPType': { - }, - 'badIPTTL': { - }, - 'badIPProtocol': { - }, - 'badSCTPFlags': { - }, - 'badGTPFlags': { - }, - 'badIPVersion': { - }, - 'badL4HeaderLength': { - }, - 'badL4Checksum': { - }, - 'badIPOptions': { - }, - 'badSCTPType': { - }, - 'badSCTPChecksum': { - }, - 'badGTPNpdu': { - }, - 'badICMPCode': { - }, - 'badSCTPVerificationTag': { - }, - 'badIPTOS': { - }, - 'badIPTotalLength': { - }, - 'badGTPLen': { - }, - 'badGTPType': { - }, - 'badGTPSeqno': { - } - }, - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'unlimited': { - }, - 'scope': { - }, - 'type': { - } - }, - 'sessions': { - 'openFast': { - }, - 'closeFast': { - }, - 'max': { - }, - 'allocationOverride': { - }, - 'targetPerSecond': { - }, - 'target': { - }, - 'targetMatches': { - }, - 'maxPerSecond': { - }, - 'engine': { - }, - 'statDetail': { - }, - 'emphasis': { - }, - 'maxActive': { - } - }, - 'loadprofile': { - 'name': { - }, - 'label': { - } - }, - 'ip': { - 'tos': { - }, - 'ttl': { - } - }, - 'ip6': { - 'flowlabel': { - }, - 'traffic_class': { - }, - 'hop_limit': { - } - }, - 'prng': { - 'seed': { - }, - 'offset': { - } - }, - 'srcPortDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } - }, - 'rampUpProfile': { - 'min': { - }, - 'max': { - }, - 'increment': { - }, - 'interval': { - }, - 'type': { - } - }, - 'delayStart': { - }, - 'payload': { - 'data': { - }, - 'transport': { - }, - 'type': { - } - }, - 'rampDist': { - 'upBehavior': { - }, - 'down': { - }, - 'steadyBehavior': { - }, - 'downBehavior': { - }, - 'up': { - }, - 'synRetryMode': { - }, - 'steady': { - } - }, - 'payloadSizeDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } - }, - 'dstPortDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } - } - }, - '@type:clientsim': { - 'app': { - 'replace_streams': { - }, - 'streamsPerSuperflow': { - }, - 'removedns': { - }, - 'fidelity': { - } - }, - 'tcp': { - 'disable_ack_piggyback': { - }, - 'delay_acks': { - }, - 'mss': { - }, - 'raw_flags': { - }, - 'psh_every_segment': { - }, - 'ecn': { - }, - 'tcp_window_scale': { - }, - 'initial_receive_window': { - }, - 'reset_at_end': { - }, - 'dynamic_receive_window_size': { - }, - 'tcp_connect_delay_ms': { - }, - 'aging_time_data_type': { - }, - 'tcp_4_way_close': { - }, - 'shutdown_data': { - }, - 'tcp_icw': { - }, - 'tcp_keepalive_timer': { - }, - 'aging_time': { - }, - 'add_timestamps': { - }, - 'retries': { - }, - 'handshake_data': { - }, - 'ack_every_n': { - }, - 'syn_data_padding': { - }, - 'retry_quantum_ms': { - }, - 'delay_acks_ms': { - } - }, - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'unlimited': { - }, - 'scope': { - }, - 'type': { - } - }, - 'sessions': { - 'openFast': { - }, - 'closeFast': { - }, - 'max': { - }, - 'allocationOverride': { - }, - 'targetPerSecond': { - }, - 'target': { - }, - 'targetMatches': { - }, - 'maxPerSecond': { - }, - 'engine': { - }, - 'statDetail': { - }, - 'emphasis': { - }, - 'maxActive': { - } - }, - 'loadprofile': { - 'name': { - }, - 'label': { - } - }, - 'ip': { - 'tos': { - }, - 'ttl': { - } - }, - 'resources': { - 'expand': { - } - }, - 'ssl': { - 'ssl_client_keylog': { - }, - 'upgrade': { - }, - 'sslReuseType': { - }, - 'server_record_len': { - }, - 'client_record_len': { - }, - 'ssl_keylog_max_entries': { - } - }, - 'ip6': { - 'flowlabel': { - }, - 'traffic_class': { - }, - 'hop_limit': { - } - }, - 'srcPortDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } - }, - 'rampUpProfile': { - 'min': { - }, - 'max': { - }, - 'increment': { - }, - 'interval': { - }, - 'type': { - } - }, - 'delayStart': { - }, - 'rampDist': { - 'upBehavior': { - }, - 'down': { - }, - 'steadyBehavior': { - }, - 'downBehavior': { - }, - 'up': { - }, - 'synRetryMode': { - }, - 'steady': { - } - }, - 'superflow': { - } - }, - 'createdOn': { - }, - 'tags': [{ - 'id': { - }, - 'type': { - }, - 'domainId': { - 'name': { - }, - 'iface': { - }, - 'external': { - } - } - }], - 'revision': { - }, - 'lockedBy': { - }, - 'createdBy': { - }, - 'reportResults': { - }, - 'timeline': { - 'timesegment': [{ - 'label': { - }, - 'size': { - }, - 'type': { - } - }] - }, - 'id': { - }, - 'clazz': { - }, - 'operations': { - 'getComponentPresetNames': [{ - }] - } - }], - 'lockedBy': { - }, - 'createdBy': { - }, - 'name': { - }, - 'clazz': { - }, - 'operations': { - 'clone': [{ - }], - 'search': [{ - }], - 'load': [{ - }], - 'new': [{ - }], - 'exportModel': [{ - }], - 'run': [{ - }], - 'realTimeStats': [{ - }], - 'importModel': [{ - }], - 'add': [{ - }], - 'saveAs': [{ - }], - 'save': [{ - }], - 'delete': [{ - }], - 'remove': [{ - }], - 'stopRun': [{ - }] - } - }, - 'results': [{ - 'name': { - }, - 'content': { - }, - 'datasetvals': { - }, - 'operations': { - 'getGroups': [{ - 'lockedBy': { - }, - 'createdBy': { - }, - 'author': { - }, - 'description': { - }, - 'label': { - }, - 'createdOn': { - }, - 'clazz': { - }, - 'revision': { - } - }], - 'getHistoricalSeries': [{ - }], - 'getHistoricalResultSize': [{ - }] - } - }], - 'superflow': { - 'actions': [{ - 'actionInfo': [{ - 'name': { - }, - 'description': { - }, - 'realtimeGroup': { - }, - 'label': { - }, - 'units': { - } - }], - 'flowlabel': { - }, - 'gotoBlock': { - }, - 'exflows': { - }, - 'matchBlock': { - }, - 'id': { - }, - 'source': { - }, - 'label': { - }, - 'type': { - }, - 'params': { - }, - 'flowid': { - }, - 'operations': { - 'getActionInfo': [{ - 'name': { - }, - 'description': { - }, - 'realtimeGroup': { - }, - 'label': { - }, - 'units': { - } - }], - 'getActionChoices': [{ - }] - } - }], - 'settings': [{ - 'name': { - }, - 'description': { - }, - 'realtimeGroup': { - }, - 'label': { - }, - 'units': { - } - }], - 'percentFlows': { - }, - 'seed': { - }, - 'hosts': [{ - 'iface': { - }, - 'hostname': { - }, - 'ip': { - 'type': { - } - }, - 'id': { - } - }], - 'author': { - }, - 'estimate_bytes': { - }, - 'estimate_flows': { - }, - 'weight': { - }, - 'description': { - }, - 'label': { - }, - 'params': { - }, - 'constraints': { - }, - 'createdOn': { - }, - 'revision': { - }, - 'lockedBy': { - }, - 'flows': [{ - 'singleNP': { - }, - 'name': { - }, - 'from': { - }, - 'label': { - }, - 'id': { - }, - 'to': { - }, - 'params': { - }, - 'flowcount': { - }, - 'operations': { - 'getCannedFlows': [{ - }], - 'getFlowChoices': [{ - 'lockedBy': { - }, - 'createdBy': { - }, - 'author': { - }, - 'description': { - }, - 'label': { - }, - 'createdOn': { - }, - 'clazz': { - }, - 'revision': { - } - }] - } - }], - 'generated': { - }, - 'createdBy': { - }, - 'percentBandwidth': { - }, - 'name': { - }, - 'clazz': { - }, - 'operations': { - 'importResource': [{ - }], - 'saveAs': [{ - }], - 'save': [{ - }], - 'addAction': [{ - }], - 'addHost': [{ - }], - 'addFlow': [{ - }], - 'removeFlow': [{ - }], - 'removeAction': [{ - }], - 'load': [{ - }], - 'new': [{ - }], - 'search': [{ - }], - 'delete': [{ - }] - } - }, - 'network': { - 'lockedBy': { - }, - 'createdBy': { - }, - 'author': { - }, - 'name': { - }, - 'interfaceCount': { - }, - 'description': { - }, - 'label': { - }, - 'networkModel': { - 'ip_router': [{ - 'gateway_ip_address': { + 'proxy': { }, - 'netmask': { + 'tags': { }, + 'tep_vni_mapping': { + } + }], + 'ip_router': [{ 'default_container': { }, + 'gateway_ip_address': { + }, 'id': { }, 'ip_address': { + }, + 'netmask': { } }], - 'ue_info': [{ - 'imsi_base': { - }, - 'secret_key_step': { + 'ip_static_hosts': [{ + 'behind_snapt': { }, 'count': { }, - 'operator_variant': { + 'default_container': { }, - 'secret_key': { + 'dns': { }, - 'imei_base': { + 'dns_proxy': { }, - 'msisdn_base': { + 'enable_stats': { }, - 'maxmbps_per_ue': { + 'gateway_ip_address': { }, - 'mobility_session_infos': [{ + 'id': { + }, + 'ip_address': { + }, + 'ip_selection_type': { + }, + 'ldap': { + }, + 'maxmbps_per_host': { + }, + 'mpls_list': [{ 'id': { }, 'value': { } }], - 'id': { + 'netmask': { + }, + 'proxy': { + }, + 'psn': { + }, + 'psn_netmask': { + }, + 'tags': { } }], - 'ip_ldap_server': [{ - 'auth_timeout': { + 'ipsec_config': [{ + 'debug_log': { }, - 'ldap_username_start_tag': { + 'dpd_delay': { }, - 'ldap_user_min': { + 'dpd_enabled': { }, - 'ldap_user_count': { + 'dpd_timeout': { }, - 'authentication_rate': { + 'enable_xauth': { }, - 'ldap_password_start_tag': { + 'esp_auth_alg': { }, - 'ldap_user_max': { + 'esp_encr_alg': { }, 'id': { }, - 'ldap_server_address': { + 'ike_1to1': { }, - 'dn_fixed_val': { - } - }], - 'mme_sgw_pgw6': [{ - 'ue_info': { + 'ike_auth_alg': { }, - 'max_sessions': { + 'ike_dh': { }, - 'lease_address': { + 'ike_encr_alg': { }, - 'dns': { + 'ike_lifetime': { }, - 'plmn': { + 'ike_mode': { }, - 'ip_address': { + 'ike_pfs': { }, - 'sgw_advertised_sgw': { + 'ike_prf_alg': { }, - 'sgw_advertised_pgw': { + 'ike_version': { }, - 'lease_address_v6': { + 'init_rate': { }, - 'gateway_ip_address': { + 'initial_contact': { }, - 'default_container': { + 'ipsec_lifetime': { }, - 'id': { + 'left_id': { }, - 'prefix_length': { + 'max_outstanding': { + }, + 'nat_traversal': { + }, + 'psk': { + }, + 'rekey_margin': { + }, + 'retrans_interval': { + }, + 'right_id': { + }, + 'setup_timeout': { + }, + 'wildcard_tsr': { + }, + 'xauth_password': { + }, + 'xauth_username': { } }], - 'mobility_session_info': [{ - 'password': { + 'ipsec_router': [{ + 'default_container': { + }, + 'gateway_ip_address': { }, - 'bearers': [{ - 'qci_label': { - } - }], 'id': { }, - 'access_point_name': { + 'ike_peer_ip_address': { }, - 'username': { + 'ip_address': { }, - 'initiated_dedicated_bearers': { + 'ipsec': { + }, + 'netmask': { } }], - 'ggsn6': [{ - 'lease_address': { - }, - 'count': { + 'mme_sgw_pgw': [{ + 'default_container': { }, 'dns': { }, - 'ggsn_advertised_control_ip_address': { + 'gateway_ip_address': { + }, + 'id': { }, 'ip_address': { }, - 'ggsn_advertised_data_ip_address': { + 'lease_address': { }, 'lease_address_v6': { }, - 'gateway_ip_address': { + 'max_sessions': { + }, + 'netmask': { + }, + 'plmn': { + }, + 'sgw_advertised_pgw': { + }, + 'sgw_advertised_sgw': { }, + 'ue_info': { + } + }], + 'mme_sgw_pgw6': [{ 'default_container': { }, + 'dns': { + }, + 'gateway_ip_address': { + }, 'id': { }, + 'ip_address': { + }, + 'lease_address': { + }, + 'lease_address_v6': { + }, + 'max_sessions': { + }, + 'plmn': { + }, 'prefix_length': { + }, + 'sgw_advertised_pgw': { + }, + 'sgw_advertised_sgw': { + }, + 'ue_info': { } }], - 'ip_static_hosts': [{ - 'mpls_list': [{ - 'id': { - }, - 'value': { + 'mobility_session_info': [{ + 'access_point_name': { + }, + 'bearers': [{ + 'qci_label': { } }], - 'ip_selection_type': { + 'id': { }, - 'count': { + 'initiated_dedicated_bearers': { }, - 'dns': { + 'password': { }, - 'psn': { + 'username': { + } + }], + 'mpls_settings': [{ + 'id': { }, - 'psn_netmask': { + 'mpls_tags': [{ + 'mpls_exp': { + }, + 'mpls_label': { + }, + 'mpls_ttl': { + } + }] + }], + 'path_advanced': [{ + 'destination_container': { }, - 'ip_address': { + 'destination_port_algorithm': { }, - 'tags': { + 'destination_port_base': { }, - 'proxy': { + 'destination_port_count': { }, - 'maxmbps_per_host': { + 'enable_external_file': { }, - 'gateway_ip_address': { + 'file': { }, - 'netmask': { + 'id': { }, - 'ldap': { + 'source_container': { }, - 'default_container': { + 'source_port_algorithm': { + }, + 'source_port_base': { + }, + 'source_port_count': { + }, + 'stream_group': { + }, + 'tags': { + }, + 'tuple_limit': { + }, + 'xor_bits': { + } + }], + 'path_basic': [{ + 'destination_container': { }, 'id': { }, - 'dns_proxy': { - }, - 'behind_snapt': { - }, - 'enable_stats': { + 'source_container': { } }], - 'ggsn': [{ - 'lease_address': { - }, - 'count': { + 'pgw': [{ + 'default_container': { }, 'dns': { }, - 'ggsn_advertised_control_ip_address': { + 'gateway_ip_address': { + }, + 'id': { }, 'ip_address': { }, - 'ggsn_advertised_data_ip_address': { + 'lease_address': { }, 'lease_address_v6': { }, - 'gateway_ip_address': { + 'max_sessions': { }, 'netmask': { }, - 'default_container': { - }, - 'id': { + 'plmn': { } }], - 'ue': [{ - 'allocation_rate': { - }, - 'mobility_interval_ms': { - }, - 'ue_info': { + 'pgw6': [{ + 'default_container': { }, 'dns': { }, - 'mobility_action': { - }, - 'tags': { + 'gateway_ip_address': { }, - 'proxy': { + 'id': { }, - 'default_container': { + 'ip_address': { }, - 'mobility_with_traffic': { + 'lease_address': { }, - 'id': { + 'lease_address_v6': { }, - 'behind_snapt': { + 'max_sessions': { }, - 'request_ipv6': { + 'plmn': { }, - 'enable_stats': { + 'prefix_length': { } }], - 'enodeb_mme_sgw6': [{ - 'dns': { - }, - 'plmn': { - }, - 'ip_allocation_mode': { + 'plmn': [{ + 'description': { }, - 'mme_ip_address': { + 'id': { }, - 'pgw_ip_address': { + 'mcc': { }, - 'ue_address': { + 'mnc': { + } + }], + 'sgsn': [{ + 'default_container': { }, 'gateway_ip_address': { }, - 'default_container': { + 'ggsn_ip_address': { }, 'id': { }, - 'prefix_length': { - } - }], - 'ds_lite_aftr': [{ - 'count': { - }, 'ip_address': { }, - 'ipv6_addr_alloc_mode': { - }, - 'gateway_ip_address': { - }, + 'netmask': { + } + }], + 'sgsn6': [{ 'default_container': { }, - 'b4_count': { + 'gateway_ip_address': { }, - 'b4_ip_address': { + 'ggsn_ip_address': { }, 'id': { }, + 'ip_address': { + }, 'prefix_length': { } }], - 'ipsec_router': [{ - 'gateway_ip_address': { - }, - 'netmask': { + 'sgw_pgw': [{ + 'default_container': { }, - 'ipsec': { + 'dns': { }, - 'default_container': { + 'gateway_ip_address': { }, 'id': { }, 'ip_address': { }, - 'ike_peer_ip_address': { - } - }], - 'dhcpv6c_req_opts_cfg': [{ - 'dhcpv6v_req_preference': { - }, - 'dhcpv6v_req_dns_list': { - }, - 'dhcpv6v_req_dns_resolvers': { + 'lease_address': { }, - 'dhcpv6v_req_server_id': { + 'lease_address_v6': { }, - 'id': { - } - }], - 'sgsn': [{ - 'gateway_ip_address': { + 'max_sessions': { }, 'netmask': { }, - 'default_container': { - }, - 'ggsn_ip_address': { + 'plmn': { }, - 'id': { + 'sgw_advertised_pgw': { }, - 'ip_address': { + 'sgw_advertised_sgw': { } }], - 'enodeb_mme6': [{ - 'dns': { - }, - 'plmn': { + 'sgw_pgw6': [{ + 'default_container': { }, - 'ip_allocation_mode': { + 'dns': { }, - 'enodebs': [{ - 'gateway_ip_address': { - }, - 'default_container': { - }, - 'enodebCount': { - }, - 'ip_address': { - }, - 'prefix_length': { - } - }], - 'mme_ip_address': { + 'gateway_ip_address': { }, - 'pgw_ip_address': { + 'id': { }, - 'ue_address': { + 'ip_address': { }, - 'gateway_ip_address': { + 'lease_address': { }, - 'default_container': { + 'lease_address_v6': { }, - 'sgw_ip_address': { + 'max_sessions': { }, - 'id': { + 'plmn': { }, 'prefix_length': { - } - }], - 'plmn': [{ - 'mnc': { - }, - 'description': { }, - 'id': { + 'sgw_advertised_pgw': { }, - 'mcc': { + 'sgw_advertised_sgw': { } }], - 'sgw_pgw': [{ - 'max_sessions': { + 'sixrd_ce': [{ + 'br_ip_address': { }, - 'lease_address': { + 'count': { + }, + 'default_container': { }, 'dns': { }, - 'plmn': { + 'enable_stats': { }, - 'ip_address': { + 'gateway_ip_address': { }, - 'sgw_advertised_sgw': { + 'hosts_per_ce': { }, - 'sgw_advertised_pgw': { + 'id': { }, - 'lease_address_v6': { + 'ip4_mask_length': { }, - 'gateway_ip_address': { + 'ip_address': { }, 'netmask': { }, - 'default_container': { + 'sixrd_prefix': { }, - 'id': { + 'sixrd_prefix_length': { + }, + 'tags': { } }], - 'ip6_dhcp_server': [{ - 'ia_type': { - }, - 'pool_size': { + 'slaac_cfg': [{ + 'enable_dad': { }, - 'ip_address': { + 'fallback_ip_address': { }, - 'pool_prefix_length': { + 'id': { }, - 'offer_lifetime': { + 'stateless_dhcpv6c_cfg': { }, - 'max_lease_time': { + 'use_rand_addr': { + } + }], + 'ue': [{ + 'allocation_rate': { }, - 'gateway_ip_address': { + 'behind_snapt': { }, 'default_container': { }, - 'pool_base_address': { - }, - 'default_lease_time': { + 'dns': { }, - 'pool_dns_address1': { + 'enable_stats': { }, 'id': { }, - 'prefix_length': { + 'mobility_action': { + }, + 'mobility_interval_ms': { + }, + 'mobility_with_traffic': { }, - 'pool_dns_address2': { - } - }], - 'ip6_external_hosts': [{ 'proxy': { }, + 'request_ipv6': { + }, + 'tags': { + }, + 'ue_info': { + } + }], + 'ue_info': [{ 'count': { }, 'id': { }, - 'ip_address': { + 'imei_base': { + }, + 'imsi_base': { + }, + 'maxmbps_per_ue': { + }, + 'mobility_session_infos': [{ + 'id': { + }, + 'value': { + } + }], + 'msisdn_base': { + }, + 'operator_variant': { }, - 'behind_snapt': { + 'secret_key': { }, - 'tags': { + 'secret_key_step': { } }], - 'dhcpv6c_tout_and_retr_cfg': [{ - 'dhcp6c_inforeq_attempts': { + 'vlan': [{ + 'count': { }, - 'dhcp6c_initial_rebind_tout': { + 'default_container': { }, - 'dhcp6c_sol_attempts': { + 'description': { }, - 'dhcp6c_max_rebind_tout': { + 'duplicate_mac_address': { }, - 'dhcp6c_release_attempts': { + 'id': { }, - 'dhcp6c_initial_release_tout': { + 'inner_vlan': { }, - 'dhcp6c_req_attempts': { + 'mac_address': { }, - 'dhcp6c_max_req_tout': { + 'mtu': { }, - 'dhcp6c_max_renew_tout': { + 'outer_vlan': { }, - 'dhcp6c_max_sol_tout': { + 'tpid': { + } + }] + }, + 'operations': { + 'delete': [{ + }], + 'importNetwork': [{ + }], + 'list': [{ + }], + 'load': [{ + }], + 'new': [{ + }], + 'save': [{ + }], + 'saveAs': [{ + }], + 'search': [{ + }] + }, + 'revision': { + } + }, + 'remote': { + 'operations': { + 'connectChassis': [{ + }], + 'disconnectChassis': [{ + }] + } + }, + 'reports': { + 'duration': { + }, + 'endtime': { + }, + 'isPartOfResiliency': { + }, + 'iteration': { + }, + 'label': { + }, + 'name': { + }, + 'network': { + }, + 'operations': { + 'delete': [{ + }], + 'exportReport': [{ + }], + 'getReportContents': [{ + }], + 'getReportTable': [{ + }], + 'search': [{ + }] + }, + 'result': { + }, + 'size': { + }, + 'starttime': { + }, + 'testid': { + 'host': { + }, + 'iteration': { + }, + 'name': { + } + }, + 'testname': { + }, + 'user': { + } + }, + 'results': [{ + 'content': { + }, + 'datasetvals': { + }, + 'name': { + }, + 'operations': { + 'getGroups': [{ + 'author': { }, - 'dhcp6c_initial_req_tout': { + 'clazz': { }, - 'dhcp6c_max_inforeq_tout': { + 'createdBy': { }, - 'dhcp6c_initial_sol_tout': { + 'createdOn': { }, - 'dhcp6c_initial_renew_tout': { + 'description': { }, - 'dhcp6c_initial_inforeq_tout': { + 'label': { }, - 'id': { + 'lockedBy': { + }, + 'revision': { } }], - 'sgw_pgw6': [{ - 'max_sessions': { - }, - 'lease_address': { + 'getHistoricalResultSize': [{ + }], + 'getHistoricalSeries': [{ + }] + } + }], + 'statistics': { + 'component': [{ + 'label': { + }, + 'statNames': [{ + 'description': { }, - 'dns': { + 'label': { }, - 'plmn': { + 'name': { }, - 'ip_address': { + 'realtimeGroup': { }, - 'sgw_advertised_sgw': { + 'units': { + } + }] + }] + }, + 'strikeList': { + 'SecurityBehavior': { + }, + 'StrikeOptions': { + }, + 'author': { + }, + 'clazz': { + }, + 'createdBy': { + }, + 'createdOn': { + }, + 'description': { + }, + 'label': { + }, + 'lockedBy': { + }, + 'name': { + }, + 'numStrikes': { + }, + 'operations': { + 'add': [{ + }], + 'delete': [{ + }], + 'exportStrikeList': [{ + }], + 'importStrikeList': [{ + }], + 'load': [{ + }], + 'new': [{ + }], + 'remove': [{ + }], + 'save': [{ + }], + 'saveAs': [{ + }], + 'search': [{ + }] + }, + 'queryString': { + }, + 'revision': { + }, + 'strikes': [{ + 'category': { + }, + 'direction': { + }, + 'fileExtension': { + }, + 'fileSize': { + }, + 'id': { + }, + 'keyword': [{ + 'name': { + } + }], + 'name': { + }, + 'path': { + }, + 'protocol': { + }, + 'reference': [{ + 'label': { }, - 'sgw_advertised_pgw': { + 'type': { }, - 'lease_address_v6': { + 'value': { + } + }], + 'severity': { + }, + 'strike': { + }, + 'strikeset': { + }, + 'variants': { + }, + 'year': { + } + }] + }, + 'strikes': { + 'category': { + }, + 'direction': { + }, + 'fileExtension': { + }, + 'fileSize': { + }, + 'id': { + }, + 'keyword': [{ + 'name': { + } + }], + 'name': { + }, + 'operations': { + 'search': [{ + }] + }, + 'path': { + }, + 'protocol': { + }, + 'reference': [{ + 'label': { + }, + 'type': { + }, + 'value': { + } + }], + 'severity': { + }, + 'variants': { + }, + 'year': { + } + }, + 'superflow': { + 'actions': [{ + 'actionInfo': [{ + 'description': { }, - 'gateway_ip_address': { + 'label': { }, - 'default_container': { + 'name': { }, - 'id': { + 'realtimeGroup': { }, - 'prefix_length': { + 'units': { } }], - 'mpls_settings': [{ - 'mpls_tags': [{ - 'mpls_ttl': { + 'exflows': { + }, + 'flowid': { + }, + 'flowlabel': { + }, + 'gotoBlock': { + }, + 'id': { + }, + 'label': { + }, + 'matchBlock': { + }, + 'operations': { + 'getActionChoices': [{ + }], + 'getActionInfo': [{ + 'description': { }, - 'mpls_label': { + 'label': { }, - 'mpls_exp': { + 'name': { + }, + 'realtimeGroup': { + }, + 'units': { } + }] + }, + 'params': { + }, + 'source': { + }, + 'type': { + } + }], + 'author': { + }, + 'clazz': { + }, + 'constraints': { + }, + 'createdBy': { + }, + 'createdOn': { + }, + 'description': { + }, + 'estimate_bytes': { + }, + 'estimate_flows': { + }, + 'flows': [{ + 'flowcount': { + }, + 'from': { + }, + 'id': { + }, + 'label': { + }, + 'name': { + }, + 'operations': { + 'getCannedFlows': [{ }], - 'id': { + 'getFlowChoices': [{ + 'author': { + }, + 'clazz': { + }, + 'createdBy': { + }, + 'createdOn': { + }, + 'description': { + }, + 'label': { + }, + 'lockedBy': { + }, + 'revision': { + } + }] + }, + 'params': { + }, + 'singleNP': { + }, + 'to': { + } + }], + 'generated': { + }, + 'hosts': [{ + 'hostname': { + }, + 'id': { + }, + 'iface': { + }, + 'ip': { + 'type': { } + } + }], + 'label': { + }, + 'lockedBy': { + }, + 'name': { + }, + 'operations': { + 'addAction': [{ }], - 'sixrd_ce': [{ - 'sixrd_prefix': { - }, - 'count': { - }, - 'dns': { - }, - 'sixrd_prefix_length': { - }, - 'ip_address': { - }, - 'tags': { - }, - 'br_ip_address': { - }, - 'gateway_ip_address': { - }, - 'netmask': { - }, - 'default_container': { - }, - 'hosts_per_ce': { - }, - 'ip4_mask_length': { - }, - 'id': { - }, - 'enable_stats': { - } + 'addFlow': [{ }], - 'ip_dhcp_hosts': [{ - 'allocation_rate': { - }, - 'count': { - }, - 'tags': { - }, - 'proxy': { - }, - 'ldap': { - }, - 'default_container': { - }, - 'accept_local_offers_only': { + 'addHost': [{ + }], + 'delete': [{ + }], + 'importResource': [{ + }], + 'load': [{ + }], + 'new': [{ + }], + 'removeAction': [{ + }], + 'removeFlow': [{ + }], + 'save': [{ + }], + 'saveAs': [{ + }], + 'search': [{ + }] + }, + 'params': { + }, + 'percentBandwidth': { + }, + 'percentFlows': { + }, + 'revision': { + }, + 'seed': { + }, + 'settings': [{ + 'description': { + }, + 'label': { + }, + 'name': { + }, + 'realtimeGroup': { + }, + 'units': { + } + }], + 'weight': { + } + }, + 'testmodel': { + 'author': { + }, + 'clazz': { + }, + 'component': [{ + '@type:appsim': { + 'app': { + 'fidelity': { + }, + 'removedns': { + }, + 'replace_streams': { + }, + 'streamsPerSuperflow': { + } }, - 'id': { + 'delayStart': { }, - 'behind_snapt': { + 'experimental': { + 'tcpSegmentsBurst': { + }, + 'unify_l4_bufs': { + } }, - 'dns_proxy': { + 'ip': { + 'tos': { + }, + 'ttl': { + } }, - 'enable_stats': { - } - }], - 'enodeb_mme': [{ - 'dns': { + 'ip6': { + 'flowlabel': { + }, + 'hop_limit': { + }, + 'traffic_class': { + } }, - 'plmn': { + 'loadprofile': { + 'label': { + }, + 'name': { + } }, - 'ip_allocation_mode': { + 'profile': { }, - 'enodebs': [{ - 'gateway_ip_address': { + 'rampDist': { + 'down': { }, - 'netmask': { + 'downBehavior': { }, - 'default_container': { + 'steady': { }, - 'enodebCount': { + 'steadyBehavior': { }, - 'ip_address': { + 'synRetryMode': { + }, + 'up': { + }, + 'upBehavior': { } - }], - 'mme_ip_address': { - }, - 'pgw_ip_address': { - }, - 'ue_address': { - }, - 'gateway_ip_address': { - }, - 'netmask': { - }, - 'default_container': { - }, - 'sgw_ip_address': { - }, - 'id': { - } - }], - 'enodeb': [{ - 'dns': { - }, - 'plmn': { }, - 'psn': { + 'rampUpProfile': { + 'increment': { + }, + 'interval': { + }, + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'psn_netmask': { + 'rateDist': { + 'max': { + }, + 'min': { + }, + 'scope': { + }, + 'type': { + }, + 'unit': { + }, + 'unlimited': { + } }, - 'sctp_over_udp': { + 'resources': { + 'expand': { + } }, - 'enodebs': [{ - 'mme_ip_address': { + 'sessions': { + 'allocationOverride': { }, - 'enodebCount': { + 'closeFast': { }, - 'ip_address': { + 'emphasis': { + }, + 'engine': { + }, + 'max': { + }, + 'maxActive': { + }, + 'maxPerSecond': { + }, + 'openFast': { + }, + 'statDetail': { + }, + 'target': { + }, + 'targetMatches': { + }, + 'targetPerSecond': { } - }], - 'gateway_ip_address': { - }, - 'netmask': { }, - 'default_container': { + 'srcPortDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'id': { + 'ssl': { + 'client_record_len': { + }, + 'server_record_len': { + }, + 'sslReuseType': { + }, + 'ssl_client_keylog': { + }, + 'ssl_keylog_max_entries': { + }, + 'upgrade': { + } }, - 'sctp_sport': { + 'tcp': { + 'ack_every_n': { + }, + 'add_timestamps': { + }, + 'aging_time': { + }, + 'aging_time_data_type': { + }, + 'delay_acks': { + }, + 'delay_acks_ms': { + }, + 'disable_ack_piggyback': { + }, + 'dynamic_receive_window_size': { + }, + 'ecn': { + }, + 'handshake_data': { + }, + 'initial_receive_window': { + }, + 'mss': { + }, + 'psh_every_segment': { + }, + 'raw_flags': { + }, + 'reset_at_end': { + }, + 'retries': { + }, + 'retry_quantum_ms': { + }, + 'shutdown_data': { + }, + 'syn_data_padding': { + }, + 'tcp_4_way_close': { + }, + 'tcp_connect_delay_ms': { + }, + 'tcp_icw': { + }, + 'tcp_keepalive_timer': { + }, + 'tcp_window_scale': { + } } - }], - 'ip6_router': [{ - 'hosts_ip_alloc_container': { - }, - 'gateway_ip_address': { - }, - 'default_container': { - }, - 'id': { - }, - 'ip_address': { + }, + '@type:clientsim': { + 'app': { + 'fidelity': { + }, + 'removedns': { + }, + 'replace_streams': { + }, + 'streamsPerSuperflow': { + } }, - 'prefix_length': { - } - }], - 'ip_external_hosts': [{ - 'proxy': { + 'delayStart': { }, - 'count': { + 'ip': { + 'tos': { + }, + 'ttl': { + } }, - 'id': { + 'ip6': { + 'flowlabel': { + }, + 'hop_limit': { + }, + 'traffic_class': { + } }, - 'ip_address': { + 'loadprofile': { + 'label': { + }, + 'name': { + } }, - 'behind_snapt': { + 'rampDist': { + 'down': { + }, + 'downBehavior': { + }, + 'steady': { + }, + 'steadyBehavior': { + }, + 'synRetryMode': { + }, + 'up': { + }, + 'upBehavior': { + } }, - 'tags': { - } - }], - 'interface': [{ - 'ignore_pause_frames': { + 'rampUpProfile': { + 'increment': { + }, + 'interval': { + }, + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'duplicate_mac_address': { + 'rateDist': { + 'max': { + }, + 'min': { + }, + 'scope': { + }, + 'type': { + }, + 'unit': { + }, + 'unlimited': { + } }, - 'description': { + 'resources': { + 'expand': { + } }, - 'packet_filter': { - 'not_dest_port': { + 'sessions': { + 'allocationOverride': { }, - 'not_src_ip': { + 'closeFast': { }, - 'filter': { + 'emphasis': { }, - 'src_ip': { + 'engine': { }, - 'src_port': { + 'max': { }, - 'vlan': { + 'maxActive': { }, - 'not_vlan': { + 'maxPerSecond': { }, - 'dest_ip': { + 'openFast': { }, - 'not_dest_ip': { + 'statDetail': { }, - 'dest_port': { + 'target': { }, - 'not_src_port': { + 'targetMatches': { + }, + 'targetPerSecond': { } }, - 'impairments': { - 'drop': { + 'srcPortDist': { + 'max': { }, - 'corrupt_lt64': { + 'min': { }, - 'rate': { + 'type': { + } + }, + 'ssl': { + 'client_record_len': { }, - 'corrupt_lt256': { + 'server_record_len': { }, - 'corrupt_rand': { + 'sslReuseType': { }, - 'corrupt_chksum': { + 'ssl_client_keylog': { }, - 'corrupt_gt256': { + 'ssl_keylog_max_entries': { }, - 'frack': { + 'upgrade': { } }, - 'mtu': { - }, - 'vlan_key': { - }, - 'number': { - }, - 'use_vnic_mac_address': { - }, - 'mac_address': { - }, - 'id': { - } - }], - 'ds_lite_b4': [{ - 'aftr_addr': { - }, - 'count': { - }, - 'ip_address': { - }, - 'host_ip_base_addr': { - }, - 'ipv6_addr_alloc_mode': { - }, - 'gateway_ip_address': { - }, - 'default_container': { - }, - 'aftr_count': { - }, - 'hosts_ip_increment': { - }, - 'id': { - }, - 'prefix_length': { - }, - 'host_ip_addr_alloc_mode': { - } - }], - 'ip_dns_proxy': [{ - 'dns_proxy_ip_count': { - }, - 'dns_proxy_src_ip_base': { - }, - 'id': { - }, - 'dns_proxy_ip_base': { - }, - 'dns_proxy_src_ip_count': { - } - }], - 'ip6_dns_proxy': [{ - 'dns_proxy_ip_count': { - }, - 'dns_proxy_src_ip_base': { - }, - 'id': { - }, - 'dns_proxy_ip_base': { - }, - 'dns_proxy_src_ip_count': { - } - }], - 'vlan': [{ - 'tpid': { - }, - 'duplicate_mac_address': { - }, - 'description': { - }, - 'mtu': { - }, - 'outer_vlan': { - }, - 'inner_vlan': { - }, - 'mac_address': { - }, - 'default_container': { - }, - 'id': { - } - }], - 'mme_sgw_pgw': [{ - 'ue_info': { - }, - 'max_sessions': { - }, - 'lease_address': { - }, - 'dns': { - }, - 'plmn': { - }, - 'ip_address': { - }, - 'sgw_advertised_sgw': { - }, - 'sgw_advertised_pgw': { - }, - 'lease_address_v6': { - }, - 'gateway_ip_address': { - }, - 'netmask': { - }, - 'default_container': { + 'superflow': { }, - 'id': { + 'tcp': { + 'ack_every_n': { + }, + 'add_timestamps': { + }, + 'aging_time': { + }, + 'aging_time_data_type': { + }, + 'delay_acks': { + }, + 'delay_acks_ms': { + }, + 'disable_ack_piggyback': { + }, + 'dynamic_receive_window_size': { + }, + 'ecn': { + }, + 'handshake_data': { + }, + 'initial_receive_window': { + }, + 'mss': { + }, + 'psh_every_segment': { + }, + 'raw_flags': { + }, + 'reset_at_end': { + }, + 'retries': { + }, + 'retry_quantum_ms': { + }, + 'shutdown_data': { + }, + 'syn_data_padding': { + }, + 'tcp_4_way_close': { + }, + 'tcp_connect_delay_ms': { + }, + 'tcp_icw': { + }, + 'tcp_keepalive_timer': { + }, + 'tcp_window_scale': { + } } - }], - 'ip_mac_static_hosts': [{ - 'mpls_list': [{ - 'id': { + }, + '@type:layer2': { + 'advanced': { + 'ethTypeField': { }, - 'value': { + 'ethTypeVal': { } - }], - 'ip_selection_type': { }, - 'count': { + 'bidirectional': { }, - 'dns': { + 'delayStart': { }, - 'psn': { + 'duration': { + 'disable_nd_probes': { + }, + 'durationFrames': { + }, + 'durationTime': { + } }, - 'psn_netmask': { + 'maxStreams': { }, - 'ip_address': { + 'payload': { + 'data': { + }, + 'dataWidth': { + }, + 'type': { + } }, - 'tags': { + 'payloadAdvanced': { + 'udfDataWidth': { + }, + 'udfLength': { + }, + 'udfMode': { + }, + 'udfOffset': { + } }, - 'proxy': { + 'rateDist': { + 'increment': { + }, + 'max': { + }, + 'min': { + }, + 'ramptype': { + }, + 'rate': { + }, + 'type': { + }, + 'unit': { + } }, - 'maxmbps_per_host': { + 'sizeDist': { + 'increment': { + }, + 'max': { + }, + 'min': { + }, + 'mixlen1': { + }, + 'mixlen10': { + }, + 'mixlen2': { + }, + 'mixlen3': { + }, + 'mixlen4': { + }, + 'mixlen5': { + }, + 'mixlen6': { + }, + 'mixlen7': { + }, + 'mixlen8': { + }, + 'mixlen9': { + }, + 'mixweight1': { + }, + 'mixweight10': { + }, + 'mixweight2': { + }, + 'mixweight3': { + }, + 'mixweight4': { + }, + 'mixweight5': { + }, + 'mixweight6': { + }, + 'mixweight7': { + }, + 'mixweight8': { + }, + 'mixweight9': { + }, + 'rate': { + }, + 'type': { + }, + 'unit': { + } }, - 'gateway_ip_address': { + 'slowStart': { }, - 'netmask': { + 'slowStartFps': { + } + }, + '@type:layer3': { + 'Templates': { + 'TemplateType': { + } }, - 'ldap': { + 'addrGenMode': { }, - 'mac_address': { + 'advancedIPv4': { + 'checksumField': { + }, + 'checksumVal': { + }, + 'lengthField': { + }, + 'lengthVal': { + }, + 'optionHeaderData': { + }, + 'optionHeaderField': { + }, + 'tos': { + }, + 'ttl': { + } }, - 'default_container': { + 'advancedIPv6': { + 'extensionHeaderData': { + }, + 'extensionHeaderField': { + }, + 'flowLabel': { + }, + 'hopLimit': { + }, + 'lengthField': { + }, + 'lengthVal': { + }, + 'nextHeader': { + }, + 'trafficClass': { + } }, - 'id': { + 'advancedUDP': { + 'checksumField': { + }, + 'checksumVal': { + }, + 'lengthField': { + }, + 'lengthVal': { + } }, - 'dns_proxy': { + 'bidirectional': { }, - 'behind_snapt': { + 'delayStart': { }, - 'enable_stats': { - } - }], - 'path_advanced': [{ - 'destination_port_count': { + 'dstPort': { }, - 'destination_port_base': { + 'dstPortMask': { }, - 'source_port_base': { + 'duration': { + 'disable_nd_probes': { + }, + 'durationFrames': { + }, + 'durationTime': { + } }, - 'tags': { + 'enableTCP': { }, - 'enable_external_file': { + 'maxStreams': { }, - 'source_container': { + 'payload': { + 'data': { + }, + 'dataWidth': { + }, + 'type': { + } }, - 'source_port_algorithm': { + 'payloadAdvanced': { + 'udfDataWidth': { + }, + 'udfLength': { + }, + 'udfMode': { + }, + 'udfOffset': { + } }, - 'tuple_limit': { + 'randomizeIP': { }, - 'file': { + 'rateDist': { + 'increment': { + }, + 'max': { + }, + 'min': { + }, + 'ramptype': { + }, + 'rate': { + }, + 'type': { + }, + 'unit': { + } }, - 'destination_port_algorithm': { + 'sizeDist': { + 'increment': { + }, + 'max': { + }, + 'min': { + }, + 'mixlen1': { + }, + 'mixlen10': { + }, + 'mixlen2': { + }, + 'mixlen3': { + }, + 'mixlen4': { + }, + 'mixlen5': { + }, + 'mixlen6': { + }, + 'mixlen7': { + }, + 'mixlen8': { + }, + 'mixlen9': { + }, + 'mixweight1': { + }, + 'mixweight10': { + }, + 'mixweight2': { + }, + 'mixweight3': { + }, + 'mixweight4': { + }, + 'mixweight5': { + }, + 'mixweight6': { + }, + 'mixweight7': { + }, + 'mixweight8': { + }, + 'mixweight9': { + }, + 'rate': { + }, + 'type': { + }, + 'unit': { + } }, - 'destination_container': { + 'slowStart': { }, - 'source_port_count': { + 'slowStartFps': { }, - 'xor_bits': { + 'srcPort': { }, - 'stream_group': { + 'srcPortMask': { }, - 'id': { - } - }], - 'path_basic': [{ - 'source_container': { + 'syncIP': { }, - 'destination_container': { + 'udpDstPortMode': { }, - 'id': { + 'udpSrcPortMode': { } - }], - 'geneve_tep': [{ - 'count': { - }, - 'ip_address': { + }, + '@type:layer3advanced': { + 'Templates': { + 'TemplateType': { + } }, - 'vni_base': { + 'advancedIPv4': { + 'checksumField': { + }, + 'checksumVal': { + }, + 'lengthField': { + }, + 'lengthVal': { + }, + 'optionHeaderData': { + }, + 'optionHeaderField': { + }, + 'tos': { + }, + 'ttl': { + } }, - 'gateway_ip_address': { + 'advancedIPv6': { + 'extensionHeaderData': { + }, + 'extensionHeaderField': { + }, + 'flowLabel': { + }, + 'hopLimit': { + }, + 'lengthField': { + }, + 'lengthVal': { + }, + 'nextHeader': { + }, + 'trafficClass': { + } }, - 'netmask': { + 'advancedUDP': { + 'checksumField': { + }, + 'checksumVal': { + }, + 'lengthField': { + }, + 'lengthVal': { + } }, - 'default_container': { + 'bidirectional': { }, - 'id': { + 'delayStart': { }, - 'vni_count': { - } - }], - 'pgw': [{ - 'max_sessions': { + 'duration': { + 'disable_nd_probes': { + }, + 'durationFrames': { + }, + 'durationTime': { + } }, - 'lease_address': { + 'enablePerStreamStats': { }, - 'dns': { + 'enableTCP': { }, - 'plmn': { + 'payload': { + 'data': { + }, + 'dataWidth': { + }, + 'type': { + } }, - 'ip_address': { + 'payloadAdvanced': { + 'udfDataWidth': { + }, + 'udfLength': { + }, + 'udfMode': { + }, + 'udfOffset': { + } }, - 'lease_address_v6': { + 'rateDist': { + 'increment': { + }, + 'max': { + }, + 'min': { + }, + 'ramptype': { + }, + 'rate': { + }, + 'type': { + }, + 'unit': { + } }, - 'gateway_ip_address': { + 'sizeDist': { + 'increment': { + }, + 'max': { + }, + 'min': { + }, + 'mixlen1': { + }, + 'mixlen10': { + }, + 'mixlen2': { + }, + 'mixlen3': { + }, + 'mixlen4': { + }, + 'mixlen5': { + }, + 'mixlen6': { + }, + 'mixlen7': { + }, + 'mixlen8': { + }, + 'mixlen9': { + }, + 'mixweight1': { + }, + 'mixweight10': { + }, + 'mixweight2': { + }, + 'mixweight3': { + }, + 'mixweight4': { + }, + 'mixweight5': { + }, + 'mixweight6': { + }, + 'mixweight7': { + }, + 'mixweight8': { + }, + 'mixweight9': { + }, + 'rate': { + }, + 'type': { + }, + 'unit': { + } }, - 'netmask': { + 'slowStart': { }, - 'default_container': { + 'slowStartFps': { }, - 'id': { + 'tuple_gen_seed': { } - }], - 'pgw6': [{ - 'max_sessions': { - }, - 'lease_address': { + }, + '@type:layer4': { + 'delayStart': { }, - 'dns': { + 'dstPortDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'plmn': { + 'ip': { + 'tos': { + }, + 'ttl': { + } }, - 'ip_address': { + 'ip6': { + 'flowlabel': { + }, + 'hop_limit': { + }, + 'traffic_class': { + } }, - 'lease_address_v6': { + 'loadprofile': { + 'label': { + }, + 'name': { + } }, - 'gateway_ip_address': { + 'packetsPerSession': { }, - 'default_container': { + 'payload': { + 'add_timestamp': { + }, + 'data': { + }, + 'http_type': { + }, + 'transport': { + }, + 'type': { + } }, - 'id': { + 'payloadSizeDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'prefix_length': { - } - }], - 'sgsn6': [{ - 'gateway_ip_address': { + 'rampDist': { + 'down': { + }, + 'downBehavior': { + }, + 'steady': { + }, + 'steadyBehavior': { + }, + 'synRetryMode': { + }, + 'up': { + }, + 'upBehavior': { + } }, - 'default_container': { + 'rampUpProfile': { + 'increment': { + }, + 'interval': { + }, + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'ggsn_ip_address': { + 'rateDist': { + 'max': { + }, + 'min': { + }, + 'scope': { + }, + 'type': { + }, + 'unit': { + }, + 'unlimited': { + } }, - 'id': { + 'sessions': { + 'allocationOverride': { + }, + 'closeFast': { + }, + 'emphasis': { + }, + 'engine': { + }, + 'max': { + }, + 'maxActive': { + }, + 'maxPerSecond': { + }, + 'openFast': { + }, + 'statDetail': { + }, + 'target': { + }, + 'targetMatches': { + }, + 'targetPerSecond': { + } }, - 'ip_address': { + 'srcPortDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'prefix_length': { + 'tcp': { + 'ack_every_n': { + }, + 'add_timestamps': { + }, + 'aging_time': { + }, + 'aging_time_data_type': { + }, + 'delay_acks': { + }, + 'delay_acks_ms': { + }, + 'disable_ack_piggyback': { + }, + 'dynamic_receive_window_size': { + }, + 'ecn': { + }, + 'handshake_data': { + }, + 'initial_receive_window': { + }, + 'mss': { + }, + 'psh_every_segment': { + }, + 'raw_flags': { + }, + 'reset_at_end': { + }, + 'retries': { + }, + 'retry_quantum_ms': { + }, + 'shutdown_data': { + }, + 'syn_data_padding': { + }, + 'tcp_4_way_close': { + }, + 'tcp_connect_delay_ms': { + }, + 'tcp_icw': { + }, + 'tcp_keepalive_timer': { + }, + 'tcp_window_scale': { + } } - }], - 'ip6_static_hosts': [{ - 'mpls_list': [{ - 'id': { + }, + '@type:liveappsim': { + 'app': { + 'fidelity': { }, - 'value': { + 'removeUnknownSSL': { + }, + 'removeUnknownTcpUdp': { + }, + 'removedns': { + }, + 'replace_streams': { + }, + 'streamsPerSuperflow': { } - }], - 'ip_alloc_container': { }, - 'ip_selection_type': { + 'concurrencyscalefactor': { }, - 'count': { + 'delayStart': { }, - 'dns': { + 'inflateDeflate': { }, - 'ip_address': { + 'ip': { + 'tos': { + }, + 'ttl': { + } }, - 'tags': { + 'ip6': { + 'flowlabel': { + }, + 'hop_limit': { + }, + 'traffic_class': { + } }, - 'proxy': { + 'liveProfile': { }, - 'maxmbps_per_host': { + 'loadprofile': { + 'label': { + }, + 'name': { + } }, - 'gateway_ip_address': { + 'rampDist': { + 'down': { + }, + 'downBehavior': { + }, + 'steady': { + }, + 'steadyBehavior': { + }, + 'synRetryMode': { + }, + 'up': { + }, + 'upBehavior': { + } }, - 'default_container': { + 'rampUpProfile': { + 'increment': { + }, + 'interval': { + }, + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'id': { + 'rateDist': { + 'max': { + }, + 'min': { + }, + 'scope': { + }, + 'type': { + }, + 'unit': { + }, + 'unlimited': { + } }, - 'host_ipv6_addr_alloc_mode': { + 'sessions': { + 'allocationOverride': { + }, + 'closeFast': { + }, + 'emphasis': { + }, + 'engine': { + }, + 'max': { + }, + 'maxActive': { + }, + 'maxPerSecond': { + }, + 'openFast': { + }, + 'statDetail': { + }, + 'target': { + }, + 'targetMatches': { + }, + 'targetPerSecond': { + } }, - 'prefix_length': { + 'sfratescalefactor': { }, - 'dns_proxy': { + 'srcPortDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'behind_snapt': { + 'tcp': { + 'ack_every_n': { + }, + 'add_timestamps': { + }, + 'aging_time': { + }, + 'aging_time_data_type': { + }, + 'delay_acks': { + }, + 'delay_acks_ms': { + }, + 'disable_ack_piggyback': { + }, + 'dynamic_receive_window_size': { + }, + 'ecn': { + }, + 'handshake_data': { + }, + 'initial_receive_window': { + }, + 'mss': { + }, + 'psh_every_segment': { + }, + 'raw_flags': { + }, + 'reset_at_end': { + }, + 'retries': { + }, + 'retry_quantum_ms': { + }, + 'shutdown_data': { + }, + 'syn_data_padding': { + }, + 'tcp_4_way_close': { + }, + 'tcp_connect_delay_ms': { + }, + 'tcp_icw': { + }, + 'tcp_keepalive_timer': { + }, + 'tcp_window_scale': { + } }, - 'enable_stats': { + 'tputscalefactor': { } - }], - 'enodeb_mme_sgw': [{ - 'dns': { + }, + '@type:playback': { + 'behavior': { }, - 'plmn': { + 'delayStart': { }, - 'ip_allocation_mode': { + 'file': { }, - 'mme_ip_address': { + 'ip': { + 'tos': { + }, + 'ttl': { + } }, - 'pgw_ip_address': { + 'ip6': { + 'flowlabel': { + }, + 'hop_limit': { + }, + 'traffic_class': { + } }, - 'ue_address': { + 'loadprofile': { + 'label': { + }, + 'name': { + } }, - 'gateway_ip_address': { + 'modification': { + 'bpfstring': { + }, + 'endpacket': { + }, + 'independentflows': { + }, + 'loopcount': { + }, + 'newport': { + }, + 'originalport': { + }, + 'replay': { + }, + 'serveripinjection': { + }, + 'single': { + }, + 'startpacket': { + } }, - 'netmask': { + 'rampDist': { + 'down': { + }, + 'downBehavior': { + }, + 'steady': { + }, + 'steadyBehavior': { + }, + 'synRetryMode': { + }, + 'up': { + }, + 'upBehavior': { + } }, - 'default_container': { + 'rampUpProfile': { + 'increment': { + }, + 'interval': { + }, + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'id': { - } - }], - 'enodeb6': [{ - 'dns': { + 'rateDist': { + 'max': { + }, + 'min': { + }, + 'scope': { + }, + 'type': { + }, + 'unit': { + }, + 'unlimited': { + } }, - 'plmn': { + 'sessions': { + 'allocationOverride': { + }, + 'closeFast': { + }, + 'emphasis': { + }, + 'engine': { + }, + 'max': { + }, + 'maxActive': { + }, + 'maxPerSecond': { + }, + 'openFast': { + }, + 'statDetail': { + }, + 'target': { + }, + 'targetMatches': { + }, + 'targetPerSecond': { + } }, - 'sctp_over_udp': { + 'srcPortDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'enodebs': [{ - 'mme_ip_address': { + 'tcp': { + 'ack_every_n': { + }, + 'add_timestamps': { + }, + 'aging_time': { + }, + 'aging_time_data_type': { + }, + 'delay_acks': { + }, + 'delay_acks_ms': { + }, + 'disable_ack_piggyback': { + }, + 'dynamic_receive_window_size': { + }, + 'ecn': { + }, + 'handshake_data': { + }, + 'initial_receive_window': { + }, + 'mss': { + }, + 'psh_every_segment': { + }, + 'raw_flags': { + }, + 'reset_at_end': { + }, + 'retries': { + }, + 'retry_quantum_ms': { + }, + 'shutdown_data': { + }, + 'syn_data_padding': { + }, + 'tcp_4_way_close': { + }, + 'tcp_connect_delay_ms': { + }, + 'tcp_icw': { }, - 'enodebCount': { + 'tcp_keepalive_timer': { }, - 'ip_address': { + 'tcp_window_scale': { } - }], - 'gateway_ip_address': { - }, - 'default_container': { - }, - 'id': { - }, - 'prefix_length': { - }, - 'sctp_sport': { - } - }], - 'slaac_cfg': [{ - 'use_rand_addr': { - }, - 'enable_dad': { - }, - 'id': { - }, - 'stateless_dhcpv6c_cfg': { - }, - 'fallback_ip_address': { - } - }], - 'ip_dns_config': [{ - 'dns_domain': { - }, - 'id': { - }, - 'dns_server_address': { } - }], - 'ip_dhcp_server': [{ - 'lease_address': { - }, - 'count': { - }, - 'dns': { + }, + '@type:security_all': { + 'attackPlan': { }, - 'ip_address': { + 'attackPlanIterationDelay': { }, - 'gateway_ip_address': { + 'attackPlanIterations': { }, - 'netmask': { + 'attackProfile': { }, - 'lease_time': { + 'attackRetries': { }, - 'default_container': { + 'delayStart': { }, - 'id': { + 'maxAttacksPerSecond': { }, - 'accept_local_requests_only': { - } - }], - 'ip6_dns_config': [{ - 'dns_domain': { + 'maxConcurrAttacks': { }, - 'id': { + 'maxPacketsPerSecond': { }, - 'dns_server_address': { + 'randomSeed': { } - }], - 'ipsec_config': [{ - 'ike_dh': { - }, - 'ipsec_lifetime': { - }, - 'ike_pfs': { - }, - 'ike_mode': { - }, - 'ike_1to1': { - }, - 'nat_traversal': { - }, - 'xauth_username': { - }, - 'ike_encr_alg': { - }, - 'psk': { + }, + '@type:security_np': { + 'attackPlan': { }, - 'dpd_enabled': { + 'attackPlanIterationDelay': { }, - 'dpd_timeout': { + 'attackPlanIterations': { }, - 'init_rate': { + 'attackProfile': { }, - 'setup_timeout': { + 'attackRetries': { }, - 'esp_encr_alg': { + 'delayStart': { }, - 'ike_lifetime': { + 'randomSeed': { }, - 'ike_version': { + 'rateDist': { + 'max': { + }, + 'min': { + }, + 'scope': { + }, + 'type': { + }, + 'unit': { + }, + 'unlimited': { + } }, - 'id': { + 'sessions': { + 'max': { + }, + 'maxPerSecond': { + } + } + }, + '@type:stackscrambler': { + 'delayStart': { }, - 'left_id': { + 'dstPortDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'ike_prf_alg': { + 'ip': { + 'tos': { + }, + 'ttl': { + } }, - 'esp_auth_alg': { + 'ip6': { + 'flowlabel': { + }, + 'hop_limit': { + }, + 'traffic_class': { + } }, - 'dpd_delay': { + 'loadprofile': { + 'label': { + }, + 'name': { + } }, - 'xauth_password': { + 'payload': { + 'data': { + }, + 'transport': { + }, + 'type': { + } }, - 'initial_contact': { + 'payloadSizeDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'debug_log': { + 'prng': { + 'offset': { + }, + 'seed': { + } }, - 'wildcard_tsr': { + 'rampDist': { + 'down': { + }, + 'downBehavior': { + }, + 'steady': { + }, + 'steadyBehavior': { + }, + 'synRetryMode': { + }, + 'up': { + }, + 'upBehavior': { + } }, - 'rekey_margin': { + 'rampUpProfile': { + 'increment': { + }, + 'interval': { + }, + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'ike_auth_alg': { + 'rateDist': { + 'max': { + }, + 'min': { + }, + 'scope': { + }, + 'type': { + }, + 'unit': { + }, + 'unlimited': { + } }, - 'right_id': { + 'scrambleOptions': { + 'badEthType': { + }, + 'badGTPFlags': { + }, + 'badGTPLen': { + }, + 'badGTPNext': { + }, + 'badGTPNpdu': { + }, + 'badGTPSeqno': { + }, + 'badGTPType': { + }, + 'badICMPCode': { + }, + 'badICMPType': { + }, + 'badIPChecksum': { + }, + 'badIPFlags': { + }, + 'badIPFlowLabel': { + }, + 'badIPFragOffset': { + }, + 'badIPLength': { + }, + 'badIPOptions': { + }, + 'badIPProtocol': { + }, + 'badIPTOS': { + }, + 'badIPTTL': { + }, + 'badIPTotalLength': { + }, + 'badIPVersion': { + }, + 'badL4Checksum': { + }, + 'badL4HeaderLength': { + }, + 'badSCTPChecksum': { + }, + 'badSCTPFlags': { + }, + 'badSCTPLength': { + }, + 'badSCTPType': { + }, + 'badSCTPVerificationTag': { + }, + 'badTCPFlags': { + }, + 'badTCPOptions': { + }, + 'badUrgentPointer': { + }, + 'handshakeTCP': { + }, + 'maxCorruptions': { + } }, - 'max_outstanding': { + 'sessions': { + 'allocationOverride': { + }, + 'closeFast': { + }, + 'emphasis': { + }, + 'engine': { + }, + 'max': { + }, + 'maxActive': { + }, + 'maxPerSecond': { + }, + 'openFast': { + }, + 'statDetail': { + }, + 'target': { + }, + 'targetMatches': { + }, + 'targetPerSecond': { + } }, - 'retrans_interval': { + 'srcPortDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'enable_xauth': { + 'tcp': { + 'ack_every_n': { + }, + 'add_timestamps': { + }, + 'aging_time': { + }, + 'aging_time_data_type': { + }, + 'delay_acks': { + }, + 'delay_acks_ms': { + }, + 'disable_ack_piggyback': { + }, + 'dynamic_receive_window_size': { + }, + 'ecn': { + }, + 'handshake_data': { + }, + 'initial_receive_window': { + }, + 'mss': { + }, + 'psh_every_segment': { + }, + 'raw_flags': { + }, + 'reset_at_end': { + }, + 'retries': { + }, + 'retry_quantum_ms': { + }, + 'shutdown_data': { + }, + 'syn_data_padding': { + }, + 'tcp_4_way_close': { + }, + 'tcp_connect_delay_ms': { + }, + 'tcp_icw': { + }, + 'tcp_keepalive_timer': { + }, + 'tcp_window_scale': { + } } - }], - 'dhcpv6c_cfg': [{ - 'dhcp6c_max_outstanding': { - }, - 'dhcp6c_duid_type': { - }, - 'dhcp6c_ia_type': { - }, - 'dhcp6c_req_opts_config': { - }, - 'dhcp6c_tout_and_retr_config': { - }, - 'dhcp6c_renew_timer': { - }, - 'dhcp6c_ia_t2': { + }, + 'active': { + }, + 'author': { + }, + 'clazz': { + }, + 'createdBy': { + }, + 'createdOn': { + }, + 'description': { + }, + 'id': { + }, + 'label': { + }, + 'lockedBy': { + }, + 'operations': { + 'getComponentPresetNames': [{ + }] + }, + 'originalPreset': { + }, + 'originalPresetLabel': { + }, + 'reportResults': { + }, + 'revision': { + }, + 'tags': [{ + 'domainId': { + 'external': { + }, + 'iface': { + }, + 'name': { + } }, 'id': { }, - 'dhcp6c_ia_t1': { - }, - 'dhcp6c_initial_srate': { + 'type': { } - }] + }], + 'timeline': { + 'timesegment': [{ + 'label': { + }, + 'size': { + }, + 'type': { + } + }] + }, + 'type': { + } + }], + 'createdBy': { }, 'createdOn': { }, - 'clazz': { + 'description': { }, - 'revision': { + 'duration': { + }, + 'label': { + }, + 'lastrun': { + }, + 'lastrunby': { + }, + 'lockedBy': { + }, + 'name': { + }, + 'network': { }, 'operations': { - 'search': [{ + 'add': [{ + }], + 'clone': [{ }], 'delete': [{ }], - 'importNetwork': [{ + 'exportModel': [{ }], - 'saveAs': [{ + 'importModel': [{ + }], + 'load': [{ + }], + 'new': [{ + }], + 'realTimeStats': [{ + }], + 'remove': [{ + }], + 'run': [{ }], 'save': [{ }], - 'list': [{ + 'saveAs': [{ }], - 'load': [{ + 'search': [{ }], - 'new': [{ + 'stopRun': [{ }] - } - }, - 'strikes': { - 'severity': { }, - 'year': { + 'result': { }, - 'variants': { + 'revision': { }, - 'reference': [{ - 'label': { + 'sharedComponentSettings': { + 'maxFlowCreationRate': { + 'content': { + }, + 'current': { + }, + 'original': { + } + }, + 'maximumConcurrentFlows': { + 'content': { + }, + 'current': { + }, + 'original': { + } + }, + 'samplePeriod': { + 'content': { + }, + 'current': { + }, + 'original': { + } }, - 'type': { + 'totalAddresses': { + 'content': { + }, + 'current': { + }, + 'original': { + } }, - 'value': { + 'totalAttacks': { + 'content': { + }, + 'current': { + }, + 'original': { + } + }, + 'totalBandwidth': { + 'content': { + }, + 'current': { + }, + 'original': { + } } - }], - 'path': { - }, - 'protocol': { - }, - 'fileSize': { - }, - 'fileExtension': { - }, - 'name': { - }, - 'id': { }, - 'category': { + 'summaryInfo': { + 'requiredMTU': { + }, + 'totalMacAddresses': { + }, + 'totalSubnets': { + }, + 'totalUniqueStrikes': { + }, + 'totalUniqueSuperflows': { + } }, - 'keyword': [{ + 'testComponentTypesDescription': [{ + 'description': { + }, + 'label': { + }, 'name': { + }, + 'template': { + }, + 'type': { } - }], - 'direction': { - }, - 'operations': { - 'search': [{ - }] - } + }] }, - 'reports': { - 'endtime': { - }, - 'starttime': { - }, - 'label': { - }, - 'testname': { - }, - 'network': { - }, - 'duration': { - }, - 'result': { - }, - 'size': { - }, - 'isPartOfResiliency': { - }, - 'name': { - }, - 'iteration': { + 'topology': { + 'chain': { + 'name': { + }, + 'remotes': { + } }, - 'testid': { - 'host': { + 'cnState': [{ + 'cnId': { }, - 'name': { + 'cnName': { }, - 'iteration': { + 'cnSerial': { + }, + 'cnSlotNo': { + }, + 'firmwareUpgrade': { + }, + 'licensed': { + }, + 'marketingName': { + }, + 'state': { } + }], + 'ixos': { }, - 'user': { + 'ixoslicensed': { + }, + 'model': { }, 'operations': { - 'delete': [{ + 'addPortNote': [{ }], - 'exportReport': [{ + 'addResourceNote': [{ }], - 'getReportContents': [{ + 'exportCapture': [{ }], - 'getReportTable': [{ + 'getFanoutModes': [{ + 'cardModel': { + }, + 'fanout': [{ + 'fanoutId': { + }, + 'name': { + } + }] }], - 'search': [{ + 'getPortAvailableModes': [{ + 'modes': [{ + 'fanoutId': { + }, + 'name': { + } + }], + 'port': { + }, + 'slot': { + } + }], + 'reboot': [{ + }], + 'rebootComputeNode': [{ + }], + 'releaseAllCnResources': [{ + }], + 'releaseResource': [{ + }], + 'releaseResources': [{ + }], + 'reserve': [{ + }], + 'reserveAllCnResources': [{ + }], + 'reserveResource': [{ + }], + 'reserveResources': [{ + }], + 'run': [{ + }], + 'setCardFanout': [{ + }], + 'setCardMode': [{ + }], + 'setCardSpeed': [{ + }], + 'setPerfAcc': [{ + }], + 'setPortFanoutMode': [{ + }], + 'setPortSettings': [{ + }], + 'softReboot': [{ + }], + 'stopRun': [{ + }], + 'unreserve': [{ }] - } - }, - 'appProfile': { - 'weightType': { - }, - 'lockedBy': { - }, - 'createdBy': { }, - 'author': { + 'resourceOverview': { + 'resourceOverviewList': [{ + 'l23Count': { + }, + 'l47Count': { + }, + 'portCount': { + }, + 'userAndGroup': { + } + }] }, - 'name': { + 'runningTest': [{ + 'capturing': { + }, + 'completed': { + }, + 'currentTest': { + }, + 'initProgress': { + }, + 'label': { + }, + 'phase': { + }, + 'port': [{ + }], + 'progress': { + }, + 'reservedEngines': [{ + }], + 'result': { + }, + 'runtime': { + }, + 'state': { + }, + 'testid': { + 'host': { + }, + 'iteration': { + }, + 'name': { + } + }, + 'timeRemaining': { + }, + 'user': { + } + }], + 'serialNumber': { }, - 'superflow': [{ - 'settings': [{ + 'slot': [{ + 'firmwareUpgrade': { + }, + 'fpga': [{ + 'group': { + }, + 'id': { + }, 'name': { }, - 'description': { + 'note': { }, - 'realtimeGroup': { + 'reservedBy': { }, - 'label': { + 'resourceType': { }, - 'units': { + 'state': { } }], - 'percentFlows': { - }, - 'seed': { - }, - 'author': { - }, - 'estimate_bytes': { - }, - 'estimate_flows': { - }, - 'weight': { - }, - 'description': { - }, - 'label': { - }, - 'params': { - }, - 'constraints': { - }, - 'createdOn': { - }, - 'revision': { + 'id': { }, - 'lockedBy': { + 'interfaceCount': { }, - 'generated': { + 'mode': { }, - 'createdBy': { + 'model': { }, - 'percentBandwidth': { + 'np': [{ + 'cnId': { + }, + 'group': { + }, + 'id': { + }, + 'name': { + }, + 'note': { + }, + 'reservedBy': { + }, + 'resourceType': { + }, + 'state': { + } + }], + 'port': [{ + 'active': { + }, + 'auto': { + }, + 'capture': { + }, + 'capturing': { + }, + 'currentMode': { + }, + 'exportProgress': { + }, + 'fullduplex': { + }, + 'group': { + }, + 'id': { + }, + 'ifmacaddr': { + }, + 'ifname': { + }, + 'ignorepause': { + }, + 'link': { + }, + 'media': { + }, + 'model': { + }, + 'mtu': { + }, + 'note': { + }, + 'number': { + }, + 'owner': { + }, + 'pcap': [{ + 'rxbytes': { + }, + 'rxframes': { + }, + 'txbytes': { + }, + 'txframes': { + } + }], + 'portGroup': { + }, + 'possibleModes': { + }, + 'precoder': { + }, + 'reservedBy': { + }, + 'speed': { + }, + 'state': { + } + }], + 'remoteInfo': { + 'host': { + }, + 'slotId': { + }, + 'state': { + } }, - 'name': { + 'serialNumber': { }, - 'clazz': { + 'state': { } - }], - 'description': { - }, - 'label': { - }, - 'createdOn': { - }, - 'clazz': { - }, - 'revision': { - }, - 'operations': { - 'add': [{ - }], - 'exportAppProfile': [{ - }], - 'importAppProfile': [{ - }], - 'delete': [{ - }], - 'remove': [{ - }], - 'search': [{ - }], - 'load': [{ - }], - 'new': [{ - }], - 'recompute': [{ - }], - 'saveAs': [{ - }], - 'save': [{ - }] - } - }, - 'remote': { - 'operations': { - 'connectChassis': [{ - }], - 'disconnectChassis': [{ - }] - } + }] } } - @staticmethod - def _get_from_model(path): - model_data = DataModelMeta._dataModel - model_path = "" - for path_part in path.split('/'): - if len(path_part) == 0: continue - if isinstance(model_data, list): - model_data = model_data[0] - continue - if path_part not in model_data: return (None, None) - model_data = model_data[path_part] - model_path = model_path + "/" + path_part - return (model_path, model_data) - - @staticmethod - def _decorate_model_object_operations(data_model, data_model_path, obj): - if 'operations' not in data_model: - return - for operation in data_model['operations']: - if obj.__full_path__().replace("/", "") == '': - continue - method_name = data_model_path.replace("/", "_") + '_operations_' + operation - setattr(obj, operation, obj._wrapper.__getattribute__(method_name).__get__(obj)) - setattr(getattr(obj, operation).__func__, '__name__', operation) + def __call__(cls, *args, **kwds): + return DataModelMeta._decorate_model_object(type.__call__(cls, *args, **kwds)) @staticmethod def _decorate_model_object(obj): @@ -6331,8 +6404,30 @@ def _decorate_model_object(obj): setattr(obj, extField, DataModelProxy(wrapper=obj._wrapper, name=extField, path=ext_path, model_path=ext_dm_path)) return obj - def __call__(cls, *args, **kwds): - return DataModelMeta._decorate_model_object(type.__call__(cls, *args, **kwds)) + @staticmethod + def _decorate_model_object_operations(data_model, data_model_path, obj): + if 'operations' not in data_model: + return + for operation in data_model['operations']: + if obj.__full_path__().replace("/", "") == '': + continue + method_name = data_model_path.replace("/", "_") + '_operations_' + operation + setattr(obj, operation, obj._wrapper.__getattribute__(method_name).__get__(obj)) + setattr(getattr(obj, operation).__func__, '__name__', operation) + + @staticmethod + def _get_from_model(path): + model_data = DataModelMeta._dataModel + model_path = "" + for path_part in path.split('/'): + if len(path_part) == 0: continue + if isinstance(model_data, list): + model_data = model_data[0] + continue + if path_part not in model_data: return (None, None) + model_data = model_data[path_part] + model_path = model_path + "/" + path_part + return (model_path, model_data) class DataModelProxy(object): __metaclass__ = DataModelMeta @@ -6347,43 +6442,43 @@ def __init__(self, wrapper, name, path='', model_path=None): else: self._model_path = model_path - def __full_path__(self): - return '%s/%s' % (self._path, self._name) + def __cached_get__(self, field): + if field not in self.__cache: self.__cache[field] = self._wrapper._BPS__get(self.__data_model_path__()+"/"+field) + return self.__cache[field] def __data_model_path__(self): return '%s/%s' % (self._model_path, self._name) - def __url__(self): - return 'https://%s/bps/api/v2/core%s' % (self._wrapper.host, self.__full_path__()) - - def __repr__(self): - return 'proxy object for \'%s\' ' % (self.__url__()) + def __full_path__(self): + return '%s/%s' % (self._path, self._name) def __getitem__(self, item): return self._getitem_(item) - def get(self, responseDepth=None, **kwargs): - return self._wrapper._get(self._path+'/'+self._name, responseDepth, **kwargs) - - def __cached_get__(self, field): - if field not in self.__cache: self.__cache[field] = self._wrapper._get(self.__data_model_path__()+"/"+field) - return self.__cache[field] - - def patch(self, value): - return self._wrapper._patch(self._path+'/'+self._name, value) - - def set(self, value): - return self.patch(value) + def __repr__(self): + return 'proxy object for \'%s\' ' % (self.__url__()) - def put(self, value): - return self._wrapper._put(self._path+'/'+self._name, value) + def __url__(self): + return 'https://%s/bps/api/v2/core%s' % (self._wrapper.host, self.__full_path__()) def delete(self): - return self._wrapper._delete(self._path+'/'+self._name) + return self._wrapper._BPS__delete(self._path+'/'+self._name) + + def get(self, responseDepth=None, **kwargs): + return self._wrapper._BPS__get(self._path+'/'+self._name, responseDepth, **kwargs) def help(self): - doc_data = self._wrapper._options(self._path+'/'+self._name) + doc_data = self._wrapper._BPS__options(self._path+'/'+self._name) if doc_data and 'custom' in doc_data: doc_data = doc_data['custom'] if doc_data and 'description' in doc_data: print(doc_data['description']) + + def patch(self, value): + return self._wrapper._BPS__patch(self._path+'/'+self._name, value) + + def put(self, value): + return self._wrapper._BPS__put(self._path+'/'+self._name, value) + + def set(self, value): + return self.patch(value) diff --git a/RestApi/Python/RestApi_v2/Modules/bps_restpy/restPyWrapper3.py b/RestApi/Python/RestApi_v2/Modules/bps_restpy/restPyWrapper3.py index fbe1af9..6577df3 100644 --- a/RestApi/Python/RestApi_v2/Modules/bps_restpy/restPyWrapper3.py +++ b/RestApi/Python/RestApi_v2/Modules/bps_restpy/restPyWrapper3.py @@ -15,7 +15,7 @@ class TlsAdapter(HTTPAdapter): def init_poolmanager(self, connections, maxsize, block): self.poolmanager = PoolManager(num_pools=connections, maxsize=maxsize, block=block) -### this BPS REST API wrapper is generated for version: 9.38.1.27 +### this BPS REST API wrapper is generated for version: 0.0.14+20231204.064306.06705625 class BPS(object): def __init__(self, host, user, password, checkVersion=True): @@ -25,23 +25,24 @@ def __init__(self, host, user, password, checkVersion=True): self.sessionId = None self.session = requests.Session() self.session.mount('https://', TlsAdapter()) - self.clientVersion = '9.38' + self.clientVersion = '10.0' self.serverVersions = None self.checkVersion = checkVersion - self.strikeList = DataModelProxy(wrapper=self, name='strikeList') - self.administration = DataModelProxy(wrapper=self, name='administration') - self.statistics = DataModelProxy(wrapper=self, name='statistics') - self.capture = DataModelProxy(wrapper=self, name='capture') - self.evasionProfile = DataModelProxy(wrapper=self, name='evasionProfile') - self.loadProfile = DataModelProxy(wrapper=self, name='loadProfile') + self.printRequests = False self.topology = DataModelProxy(wrapper=self, name='topology') + self.statistics = DataModelProxy(wrapper=self, name='statistics') + self.reports = DataModelProxy(wrapper=self, name='reports') + self.administration = DataModelProxy(wrapper=self, name='administration') self.testmodel = DataModelProxy(wrapper=self, name='testmodel') - self.results = DataModelProxy(wrapper=self, name='results') - self.superflow = DataModelProxy(wrapper=self, name='superflow') self.network = DataModelProxy(wrapper=self, name='network') + self.superflow = DataModelProxy(wrapper=self, name='superflow') + self.strikeList = DataModelProxy(wrapper=self, name='strikeList') self.strikes = DataModelProxy(wrapper=self, name='strikes') - self.reports = DataModelProxy(wrapper=self, name='reports') + self.loadProfile = DataModelProxy(wrapper=self, name='loadProfile') + self.evasionProfile = DataModelProxy(wrapper=self, name='evasionProfile') + self.results = DataModelProxy(wrapper=self, name='results') self.appProfile = DataModelProxy(wrapper=self, name='appProfile') + self.capture = DataModelProxy(wrapper=self, name='capture') self.remote = DataModelProxy(wrapper=self, name='remote') ### connect to the system @@ -55,6 +56,22 @@ def __connect(self): else: raise Exception('Failed connecting to %s: (%s, %s)' % (self.host, r.status_code, r.content)) + ### Get from data model + def __delete(self, path): + requestUrl = 'https://' + self.host + '/bps/api/v2/core/'+ path + headers = {'content-type': 'application/json'} + if self.printRequests: + import re + print("DELETE, %s, h=%s" %(re.sub(".*/bps/api/v2/core/", "", requestUrl), json.dumps(headers))) + r = self.session.delete(url=requestUrl, headers=headers, verify=False) + if(r.status_code == 400): + methodCall = '%s'%path.replace('/', '.').replace('.operations', '') + content_message = r.content.decode() + ' Execute: help(%s) for more information about the method.'%methodCall + raise Exception({'status_code': r.status_code, 'content': content_message}) + if(r.status_code in [200, 204]): + return self.__json_load(r) + raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) + ### disconnect from the system def __disconnect(self): r = self.session.delete(url='https://' + self.host + '/bps/api/v1/auth/session', verify=False) @@ -67,78 +84,53 @@ def __disconnect(self): else: raise Exception('Failed disconnecting from %s: (%s, %s)' % (self.host, r.status_code, r.content)) - def printVersions(self): - apiServerVersion = 'N/A' - if self.serverVersions != None and 'apiServer' in self.serverVersions: - apiServerVersion = self.serverVersions['apiServer'] - print('Client version: %s \nServer version: %s' % (self.clientVersion, apiServerVersion)) - - def __json_load(self, r): - try: - return r.json() - except: - return r.content.decode() if r.content is not None else None - - ### login into the bps system - def login(self): - self.__connect() - r = self.session.post(url='https://' + self.host + '/bps/api/v2/core/auth/login', data=json.dumps({'username': self.user, 'password': self.password, 'sessionId': self.sessionId}), headers={'content-type': 'application/json'}, verify=False) - if(r.status_code == 200): - self.serverVersions = self.__json_load(r) - apiServerVersion = 'N/A' - if self.serverVersions != None and 'apiServer' in self.serverVersions: - apiServerVersion = self.serverVersions['apiServer'] - if self.checkVersion: - if not apiServerVersion.startswith(self.clientVersion): - if apiServerVersion > self.clientVersion: - self.logout() - #self.printVersions() - raise Exception('Keysight Python REST-API Wrapper version is older than the BPS server version.\nThis is not a supported combination.\nPlease use the updated version of the wrapper provided with BPS system.') - if apiServerVersion < self.clientVersion: - print("Warning: Keysight Python REST-API Wrapper version is newer than the BPS server version.\nSome of the functionalities included in the Python wrapper might not be supported by the REST API.") - #print('Login successful.\nWelcome %s. \nYour session id is %s' % (self.user, self.sessionId)) - else: - raise Exception('Login failed.\ncode:%s, content:%s' % (r.status_code, r.content)) - return self.serverVersions - - ### logout from the bps system - def logout(self): - self.serverVersions = None - r = self.session.post(url='https://' + self.host + '/bps/api/v2/core/auth/logout', data=json.dumps({'username': self.user, 'password': self.password, 'sessionId': self.sessionId}), headers={'content-type': 'application/json'}, verify=False) - if(r.status_code == 200): - #print('Logout successful. \nBye %s.' % self.user) - self.__disconnect() + ### generic post operation + def __export(self, path, **kwargs): + requestUrl = 'https://' + self.host + '/bps/api/v2/core/' + path + if self.printRequests: + import re + print("POST, %s, h=%s, d=%s" %(re.sub(".*/bps/api/v2/core/", "", requestUrl), json.dumps(headers), json.dumps(kwargs))) + r = self.session.post(url=requestUrl, headers={'content-type': 'application/json'}, data=json.dumps(kwargs), verify=False) + if(r.status_code == 400): + methodCall = '%s'%path.replace('/', '.').replace('.operations', '') + content_message = r.content.decode() + ' Execute: help(%s) for more information about the method.'%methodCall + raise Exception({'status_code': r.status_code, 'content': content_message}) + if(r.status_code == 200) or r.status_code == 204: + get_url = 'https://' + self.host + r.content.decode() + get_head = {'content-type': 'application/json'} + get_req = self.session.get(url = get_url, verify = False, headers = get_head) + with open(kwargs['filepath'], 'wb') as fd: + for chunk in get_req.iter_content(chunk_size=1024): + fd.write(chunk) + fd.close() + get_req.close() + return {'status_code': r.status_code, 'content': 'success'} else: - raise Exception('Logout failed: (%s, %s)' % (r.status_code, r.content)) + raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) ### Get from data model - def _get(self, path, responseDepth=None, **kwargs): + def __get(self, path, responseDepth=None, **kwargs): requestUrl = 'https://%s/bps/api/v2/core%s%s' % (self.host, path, '?responseDepth=%s' % responseDepth if responseDepth else '') for key, value in kwargs.items(): requestUrl = requestUrl + "&%s=%s" % (key, value) headers = {'content-type': 'application/json'} + if self.printRequests: + import re + print("GET, %s, %s" %(re.sub(".*/bps/api/v2/core/", "", requestUrl), json.dumps(headers))) r = self.session.get(url=requestUrl, headers=headers, verify=False) if(r.status_code in [200, 204]): return self.__json_load(r) raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) - ### Get from data model - def _patch(self, path, value): - r = self.session.patch(url='https://' + self.host + '/bps/api/v2/core/' + path, headers={'content-type': 'application/json'}, data=json.dumps(value), verify=False) - if(r.status_code != 204): - raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) - - ### Get from data model - def _put(self, path, value): - r = self.session.put(url='https://' + self.host + '/bps/api/v2/core/' + path, headers={'content-type': 'application/json'}, data=json.dumps(value), verify=False) - if(r.status_code != 204): - raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) - - ### Get from data model - def _delete(self, path): - requestUrl = 'https://' + self.host + '/bps/api/v2/core/'+ path - headers = {'content-type': 'application/json'} - r = self.session.delete(url=requestUrl, headers=headers, verify=False) + ### generic import operation + def __import(self, path, filename, **kwargs): + requestUrl = 'https://' + self.host + '/bps/api/v2/core/' + path + files = {'file': (kwargs['name'], open(filename, 'rb'), 'application/xml')} + data = {'fileInfo':str(kwargs)} + if self.printRequests: + import re + print("POST, %s, h=%s, d=%s" %(re.sub(".*/bps/api/v2/core/", "", requestUrl), json.dumps(headers), json.dumps(data))) + r = self.session.post(url=requestUrl, files=files, data=data, verify=False) if(r.status_code == 400): methodCall = '%s'%path.replace('/', '.').replace('.operations', '') content_message = r.content.decode() + ' Execute: help(%s) for more information about the method.'%methodCall @@ -147,8 +139,14 @@ def _delete(self, path): return self.__json_load(r) raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) + def __json_load(self, r): + try: + return r.json() + except: + return r.content.decode() if r.content is not None else None + ### OPTIONS request - def _options(self, path): + def __options(self, path): r = self.session.options('https://' + self.host + '/bps/api/v2/core/'+ path) if(r.status_code == 400): methodCall = '%s'%path.replace('/', '.').replace('.operations', '') @@ -158,10 +156,22 @@ def _options(self, path): return self.__json_load(r) raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) + ### Get from data model + def __patch(self, path, value): + headers = {'content-type': 'application/json'} + if self.printRequests: + print("patch, %s, h=%s, d=%s" %(path, json.dumps(headers), json.dumps(value))) + r = self.session.patch(url='https://' + self.host + '/bps/api/v2/core/' + path, headers=headers, data=json.dumps(value), verify=False) + if(r.status_code != 204): + raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) + ### generic post operation - def _post(self, path, **kwargs): + def __post(self, path, **kwargs): requestUrl = 'https://' + self.host + '/bps/api/v2/core/' + path - r = self.session.post(url=requestUrl, headers={'content-type': 'application/json'}, data=json.dumps(kwargs), verify=False) + headers = {'content-type': 'application/json'} + if self.printRequests: + print("POST, %s, h=%s, d=%s" %(path, json.dumps(headers), json.dumps(kwargs))) + r = self.session.post(url=requestUrl, headers=headers, data=json.dumps(kwargs), verify=False) if(r.status_code == 400): methodCall = '%s'%path.replace('/', '.').replace('.operations', '') content_message = r.content.decode() + ' Execute: help(%s) for more information about the method.'%methodCall @@ -170,330 +180,267 @@ def _post(self, path, **kwargs): return self.__json_load(r) raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) - ### generic import operation - def _import(self, path, filename, **kwargs): - requestUrl = 'https://' + self.host + '/bps/api/v2/core/' + path - files = {'file': (kwargs['name'], open(filename, 'rb'), 'application/xml')} - r = self.session.post(url=requestUrl, files=files, data={'fileInfo':str(kwargs)}, verify=False) - if(r.status_code == 400): - methodCall = '%s'%path.replace('/', '.').replace('.operations', '') - content_message = r.content.decode() + ' Execute: help(%s) for more information about the method.'%methodCall - raise Exception({'status_code': r.status_code, 'content': content_message}) - if(r.status_code in [200, 204]): - return self.__json_load(r) - raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) - - ### generic post operation - def _export(self, path, **kwargs): - requestUrl = 'https://' + self.host + '/bps/api/v2/core/' + path - r = self.session.post(url=requestUrl, headers={'content-type': 'application/json'}, data=json.dumps(kwargs), verify=False) - if(r.status_code == 400): - methodCall = '%s'%path.replace('/', '.').replace('.operations', '') - content_message = r.content.decode() + ' Execute: help(%s) for more information about the method.'%methodCall - raise Exception({'status_code': r.status_code, 'content': content_message}) - if(r.status_code == 200) or r.status_code == 204: - get_url = 'https://' + self.host + r.content.decode() - get_head = {'content-type': 'application/json'} - get_req = self.session.get(url = get_url, verify = False, headers = get_head) - with open(kwargs['filepath'], 'wb') as fd: - for chunk in get_req.iter_content(chunk_size=1024): - fd.write(chunk) - fd.close() - get_req.close() - return {'status_code': r.status_code, 'content': 'success'} - else: + ### Get from data model + def __put(self, path, value): + headers = {'content-type': 'application/json'} + if self.printRequests: + print("put, %s, h=%s, d=%s" %(path, json.dumps(headers), json.dumps(value))) + r = self.session.put(url='https://' + self.host + '/bps/api/v2/core/' + path, headers=headers, data=json.dumps(value), verify=False) + if(r.status_code != 204): raise Exception({'status_code': r.status_code, 'content': self.__json_load(r)}) - ### Imports a resource model to be used in flow traffic as .txt files, certificates, keys etc, given as a file. File will be uploaded to '/chroot/resources' by default if 'type' is not specifed otherwise the destination will be '/chroot/resources/'+ (clientcerts / clientkeys / cacerts ...). This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Imports an ATI License file (.lic) on a hardware platform. This operation is NOT recommended to be used on BPS Virtual platforms. @staticmethod - def _superflow_operations_importResource(self, name, filename, force, type='resource'): + def _administration_atiLicensing_operations_importAtiLicense(self, filename, name): """ - Imports a resource model to be used in flow traffic as .txt files, certificates, keys etc, given as a file. File will be uploaded to '/chroot/resources' by default if 'type' is not specifed otherwise the destination will be '/chroot/resources/'+ (clientcerts / clientkeys / cacerts ...). This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): The name of the object being imported - :param filename (string): The file containing the object - :param force (bool): Force to import the file and the object having the same name will be replaced. - :param type (string): File type to import. Accepted types: clientcert, clientkey, resource, cacert, dhparams. Default value is 'resource'. + Imports an ATI License file (.lic) on a hardware platform. This operation is NOT recommended to be used on BPS Virtual platforms. + :param filename (string): import file path + :param name (string): the name of the license file """ - return self._wrapper._import('/superflow/operations/importResource', **{'name': name, 'filename': filename, 'force': force, 'type': type}) + return self._wrapper.__import('/administration/atiLicensing/operations/importAtiLicense', **{'filename': filename, 'name': name}) - ### Deletes a Test Report from the database. + ### Exports everything including test models, network configurations and others from system.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _reports_operations_delete(self, runid): + def _administration_operations_exportAllTests(self, filepath): """ - Deletes a Test Report from the database. - :param runid (number): The test run id that generated the report you want to delete. + Exports everything including test models, network configurations and others from system.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param filepath (string): The local path where to save the compressed file with all the models. The path must contain the file name and extension (.tar.gz): '/d/c/f/AllTests.tar.gz' """ - return self._wrapper._post('/reports/operations/delete', **{'runid': runid}) + return self._wrapper.__export('/administration/operations/exportAllTests', **{'filepath': filepath}) - ### Get information about an action in the current working Superflow, retrieving also the choices for each action setting. + ### Imports all test models, actually imports everything from 'exportAllTests'. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _superflow_actions_operations_getActionInfo(self, id): + def _administration_operations_importAllTests(self, name, filename, force): """ - Get information about an action in the current working Superflow, retrieving also the choices for each action setting. - :param id (number): The action id - :return result (list): - list of object with fields - label (string): - name (string): - description (string): - choice (object): + Imports all test models, actually imports everything from 'exportAllTests'. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): String name to append to each test name. + :param filename (string): The file containing the object. + :param force (bool): Force to import the file and the object having the same name will be replaced. """ - return self._wrapper._post('/superflow/actions/operations/getActionInfo', **{'id': id}) + return self._wrapper.__import('/administration/operations/importAllTests', **{'name': name, 'filename': filename, 'force': force}) ### null @staticmethod - def _capture_operations_search(self, searchString, limit, sort, sortorder): + def _administration_operations_logs(self, error=False, messages=False, web=False, all=False, audit=False, info=False, system=False, lines=20, drop=0): """ - :param searchString (string): Search capture name matching the string given. - :param limit (string): The limit of rows to return - :param sort (string): Parameter to sort by. - :param sortorder (string): The sort order (ascending/descending) - :return item (list): - list of object with fields - name (string): - totalPackets (string): - duration (string): - ipv4Packets (string): - ipv6Packets (string): - avgPacketSize (string): - udpPackets (string): - contentType (string): - pcapFilesize (string): - tcpPackets (string): - avgFlowLength (string): + :param error (bool): + :param messages (bool): + :param web (bool): + :param all (bool): + :param audit (bool): + :param info (bool): + :param system (bool): + :param lines (number): number lines to return + :param drop (number): number lines to drop """ - return self._wrapper._post('/capture/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) + return self._wrapper.__post('/administration/operations/logs', **{'error': error, 'messages': messages, 'web': web, 'all': all, 'audit': audit, 'info': info, 'system': system, 'lines': lines, 'drop': drop}) - ### Exports the Strike List identified by its name and all of its dependenciesThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### close active session @staticmethod - def _strikeList_operations_exportStrikeList(self, name, filepath): + def _administration_sessions_operations_close(self, session): """ - Exports the Strike List identified by its name and all of its dependenciesThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): The name of the strike list to be exported. - :param filepath (string): The local path where to save the exported object. The file should have .bap extension + close active session + :param session (string): """ - return self._wrapper._export('/strikeList/operations/exportStrikeList', **{'name': name, 'filepath': filepath}) + return self._wrapper.__post('/administration/sessions/operations/close', **{'session': session}) - ### Imports an ATI License file (.lic) on a hardware platform. This operation is NOT recommended to be used on BPS Virtual platforms. + ### list active sessions @staticmethod - def _administration_atiLicensing_operations_importAtiLicense(self, filename, name): + def _administration_sessions_operations_list(self): """ - Imports an ATI License file (.lic) on a hardware platform. This operation is NOT recommended to be used on BPS Virtual platforms. - :param filename (string): import file path - :param name (string): the name of the license file + list active sessions + :return result (list): """ - return self._wrapper._import('/administration/atiLicensing/operations/importAtiLicense', **{'filename': filename, 'name': name}) + return self._wrapper.__post('/administration/sessions/operations/list', **{}) - ### Create a new custom Load Profile. + ### Sets a User Preference. @staticmethod - def _loadProfile_operations_createNewCustom(self, loadProfile): + def _administration_userSettings_operations_changeUserSetting(self, name, value): """ - Create a new custom Load Profile. - :param loadProfile (string): The Name of The load profile object to create. + Sets a User Preference. + :param name (string): The setting name. + :param value (string): The new value for setting. """ - return self._wrapper._post('/loadProfile/operations/createNewCustom', **{'loadProfile': loadProfile}) + return self._wrapper.__post('/administration/userSettings/operations/changeUserSetting', **{'name': name, 'value': value}) - ### Clones a component in the current working Test Model + ### null @staticmethod - def _testmodel_operations_clone(self, template, type, active): + def _administration_userSettings_operations_setAutoReserve(self, resourceType, units): """ - Clones a component in the current working Test Model - :param template (string): The ID of the test component to clone. - :param type (string): Component Type: appsim, sesionsender .. - :param active (bool): Set component enable (by default is active) or disable + :param resourceType (string): Valid values: >l47< or >l23< + :param units (number): """ - return self._wrapper._post('/testmodel/operations/clone', **{'template': template, 'type': type, 'active': active}) + return self._wrapper.__post('/administration/userSettings/operations/setAutoReserve', **{'resourceType': resourceType, 'units': units}) - ### Exports the result report of a test, identified by its run id and all of its dependenciesThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Adds a list of SuperFlow to the current working Application Profile. ([{'superflow':'adadad', 'weight':'20'},{..}]) @staticmethod - def _reports_operations_exportReport(self, filepath, runid, reportType, sectionIds='', dataType='ALL'): + def _appProfile_operations_add(self, add): """ - Exports the result report of a test, identified by its run id and all of its dependenciesThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param filepath (string): The local path where to export the report, including the report name and proper file extension. - :param runid (number): Test RUN ID - :param reportType (string): Report file format to be exported in.Supported types: gwt, csv, pdf, xls, rtf, html, zip, score_img, user_img, xml, stats. For exporting 'extended stats' use 'stats'and use '.zip' as file extension in 'filepath'. - :param sectionIds (string): Chapter Ids. Can be extracted a chapter or many, a sub-chapter or many or the entire report: (sectionIds='6' / sectionIds='5,6,7' / sectionIds='7.4,8.5.2,8.6.3.1' / sectionIds=''(to export the entire report)) - :param dataType (string): Report content data type to export. Default value is 'all data'. For tabular only use 'TABLE' and for graphs only use 'CHARTS'. - """ - return self._wrapper._export('/reports/operations/exportReport', **{'filepath': filepath, 'runid': runid, 'reportType': reportType, 'sectionIds': sectionIds, 'dataType': dataType}) - - ### Gets the card Fanout modes of a board. - @staticmethod - def _topology_operations_getFanoutModes(self, cardId): - """ - Gets the card Fanout modes of a board. - :param cardId (number): Slot ID. - :return modes (object): Fanout mode id per card type. - """ - return self._wrapper._post('/topology/operations/getFanoutModes', **{'cardId': cardId}) - - ### Saves the current working Application Profiles and gives it a new name. - @staticmethod - def _superflow_operations_saveAs(self, name, force): - """ - Saves the current working Application Profiles and gives it a new name. - :param name (string): The new name given for the current working Super Flow - :param force (bool): Force to save the working Super Flow using the given name. + Adds a list of SuperFlow to the current working Application Profile. ([{'superflow':'adadad', 'weight':'20'},{..}]) + :param add (list): + list of object with fields + superflow (string): The name of the super flow + weight (string): The weight of the super flow """ - return self._wrapper._post('/superflow/operations/saveAs', **{'name': name, 'force': force}) + return self._wrapper.__post('/appProfile/operations/add', **{'add': add}) - ### Saves the working Super Flow using the current name + ### Deletes a given Application Profile from the database. @staticmethod - def _superflow_operations_save(self, name=None, force=True): + def _appProfile_operations_delete(self, name): """ - Saves the working Super Flow using the current name - :param name (string): The name of the template that should be empty. - :param force (bool): Force to save the working Super Flow with the same name. + Deletes a given Application Profile from the database. + :param name (string): The name of the Application Profiles. """ - return self._wrapper._post('/superflow/operations/save', **{'name': name, 'force': force}) + return self._wrapper.__post('/appProfile/operations/delete', **{'name': name}) - ### Search Networks. + ### Exports an Application profile and all of its dependencies.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _network_operations_search(self, searchString, userid, clazz, sortorder, sort, limit, offset): + def _appProfile_operations_exportAppProfile(self, name, attachments, filepath): """ - Search Networks. - :param searchString (string): Search networks matching the string given. - :param userid (string): The owner to search for - :param clazz (string): The 'class' of the object (usually 'canned' or 'custom') - :param sortorder (string): The order in which to sort: ascending/descending - :param sort (string): Parameter to sort by: 'name'/'class'/'createdBy'/'interfaces'/'timestamp' - :param limit (number): The limit of network elements to return - :param offset (number): The offset to begin from. - :return network (list): - list of object with fields - name (string): - label (string): - createdBy (string): - revision (number): - description (string): - type (enum): + Exports an Application profile and all of its dependencies.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): The name of the test model to be exported. + :param attachments (bool): True if object attachments are needed. + :param filepath (string): The local path where to save the exported object. """ - return self._wrapper._post('/network/operations/search', **{'searchString': searchString, 'userid': userid, 'clazz': clazz, 'sortorder': sortorder, 'sort': sort, 'limit': limit, 'offset': offset}) + return self._wrapper.__export('/appProfile/operations/exportAppProfile', **{'name': name, 'attachments': attachments, 'filepath': filepath}) - ### Adds an action to the current working SuperFlow + ### Imports an application profile, given as a file. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _superflow_operations_addAction(self, flowid, type, actionid, source): + def _appProfile_operations_importAppProfile(self, name, filename, force): """ - Adds an action to the current working SuperFlow - :param flowid (number): The flow id. - :param type (string): The type of the action definition. - :param actionid (number): The new action id. - :param source (string): The action source. + Imports an application profile, given as a file. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): The name of the object being imported + :param filename (string): The file containing the object + :param force (bool): Force to import the file and the object having the same name will be replaced. """ - return self._wrapper._post('/superflow/operations/addAction', **{'flowid': flowid, 'type': type, 'actionid': actionid, 'source': source}) + return self._wrapper.__import('/appProfile/operations/importAppProfile', **{'name': name, 'filename': filename, 'force': force}) - ### Load an existing Strike List and sets it as the current one. + ### Load an existing Application Profile and sets it as the current one. @staticmethod - def _strikeList_operations_load(self, template): + def _appProfile_operations_load(self, template): """ - Load an existing Strike List and sets it as the current one. - :param template (string): The name of the Strike List template + Load an existing Application Profile and sets it as the current one. + :param template (string): The name of the template application profile """ - return self._wrapper._post('/strikeList/operations/load', **{'template': template}) + return self._wrapper.__post('/appProfile/operations/load', **{'template': template}) - ### Creates a new Strike List. + ### Creates a new Application Profile. @staticmethod - def _strikeList_operations_new(self, template=None): + def _appProfile_operations_new(self, template=None): """ - Creates a new Strike List. - :param template (string): The name of the template. In this case will be empty. + Creates a new Application Profile. + :param template (string): This argument must remain unset. Do not set any value for it. """ - return self._wrapper._post('/strikeList/operations/new', **{'template': template}) + return self._wrapper.__post('/appProfile/operations/new', **{'template': template}) - ### Connects to a remote chassis in order to use some of its resources.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Recompute percentages in the current working Application Profile @staticmethod - def _remote_operations_connectChassis(self, address, remote): + def _appProfile_operations_recompute(self): """ - Connects to a remote chassis in order to use some of its resources.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param address (string): Local chassis address. - :param remote (string): remote chassis address. + Recompute percentages in the current working Application Profile """ - return self._wrapper._post('/remote/operations/connectChassis', **{'address': address, 'remote': remote}) + return self._wrapper.__post('/appProfile/operations/recompute', **{}) - ### list active sessions + ### Removes a SuperFlow from the current working Application Profile. @staticmethod - def _administration_sessions_operations_list(self): + def _appProfile_operations_remove(self, superflow): """ - list active sessions - :return result (list): + Removes a SuperFlow from the current working Application Profile. + :param superflow (string): The name of the super flow. """ - return self._wrapper._post('/administration/sessions/operations/list', **{}) + return self._wrapper.__post('/appProfile/operations/remove', **{'superflow': superflow}) - ### Add a host to the current working Superflow + ### Saves the current working application profile using the current name. No need to use any parameter. @staticmethod - def _superflow_operations_addHost(self, hostParams, force): + def _appProfile_operations_save(self, name=None, force=True): """ - Add a host to the current working Superflow - :param hostParams (object): - object of object with fields - name (string): The host name. - hostname (string): The NickName of the host. - iface (string): The traffic direction.Values can be: 'origin'(means client) and 'target'(means server) - :param force (bool): The flow id. + Saves the current working application profile using the current name. No need to use any parameter. + :param name (string): The name of the template. No need to configure. The current name is used. + :param force (bool): Force to save the working Application Profile with the same name. No need to configure. The default is used. """ - return self._wrapper._post('/superflow/operations/addHost', **{'hostParams': hostParams, 'force': force}) + return self._wrapper.__post('/appProfile/operations/save', **{'name': name, 'force': force}) - ### Deletes a specified load profile from the database. + ### Saves the current working Application Profiles and gives it a new name. @staticmethod - def _loadProfile_operations_delete(self, name): + def _appProfile_operations_saveAs(self, name, force): """ - Deletes a specified load profile from the database. - :param name (string): The name of the loadProfile object to delete. + Saves the current working Application Profiles and gives it a new name. + :param name (string): The new name given for the current working Application Profile + :param force (bool): Force to save the working Application Profile using the given name. """ - return self._wrapper._post('/loadProfile/operations/delete', **{'name': name}) + return self._wrapper.__post('/appProfile/operations/saveAs', **{'name': name, 'force': force}) ### null @staticmethod - def _testmodel_operations_search(self, searchString, limit, sort, sortorder): + def _appProfile_operations_search(self, searchString, limit, sort, sortorder): """ - :param searchString (string): Search test name matching the string given. + :param searchString (string): Search application profile name matching the string given. :param limit (string): The limit of rows to return - :param sort (string): Parameter to sort by: 'createdOn'/'timestamp'/'bandwidth'/'result'/'lastrunby'/'createdBy'/'interfaces'/'testLabType' - :param sortorder (string): The sort order: ascending/descending - :return testmodel (list): + :param sort (string): Parameter to sort by. + :param sortorder (string): The sort order (ascending/descending) + :return appprofile (list): list of object with fields name (string): label (string): createdBy (string): - network (string): - duration (number): + createdOn (string): + revision (number): description (string): """ - return self._wrapper._post('/testmodel/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) + return self._wrapper.__post('/appProfile/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) - ### Returns main groups of statistics for a single BPS Test Component. These groups can be used then in requesting statistics values from the history of a test run. + ### Imports a capture file to the systemThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _results_operations_getGroups(self, name, dynamicEnums=True, includeOutputs=True): + def _capture_operations_importCapture(self, name, filename, force): """ - Returns main groups of statistics for a single BPS Test Component. These groups can be used then in requesting statistics values from the history of a test run. - :param name (string): BPS Component name. This argument is actually the component type which can be get from 'statistics' table - :param dynamicEnums (bool): - :param includeOutputs (bool): - :return results (object): - object of object with fields - name (string): - label (string): - groups (list): + Imports a capture file to the systemThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): The name of the capture being imported + :param filename (string): The file containing the capture object + :param force (bool): Force to import the file and the object having the same name will be replaced. """ - return self._wrapper._post('/results/operations/getGroups', **{'name': name, 'dynamicEnums': dynamicEnums, 'includeOutputs': includeOutputs}) + return self._wrapper.__import('/capture/operations/importCapture', **{'name': name, 'filename': filename, 'force': force}) ### null @staticmethod - def _evasionProfile_operations_search(self, searchString, limit, sort, sortorder): + def _capture_operations_search(self, searchString, limit, sort, sortorder): """ - :param searchString (string): Search evasion profile name matching the string given. + :param searchString (string): Search capture name matching the string given. :param limit (string): The limit of rows to return - :param sort (string): Parameter to sort by. (name/createdBy ...) + :param sort (string): Parameter to sort by. :param sortorder (string): The sort order (ascending/descending) - :return attackprofile (list): + :return item (list): list of object with fields name (string): - label (string): - createdBy (string): - revision (number): - description (string): + totalPackets (string): + duration (string): + ipv4Packets (string): + ipv6Packets (string): + avgPacketSize (string): + udpPackets (string): + contentType (string): + pcapFilesize (string): + tcpPackets (string): + avgFlowLength (string): + """ + return self._wrapper.__post('/capture/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) + + ### Retrieves all the security options + @staticmethod + def _evasionProfile_StrikeOptions_operations_getStrikeOptions(self): + """ + Retrieves all the security options + :return result (list): + """ + return self._wrapper.__post('/evasionProfile/StrikeOptions/operations/getStrikeOptions', **{}) + + ### Deletes a given Evasion Profile from the database. + @staticmethod + def _evasionProfile_operations_delete(self, name): + """ + Deletes a given Evasion Profile from the database. + :param name (string): The name of the profile to delete. """ - return self._wrapper._post('/evasionProfile/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) + return self._wrapper.__post('/evasionProfile/operations/delete', **{'name': name}) ### Load an existing Evasion Profile and sets it as the current one. @staticmethod @@ -502,7 +449,7 @@ def _evasionProfile_operations_load(self, template): Load an existing Evasion Profile and sets it as the current one. :param template (string): The name of an Evasion profile template. """ - return self._wrapper._post('/evasionProfile/operations/load', **{'template': template}) + return self._wrapper.__post('/evasionProfile/operations/load', **{'template': template}) ### Creates a new Evasion Profile. @staticmethod @@ -511,153 +458,229 @@ def _evasionProfile_operations_new(self, template=None): Creates a new Evasion Profile. :param template (string): The name should be empty to create a new object. """ - return self._wrapper._post('/evasionProfile/operations/new', **{'template': template}) + return self._wrapper.__post('/evasionProfile/operations/new', **{'template': template}) - ### Reboots the metwork processors on the given card card. Only available for APS cards. + ### Saves the working Test Model using the current name. No need to configure. The current name is used. @staticmethod - def _topology_operations_softReboot(self, board, cnId): + def _evasionProfile_operations_save(self, name=None, force=True): """ - Reboots the metwork processors on the given card card. Only available for APS cards. - :param board (number): - :param cnId (string): + Saves the working Test Model using the current name. No need to configure. The current name is used. + :param name (string): This argument should be empty for saving the profile using it's actual name. + :param force (bool): Force to save the working profile with the same name. """ - return self._wrapper._post('/topology/operations/softReboot', **{'board': board, 'cnId': cnId}) + return self._wrapper.__post('/evasionProfile/operations/save', **{'name': name, 'force': force}) - ### Returns stats series for a given component group stat output for a given timestamp + ### Saves the current working Test Model under specified name. @staticmethod - def _results_operations_getHistoricalSeries(self, runid, componentid, dataindex, group): + def _evasionProfile_operations_saveAs(self, name, force): """ - Returns stats series for a given component group stat output for a given timestamp - :param runid (number): The test identifier - :param componentid (string): The component identifier. Each component has an id and can be get loading the testand checking it's components info - :param dataindex (number): The table index, equivalent with timestamp. - :param group (string): The data group or one of the BPS component main groups. The group name can be get by executing the operation 'getGroups' from results node. - :return param (list): - list of object with fields - name (string): - content (string): - datasetvals (string): + Saves the current working Test Model under specified name. + :param name (string): The new name given for the current working Evasion Profile + :param force (bool): Force to save the working Evasion Profile using a new name. """ - return self._wrapper._post('/results/operations/getHistoricalSeries', **{'runid': runid, 'componentid': componentid, 'dataindex': dataindex, 'group': group}) + return self._wrapper.__post('/evasionProfile/operations/saveAs', **{'name': name, 'force': force}) - ### Searches a strike inside all BPS strike database.To list all the available strikes, leave the arguments empty. + ### null @staticmethod - def _strikes_operations_search(self, searchString='', limit=10, sort='name', sortorder='ascending', offset=0): + def _evasionProfile_operations_search(self, searchString, limit, sort, sortorder): """ - Searches a strike inside all BPS strike database.To list all the available strikes, leave the arguments empty. - :param searchString (string): The string used as a criteria to search a strike by.Example: 'strike_name', 'year:2019', 'path:strikes/xml..' - :param limit (number): The limit of rows to return. Use empty string or empty box to get all the available strikes. - :param sort (string): Parameter to sort by. + :param searchString (string): Search evasion profile name matching the string given. + :param limit (string): The limit of rows to return + :param sort (string): Parameter to sort by. (name/createdBy ...) :param sortorder (string): The sort order (ascending/descending) - :param offset (number): The offset to begin from. Default is 0. - :return strike (list): + :return attackprofile (list): list of object with fields - id (string): - protocol (string): - category (string): - direction (string): - keyword (string): name (string): - path (string): - variants (number): - severity (string): - reference (string): - fileSize (string): - fileExtension (string): - year (string): + label (string): + createdBy (string): + revision (number): + description (string): """ - return self._wrapper._post('/strikes/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder, 'offset': offset}) + return self._wrapper.__post('/evasionProfile/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) - ### null + ### Create a new custom Load Profile. @staticmethod - def _administration_userSettings_operations_setAutoReserve(self, resourceType, units): + def _loadProfile_operations_createNewCustom(self, loadProfile): """ - :param resourceType (string): Valid values: >l47< or >l23< - :param units (number): + Create a new custom Load Profile. + :param loadProfile (string): The Name of The load profile object to create. """ - return self._wrapper._post('/administration/userSettings/operations/setAutoReserve', **{'resourceType': resourceType, 'units': units}) + return self._wrapper.__post('/loadProfile/operations/createNewCustom', **{'loadProfile': loadProfile}) - ### Deletes a given Evasion Profile from the database. + ### Deletes a specified load profile from the database. @staticmethod - def _evasionProfile_operations_delete(self, name): + def _loadProfile_operations_delete(self, name): """ - Deletes a given Evasion Profile from the database. - :param name (string): The name of the profile to delete. + Deletes a specified load profile from the database. + :param name (string): The name of the loadProfile object to delete. """ - return self._wrapper._post('/evasionProfile/operations/delete', **{'name': name}) + return self._wrapper.__post('/loadProfile/operations/delete', **{'name': name}) - ### Gives abbreviated information about all Canned Flow Names. + ### null @staticmethod - def _superflow_flows_operations_getCannedFlows(self): + def _loadProfile_operations_load(self, template): """ - Gives abbreviated information about all Canned Flow Names. - :return flow (list): + :param template (string): + """ + return self._wrapper.__post('/loadProfile/operations/load', **{'template': template}) + + ### null + @staticmethod + def _loadProfile_operations_save(self): + return self._wrapper.__post('/loadProfile/operations/save', **{}) + + ### Save the active editing LoadProfile under specified name + @staticmethod + def _loadProfile_operations_saveAs(self, name): + """ + Save the active editing LoadProfile under specified name + :param name (string): + """ + return self._wrapper.__post('/loadProfile/operations/saveAs', **{'name': name}) + + ### Deletes a given Network Neighborhood Config from the database. + @staticmethod + def _network_operations_delete(self, name): + """ + Deletes a given Network Neighborhood Config from the database. + :param name (string): The name of the Network Neighborhood Config. + """ + return self._wrapper.__post('/network/operations/delete', **{'name': name}) + + ### Imports a network neighborhood model, given as a file.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + @staticmethod + def _network_operations_importNetwork(self, name, filename, force): + """ + Imports a network neighborhood model, given as a file.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): The name of the object being imported + :param filename (string): The file containing the object + :param force (bool): Force to import the file and replace the object having the same name. + """ + return self._wrapper.__import('/network/operations/importNetwork', **{'name': name, 'filename': filename, 'force': force}) + + ### null + @staticmethod + def _network_operations_list(self, userid, clazz, sortorder, sort, limit, offset): + """ + :param userid (string): + :param clazz (string): + :param sortorder (string): + :param sort (string): + :param limit (number): + :param offset (number): + :return returnArg (list): list of object with fields name (string): - label (string): + type (string): + author (string): + createdOn (string): """ - return self._wrapper._post('/superflow/flows/operations/getCannedFlows', **{}) + return self._wrapper.__post('/network/operations/list', **{'userid': userid, 'clazz': clazz, 'sortorder': sortorder, 'sort': sort, 'limit': limit, 'offset': offset}) - ### Deletes a given Strike List from the database. + ### Loads an existing network config by name. @staticmethod - def _strikeList_operations_delete(self, name): + def _network_operations_load(self, template): """ - Deletes a given Strike List from the database. - :param name (string): The name of the Strike List to be deleted. + Loads an existing network config by name. + :param template (string): The name of the network neighborhood template """ - return self._wrapper._post('/strikeList/operations/delete', **{'name': name}) + return self._wrapper.__post('/network/operations/load', **{'template': template}) - ### Load an existing test model template. + ### Creates a new Network Neighborhood configuration with no name. The template value must remain empty. @staticmethod - def _testmodel_operations_load(self, template): + def _network_operations_new(self, template=None): """ - Load an existing test model template. - :param template (string): The name of the template testmodel + Creates a new Network Neighborhood configuration with no name. The template value must remain empty. + :param template (string): The name of the template. In this case will be empty. No need to configure. """ - return self._wrapper._post('/testmodel/operations/load', **{'template': template}) + return self._wrapper.__post('/network/operations/new', **{'template': template}) - ### Creates a new Test Model + ### Save the current working network config. @staticmethod - def _testmodel_operations_new(self, template=None): + def _network_operations_save(self, name=None, regenerateOldStyle=True, force=True): """ - Creates a new Test Model - :param template (string): The name of the template. In this case will be empty. + Save the current working network config. + :param name (string): The new name given for the current working network config. No need to configure. The current name is used. + :param regenerateOldStyle (bool): No need to configure. The default is used. + :param force (bool): No need to configure. The default is used. """ - return self._wrapper._post('/testmodel/operations/new', **{'template': template}) + return self._wrapper.__post('/network/operations/save', **{'name': name, 'regenerateOldStyle': regenerateOldStyle, 'force': force}) - ### Reserves the specified resource of the given type. + ### Saves the working network config and gives it a new name. @staticmethod - def _topology_operations_reserveResource(self, group, resourceId, resourceType): + def _network_operations_saveAs(self, name, regenerateOldStyle=True, force=False): """ - Reserves the specified resource of the given type. - :param group (number): - :param resourceId (number): - :param resourceType (string): + Saves the working network config and gives it a new name. + :param name (string): The new name given for the current working network config + :param regenerateOldStyle (bool): Force to apply the changes made on the loaded network configuration. Force to generate a network from the old one. + :param force (bool): Force to save the network config. It replaces a pre-existing config having the same name. """ - return self._wrapper._post('/topology/operations/reserveResource', **{'group': group, 'resourceId': resourceId, 'resourceType': resourceType}) + return self._wrapper.__post('/network/operations/saveAs', **{'name': name, 'regenerateOldStyle': regenerateOldStyle, 'force': force}) - ### null + ### Search Networks. @staticmethod - def _topology_operations_unreserve(self, unreservation): + def _network_operations_search(self, searchString, userid, clazz, sortorder, sort, limit, offset): """ - :param unreservation (list): + Search Networks. + :param searchString (string): Search networks matching the string given. + :param userid (string): The owner to search for + :param clazz (string): The 'class' of the object (usually 'canned' or 'custom') + :param sortorder (string): The order in which to sort: ascending/descending + :param sort (string): Parameter to sort by: 'name'/'class'/'createdBy'/'interfaces'/'timestamp' + :param limit (number): The limit of network elements to return + :param offset (number): The offset to begin from. + :return network (list): list of object with fields - slot (number): - port (number): + name (string): + label (string): + createdBy (string): + revision (number): + description (string): + type (enum): """ - return self._wrapper._post('/topology/operations/unreserve', **{'unreservation': unreservation}) + return self._wrapper.__post('/network/operations/search', **{'searchString': searchString, 'userid': userid, 'clazz': clazz, 'sortorder': sortorder, 'sort': sort, 'limit': limit, 'offset': offset}) - ### Adds a list of SuperFlow to the current working Application Profile. ([{'superflow':'adadad', 'weight':'20'},{..}]) + ### Connects to a remote chassis in order to use some of its resources.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _appProfile_operations_add(self, add): + def _remote_operations_connectChassis(self, address, remote): """ - Adds a list of SuperFlow to the current working Application Profile. ([{'superflow':'adadad', 'weight':'20'},{..}]) - :param add (list): - list of object with fields - superflow (string): The name of the super flow - weight (string): The weight of the super flow + Connects to a remote chassis in order to use some of its resources.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param address (string): Local chassis address. + :param remote (string): remote chassis address. + """ + return self._wrapper.__post('/remote/operations/connectChassis', **{'address': address, 'remote': remote}) + + ### Disconnects from a remote chassis in order to release remote resources.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + @staticmethod + def _remote_operations_disconnectChassis(self, address, port): + """ + Disconnects from a remote chassis in order to release remote resources.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param address (string): Remote chassis address. + :param port (number): Remote connection port. + """ + return self._wrapper.__post('/remote/operations/disconnectChassis', **{'address': address, 'port': port}) + + ### Deletes a Test Report from the database. + @staticmethod + def _reports_operations_delete(self, runid): + """ + Deletes a Test Report from the database. + :param runid (number): The test run id that generated the report you want to delete. + """ + return self._wrapper.__post('/reports/operations/delete', **{'runid': runid}) + + ### Exports the result report of a test, identified by its run id and all of its dependenciesThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + @staticmethod + def _reports_operations_exportReport(self, filepath, runid, reportType, sectionIds='', dataType='ALL'): + """ + Exports the result report of a test, identified by its run id and all of its dependenciesThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param filepath (string): The local path where to export the report, including the report name and proper file extension. + :param runid (number): Test RUN ID + :param reportType (string): Report file format to be exported in.Supported types: gwt, csv, pdf, xls, rtf, html, zip, score_img, user_img, xml, stats. For exporting 'extended stats' use 'stats'and use '.zip' as file extension in 'filepath'. + :param sectionIds (string): Chapter Ids. Can be extracted a chapter or many, a sub-chapter or many or the entire report: (sectionIds='6' / sectionIds='5,6,7' / sectionIds='7.4,8.5.2,8.6.3.1' / sectionIds=''(to export the entire report)) + :param dataType (string): Report content data type to export. Default value is 'all data'. For tabular only use 'TABLE' and for graphs only use 'CHARTS'. """ - return self._wrapper._post('/appProfile/operations/add', **{'add': add}) + return self._wrapper.__export('/reports/operations/exportReport', **{'filepath': filepath, 'runid': runid, 'reportType': reportType, 'sectionIds': sectionIds, 'dataType': dataType}) ### Returns the report Table of Contents using the test run id. @staticmethod @@ -671,7 +694,7 @@ def _reports_operations_getReportContents(self, runid, getTableOfContents=True): Section Name (string): Section ID (string): """ - return self._wrapper._post('/reports/operations/getReportContents', **{'runid': runid, 'getTableOfContents': getTableOfContents}) + return self._wrapper.__post('/reports/operations/getReportContents', **{'runid': runid, 'getTableOfContents': getTableOfContents}) ### Returns the section of a report @staticmethod @@ -682,175 +705,144 @@ def _reports_operations_getReportTable(self, runid, sectionId): :param sectionId (string): The section id of the table desired to extract. :return results (object): """ - return self._wrapper._post('/reports/operations/getReportTable', **{'runid': runid, 'sectionId': sectionId}) + return self._wrapper.__post('/reports/operations/getReportTable', **{'runid': runid, 'sectionId': sectionId}) ### null @staticmethod - def _topology_operations_releaseAllCnResources(self, cnId): + def _reports_operations_search(self, searchString, limit, sort, sortorder): """ - :param cnId (string): + :param searchString (string): Search test name matching the string given. + :param limit (string): The limit of rows to return + :param sort (string): Parameter to sort by: 'name'/'endTime'/'duration'/'result'/'startTime'/'iteration'/'network'/'dut'/'user'/'size' + :param sortorder (string): The sort order: ascending/descending """ - return self._wrapper._post('/topology/operations/releaseAllCnResources', **{'cnId': cnId}) + return self._wrapper.__post('/reports/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) - ### Exports a wanted test model by giving its name or its test run id.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Returns main groups of statistics for a single BPS Test Component. These groups can be used then in requesting statistics values from the history of a test run. @staticmethod - def _testmodel_operations_exportModel(self, name, attachments, filepath, runid=None): + def _results_operations_getGroups(self, name, dynamicEnums=True, includeOutputs=True): """ - Exports a wanted test model by giving its name or its test run id.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): The name of the test model to be exported. - :param attachments (bool): True if object attachments are needed. - :param filepath (string): The local path where to save the exported object. - :param runid (number): Test RUN ID + Returns main groups of statistics for a single BPS Test Component. These groups can be used then in requesting statistics values from the history of a test run. + :param name (string): BPS Component name. This argument is actually the component type which can be get from 'statistics' table + :param dynamicEnums (bool): + :param includeOutputs (bool): + :return results (object): + object of object with fields + name (string): + label (string): + groups (list): """ - return self._wrapper._export('/testmodel/operations/exportModel', **{'name': name, 'attachments': attachments, 'filepath': filepath, 'runid': runid}) + return self._wrapper.__post('/results/operations/getGroups', **{'name': name, 'dynamicEnums': dynamicEnums, 'includeOutputs': includeOutputs}) - ### Exports an Application profile and all of its dependencies.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### null @staticmethod - def _appProfile_operations_exportAppProfile(self, name, attachments, filepath): + def _results_operations_getHistoricalResultSize(self, runid, componentid, group): """ - Exports an Application profile and all of its dependencies.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): The name of the test model to be exported. - :param attachments (bool): True if object attachments are needed. - :param filepath (string): The local path where to save the exported object. + :param runid (number): The test run id + :param componentid (string): The component identifier + :param group (string): The data group or one of the BPS component main groups. The group name can be get by executing the operation 'getGroups' from results node + :return result (string): """ - return self._wrapper._export('/appProfile/operations/exportAppProfile', **{'name': name, 'attachments': attachments, 'filepath': filepath}) + return self._wrapper.__post('/results/operations/getHistoricalResultSize', **{'runid': runid, 'componentid': componentid, 'group': group}) - ### Lists all the component presets names. + ### Returns stats series for a given component group stat output for a given timestamp @staticmethod - def _testmodel_component_operations_getComponentPresetNames(self, type='None'): + def _results_operations_getHistoricalSeries(self, runid, componentid, dataindex, group): """ - Lists all the component presets names. - :param type (string): The Component type. - All the component types are listed under the node testComponentTypesDescription. - If this argument is not set, all the presets will be listed. - :return result (list): + Returns stats series for a given component group stat output for a given timestamp + :param runid (number): The test identifier + :param componentid (string): The component identifier. Each component has an id and can be get loading the testand checking it's components info + :param dataindex (number): The table index, equivalent with timestamp. + :param group (string): The data group or one of the BPS component main groups. The group name can be get by executing the operation 'getGroups' from results node. + :return param (list): list of object with fields - id (string): - label (string): - type (string): - description (string): + name (string): + content (string): + datasetvals (string): """ - return self._wrapper._post('/testmodel/component/operations/getComponentPresetNames', **{'type': type}) - - ### null - @staticmethod - def _loadProfile_operations_save(self): - return self._wrapper._post('/loadProfile/operations/save', **{}) + return self._wrapper.__post('/results/operations/getHistoricalSeries', **{'runid': runid, 'componentid': componentid, 'dataindex': dataindex, 'group': group}) - ### Save the active editing LoadProfile under specified name + ### Adds a list of strikes to the current working Strike List.([{id: 'b/b/v/f'}, {id: 'aa/f/h'}]) @staticmethod - def _loadProfile_operations_saveAs(self, name): + def _strikeList_operations_add(self, strike, validate=True, toList=None): """ - Save the active editing LoadProfile under specified name - :param name (string): + Adds a list of strikes to the current working Strike List.([{id: 'b/b/v/f'}, {id: 'aa/f/h'}]) + :param strike (list): The list of strikes to add. + list of object with fields + id (string): Strike path. + :param validate (bool): Validate the strikes in the given list. + :param toList (string): All provided strikes will be added to this list. If not existing it will be created """ - return self._wrapper._post('/loadProfile/operations/saveAs', **{'name': name}) + return self._wrapper.__post('/strikeList/operations/add', **{'strike': strike, 'validate': validate, 'toList': toList}) - ### Adds a note to given port. + ### Deletes a given Strike List from the database. @staticmethod - def _topology_operations_addPortNote(self, interface, note): + def _strikeList_operations_delete(self, name): """ - Adds a note to given port. - :param interface (object): Slot and Port ID. - object of object with fields - slot (number): - port (string): - :param note (string): Note info. + Deletes a given Strike List from the database. + :param name (string): The name of the Strike List to be deleted. """ - return self._wrapper._post('/topology/operations/addPortNote', **{'interface': interface, 'note': note}) + return self._wrapper.__post('/strikeList/operations/delete', **{'name': name}) - ### Imports a capture file to the systemThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Exports the Strike List identified by its name and all of its dependenciesThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _capture_operations_importCapture(self, name, filename, force): - """ - Imports a capture file to the systemThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): The name of the capture being imported - :param filename (string): The file containing the capture object - :param force (bool): Force to import the file and the object having the same name will be replaced. - """ - return self._wrapper._import('/capture/operations/importCapture', **{'name': name, 'filename': filename, 'force': force}) - - ### Runs a Test. - @staticmethod - def _testmodel_operations_run(self, modelname, group, allowMalware=False): - """ - Runs a Test. - :param modelname (string): Test Name to run - :param group (number): Group to run - :param allowMalware (bool): Enable this option to allow malware in test. - """ - return self._wrapper._post('/testmodel/operations/run', **{'modelname': modelname, 'group': group, 'allowMalware': allowMalware}) - - ### Runs a Test. - @staticmethod - def _topology_operations_run(self, modelname, group, allowMalware=False): + def _strikeList_operations_exportStrikeList(self, name, filepath): """ - Runs a Test. - :param modelname (string): Test Name to run - :param group (number): Group to run - :param allowMalware (bool): Enable this option to allow malware in test. + Exports the Strike List identified by its name and all of its dependenciesThis operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): The name of the strike list to be exported. + :param filepath (string): The local path where to save the exported object. The file should have .bap extension """ - return self._wrapper._post('/topology/operations/run', **{'modelname': modelname, 'group': group, 'allowMalware': allowMalware}) + return self._wrapper.__export('/strikeList/operations/exportStrikeList', **{'name': name, 'filepath': filepath}) - ### Retrieves the real time statistics for the running test, by giving the run id. + ### Imports a list of strikes residing in a file. @staticmethod - def _testmodel_operations_realTimeStats(self, runid, rtsgroup, numSeconds, numDataPoints=1): + def _strikeList_operations_importStrikeList(self, name, filename, force): """ - Retrieves the real time statistics for the running test, by giving the run id. - :param runid (number): Test RUN ID - :param rtsgroup (string): Real Time Stats group name. Values for this can be get from 'statistics' node, inside 'statNames' from each component at 'realtime Group' key/column. Examples: 'l7STats', 'all', 'bpslite', 'summary', 'clientStats' etc.Instead of a group name, it can be used a statistic name and the usage is: `fields:`Example: 'fields:txFrames' or 'fields:ethTxFrames, appIncomplete, rxFrameRate, etc'. - :param numSeconds (number): The number of seconds. If negative, means counting from the end. Example -1 means the last second from the moment of request. - :param numDataPoints (number): The number of data points, or set of values, on server side. The default is 1. In case of missing stats,because of requesting to many stats per second in real time,increase the value (grater than 1) - :return result (object): - object of object with fields - testStuck (bool): - time (number): - progress (number): - values (string): + Imports a list of strikes residing in a file. + :param name (string): The name of the object being imported + :param filename (string): The file containing the object to be imported. + :param force (bool): Force to import the file and the object having the same name will be replaced. """ - return self._wrapper._post('/testmodel/operations/realTimeStats', **{'runid': runid, 'rtsgroup': rtsgroup, 'numSeconds': numSeconds, 'numDataPoints': numDataPoints}) + return self._wrapper.__import('/strikeList/operations/importStrikeList', **{'name': name, 'filename': filename, 'force': force}) - ### Deletes a given Network Neighborhood Config from the database. + ### Load an existing Strike List and sets it as the current one. @staticmethod - def _network_operations_delete(self, name): + def _strikeList_operations_load(self, template): """ - Deletes a given Network Neighborhood Config from the database. - :param name (string): The name of the Network Neighborhood Config. + Load an existing Strike List and sets it as the current one. + :param template (string): The name of the Strike List template """ - return self._wrapper._post('/network/operations/delete', **{'name': name}) + return self._wrapper.__post('/strikeList/operations/load', **{'template': template}) - ### Switch port fan-out mode. + ### Creates a new Strike List. @staticmethod - def _topology_operations_setPortFanoutMode(self, board, port, mode): + def _strikeList_operations_new(self, template=None): """ - Switch port fan-out mode. - :param board (number): - :param port (string): - :param mode (string): + Creates a new Strike List. + :param template (string): The name of the template. In this case will be empty. """ - return self._wrapper._post('/topology/operations/setPortFanoutMode', **{'board': board, 'port': port, 'mode': mode}) + return self._wrapper.__post('/strikeList/operations/new', **{'template': template}) - ### Adds a flow to the current working SuperFlow + ### Removes a strike from the current working Strike List.([{id: 'bb/c/d'}, {id: 'aa/f/g'}]) @staticmethod - def _superflow_operations_addFlow(self, flowParams): + def _strikeList_operations_remove(self, strike): """ - Adds a flow to the current working SuperFlow - :param flowParams (object): The flow object to add. - object of object with fields - name (string): The name of the flow - from (string): Traffic initiator. - to (string): Traffic responder. + Removes a strike from the current working Strike List.([{id: 'bb/c/d'}, {id: 'aa/f/g'}]) + :param strike (list): The list of strike ids to remove. The strike id is in fact the it's path. + list of object with fields + id (string): """ - return self._wrapper._post('/superflow/operations/addFlow', **{'flowParams': flowParams}) + return self._wrapper.__post('/strikeList/operations/remove', **{'strike': strike}) - ### Retrieves all the security options + ### Saves the current working Strike List using the current name @staticmethod - def _evasionProfile_StrikeOptions_operations_getStrikeOptions(self): + def _strikeList_operations_save(self, name=None, force=True): """ - Retrieves all the security options - :return result (list): + Saves the current working Strike List using the current name + :param name (string): The name of the template. Default is empty. + :param force (bool): Force to save the working Strike List with the same name. """ - return self._wrapper._post('/evasionProfile/StrikeOptions/operations/getStrikeOptions', **{}) + return self._wrapper.__post('/strikeList/operations/save', **{'name': name, 'force': force}) ### Saves the current working Strike List and gives it a new name. @staticmethod @@ -860,186 +852,178 @@ def _strikeList_operations_saveAs(self, name, force): :param name (string): The new name given for the current working Strike List :param force (bool): Force to save the working Strike List using the given name. """ - return self._wrapper._post('/strikeList/operations/saveAs', **{'name': name, 'force': force}) + return self._wrapper.__post('/strikeList/operations/saveAs', **{'name': name, 'force': force}) - ### Saves the current working Strike List using the current name + ### null @staticmethod - def _strikeList_operations_save(self, name=None, force=True): + def _strikeList_operations_search(self, searchString='', limit=10, sort='name', sortorder='ascending'): """ - Saves the current working Strike List using the current name - :param name (string): The name of the template. Default is empty. - :param force (bool): Force to save the working Strike List with the same name. + :param searchString (string): Search strike list name matching the string given. + :param limit (number): The limit of rows to return + :param sort (string): Parameter to sort by. Default is by name. + :param sortorder (string): The sort order (ascending/descending). Default is ascending. """ - return self._wrapper._post('/strikeList/operations/save', **{'name': name, 'force': force}) + return self._wrapper.__post('/strikeList/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) - ### Imports a test model, given as a file. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Searches a strike inside all BPS strike database.To list all the available strikes, leave the arguments empty. @staticmethod - def _testmodel_operations_importModel(self, name, filename, force): + def _strikes_operations_search(self, searchString='', limit=10, sort='name', sortorder='ascending', offset=0): """ - Imports a test model, given as a file. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): The name of the object being imported - :param filename (string): The file containing the object - :param force (bool): Force to import the file and the object having the same name will be replaced. + Searches a strike inside all BPS strike database.To list all the available strikes, leave the arguments empty. + :param searchString (string): The string used as a criteria to search a strike by.Example: 'strike_name', 'year:2019', 'path:strikes/xml..' + :param limit (number): The limit of rows to return. Use empty string or empty box to get all the available strikes. + :param sort (string): Parameter to sort by. + :param sortorder (string): The sort order (ascending/descending) + :param offset (number): The offset to begin from. Default is 0. + :return strike (list): + list of object with fields + id (string): + protocol (string): + category (string): + direction (string): + keyword (string): + name (string): + path (string): + variants (number): + severity (string): + reference (string): + fileSize (string): + fileExtension (string): + year (string): """ - return self._wrapper._import('/testmodel/operations/importModel', **{'name': name, 'filename': filename, 'force': force}) + return self._wrapper.__post('/strikes/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder, 'offset': offset}) - ### Imports an application profile, given as a file. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### null @staticmethod - def _appProfile_operations_importAppProfile(self, name, filename, force): + def _superflow_actions_operations_getActionChoices(self, id): """ - Imports an application profile, given as a file. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): The name of the object being imported - :param filename (string): The file containing the object - :param force (bool): Force to import the file and the object having the same name will be replaced. + :param id (number): the flow id """ - return self._wrapper._import('/appProfile/operations/importAppProfile', **{'name': name, 'filename': filename, 'force': force}) + return self._wrapper.__post('/superflow/actions/operations/getActionChoices', **{'id': id}) - ### Imports a network neighborhood model, given as a file.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Get information about an action in the current working Superflow, retrieving also the choices for each action setting. @staticmethod - def _network_operations_importNetwork(self, name, filename, force): + def _superflow_actions_operations_getActionInfo(self, id): """ - Imports a network neighborhood model, given as a file.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): The name of the object being imported - :param filename (string): The file containing the object - :param force (bool): Force to import the file and replace the object having the same name. + Get information about an action in the current working Superflow, retrieving also the choices for each action setting. + :param id (number): The action id + :return result (list): + list of object with fields + label (string): + name (string): + description (string): + choice (object): """ - return self._wrapper._import('/network/operations/importNetwork', **{'name': name, 'filename': filename, 'force': force}) + return self._wrapper.__post('/superflow/actions/operations/getActionInfo', **{'id': id}) - ### Reserves the specified number of resources of given type. + ### Gives abbreviated information about all Canned Flow Names. @staticmethod - def _topology_operations_reserveResources(self, group, count, resourceType, slotId): + def _superflow_flows_operations_getCannedFlows(self): """ - Reserves the specified number of resources of given type. - :param group (number): - :param count (number): - :param resourceType (string): - :param slotId (number): + Gives abbreviated information about all Canned Flow Names. + :return flow (list): + list of object with fields + name (string): + label (string): """ - return self._wrapper._post('/topology/operations/reserveResources', **{'group': group, 'count': count, 'resourceType': resourceType, 'slotId': slotId}) + return self._wrapper.__post('/superflow/flows/operations/getCannedFlows', **{}) ### null @staticmethod - def _topology_operations_setPortSettings(self, linkState, autoNegotiation, precoder, slotId, portId): + def _superflow_flows_operations_getFlowChoices(self, id, name): """ - :param linkState (string): - :param autoNegotiation (bool): - :param precoder (bool): - :param slotId (number): - :param portId (string): + :param id (number): The flow id. + :param name (string): The flow type/name. + :return result (list): """ - return self._wrapper._post('/topology/operations/setPortSettings', **{'linkState': linkState, 'autoNegotiation': autoNegotiation, 'precoder': precoder, 'slotId': slotId, 'portId': portId}) + return self._wrapper.__post('/superflow/flows/operations/getFlowChoices', **{'id': id, 'name': name}) - ### Adds a new test component to the current working test model + ### Adds an action to the current working SuperFlow @staticmethod - def _testmodel_operations_add(self, name, component, type, active): + def _superflow_operations_addAction(self, flowid, type, actionid, source): """ - Adds a new test component to the current working test model - :param name (string): Component Name - :param component (string): Component template, preset. - :param type (string): Component Type: appsim, sesionsender .. - :param active (bool): Set component enable (by default is active) or disable + Adds an action to the current working SuperFlow + :param flowid (number): The flow id. + :param type (string): The type of the action definition. + :param actionid (number): The new action id. + :param source (string): The action source. """ - return self._wrapper._post('/testmodel/operations/add', **{'name': name, 'component': component, 'type': type, 'active': active}) + return self._wrapper.__post('/superflow/operations/addAction', **{'flowid': flowid, 'type': type, 'actionid': actionid, 'source': source}) - ### Sets the card mode of a board. + ### Adds a flow to the current working SuperFlow @staticmethod - def _topology_operations_setCardMode(self, board, mode): + def _superflow_operations_addFlow(self, flowParams): """ - Sets the card mode of a board. - :param board (number): Slot ID. - :param mode (number): The new mode: 10(BPS-L23), 7(BPS L4-7), 3(IxLoad), - 11(BPS QT L2-3), 12(BPS QT L4-7) + Adds a flow to the current working SuperFlow + :param flowParams (object): The flow object to add. + object of object with fields + name (string): The name of the flow + from (string): Traffic initiator. + to (string): Traffic responder. """ - return self._wrapper._post('/topology/operations/setCardMode', **{'board': board, 'mode': mode}) + return self._wrapper.__post('/superflow/operations/addFlow', **{'flowParams': flowParams}) - ### Sets the card speed of a board + ### Add a host to the current working Superflow @staticmethod - def _topology_operations_setCardSpeed(self, board, speed): + def _superflow_operations_addHost(self, hostParams, force): """ - Sets the card speed of a board - :param board (number): Slot ID. - :param speed (number): The new speed.(the int value for 1G is 1000, 10G(10000), 40G(40000)) + Add a host to the current working Superflow + :param hostParams (object): + object of object with fields + name (string): The host name. + hostname (string): The NickName of the host. + iface (string): The traffic direction.Values can be: 'origin'(means client) and 'target'(means server) + :param force (bool): The flow id. """ - return self._wrapper._post('/topology/operations/setCardSpeed', **{'board': board, 'speed': speed}) + return self._wrapper.__post('/superflow/operations/addHost', **{'hostParams': hostParams, 'force': force}) - ### Sets the card fanout of a board + ### Deletes a given Super Flow from the database. @staticmethod - def _topology_operations_setCardFanout(self, board, fanid): + def _superflow_operations_delete(self, name): """ - Sets the card fanout of a board - :param board (number): Slot ID. - :param fanid (number): The fan type represented by an integer id. - Get card specific fanout modes by calling 'topology.getFanoutModes()'. - For CloudStorm: 0(100G), 1(40G), 2(25G), 3(10G), 4(50G). - For PerfectStorm 40G: 0(40G), 1(10G). - For PerfectStorm 100G: 0(100G), 1(40G), 2(10G) + Deletes a given Super Flow from the database. + :param name (string): The name of the Super Flow. """ - return self._wrapper._post('/topology/operations/setCardFanout', **{'board': board, 'fanid': fanid}) + return self._wrapper.__post('/superflow/operations/delete', **{'name': name}) - ### Enables/Disables the performance acceleration for a BPS VE blade. + ### Imports a resource model to be used in flow traffic as .txt files, certificates, keys etc, given as a file. File will be uploaded to '/chroot/resources' by default if 'type' is not specifed otherwise the destination will be '/chroot/resources/'+ (clientcerts / clientkeys / cacerts ...). This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _topology_operations_setPerfAcc(self, board, perfacc): + def _superflow_operations_importResource(self, name, filename, force, type='resource'): """ - Enables/Disables the performance acceleration for a BPS VE blade. - :param board (number): Slot ID. - :param perfacc (bool): Boolean value: 'True' to enable the performance Acceleration and 'False' otherwise. + Imports a resource model to be used in flow traffic as .txt files, certificates, keys etc, given as a file. File will be uploaded to '/chroot/resources' by default if 'type' is not specifed otherwise the destination will be '/chroot/resources/'+ (clientcerts / clientkeys / cacerts ...). This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): The name of the object being imported + :param filename (string): The file containing the object + :param force (bool): Force to import the file and the object having the same name will be replaced. + :param type (string): File type to import. Accepted types: clientcert, clientkey, resource, cacert, dhparams. Default value is 'resource'. """ - return self._wrapper._post('/topology/operations/setPerfAcc', **{'board': board, 'perfacc': perfacc}) + return self._wrapper.__import('/superflow/operations/importResource', **{'name': name, 'filename': filename, 'force': force, 'type': type}) - ### Reboots the slot with slotId. + ### Load an existing Super Flow and sets it as the current one. @staticmethod - def _topology_operations_reboot(self, board): + def _superflow_operations_load(self, template): """ - Reboots the slot with slotId. - :param board (number): + Load an existing Super Flow and sets it as the current one. + :param template (string): The name of the existing Super Flow template """ - return self._wrapper._post('/topology/operations/reboot', **{'board': board}) + return self._wrapper.__post('/superflow/operations/load', **{'template': template}) - ### null + ### Creates a new Super Flow. @staticmethod - def _topology_operations_releaseResources(self, count, resourceType, slotId): + def _superflow_operations_new(self, template=None): """ - :param count (number): - :param resourceType (string): - :param slotId (number): - """ - return self._wrapper._post('/topology/operations/releaseResources', **{'count': count, 'resourceType': resourceType, 'slotId': slotId}) - - ### Saves the working network config and gives it a new name. - @staticmethod - def _network_operations_saveAs(self, name, regenerateOldStyle=True, force=False): - """ - Saves the working network config and gives it a new name. - :param name (string): The new name given for the current working network config - :param regenerateOldStyle (bool): Force to apply the changes made on the loaded network configuration. Force to generate a network from the old one. - :param force (bool): Force to save the network config. It replaces a pre-existing config having the same name. - """ - return self._wrapper._post('/network/operations/saveAs', **{'name': name, 'regenerateOldStyle': regenerateOldStyle, 'force': force}) - - ### Save the current working network config. - @staticmethod - def _network_operations_save(self, name=None, regenerateOldStyle=True, force=True): - """ - Save the current working network config. - :param name (string): The new name given for the current working network config. No need to configure. The current name is used. - :param regenerateOldStyle (bool): No need to configure. The default is used. - :param force (bool): No need to configure. The default is used. + Creates a new Super Flow. + :param template (string): The name of the template. In this case will be empty. """ - return self._wrapper._post('/network/operations/save', **{'name': name, 'regenerateOldStyle': regenerateOldStyle, 'force': force}) + return self._wrapper.__post('/superflow/operations/new', **{'template': template}) - ### null + ### Removes an action from the current working SuperFlow. @staticmethod - def _topology_operations_reserve(self, reservation, force=False): + def _superflow_operations_removeAction(self, id): """ - :param reservation (list): Reserves one or more ports - list of object with fields - group (number): - slot (number): - port (string): - capture (bool): - :param force (bool): + Removes an action from the current working SuperFlow. + :param id (number): The action ID. """ - return self._wrapper._post('/topology/operations/reserve', **{'reservation': reservation, 'force': force}) + return self._wrapper.__post('/superflow/operations/removeAction', **{'id': id}) ### Removes a flow from the current working SuperFlow. @staticmethod @@ -1048,91 +1032,78 @@ def _superflow_operations_removeFlow(self, id): Removes a flow from the current working SuperFlow. :param id (number): The flow ID. """ - return self._wrapper._post('/superflow/operations/removeFlow', **{'id': id}) + return self._wrapper.__post('/superflow/operations/removeFlow', **{'id': id}) - ### Exports everything including test models, network configurations and others from system.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Saves the working Super Flow using the current name @staticmethod - def _administration_operations_exportAllTests(self, filepath): + def _superflow_operations_save(self, name=None, force=True): """ - Exports everything including test models, network configurations and others from system.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param filepath (string): The local path where to save the compressed file with all the models. The path must contain the file name and extension (.tar.gz): '/d/c/f/AllTests.tar.gz' + Saves the working Super Flow using the current name + :param name (string): The name of the template that should be empty. + :param force (bool): Force to save the working Super Flow with the same name. """ - return self._wrapper._export('/administration/operations/exportAllTests', **{'filepath': filepath}) + return self._wrapper.__post('/superflow/operations/save', **{'name': name, 'force': force}) - ### Reboots the compute node with cnId. + ### Saves the current working Application Profiles and gives it a new name. @staticmethod - def _topology_operations_rebootComputeNode(self, cnId): + def _superflow_operations_saveAs(self, name, force): """ - Reboots the compute node with cnId. - :param cnId (string): Compute node id + Saves the current working Application Profiles and gives it a new name. + :param name (string): The new name given for the current working Super Flow + :param force (bool): Force to save the working Super Flow using the given name. """ - return self._wrapper._post('/topology/operations/rebootComputeNode', **{'cnId': cnId}) + return self._wrapper.__post('/superflow/operations/saveAs', **{'name': name, 'force': force}) - ### Deletes a given Application Profile from the database. + ### null @staticmethod - def _appProfile_operations_delete(self, name): + def _superflow_operations_search(self, searchString, limit, sort, sortorder): """ - Deletes a given Application Profile from the database. - :param name (string): The name of the Application Profiles. + :param searchString (string): Search Super Flow name matching the string given. + :param limit (string): The limit of rows to return + :param sort (string): Parameter to sort by. + :param sortorder (string): The sort order (ascending/descending) """ - return self._wrapper._post('/appProfile/operations/delete', **{'name': name}) + return self._wrapper.__post('/superflow/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) - ### null + ### Lists all the component presets names. @staticmethod - def _network_operations_list(self, userid, clazz, sortorder, sort, limit, offset): + def _testmodel_component_operations_getComponentPresetNames(self, type='None'): """ - :param userid (string): - :param clazz (string): - :param sortorder (string): - :param sort (string): - :param limit (number): - :param offset (number): - :return returnArg (list): + Lists all the component presets names. + :param type (string): The Component type. + All the component types are listed under the node testComponentTypesDescription. + If this argument is not set, all the presets will be listed. + :return result (list): list of object with fields - name (string): + id (string): + label (string): type (string): - author (string): - createdOn (string): - """ - return self._wrapper._post('/network/operations/list', **{'userid': userid, 'clazz': clazz, 'sortorder': sortorder, 'sort': sort, 'limit': limit, 'offset': offset}) - - ### Removes an action from the current working SuperFlow. - @staticmethod - def _superflow_operations_removeAction(self, id): - """ - Removes an action from the current working SuperFlow. - :param id (number): The action ID. - """ - return self._wrapper._post('/superflow/operations/removeAction', **{'id': id}) - - ### Saves the current working Test Model under specified name. - @staticmethod - def _testmodel_operations_saveAs(self, name, force): - """ - Saves the current working Test Model under specified name. - :param name (string): The new name given for the current working Test Model - :param force (bool): Force to save the working Test Model using a new name. + description (string): """ - return self._wrapper._post('/testmodel/operations/saveAs', **{'name': name, 'force': force}) + return self._wrapper.__post('/testmodel/component/operations/getComponentPresetNames', **{'type': type}) - ### Saves the working Test Model using the current name. No need to configure. The current name is used. + ### Adds a new test component to the current working test model @staticmethod - def _testmodel_operations_save(self, name=None, force=True): + def _testmodel_operations_add(self, name, component, type, active): """ - Saves the working Test Model using the current name. No need to configure. The current name is used. - :param name (string): The name of the template that should be empty. - :param force (bool): Force to save the working Test Model with the same name. + Adds a new test component to the current working test model + :param name (string): Component Name + :param component (string): Component template, preset. + :param type (string): Component Type: appsim, sesionsender .. + :param active (bool): Set component enable (by default is active) or disable """ - return self._wrapper._post('/testmodel/operations/save', **{'name': name, 'force': force}) + return self._wrapper.__post('/testmodel/operations/add', **{'name': name, 'component': component, 'type': type, 'active': active}) - ### Removes a SuperFlow from the current working Application Profile. + ### Clones a component in the current working Test Model @staticmethod - def _appProfile_operations_remove(self, superflow): + def _testmodel_operations_clone(self, template, type, active): """ - Removes a SuperFlow from the current working Application Profile. - :param superflow (string): The name of the super flow. + Clones a component in the current working Test Model + :param template (string): The ID of the test component to clone. + :param type (string): Component Type: appsim, sesionsender .. + :param active (bool): Set component enable (by default is active) or disable """ - return self._wrapper._post('/appProfile/operations/remove', **{'superflow': superflow}) + return self._wrapper.__post('/testmodel/operations/clone', **{'template': template, 'type': type, 'active': active}) ### Deletes a given Test Model from the database. @staticmethod @@ -1141,653 +1112,699 @@ def _testmodel_operations_delete(self, name): Deletes a given Test Model from the database. :param name (string): The name of the Test Model. """ - return self._wrapper._post('/testmodel/operations/delete', **{'name': name}) + return self._wrapper.__post('/testmodel/operations/delete', **{'name': name}) - ### null + ### Exports a wanted test model by giving its name or its test run id.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _topology_operations_releaseResource(self, group, resourceId, resourceType): + def _testmodel_operations_exportModel(self, name, attachments, filepath, runid=None): """ - :param group (number): - :param resourceId (number): - :param resourceType (string): + Exports a wanted test model by giving its name or its test run id.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): The name of the test model to be exported. + :param attachments (bool): True if object attachments are needed. + :param filepath (string): The local path where to save the exported object. + :param runid (number): Test RUN ID """ - return self._wrapper._post('/topology/operations/releaseResource', **{'group': group, 'resourceId': resourceId, 'resourceType': resourceType}) + return self._wrapper.__export('/testmodel/operations/exportModel', **{'name': name, 'attachments': attachments, 'filepath': filepath, 'runid': runid}) - ### Imports all test models, actually imports everything from 'exportAllTests'. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### Imports a test model, given as a file. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _administration_operations_importAllTests(self, name, filename, force): + def _testmodel_operations_importModel(self, name, filename, force): """ - Imports all test models, actually imports everything from 'exportAllTests'. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param name (string): String name to append to each test name. - :param filename (string): The file containing the object. + Imports a test model, given as a file. This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param name (string): The name of the object being imported + :param filename (string): The file containing the object :param force (bool): Force to import the file and the object having the same name will be replaced. """ - return self._wrapper._import('/administration/operations/importAllTests', **{'name': name, 'filename': filename, 'force': force}) - - ### Loads an existing network config by name. - @staticmethod - def _network_operations_load(self, template): - """ - Loads an existing network config by name. - :param template (string): The name of the network neighborhood template - """ - return self._wrapper._post('/network/operations/load', **{'template': template}) + return self._wrapper.__import('/testmodel/operations/importModel', **{'name': name, 'filename': filename, 'force': force}) - ### Creates a new Network Neighborhood configuration with no name. The template value must remain empty. + ### Load an existing test model template. @staticmethod - def _network_operations_new(self, template=None): + def _testmodel_operations_load(self, template): """ - Creates a new Network Neighborhood configuration with no name. The template value must remain empty. - :param template (string): The name of the template. In this case will be empty. No need to configure. + Load an existing test model template. + :param template (string): The name of the template testmodel """ - return self._wrapper._post('/network/operations/new', **{'template': template}) + return self._wrapper.__post('/testmodel/operations/load', **{'template': template}) - ### null + ### Creates a new Test Model @staticmethod - def _superflow_flows_operations_getFlowChoices(self, id, name): + def _testmodel_operations_new(self, template=None): """ - :param id (number): The flow id. - :param name (string): The flow type/name. - :return result (list): + Creates a new Test Model + :param template (string): The name of the template. In this case will be empty. """ - return self._wrapper._post('/superflow/flows/operations/getFlowChoices', **{'id': id, 'name': name}) + return self._wrapper.__post('/testmodel/operations/new', **{'template': template}) - ### Reserves all l47 resources of given compute node id. + ### Retrieves the real time statistics for the running test, by giving the run id. @staticmethod - def _topology_operations_reserveAllCnResources(self, group, cnId): + def _testmodel_operations_realTimeStats(self, runid, rtsgroup, numSeconds, numDataPoints=1): """ - Reserves all l47 resources of given compute node id. - :param group (number): - :param cnId (string): + Retrieves the real time statistics for the running test, by giving the run id. + :param runid (number): Test RUN ID + :param rtsgroup (string): Real Time Stats group name. Values for this can be get from 'statistics' node, inside 'statNames' from each component at 'realtime Group' key/column. Examples: 'l7STats', 'all', 'bpslite', 'summary', 'clientStats' etc.Instead of a group name, it can be used a statistic name and the usage is: `fields:`Example: 'fields:txFrames' or 'fields:ethTxFrames, appIncomplete, rxFrameRate, etc'. + :param numSeconds (number): The number of seconds. If negative, means counting from the end. Example -1 means the last second from the moment of request. + :param numDataPoints (number): The number of data points, or set of values, on server side. The default is 1. In case of missing stats,because of requesting to many stats per second in real time,increase the value (grater than 1) + :return result (object): + object of object with fields + testStuck (bool): + time (number): + progress (number): + values (string): """ - return self._wrapper._post('/topology/operations/reserveAllCnResources', **{'group': group, 'cnId': cnId}) + return self._wrapper.__post('/testmodel/operations/realTimeStats', **{'runid': runid, 'rtsgroup': rtsgroup, 'numSeconds': numSeconds, 'numDataPoints': numDataPoints}) - ### Load an existing Super Flow and sets it as the current one. + ### Removes a component from the current working Test Model. @staticmethod - def _superflow_operations_load(self, template): + def _testmodel_operations_remove(self, id): """ - Load an existing Super Flow and sets it as the current one. - :param template (string): The name of the existing Super Flow template + Removes a component from the current working Test Model. + :param id (string): The component id. """ - return self._wrapper._post('/superflow/operations/load', **{'template': template}) + return self._wrapper.__post('/testmodel/operations/remove', **{'id': id}) - ### Creates a new Super Flow. + ### Runs a Test. @staticmethod - def _superflow_operations_new(self, template=None): + def _testmodel_operations_run(self, modelname, group, allowMalware=False): """ - Creates a new Super Flow. - :param template (string): The name of the template. In this case will be empty. + Runs a Test. + :param modelname (string): Test Name to run + :param group (number): Group to run + :param allowMalware (bool): Enable this option to allow malware in test. """ - return self._wrapper._post('/superflow/operations/new', **{'template': template}) + return self._wrapper.__post('/testmodel/operations/run', **{'modelname': modelname, 'group': group, 'allowMalware': allowMalware}) - ### null + ### Saves the working Test Model using the current name. No need to configure. The current name is used. @staticmethod - def _administration_operations_logs(self, error=False, messages=False, web=False, all=False, audit=False, info=False, system=False, lines=20, drop=0): + def _testmodel_operations_save(self, name=None, force=True): """ - :param error (bool): - :param messages (bool): - :param web (bool): - :param all (bool): - :param audit (bool): - :param info (bool): - :param system (bool): - :param lines (number): number lines to return - :param drop (number): number lines to drop + Saves the working Test Model using the current name. No need to configure. The current name is used. + :param name (string): The name of the template that should be empty. + :param force (bool): Force to save the working Test Model with the same name. """ - return self._wrapper._post('/administration/operations/logs', **{'error': error, 'messages': messages, 'web': web, 'all': all, 'audit': audit, 'info': info, 'system': system, 'lines': lines, 'drop': drop}) + return self._wrapper.__post('/testmodel/operations/save', **{'name': name, 'force': force}) - ### null + ### Saves the current working Test Model under specified name. @staticmethod - def _superflow_operations_search(self, searchString, limit, sort, sortorder): + def _testmodel_operations_saveAs(self, name, force): """ - :param searchString (string): Search Super Flow name matching the string given. - :param limit (string): The limit of rows to return - :param sort (string): Parameter to sort by. - :param sortorder (string): The sort order (ascending/descending) + Saves the current working Test Model under specified name. + :param name (string): The new name given for the current working Test Model + :param force (bool): Force to save the working Test Model using a new name. """ - return self._wrapper._post('/superflow/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) + return self._wrapper.__post('/testmodel/operations/saveAs', **{'name': name, 'force': force}) ### null @staticmethod - def _appProfile_operations_search(self, searchString, limit, sort, sortorder): + def _testmodel_operations_search(self, searchString, limit, sort, sortorder): """ - :param searchString (string): Search application profile name matching the string given. + :param searchString (string): Search test name matching the string given. :param limit (string): The limit of rows to return - :param sort (string): Parameter to sort by. - :param sortorder (string): The sort order (ascending/descending) - :return appprofile (list): + :param sort (string): Parameter to sort by: 'createdOn'/'timestamp'/'bandwidth'/'result'/'lastrunby'/'createdBy'/'interfaces'/'testLabType' + :param sortorder (string): The sort order: ascending/descending + :return testmodel (list): list of object with fields name (string): label (string): createdBy (string): - createdOn (string): - revision (number): + network (string): + duration (number): description (string): """ - return self._wrapper._post('/appProfile/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) + return self._wrapper.__post('/testmodel/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) - ### Load an existing Application Profile and sets it as the current one. + ### Stops the test run. @staticmethod - def _appProfile_operations_load(self, template): + def _testmodel_operations_stopRun(self, runid): """ - Load an existing Application Profile and sets it as the current one. - :param template (string): The name of the template application profile + Stops the test run. + :param runid (number): Test RUN ID """ - return self._wrapper._post('/appProfile/operations/load', **{'template': template}) + return self._wrapper.__post('/testmodel/operations/stopRun', **{'runid': runid}) - ### Creates a new Application Profile. + ### Adds a note to given port. @staticmethod - def _appProfile_operations_new(self, template=None): + def _topology_operations_addPortNote(self, interface, note): """ - Creates a new Application Profile. - :param template (string): This argument must remain unset. Do not set any value for it. + Adds a note to given port. + :param interface (object): Slot and Port ID. + object of object with fields + slot (number): + port (string): + :param note (string): Note info. """ - return self._wrapper._post('/appProfile/operations/new', **{'template': template}) + return self._wrapper.__post('/topology/operations/addPortNote', **{'interface': interface, 'note': note}) - ### Removes a strike from the current working Strike List.([{id: 'bb/c/d'}, {id: 'aa/f/g'}]) + ### Adds a note to given resource. @staticmethod - def _strikeList_operations_remove(self, strike): + def _topology_operations_addResourceNote(self, resourceId, resourceType): """ - Removes a strike from the current working Strike List.([{id: 'bb/c/d'}, {id: 'aa/f/g'}]) - :param strike (list): The list of strike ids to remove. The strike id is in fact the it's path. - list of object with fields - id (string): + Adds a note to given resource. + :param resourceId (string): Resource Id. + :param resourceType (string): Resource type. """ - return self._wrapper._post('/strikeList/operations/remove', **{'strike': strike}) + return self._wrapper.__post('/topology/operations/addResourceNote', **{'resourceId': resourceId, 'resourceType': resourceType}) - ### close active session + ### Exports a port capture from a test run.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. @staticmethod - def _administration_sessions_operations_close(self, session): + def _topology_operations_exportCapture(self, filepath, args): """ - close active session - :param session (string): + Exports a port capture from a test run.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + :param filepath (string): The local path where to save the exported object. + :param args (object): Export filters. The Possible values for: 'dir'(direction) are 'tx','rx','both';for 'sizetype' and 'starttype'(units for size and start) are 'megabytes' or 'frames' + object of object with fields + port (string): Port label + slot (number): Slot number + dir (string): Capturing direction (rx, tx, both) + size (number): The size of the capture to be exported. + start (number): Start at point. + sizetype (string): The size unit: megabytes or frames. + starttype (string): The start unit: megabytes or frames. """ - return self._wrapper._post('/administration/sessions/operations/close', **{'session': session}) + return self._wrapper.__export('/topology/operations/exportCapture', **{'filepath': filepath, 'args': args}) - ### Imports a list of strikes residing in a file. + ### Gets the card Fanout modes of a board. @staticmethod - def _strikeList_operations_importStrikeList(self, name, filename, force): + def _topology_operations_getFanoutModes(self, cardId): """ - Imports a list of strikes residing in a file. - :param name (string): The name of the object being imported - :param filename (string): The file containing the object to be imported. - :param force (bool): Force to import the file and the object having the same name will be replaced. + Gets the card Fanout modes of a board. + :param cardId (number): Slot ID. + :return modes (object): Fanout mode id per card type. """ - return self._wrapper._import('/strikeList/operations/importStrikeList', **{'name': name, 'filename': filename, 'force': force}) + return self._wrapper.__post('/topology/operations/getFanoutModes', **{'cardId': cardId}) - ### null + ### Get available port fan-out modes. @staticmethod - def _superflow_actions_operations_getActionChoices(self, id): + def _topology_operations_getPortAvailableModes(self, cardId, port): """ - :param id (number): the flow id + Get available port fan-out modes. + :param cardId (number): Slot id + :param port (number): Port id to be interrogated + :return modes (object): Available port switch modes. """ - return self._wrapper._post('/superflow/actions/operations/getActionChoices', **{'id': id}) + return self._wrapper.__post('/topology/operations/getPortAvailableModes', **{'cardId': cardId, 'port': port}) - ### null + ### Reboots the slot with slotId. @staticmethod - def _reports_operations_search(self, searchString, limit, sort, sortorder): + def _topology_operations_reboot(self, board): """ - :param searchString (string): Search test name matching the string given. - :param limit (string): The limit of rows to return - :param sort (string): Parameter to sort by: 'name'/'endTime'/'duration'/'result'/'startTime'/'iteration'/'network'/'dut'/'user'/'size' - :param sortorder (string): The sort order: ascending/descending + Reboots the slot with slotId. + :param board (number): + """ + return self._wrapper.__post('/topology/operations/reboot', **{'board': board}) + + ### Reboots the compute node with cnId. + @staticmethod + def _topology_operations_rebootComputeNode(self, cnId): + """ + Reboots the compute node with cnId. + :param cnId (string): Compute node id """ - return self._wrapper._post('/reports/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) + return self._wrapper.__post('/topology/operations/rebootComputeNode', **{'cnId': cnId}) ### null @staticmethod - def _results_operations_getHistoricalResultSize(self, runid, componentid, group): + def _topology_operations_releaseAllCnResources(self, cnId): """ - :param runid (number): The test run id - :param componentid (string): The component identifier - :param group (string): The data group or one of the BPS component main groups. The group name can be get by executing the operation 'getGroups' from results node - :return result (string): + :param cnId (string): """ - return self._wrapper._post('/results/operations/getHistoricalResultSize', **{'runid': runid, 'componentid': componentid, 'group': group}) + return self._wrapper.__post('/topology/operations/releaseAllCnResources', **{'cnId': cnId}) - ### Disconnects from a remote chassis in order to release remote resources.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### null @staticmethod - def _remote_operations_disconnectChassis(self, address, port): + def _topology_operations_releaseResource(self, group, resourceId, resourceType): """ - Disconnects from a remote chassis in order to release remote resources.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param address (string): Remote chassis address. - :param port (number): Remote connection port. + :param group (number): + :param resourceId (number): + :param resourceType (string): """ - return self._wrapper._post('/remote/operations/disconnectChassis', **{'address': address, 'port': port}) + return self._wrapper.__post('/topology/operations/releaseResource', **{'group': group, 'resourceId': resourceId, 'resourceType': resourceType}) - ### Removes a component from the current working Test Model. + ### null @staticmethod - def _testmodel_operations_remove(self, id): + def _topology_operations_releaseResources(self, count, resourceType, slotId): """ - Removes a component from the current working Test Model. - :param id (string): The component id. + :param count (number): + :param resourceType (string): + :param slotId (number): """ - return self._wrapper._post('/testmodel/operations/remove', **{'id': id}) + return self._wrapper.__post('/topology/operations/releaseResources', **{'count': count, 'resourceType': resourceType, 'slotId': slotId}) - ### Get available port fan-out modes. + ### null @staticmethod - def _topology_operations_getPortAvailableModes(self, cardId, port): + def _topology_operations_reserve(self, reservation, force=False): """ - Get available port fan-out modes. - :param cardId (number): Slot id - :param port (number): Port id to be interrogated - :return modes (object): Available port switch modes. + :param reservation (list): Reserves one or more ports + list of object with fields + group (number): + slot (number): + port (string): + capture (bool): + :param force (bool): """ - return self._wrapper._post('/topology/operations/getPortAvailableModes', **{'cardId': cardId, 'port': port}) + return self._wrapper.__post('/topology/operations/reserve', **{'reservation': reservation, 'force': force}) - ### Recompute percentages in the current working Application Profile + ### Reserves all l47 resources of given compute node id. @staticmethod - def _appProfile_operations_recompute(self): + def _topology_operations_reserveAllCnResources(self, group, cnId): """ - Recompute percentages in the current working Application Profile + Reserves all l47 resources of given compute node id. + :param group (number): + :param cnId (string): """ - return self._wrapper._post('/appProfile/operations/recompute', **{}) + return self._wrapper.__post('/topology/operations/reserveAllCnResources', **{'group': group, 'cnId': cnId}) - ### null + ### Reserves the specified resource of the given type. @staticmethod - def _loadProfile_operations_load(self, template): + def _topology_operations_reserveResource(self, group, resourceId, resourceType): """ - :param template (string): + Reserves the specified resource of the given type. + :param group (number): + :param resourceId (number): + :param resourceType (string): """ - return self._wrapper._post('/loadProfile/operations/load', **{'template': template}) + return self._wrapper.__post('/topology/operations/reserveResource', **{'group': group, 'resourceId': resourceId, 'resourceType': resourceType}) - ### Adds a list of strikes to the current working Strike List.([{id: 'b/b/v/f'}, {id: 'aa/f/h'}]) + ### Reserves the specified number of resources of given type. @staticmethod - def _strikeList_operations_add(self, strike, validate=True, toList=None): + def _topology_operations_reserveResources(self, group, count, resourceType, slotId): """ - Adds a list of strikes to the current working Strike List.([{id: 'b/b/v/f'}, {id: 'aa/f/h'}]) - :param strike (list): The list of strikes to add. - list of object with fields - id (string): Strike path. - :param validate (bool): Validate the strikes in the given list. - :param toList (string): All provided strikes will be added to this list. If not existing it will be created + Reserves the specified number of resources of given type. + :param group (number): + :param count (number): + :param resourceType (string): + :param slotId (number): """ - return self._wrapper._post('/strikeList/operations/add', **{'strike': strike, 'validate': validate, 'toList': toList}) + return self._wrapper.__post('/topology/operations/reserveResources', **{'group': group, 'count': count, 'resourceType': resourceType, 'slotId': slotId}) - ### Adds a note to given resource. + ### Runs a Test. @staticmethod - def _topology_operations_addResourceNote(self, resourceId, resourceType): + def _topology_operations_run(self, modelname, group, allowMalware=False): """ - Adds a note to given resource. - :param resourceId (string): Resource Id. - :param resourceType (string): Resource type. + Runs a Test. + :param modelname (string): Test Name to run + :param group (number): Group to run + :param allowMalware (bool): Enable this option to allow malware in test. """ - return self._wrapper._post('/topology/operations/addResourceNote', **{'resourceId': resourceId, 'resourceType': resourceType}) + return self._wrapper.__post('/topology/operations/run', **{'modelname': modelname, 'group': group, 'allowMalware': allowMalware}) - ### Saves the current working Test Model under specified name. + ### Sets the card fanout of a board @staticmethod - def _evasionProfile_operations_saveAs(self, name, force): + def _topology_operations_setCardFanout(self, board, fanid): """ - Saves the current working Test Model under specified name. - :param name (string): The new name given for the current working Evasion Profile - :param force (bool): Force to save the working Evasion Profile using a new name. + Sets the card fanout of a board + :param board (number): Slot ID. + :param fanid (number): The fan type represented by an integer id. + Get card specific fanout modes by calling 'topology.getFanoutModes()'. + For CloudStorm: 0(100G), 1(40G), 2(25G), 3(10G), 4(50G). + For PerfectStorm 40G: 0(40G), 1(10G). + For PerfectStorm 100G: 0(100G), 1(40G), 2(10G) """ - return self._wrapper._post('/evasionProfile/operations/saveAs', **{'name': name, 'force': force}) + return self._wrapper.__post('/topology/operations/setCardFanout', **{'board': board, 'fanid': fanid}) - ### Saves the working Test Model using the current name. No need to configure. The current name is used. + ### Sets the card mode of a board. @staticmethod - def _evasionProfile_operations_save(self, name=None, force=True): + def _topology_operations_setCardMode(self, board, mode): """ - Saves the working Test Model using the current name. No need to configure. The current name is used. - :param name (string): This argument should be empty for saving the profile using it's actual name. - :param force (bool): Force to save the working profile with the same name. + Sets the card mode of a board. + :param board (number): Slot ID. + :param mode (number): The new mode: 10(BPS-L23), 7(BPS L4-7), 3(IxLoad), + 11(BPS QT L2-3), 12(BPS QT L4-7) """ - return self._wrapper._post('/evasionProfile/operations/save', **{'name': name, 'force': force}) + return self._wrapper.__post('/topology/operations/setCardMode', **{'board': board, 'mode': mode}) - ### Stops the test run. + ### Sets the card speed of a board @staticmethod - def _testmodel_operations_stopRun(self, runid): + def _topology_operations_setCardSpeed(self, board, speed): """ - Stops the test run. - :param runid (number): Test RUN ID + Sets the card speed of a board + :param board (number): Slot ID. + :param speed (number): The new speed.(the int value for 1G is 1000, 10G(10000), 40G(40000)) """ - return self._wrapper._post('/testmodel/operations/stopRun', **{'runid': runid}) + return self._wrapper.__post('/topology/operations/setCardSpeed', **{'board': board, 'speed': speed}) - ### Stops the test run. + ### Enables/Disables the performance acceleration for a BPS VE blade. @staticmethod - def _topology_operations_stopRun(self, runid): + def _topology_operations_setPerfAcc(self, board, perfacc): """ - Stops the test run. - :param runid (number): Test RUN ID + Enables/Disables the performance acceleration for a BPS VE blade. + :param board (number): Slot ID. + :param perfacc (bool): Boolean value: 'True' to enable the performance Acceleration and 'False' otherwise. """ - return self._wrapper._post('/topology/operations/stopRun', **{'runid': runid}) + return self._wrapper.__post('/topology/operations/setPerfAcc', **{'board': board, 'perfacc': perfacc}) - ### Deletes a given Super Flow from the database. + ### Switch port fan-out mode. @staticmethod - def _superflow_operations_delete(self, name): + def _topology_operations_setPortFanoutMode(self, board, port, mode): """ - Deletes a given Super Flow from the database. - :param name (string): The name of the Super Flow. + Switch port fan-out mode. + :param board (number): + :param port (string): + :param mode (string): """ - return self._wrapper._post('/superflow/operations/delete', **{'name': name}) + return self._wrapper.__post('/topology/operations/setPortFanoutMode', **{'board': board, 'port': port, 'mode': mode}) - ### Saves the current working Application Profiles and gives it a new name. + ### null @staticmethod - def _appProfile_operations_saveAs(self, name, force): + def _topology_operations_setPortSettings(self, linkState, autoNegotiation, precoder, slotId, portId): """ - Saves the current working Application Profiles and gives it a new name. - :param name (string): The new name given for the current working Application Profile - :param force (bool): Force to save the working Application Profile using the given name. + :param linkState (string): + :param autoNegotiation (bool): + :param precoder (bool): + :param slotId (number): + :param portId (string): """ - return self._wrapper._post('/appProfile/operations/saveAs', **{'name': name, 'force': force}) + return self._wrapper.__post('/topology/operations/setPortSettings', **{'linkState': linkState, 'autoNegotiation': autoNegotiation, 'precoder': precoder, 'slotId': slotId, 'portId': portId}) - ### Saves the current working application profile using the current name. No need to use any parameter. + ### Reboots the metwork processors on the given card card. Only available for APS cards. @staticmethod - def _appProfile_operations_save(self, name=None, force=True): + def _topology_operations_softReboot(self, board, cnId): """ - Saves the current working application profile using the current name. No need to use any parameter. - :param name (string): The name of the template. No need to configure. The current name is used. - :param force (bool): Force to save the working Application Profile with the same name. No need to configure. The default is used. + Reboots the metwork processors on the given card card. Only available for APS cards. + :param board (number): + :param cnId (string): """ - return self._wrapper._post('/appProfile/operations/save', **{'name': name, 'force': force}) + return self._wrapper.__post('/topology/operations/softReboot', **{'board': board, 'cnId': cnId}) - ### null + ### Stops the test run. @staticmethod - def _strikeList_operations_search(self, searchString='', limit=10, sort='name', sortorder='ascending'): + def _topology_operations_stopRun(self, runid): """ - :param searchString (string): Search strike list name matching the string given. - :param limit (number): The limit of rows to return - :param sort (string): Parameter to sort by. Default is by name. - :param sortorder (string): The sort order (ascending/descending). Default is ascending. + Stops the test run. + :param runid (number): Test RUN ID """ - return self._wrapper._post('/strikeList/operations/search', **{'searchString': searchString, 'limit': limit, 'sort': sort, 'sortorder': sortorder}) + return self._wrapper.__post('/topology/operations/stopRun', **{'runid': runid}) - ### Exports a port capture from a test run.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. + ### null @staticmethod - def _topology_operations_exportCapture(self, filepath, args): + def _topology_operations_unreserve(self, unreservation): """ - Exports a port capture from a test run.This operation can not be executed from the RESTApi Browser, it needs to be executed from a remote system through a REST call. - :param filepath (string): The local path where to save the exported object. - :param args (object): Export filters. The Possible values for: 'dir'(direction) are 'tx','rx','both';for 'sizetype' and 'starttype'(units for size and start) are 'megabytes' or 'frames' - object of object with fields - port (string): Port label - slot (number): Slot number - dir (string): Capturing direction (rx, tx, both) - size (number): The size of the capture to be exported. - start (number): Start at point. - sizetype (string): The size unit: megabytes or frames. - starttype (string): The start unit: megabytes or frames. + :param unreservation (list): + list of object with fields + slot (number): + port (number): """ - return self._wrapper._export('/topology/operations/exportCapture', **{'filepath': filepath, 'args': args}) + return self._wrapper.__post('/topology/operations/unreserve', **{'unreservation': unreservation}) - ### Sets a User Preference. - @staticmethod - def _administration_userSettings_operations_changeUserSetting(self, name, value): - """ - Sets a User Preference. - :param name (string): The setting name. - :param value (string): The new value for setting. - """ - return self._wrapper._post('/administration/userSettings/operations/changeUserSetting', **{'name': name, 'value': value}) + ### login into the bps system + def login(self, **kwargs): + self.__connect() + loginData = {'username': self.user, 'password': self.password, 'sessionId': self.sessionId} + loginData.update(kwargs) + r = self.session.post(url='https://' + self.host + '/bps/api/v2/core/auth/login', data=json.dumps(loginData), headers={'content-type': 'application/json'}, verify=False) + if(r.status_code == 200): + self.serverVersions = self.__json_load(r) + apiServerVersion = 'N/A' + if self.serverVersions != None and 'apiServer' in self.serverVersions: + apiServerVersion = self.serverVersions['apiServer'] + if self.checkVersion: + if not apiServerVersion.startswith(self.clientVersion): + if self.serverVersions and apiServerVersion > self.clientVersion: + self.logout() + #self.printVersions() + raise Exception('Keysight Python REST-API Wrapper version is older than the BPS server version.\nThis is not a supported combination.\nPlease use the updated version of the wrapper provided with BPS system.') + if not self.serverVersions or apiServerVersion < self.clientVersion: + print("Warning: Keysight Python REST-API Wrapper version is newer than the BPS server version.\nSome of the functionalities included in the Python wrapper might not be supported by the REST API.") + #print('Login successful.\nWelcome %s. \nYour session id is %s' % (self.user, self.sessionId)) + else: + raise Exception('Login failed.\ncode:%s, content:%s' % (r.status_code, r.content)) + return self.serverVersions + + ### logout from the bps system + def logout(self): + self.serverVersions = None + r = self.session.post(url='https://' + self.host + '/bps/api/v2/core/auth/logout', data=json.dumps({'username': self.user, 'password': self.password, 'sessionId': self.sessionId}), headers={'content-type': 'application/json'}, verify=False) + if(r.status_code == 200): + #print('Logout successful. \nBye %s.' % self.user) + self.__disconnect() + else: + raise Exception('Logout failed: (%s, %s)' % (r.status_code, r.content)) + + def printVersions(self): + apiServerVersion = 'N/A' + if self.serverVersions != None and 'apiServer' in self.serverVersions: + apiServerVersion = self.serverVersions['apiServer'] + print('Client version: %s \nServer version: %s' % (self.clientVersion, apiServerVersion)) class DataModelMeta(type): _dataModel = { - 'strikeList': { - 'strikes': [{ - 'severity': { - }, - 'year': { - }, - 'variants': { - }, - 'reference': [{ - 'label': { + 'administration': { + 'atiLicensing': { + 'license': [{ + 'boardserialno': { }, - 'type': { + 'expires': { }, - 'value': { + 'issued': { + }, + 'issuedBy': { + }, + 'maintenance': { + 'maintenanceExpiration': { + } + }, + 'name': { + }, + 'serialno': { + }, + 'slotNo': { } }], - 'path': { - }, - 'protocol': { + 'operations': { + 'importAtiLicense': [{ + }] + } + }, + 'operations': { + 'exportAllTests': [{ + }], + 'importAllTests': [{ + }], + 'logs': [{ + }] + }, + 'sessions': [{ + 'age': { }, - 'fileSize': { + 'dataContext': { }, - 'fileExtension': { + 'inactivity': { }, - 'name': { + 'inactivityTimeout': { }, - 'id': { + 'note': { }, - 'category': { + 'operations': { + 'close': [{ + }], + 'list': [{ + 'age': { + }, + 'dataContext': { + }, + 'inactivity': { + }, + 'inactivityTimeout': { + }, + 'note': { + }, + 'session': { + }, + 'type': { + }, + 'user': { + } + }] }, - 'keyword': [{ - 'name': { - } - }], - 'direction': { + 'session': { }, - 'strike': { + 'type': { }, - 'strikeset': { + 'user': { } }], - 'author': { - }, - 'description': { - }, - 'label': { - }, - 'queryString': { - }, - 'SecurityBehavior': { - }, - 'StrikeOptions': { - }, - 'createdOn': { - }, - 'revision': { - }, - 'lockedBy': { - }, - 'createdBy': { - }, - 'name': { - }, - 'clazz': { - }, - 'numStrikes': { - }, - 'operations': { - 'exportStrikeList': [{ - }], - 'load': [{ - }], - 'new': [{ - }], - 'delete': [{ - }], - 'saveAs': [{ - }], - 'save': [{ - }], - 'remove': [{ - }], - 'importStrikeList': [{ - }], - 'add': [{ - }], - 'search': [{ - }] - } - }, - 'administration': { 'systemSettings': { - 'strikepackUpdate': { - 'password': { - }, - 'interval': { - }, - 'check': { - }, - 'username': { - } - }, 'author': { }, - 'description': { + 'clazz': { }, - 'label': { + 'createdBy': { + }, + 'createdOn': { + }, + 'description': { }, 'guardrailSettings': { 'enableStrictMode': { }, - 'testStop': { - }, - 'testStatusWarning': { - }, 'stopOnLinkdown': { }, 'testStartPrevention': { - } - }, - 'createdOn': { - }, - 'revision': { - }, - 'vacuumSettings': { - 'vacuumWindowHigh': { - }, - 'autoVacuum': { }, - 'vacuumWindowLow': { + 'testStatusWarning': { }, - 'vacuumWindowTZ': { + 'testStop': { } }, + 'label': { + }, 'lockedBy': { }, - 'createdBy': { + 'revision': { }, 'softwareUpdate': { - 'password': { + 'check': { }, 'interval': { }, - 'check': { + 'password': { }, 'username': { } }, - 'clazz': { - } - }, - 'atiLicensing': { - 'license': [{ - 'expires': { + 'strikepackUpdate': { + 'check': { }, - 'issuedBy': { + 'interval': { }, - 'name': { + 'password': { }, - 'boardserialno': { + 'username': { + } + }, + 'vacuumSettings': { + 'autoVacuum': { }, - 'issued': { + 'vacuumWindowHigh': { }, - 'slotNo': { + 'vacuumWindowLow': { }, - 'maintenance': { - 'maintenanceExpiration': { - } - }, - 'serialno': { + 'vacuumWindowTZ': { } - }], - 'operations': { - 'importAtiLicense': [{ - }] } }, 'userSettings': [{ - 'name': { - }, 'content': { }, + 'name': { + }, 'operations': { - 'setAutoReserve': [{ - }], 'changeUserSetting': [{ + }], + 'setAutoReserve': [{ }] } - }], - 'sessions': [{ - 'inactivityTimeout': { + }] + }, + 'appProfile': { + 'author': { + }, + 'clazz': { + }, + 'createdBy': { + }, + 'createdOn': { + }, + 'description': { + }, + 'label': { + }, + 'lockedBy': { + }, + 'name': { + }, + 'operations': { + 'add': [{ + }], + 'delete': [{ + }], + 'exportAppProfile': [{ + }], + 'importAppProfile': [{ + }], + 'load': [{ + }], + 'new': [{ + }], + 'recompute': [{ + }], + 'remove': [{ + }], + 'save': [{ + }], + 'saveAs': [{ + }], + 'search': [{ + }] + }, + 'revision': { + }, + 'superflow': [{ + 'author': { }, - 'session': { + 'clazz': { }, - 'inactivity': { + 'constraints': { }, - 'type': { + 'createdBy': { }, - 'user': { + 'createdOn': { }, - 'age': { + 'description': { }, - 'operations': { - 'list': [{ - 'inactivityTimeout': { - }, - 'session': { - }, - 'inactivity': { - }, - 'type': { - }, - 'user': { - }, - 'age': { - } - }], - 'close': [{ - }] - } - }], - 'operations': { - 'exportAllTests': [{ - }], - 'importAllTests': [{ - }], - 'logs': [{ - }] - } - }, - 'statistics': { - 'component': [{ - 'statNames': [{ - 'name': { - }, + 'estimate_bytes': { + }, + 'estimate_flows': { + }, + 'generated': { + }, + 'label': { + }, + 'lockedBy': { + }, + 'name': { + }, + 'params': { + }, + 'percentBandwidth': { + }, + 'percentFlows': { + }, + 'revision': { + }, + 'seed': { + }, + 'settings': [{ 'description': { }, - 'realtimeGroup': { - }, 'label': { }, + 'name': { + }, + 'realtimeGroup': { + }, 'units': { } }], - 'label': { + 'weight': { } - }] + }], + 'weightType': { + } }, 'capture': { - 'pcapFilesize': { - }, - 'avgPacketSize': { - }, 'author': { }, - 'udpPackets': { + 'avgFlowLength': { }, - 'description': { + 'avgPacketSize': { }, - 'label': { + 'clazz': { }, - 'createdOn': { + 'createdBy': { }, - 'name': { + 'createdOn': { }, - 'revision': { + 'description': { }, 'duration': { }, @@ -1795,4507 +1812,4563 @@ class DataModelMeta(type): }, 'ipv6Packets': { }, - 'lockedBy': { - }, - 'tcpPackets': { - }, - 'createdBy': { - }, - 'avgFlowLength': { + 'label': { }, - 'totalPackets': { + 'lockedBy': { }, - 'clazz': { + 'name': { }, 'operations': { - 'search': [{ - }], 'importCapture': [{ + }], + 'search': [{ }] - } - }, - 'evasionProfile': { - 'lockedBy': { }, - 'createdBy': { - }, - 'author': { + 'pcapFilesize': { }, - 'name': { + 'revision': { }, - 'description': { + 'tcpPackets': { }, - 'label': { + 'totalPackets': { }, + 'udpPackets': { + } + }, + 'evasionProfile': { 'StrikeOptions': { - 'TCP': { - 'DuplicateBadSyn': { - }, - 'DuplicateBadChecksum': { + 'COMMAND': { + 'Malicious': { }, - 'SneakAckHandshake': { + 'PadCommandWhitespace': { }, - 'AcknowledgeAllSegments': { + 'PadPathSlashes': { + } + }, + 'DCERPC': { + 'MaxFragmentSize': { }, - 'DuplicateBadSeq': { + 'MultiContextBind': { }, - 'SkipHandshake': { + 'MultiContextBindHead': { }, - 'SourcePort': { + 'MultiContextBindTail': { }, - 'MaxSegmentSize': { + 'UseObjectID': { + } + }, + 'EMAIL': { + 'EnvelopeType': { }, - 'DestinationPort': { + 'From': { }, - 'DuplicateBadReset': { + 'ShuffleHeaders': { }, - 'DestinationPortType': { + 'To': { + } + }, + 'Ethernet': { + 'MTU': { + } + }, + 'FILETRANSFER': { + 'CompressionMethod': { }, - 'DuplicateLastSegment': { + 'FtpTransferMethod': { }, - 'DuplicateNullFlags': { + 'Imap4Encoding': { }, - 'SegmentOrder': { + 'Pop3Encoding': { }, - 'SourcePortType': { - } - }, - 'JAVASCRIPT': { - 'Obfuscate': { + 'SmtpEncoding': { }, - 'Encoding': { + 'TransportProtocol': { } }, 'FTP': { - 'PadCommandWhitespace': { - }, - 'Username': { + 'AuthenticationType': { }, 'FTPEvasionLevel': { }, - 'AuthenticationType': { + 'PadCommandWhitespace': { }, 'Password': { + }, + 'Username': { } }, - 'IPv6': { - 'TC': { - } - }, - 'DCERPC': { - 'MultiContextBindHead': { + 'Global': { + 'AllowDeprecated': { }, - 'MultiContextBind': { + 'BehaviorOnTimeout': { }, - 'MultiContextBindTail': { + 'CachePoisoning': { }, - 'MaxFragmentSize': { + 'FalsePositives': { }, - 'UseObjectID': { + 'IOTimeout': { + }, + 'MaxTimeoutPerStrike': { } }, - 'RTF': { - 'FictitiousCW': { + 'HTML': { + 'HTMLUnicodeEncoding': { }, - 'ASCII_Escaping': { + 'HTMLUnicodeUTF7EncodingMode': { }, - 'MixedCase': { + 'HTMLUnicodeUTF8EncodingMode': { }, - 'WhiteSpace': { + 'HTMLUnicodeUTF8EncodingSize': { } }, - 'POP3': { - 'PadCommandWhitespace': { + 'HTTP': { + 'AuthenticationType': { }, - 'Username': { + 'Base64EncodePOSTData': { }, - 'POP3UseProxyMode': { + 'ClientChunkedTransfer': { }, - 'AuthenticationType': { + 'ClientChunkedTransferSize': { }, - 'Password': { - } - }, - 'Variations': { - 'Subset': { + 'DirectoryFakeRelative': { }, - 'Shuffle': { + 'DirectorySelfReference': { }, - 'VariantTesting': { + 'EncodeDoubleNibbleHex': { }, - 'Limit': { + 'EncodeDoublePercentHex': { }, - 'TestType': { - } - }, - 'OLE': { - 'RefragmentData': { - } - }, - 'HTML': { - 'HTMLUnicodeUTF8EncodingMode': { + 'EncodeFirstNibbleHex': { }, - 'HTMLUnicodeUTF8EncodingSize': { + 'EncodeHexAll': { }, - 'HTMLUnicodeEncoding': { + 'EncodeHexRandom': { }, - 'HTMLUnicodeUTF7EncodingMode': { - } - }, - 'EMAIL': { - 'EnvelopeType': { + 'EncodeSecondNibbleHex': { }, - 'ShuffleHeaders': { + 'EncodeUnicodeAll': { }, - 'To': { + 'EncodeUnicodeBareByte': { }, - 'From': { - } - }, - 'Global': { - 'FalsePositives': { + 'EncodeUnicodeInvalid': { }, - 'IOTimeout': { + 'EncodeUnicodePercentU': { }, - 'AllowDeprecated': { + 'EncodeUnicodeRandom': { }, - 'BehaviorOnTimeout': { + 'EndRequestFakeHTTPHeader': { }, - 'MaxTimeoutPerStrike': { + 'ForwardToBackSlashes': { }, - 'CachePoisoning': { - } - }, - 'MS_Exchange_Ports': { - 'SystemAttendant': { - } - }, - 'PDF': { - 'HexEncodeNames': { + 'GetParameterRandomPrepend': { }, - 'ShortFilterNames': { + 'HTTPServerProfile': { }, - 'RandomizeDictKeyOrder': { + 'HTTPTransportMethods': { }, - 'Version': { + 'IgnoreHeaders': { }, - 'PreHeaderData': { - } - }, - 'SNMP': { - 'CommunityString': { - } - }, - 'COMMAND': { - 'PadCommandWhitespace': { + 'MethodRandomInvalid': { }, - 'PadPathSlashes': { + 'MethodRandomizeCase': { }, - 'Malicious': { - } - }, - 'ICMP': { - 'DoEcho': { - } - }, - 'UDP': { - 'DestinationPortType': { + 'MethodURINull': { }, - 'SourcePort': { + 'MethodURISpaces': { }, - 'SourcePortType': { + 'MethodURITabs': { }, - 'DestinationPort': { - } - }, - 'IP': { - 'ReadWriteWindowSize': { + 'PadHTTPPost': { }, - 'RFC3128FakePort': { + 'Password': { }, - 'FragEvasion': { + 'PostParameterRandomPrepend': { }, - 'RFC3128': { + 'RequestFullURL': { }, - 'TTL': { + 'RequireLeadingSlash': { }, - 'MaxReadSize': { + 'ServerChunkedTransfer': { }, - 'RFC3514': { + 'ServerChunkedTransferSize': { }, - 'FragPolicy': { + 'ServerCompression': { }, - 'MaxFragSize': { + 'ShuffleHeaders': { }, - 'FragOrder': { + 'URIAppendAltSpaces': { }, - 'TOS': { + 'URIAppendAltSpacesSize': { }, - 'IPEvasionsOnBothSides': { + 'URIPrependAltSpaces': { + }, + 'URIPrependAltSpacesSize': { + }, + 'URIRandomizeCase': { }, - 'MaxWriteSize': { - } - }, - 'SMB': { 'Username': { }, - 'RandomPipeOffset': { + 'VersionRandomInvalid': { }, - 'MaxReadSize': { + 'VersionRandomizeCase': { }, - 'MaxWriteSize': { + 'VersionUse0_9': { }, - 'AuthenticationType': { + 'VirtualHostname': { }, - 'Password': { + 'VirtualHostnameType': { + } + }, + 'ICMP': { + 'DoEcho': { } }, 'IMAP4': { - 'Username': { + 'AuthenticationType': { }, 'IMAPUseProxyMode': { }, - 'AuthenticationType': { - }, 'Password': { + }, + 'Username': { } }, - 'HTTP': { - 'ClientChunkedTransferSize': { + 'IP': { + 'FragEvasion': { }, - 'EncodeUnicodeBareByte': { + 'FragOrder': { }, - 'VirtualHostname': { + 'FragPolicy': { }, - 'EncodeUnicodePercentU': { + 'IPEvasionsOnBothSides': { }, - 'GetParameterRandomPrepend': { + 'MaxFragSize': { }, - 'EncodeSecondNibbleHex': { + 'MaxReadSize': { }, - 'EncodeUnicodeInvalid': { + 'MaxWriteSize': { }, - 'ServerChunkedTransferSize': { + 'RFC3128': { }, - 'VersionRandomizeCase': { + 'RFC3128FakePort': { }, - 'URIRandomizeCase': { + 'RFC3514': { }, - 'AuthenticationType': { + 'ReadWriteWindowSize': { }, - 'ServerCompression': { + 'TOS': { }, - 'VirtualHostnameType': { + 'TTL': { + } + }, + 'IPv6': { + 'TC': { + } + }, + 'JAVASCRIPT': { + 'Encoding': { }, - 'URIPrependAltSpaces': { + 'Obfuscate': { + } + }, + 'MALWARE': { + 'CompressionMethod': { }, - 'URIPrependAltSpacesSize': { + 'FilenameInsertEnvVar': { }, - 'EncodeFirstNibbleHex': { + 'FtpTransferMethod': { }, - 'MethodRandomInvalid': { + 'Imap4Encoding': { }, - 'VersionRandomInvalid': { + 'Pop3Encoding': { }, - 'ServerChunkedTransfer': { + 'SmtpEncoding': { }, - 'EncodeDoublePercentHex': { + 'TransportProtocol': { + } + }, + 'MS_Exchange_Ports': { + 'SystemAttendant': { + } + }, + 'OLE': { + 'RefragmentData': { + } + }, + 'PDF': { + 'HexEncodeNames': { }, - 'URIAppendAltSpacesSize': { + 'PreHeaderData': { }, - 'EncodeHexRandom': { + 'RandomizeDictKeyOrder': { }, - 'DirectorySelfReference': { + 'ShortFilterNames': { }, - 'EndRequestFakeHTTPHeader': { + 'Version': { + } + }, + 'POP3': { + 'AuthenticationType': { }, - 'EncodeUnicodeAll': { + 'POP3UseProxyMode': { }, - 'EncodeUnicodeRandom': { + 'PadCommandWhitespace': { }, - 'Base64EncodePOSTData': { + 'Password': { }, - 'IgnoreHeaders': { + 'Username': { + } + }, + 'RTF': { + 'ASCII_Escaping': { }, - 'RequestFullURL': { + 'FictitiousCW': { }, - 'HTTPTransportMethods': { + 'MixedCase': { }, - 'Password': { + 'WhiteSpace': { + } + }, + 'SELF': { + 'AREA-ID': { }, - 'MethodRandomizeCase': { + 'AS-ID': { }, - 'MethodURISpaces': { + 'AppSimAppProfile': { }, - 'ShuffleHeaders': { + 'AppSimSmartflow': { }, - 'DirectoryFakeRelative': { + 'AppSimSuperflow': { }, - 'URIAppendAltSpaces': { + 'AppSimUseNewTuple': { }, - 'MethodURITabs': { + 'ApplicationPings': { }, - 'RequireLeadingSlash': { + 'DelaySeconds': { }, - 'EncodeDoubleNibbleHex': { + 'EndingFuzzerOffset': { }, - 'ForwardToBackSlashes': { + 'FileTransferExtension': { }, - 'PadHTTPPost': { + 'FileTransferFile': { }, - 'MethodURINull': { + 'FileTransferName': { }, - 'Username': { + 'FileTransferRandCase': { }, - 'VersionUse0_9': { + 'HTMLPadding': { }, - 'EncodeHexAll': { + 'MaximumIterations': { }, - 'PostParameterRandomPrepend': { + 'MaximumRuntime': { }, - 'ClientChunkedTransfer': { + 'Password': { }, - 'HTTPServerProfile': { - } - }, - 'SELF': { - 'ApplicationPings': { + 'ROUTER-ID': { }, - 'TraversalVirtualDirectory': { + 'Repetitions': { }, - 'AppSimUseNewTuple': { + 'ReportCLSIDs': { }, 'StartingFuzzerOffset': { }, - 'URI': { - }, - 'FileTransferRandCase': { - }, - 'UnicodeTraversalWindowsDirectory': { - }, - 'AREA-ID': { + 'TraversalRequestFilename': { }, - 'AppSimAppProfile': { + 'TraversalVirtualDirectory': { }, - 'Repetitions': { + 'TraversalWindowsDirectory': { }, - 'FileTransferExtension': { + 'URI': { }, - 'Password': { + 'UnicodeTraversalVirtualDirectory': { }, - 'AppSimSmartflow': { + 'UnicodeTraversalWindowsDirectory': { }, - 'HTMLPadding': { + 'Username': { + } + }, + 'SHELLCODE': { + 'RandomNops': { + } + }, + 'SIP': { + 'CompactHeaders': { }, - 'MaximumIterations': { + 'EnvelopeType': { }, - 'FileTransferFile': { + 'From': { }, - 'AS-ID': { + 'PadHeadersLineBreak': { }, - 'AppSimSuperflow': { + 'PadHeadersWhitespace': { }, - 'EndingFuzzerOffset': { + 'RandomizeCase': { }, - 'ReportCLSIDs': { + 'ShuffleHeaders': { }, - 'DelaySeconds': { + 'To': { + } + }, + 'SMB': { + 'AuthenticationType': { }, - 'Username': { + 'MaxReadSize': { }, - 'UnicodeTraversalVirtualDirectory': { + 'MaxWriteSize': { }, - 'TraversalWindowsDirectory': { + 'Password': { }, - 'FileTransferName': { + 'RandomPipeOffset': { }, - 'MaximumRuntime': { + 'Username': { + } + }, + 'SMTP': { + 'PadCommandWhitespace': { }, - 'ROUTER-ID': { + 'SMTPUseProxyMode': { }, - 'TraversalRequestFilename': { + 'ShuffleHeaders': { } }, - 'SHELLCODE': { - 'RandomNops': { + 'SNMP': { + 'CommunityString': { } }, 'SSL': { - 'ClientCertificateFile': { + 'Cipher': { }, - 'EnableOnAllTCP': { + 'ClientCertificateFile': { }, - 'SecurityProtocol': { + 'ClientKeyFile': { }, 'DestPortOverride': { }, - 'ServerCertificateFile': { - }, - 'ServerKeyFile': { + 'DisableDefaultStrikeSSL': { }, 'EnableOnAllHTTP': { }, - 'ClientKeyFile': { + 'EnableOnAllTCP': { }, - 'Cipher': { + 'SecurityProtocol': { }, - 'DisableDefaultStrikeSSL': { + 'ServerCertificateFile': { + }, + 'ServerKeyFile': { } }, 'SUNRPC': { + 'NullCredentialPadding': { + }, 'OneFragmentMultipleTCPSegmentsCount': { }, 'RPCFragmentTCPSegmentDistribution': { }, 'TCPFragmentSize': { - }, - 'NullCredentialPadding': { } }, - 'FILETRANSFER': { - 'SmtpEncoding': { + 'TCP': { + 'AcknowledgeAllSegments': { }, - 'CompressionMethod': { + 'DestinationPort': { }, - 'FtpTransferMethod': { + 'DestinationPortType': { }, - 'TransportProtocol': { + 'DuplicateBadChecksum': { }, - 'Imap4Encoding': { + 'DuplicateBadReset': { }, - 'Pop3Encoding': { - } - }, - 'UNIX': { - 'PadCommandWhitespace': { + 'DuplicateBadSeq': { }, - 'PadPathSlashes': { - } - }, - 'SMTP': { - 'SMTPUseProxyMode': { + 'DuplicateBadSyn': { }, - 'PadCommandWhitespace': { + 'DuplicateLastSegment': { }, - 'ShuffleHeaders': { - } - }, - 'Ethernet': { - 'MTU': { - } - }, - 'MALWARE': { - 'FilenameInsertEnvVar': { + 'DuplicateNullFlags': { }, - 'SmtpEncoding': { + 'MaxSegmentSize': { }, - 'CompressionMethod': { + 'SegmentOrder': { }, - 'FtpTransferMethod': { + 'SkipHandshake': { }, - 'TransportProtocol': { + 'SneakAckHandshake': { }, - 'Imap4Encoding': { + 'SourcePort': { }, - 'Pop3Encoding': { + 'SourcePortType': { } }, - 'SIP': { - 'EnvelopeType': { + 'UDP': { + 'DestinationPort': { }, - 'CompactHeaders': { + 'DestinationPortType': { }, - 'PadHeadersWhitespace': { + 'SourcePort': { }, - 'RandomizeCase': { + 'SourcePortType': { + } + }, + 'UNIX': { + 'PadCommandWhitespace': { }, - 'ShuffleHeaders': { + 'PadPathSlashes': { + } + }, + 'Variations': { + 'Limit': { }, - 'To': { + 'Shuffle': { }, - 'From': { + 'Subset': { }, - 'PadHeadersLineBreak': { + 'TestType': { + }, + 'VariantTesting': { } }, 'operations': { 'getStrikeOptions': [{ - 'name': { - }, 'description': { }, - 'realtimeGroup': { - }, 'label': { }, + 'name': { + }, + 'realtimeGroup': { + }, 'units': { } }] } }, - 'createdOn': { + 'author': { }, 'clazz': { }, - 'revision': { + 'createdBy': { }, - 'operations': { - 'search': [{ - }], - 'load': [{ - }], - 'new': [{ - }], + 'createdOn': { + }, + 'description': { + }, + 'label': { + }, + 'lockedBy': { + }, + 'name': { + }, + 'operations': { 'delete': [{ }], - 'saveAs': [{ + 'load': [{ + }], + 'new': [{ }], 'save': [{ + }], + 'saveAs': [{ + }], + 'search': [{ }] + }, + 'revision': { } }, 'loadProfile': { + 'author': { + }, + 'clazz': { + }, + 'createdBy': { + }, + 'createdOn': { + }, + 'description': { + }, + 'label': { + }, + 'lockedBy': { + }, + 'name': { + }, + 'operations': { + 'createNewCustom': [{ + }], + 'delete': [{ + }], + 'load': [{ + }], + 'save': [{ + }], + 'saveAs': [{ + }] + }, + 'phase': [{ + 'duration': { + }, + 'phaseId': { + }, + 'rampDist.steadyBehavior': { + }, + 'rateDist.min': { + }, + 'rateDist.scope': { + }, + 'rateDist.type': { + }, + 'rateDist.unit': { + }, + 'sessions.max': { + }, + 'sessions.maxPerSecond': { + }, + 'type': { + } + }], 'presets': [{ + 'author': { + }, + 'clazz': { + }, + 'createdBy': { + }, + 'createdOn': { + }, + 'description': { + }, + 'label': { + }, + 'lockedBy': { + }, + 'name': { + }, 'phase': [{ 'duration': { }, 'phaseId': { }, - 'type': { + 'rampDist.steadyBehavior': { }, - 'sessions.max': { + 'rateDist.min': { }, - 'sessions.maxPerSecond': { + 'rateDist.scope': { }, - 'rateDist.unit': { + 'rateDist.type': { }, - 'rateDist.min': { + 'rateDist.unit': { }, - 'rampDist.steadyBehavior': { + 'sessions.max': { }, - 'rateDist.type': { + 'sessions.maxPerSecond': { }, - 'rateDist.scope': { + 'type': { } }], - 'author': { - }, 'regen': { }, - 'description': { - }, - 'label': { - }, - 'createdOn': { + 'revision': { }, 'summaryData': { - 'deviceType': { - }, - 'unknownUdpAppNames': { + 'activeFlowsSum': { }, - 'unknownSslSuperflowName': { + 'appStat': [{ + }], + 'basisOfRegeneration': { }, - 'magicNumber': { + 'deviceType': { }, 'downloadBytesSum': { }, - 'version': { + 'dynamicAppNames': { }, - 'phaseDuration': { + 'dynamicSuperflowName': { }, - 'unknownTcpAppNames': { + 'endTime': { }, - 'uploadBytesSum': { + 'magicNumber': { }, - 'summaryName': { + 'miniSlotDuration': { }, - 'basisOfRegeneration': { + 'phaseDuration': { }, - 'activeFlowsSum': { + 'startTime': { }, - 'miniSlotDuration': { + 'summaryName': { }, 'unknownSslAppNames': { }, - 'dynamicSuperflowName': { + 'unknownSslSuperflowName': { }, - 'appStat': [{ - }], - 'startTime': { + 'unknownTcpAppNames': { }, - 'endTime': { + 'unknownUdpAppNames': { }, - 'dynamicAppNames': { + 'uploadBytesSum': { + }, + 'version': { } - }, - 'revision': { - }, - 'lockedBy': { - }, - 'createdBy': { - }, - 'name': { - }, - 'clazz': { } }], - 'phase': [{ - 'duration': { - }, - 'phaseId': { - }, - 'type': { - }, - 'sessions.max': { - }, - 'sessions.maxPerSecond': { - }, - 'rateDist.unit': { - }, - 'rateDist.min': { - }, - 'rampDist.steadyBehavior': { - }, - 'rateDist.type': { - }, - 'rateDist.scope': { - } - }], - 'author': { - }, 'regen': { }, - 'description': { - }, - 'label': { - }, - 'createdOn': { + 'revision': { }, 'summaryData': { - 'deviceType': { - }, - 'unknownUdpAppNames': { + 'activeFlowsSum': { }, - 'unknownSslSuperflowName': { + 'appStat': [{ + }], + 'basisOfRegeneration': { }, - 'magicNumber': { + 'deviceType': { }, 'downloadBytesSum': { }, - 'version': { + 'dynamicAppNames': { }, - 'phaseDuration': { + 'dynamicSuperflowName': { }, - 'unknownTcpAppNames': { + 'endTime': { }, - 'uploadBytesSum': { + 'magicNumber': { }, - 'summaryName': { + 'miniSlotDuration': { }, - 'basisOfRegeneration': { + 'phaseDuration': { }, - 'activeFlowsSum': { + 'startTime': { }, - 'miniSlotDuration': { + 'summaryName': { }, 'unknownSslAppNames': { }, - 'dynamicSuperflowName': { + 'unknownSslSuperflowName': { }, - 'appStat': [{ - }], - 'startTime': { + 'unknownTcpAppNames': { }, - 'endTime': { + 'unknownUdpAppNames': { }, - 'dynamicAppNames': { + 'uploadBytesSum': { + }, + 'version': { } + } + }, + 'network': { + 'author': { }, - 'revision': { - }, - 'lockedBy': { + 'clazz': { }, 'createdBy': { }, - 'name': { + 'createdOn': { }, - 'clazz': { + 'description': { }, - 'operations': { - 'createNewCustom': [{ - }], - 'delete': [{ - }], - 'save': [{ - }], - 'saveAs': [{ - }], - 'load': [{ - }] - } - }, - 'topology': { - 'ixoslicensed': { + 'interfaceCount': { }, - 'ixos': { + 'label': { }, - 'chain': { - 'name': { - }, - 'remotes': { - } + 'lockedBy': { }, - 'cnState': [{ - 'cnSlotNo': { - }, - 'licensed': { - }, - 'cnName': { - }, - 'firmwareUpgrade': { - }, - 'cnSerial': { - }, - 'cnId': { - }, - 'state': { - }, - 'marketingName': { - } - }], - 'runningTest': [{ - 'phase': { - }, - 'reservedEngines': [{ - }], - 'timeRemaining': { - }, - 'runtime': { - }, - 'label': { - }, - 'completed': { - }, - 'initProgress': { - }, - 'result': { - }, - 'port': [{ - }], - 'capturing': { - }, - 'progress': { - }, - 'testid': { - 'host': { + 'modelDefinition': { + }, + 'name': { + }, + 'networkModel': { + 'dhcpv6c_cfg': [{ + 'dhcp6c_duid_type': { }, - 'name': { + 'dhcp6c_ia_t1': { }, - 'iteration': { - } - }, - 'state': { - }, - 'user': { - }, - 'currentTest': { - } - }], - 'model': { - }, - 'slot': [{ - 'port': [{ - 'note': { + 'dhcp6c_ia_t2': { }, - 'auto': { + 'dhcp6c_ia_type': { }, - 'link': { + 'dhcp6c_initial_srate': { }, - 'media': { + 'dhcp6c_max_outstanding': { }, - 'speed': { + 'dhcp6c_renew_timer': { }, - 'number': { + 'dhcp6c_req_opts_config': { }, - 'ifname': { + 'dhcp6c_tout_and_retr_config': { }, - 'capturing': { + 'id': { + } + }], + 'dhcpv6c_req_opts_cfg': [{ + 'dhcpv6v_req_dns_list': { }, - 'model': { + 'dhcpv6v_req_dns_resolvers': { + }, + 'dhcpv6v_req_preference': { + }, + 'dhcpv6v_req_server_id': { }, 'id': { + } + }], + 'dhcpv6c_tout_and_retr_cfg': [{ + 'dhcp6c_inforeq_attempts': { }, - 'state': { + 'dhcp6c_initial_inforeq_tout': { }, - 'group': { + 'dhcp6c_initial_rebind_tout': { }, - 'owner': { + 'dhcp6c_initial_release_tout': { }, - 'portGroup': { + 'dhcp6c_initial_renew_tout': { }, - 'precoder': { + 'dhcp6c_initial_req_tout': { }, - 'capture': { + 'dhcp6c_initial_sol_tout': { }, - 'active': { + 'dhcp6c_max_inforeq_tout': { }, - 'mtu': { + 'dhcp6c_max_rebind_tout': { }, - 'currentMode': { + 'dhcp6c_max_renew_tout': { }, - 'exportProgress': { + 'dhcp6c_max_req_tout': { }, - 'ifmacaddr': { + 'dhcp6c_max_sol_tout': { }, - 'reservedBy': { + 'dhcp6c_release_attempts': { }, - 'fullduplex': { + 'dhcp6c_req_attempts': { }, - 'possibleModes': { + 'dhcp6c_sol_attempts': { }, - 'ignorepause': { + 'id': { } }], - 'np': [{ - 'note': { + 'ds_lite_aftr': [{ + 'b4_count': { }, - 'cnId': { + 'b4_ip_address': { }, - 'reservedBy': { + 'count': { }, - 'name': { + 'default_container': { + }, + 'gateway_ip_address': { }, 'id': { }, - 'state': { + 'ip_address': { }, - 'group': { + 'ipv6_addr_alloc_mode': { }, - 'resourceType': { + 'prefix_length': { } }], - 'mode': { - }, - 'fpga': [{ - 'note': { + 'ds_lite_b4': [{ + 'aftr_addr': { }, - 'reservedBy': { + 'aftr_count': { }, - 'name': { + 'count': { + }, + 'default_container': { + }, + 'gateway_ip_address': { + }, + 'host_ip_addr_alloc_mode': { + }, + 'host_ip_base_addr': { + }, + 'hosts_ip_increment': { }, 'id': { }, - 'state': { + 'ip_address': { }, - 'group': { + 'ipv6_addr_alloc_mode': { }, - 'resourceType': { + 'prefix_length': { } }], - 'firmwareUpgrade': { - }, - 'remoteInfo': { - 'host': { + 'enodeb': [{ + 'default_container': { }, - 'slotId': { + 'dns': { }, - 'state': { - } - }, - 'interfaceCount': { - }, - 'model': { - }, - 'state': { - }, - 'id': { - }, - 'serialNumber': { - } - }], - 'serialNumber': { - }, - 'resourceOverview': { - 'resourceOverviewList': [{ - 'l23Count': { + 'enodebs': [{ + 'enodebCount': { + }, + 'ip_address': { + }, + 'mme_ip_address': { + } + }], + 'gateway_ip_address': { }, - 'l47Count': { + 'id': { }, - 'portCount': { + 'netmask': { }, - 'userAndGroup': { + 'plmn': { + }, + 'psn': { + }, + 'psn_netmask': { + }, + 'sctp_over_udp': { + }, + 'sctp_sport': { } - }] - }, - 'operations': { - 'getFanoutModes': [{ - 'cardModel': { + }], + 'enodeb6': [{ + 'default_container': { }, - 'fanout': [{ - 'name': { + 'dns': { + }, + 'enodebs': [{ + 'enodebCount': { }, - 'fanoutId': { - } - }] - }], - 'softReboot': [{ - }], - 'reserveResource': [{ - }], - 'unreserve': [{ - }], - 'releaseAllCnResources': [{ - }], - 'addPortNote': [{ - }], - 'run': [{ - }], - 'setPortFanoutMode': [{ - }], - 'reserveResources': [{ - }], - 'setPortSettings': [{ - }], - 'setCardMode': [{ - }], - 'setCardSpeed': [{ - }], - 'setCardFanout': [{ - }], - 'setPerfAcc': [{ - }], - 'reboot': [{ - }], - 'releaseResources': [{ - }], - 'reserve': [{ - }], - 'rebootComputeNode': [{ - }], - 'releaseResource': [{ - }], - 'reserveAllCnResources': [{ - }], - 'getPortAvailableModes': [{ - 'modes': [{ - 'name': { - }, - 'fanoutId': { + 'ip_address': { + }, + 'mme_ip_address': { } }], - 'slot': { + 'gateway_ip_address': { }, - 'port': { + 'id': { + }, + 'plmn': { + }, + 'prefix_length': { + }, + 'sctp_over_udp': { + }, + 'sctp_sport': { } }], - 'addResourceNote': [{ - }], - 'stopRun': [{ - }], - 'exportCapture': [{ - }] - } - }, - 'testmodel': { - 'testComponentTypesDescription': [{ - 'template': { - }, - 'name': { - }, - 'description': { - }, - 'label': { - }, - 'type': { - } - }], - 'lastrunby': { - }, - 'summaryInfo': { - 'totalSubnets': { - }, - 'totalMacAddresses': { - }, - 'totalUniqueStrikes': { - }, - 'totalUniqueSuperflows': { - }, - 'requiredMTU': { - } - }, - 'author': { - }, - 'lastrun': { - }, - 'description': { - }, - 'label': { - }, - 'sharedComponentSettings': { - 'maximumConcurrentFlows': { - 'current': { + 'enodeb_mme': [{ + 'default_container': { }, - 'original': { + 'dns': { }, - 'content': { - } - }, - 'totalAttacks': { - 'current': { + 'enodebs': [{ + 'default_container': { + }, + 'enodebCount': { + }, + 'gateway_ip_address': { + }, + 'ip_address': { + }, + 'netmask': { + } + }], + 'gateway_ip_address': { }, - 'original': { + 'id': { }, - 'content': { - } - }, - 'totalBandwidth': { - 'current': { + 'ip_allocation_mode': { }, - 'original': { + 'mme_ip_address': { }, - 'content': { - } - }, - 'maxFlowCreationRate': { - 'current': { + 'netmask': { }, - 'original': { + 'pgw_ip_address': { }, - 'content': { - } - }, - 'totalAddresses': { - 'current': { + 'plmn': { }, - 'original': { + 'sgw_ip_address': { }, - 'content': { + 'ue_address': { } - }, - 'samplePeriod': { - 'current': { + }], + 'enodeb_mme6': [{ + 'default_container': { }, - 'original': { + 'dns': { }, - 'content': { - } - } - }, - 'createdOn': { - }, - 'network': { - }, - 'revision': { - }, - 'duration': { - }, - 'result': { - }, - 'component': [{ - 'author': { - }, - 'originalPreset': { - }, - 'active': { - }, - 'originalPresetLabel': { - }, - 'description': { - }, - 'label': { - }, - 'type': { - }, - '@type:liveappsim': { - 'app': { - 'removeUnknownTcpUdp': { - }, - 'replace_streams': { + 'enodebs': [{ + 'default_container': { }, - 'removeUnknownSSL': { + 'enodebCount': { }, - 'streamsPerSuperflow': { + 'gateway_ip_address': { }, - 'removedns': { + 'ip_address': { }, - 'fidelity': { + 'prefix_length': { } + }], + 'gateway_ip_address': { }, - 'tcp': { - 'disable_ack_piggyback': { - }, - 'delay_acks': { - }, - 'mss': { - }, - 'raw_flags': { - }, - 'psh_every_segment': { - }, - 'ecn': { - }, - 'tcp_window_scale': { - }, - 'initial_receive_window': { - }, - 'reset_at_end': { - }, - 'dynamic_receive_window_size': { - }, - 'tcp_connect_delay_ms': { - }, - 'aging_time_data_type': { - }, - 'tcp_4_way_close': { - }, - 'shutdown_data': { - }, - 'tcp_icw': { - }, - 'tcp_keepalive_timer': { - }, - 'aging_time': { - }, - 'add_timestamps': { - }, - 'retries': { - }, - 'handshake_data': { - }, - 'ack_every_n': { - }, - 'syn_data_padding': { - }, - 'retry_quantum_ms': { - }, - 'delay_acks_ms': { - } + 'id': { }, - 'inflateDeflate': { + 'ip_allocation_mode': { }, - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'unlimited': { - }, - 'scope': { - }, - 'type': { - } + 'mme_ip_address': { }, - 'sessions': { - 'openFast': { - }, - 'closeFast': { - }, - 'max': { - }, - 'allocationOverride': { - }, - 'targetPerSecond': { - }, - 'target': { - }, - 'targetMatches': { - }, - 'maxPerSecond': { - }, - 'engine': { - }, - 'statDetail': { - }, - 'emphasis': { - }, - 'maxActive': { - } + 'pgw_ip_address': { }, - 'loadprofile': { - 'name': { - }, - 'label': { - } + 'plmn': { }, - 'ip': { - 'tos': { - }, - 'ttl': { - } + 'prefix_length': { }, - 'ip6': { - 'flowlabel': { - }, - 'traffic_class': { - }, - 'hop_limit': { - } + 'sgw_ip_address': { }, - 'srcPortDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } + 'ue_address': { + } + }], + 'enodeb_mme_sgw': [{ + 'default_container': { }, - 'tputscalefactor': { + 'dns': { }, - 'rampUpProfile': { - 'min': { - }, - 'max': { - }, - 'increment': { - }, - 'interval': { - }, - 'type': { - } + 'gateway_ip_address': { }, - 'concurrencyscalefactor': { + 'id': { }, - 'delayStart': { + 'ip_allocation_mode': { }, - 'rampDist': { - 'upBehavior': { - }, - 'down': { - }, - 'steadyBehavior': { - }, - 'downBehavior': { - }, - 'up': { - }, - 'synRetryMode': { - }, - 'steady': { - } + 'mme_ip_address': { }, - 'sfratescalefactor': { + 'netmask': { }, - 'liveProfile': { + 'pgw_ip_address': { + }, + 'plmn': { + }, + 'ue_address': { } - }, - '@type:layer3advanced': { - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'rate': { - }, - 'increment': { - }, - 'type': { - }, - 'ramptype': { - } + }], + 'enodeb_mme_sgw6': [{ + 'default_container': { }, - 'bidirectional': { + 'dns': { }, - 'enableTCP': { + 'gateway_ip_address': { }, - 'slowStart': { + 'id': { }, - 'Templates': { - 'TemplateType': { - } + 'ip_allocation_mode': { }, - 'slowStartFps': { + 'mme_ip_address': { }, - 'duration': { - 'disable_nd_probes': { + 'pgw_ip_address': { + }, + 'plmn': { + }, + 'prefix_length': { + }, + 'ue_address': { + } + }], + 'geneve_tep': [{ + 'count': { + }, + 'default_container': { + }, + 'gateway_ip_address': { + }, + 'header_options': [{ + 'geneve_data': { }, - 'durationTime': { + 'geneve_option_class': { }, - 'durationFrames': { + 'geneve_type': { } + }], + 'id': { }, - 'enablePerStreamStats': { + 'ip_address': { }, - 'tuple_gen_seed': { + 'netmask': { }, - 'payload': { - 'data': { + 'vni_base': { + }, + 'vni_count': { + } + }], + 'ggsn': [{ + 'count': { + }, + 'default_container': { + }, + 'dns': { + }, + 'gateway_ip_address': { + }, + 'ggsn_advertised_control_ip_address': { + }, + 'ggsn_advertised_data_ip_address': { + }, + 'id': { + }, + 'ip_address': { + }, + 'lease_address': { + }, + 'lease_address_v6': { + }, + 'netmask': { + } + }], + 'ggsn6': [{ + 'count': { + }, + 'default_container': { + }, + 'dns': { + }, + 'gateway_ip_address': { + }, + 'ggsn_advertised_control_ip_address': { + }, + 'ggsn_advertised_data_ip_address': { + }, + 'id': { + }, + 'ip_address': { + }, + 'lease_address': { + }, + 'lease_address_v6': { + }, + 'prefix_length': { + } + }], + 'global_config': [{ + 'gtp': { + }, + 'id': { + } + }], + 'interface': [{ + 'description': { + }, + 'duplicate_mac_address': { + }, + 'id': { + }, + 'ignore_pause_frames': { + }, + 'impairments': { + 'corrupt_chksum': { }, - 'type': { + 'corrupt_gt256': { }, - 'dataWidth': { - } - }, - 'advancedUDP': { - 'lengthVal': { + 'corrupt_lt256': { }, - 'lengthField': { + 'corrupt_lt64': { }, - 'checksumVal': { + 'corrupt_rand': { }, - 'checksumField': { + 'drop': { + }, + 'frack': { + }, + 'rate': { } }, - 'delayStart': { + 'mac_address': { }, - 'payloadAdvanced': { - 'udfMode': { - }, - 'udfLength': { - }, - 'udfDataWidth': { - }, - 'udfOffset': { - } + 'mtu': { }, - 'sizeDist': { - 'increment': { - }, - 'type': { - }, - 'min': { - }, - 'rate': { - }, - 'mixlen2': { - }, - 'mixweight6': { - }, - 'mixlen1': { - }, - 'mixweight7': { - }, - 'mixlen4': { - }, - 'mixweight4': { - }, - 'mixlen3': { - }, - 'mixweight5': { - }, - 'mixlen6': { - }, - 'mixlen5': { - }, - 'mixlen8': { - }, - 'mixweight8': { + 'number': { + }, + 'packet_filter': { + 'dest_ip': { }, - 'mixlen7': { + 'dest_port': { }, - 'mixweight9': { + 'filter': { }, - 'mixlen9': { + 'not_dest_ip': { }, - 'mixweight2': { + 'not_dest_port': { }, - 'max': { + 'not_src_ip': { }, - 'mixweight3': { + 'not_src_port': { }, - 'mixweight1': { + 'not_vlan': { }, - 'mixlen10': { + 'src_ip': { }, - 'mixweight10': { + 'src_port': { }, - 'unit': { + 'vlan': { } }, - 'advancedIPv4': { - 'lengthVal': { - }, - 'optionHeaderField': { - }, - 'optionHeaderData': { - }, - 'lengthField': { - }, - 'checksumVal': { - }, - 'tos': { - }, - 'checksumField': { - }, - 'ttl': { - } + 'use_vnic_mac_address': { }, - 'advancedIPv6': { - 'flowLabel': { - }, - 'lengthVal': { - }, - 'extensionHeaderField': { - }, - 'lengthField': { - }, - 'nextHeader': { - }, - 'trafficClass': { - }, - 'extensionHeaderData': { - }, - 'hopLimit': { - } + 'vlan_key': { } - }, - '@type:appsim': { - 'app': { - 'replace_streams': { - }, - 'streamsPerSuperflow': { - }, - 'removedns': { - }, - 'fidelity': { - } + }], + 'ip6_dhcp_server': [{ + 'default_container': { }, - 'tcp': { - 'disable_ack_piggyback': { - }, - 'delay_acks': { - }, - 'mss': { - }, - 'raw_flags': { - }, - 'psh_every_segment': { - }, - 'ecn': { - }, - 'tcp_window_scale': { - }, - 'initial_receive_window': { - }, - 'reset_at_end': { - }, - 'dynamic_receive_window_size': { - }, - 'tcp_connect_delay_ms': { - }, - 'aging_time_data_type': { - }, - 'tcp_4_way_close': { - }, - 'shutdown_data': { - }, - 'tcp_icw': { - }, - 'tcp_keepalive_timer': { - }, - 'aging_time': { - }, - 'add_timestamps': { - }, - 'retries': { - }, - 'handshake_data': { - }, - 'ack_every_n': { - }, - 'syn_data_padding': { - }, - 'retry_quantum_ms': { - }, - 'delay_acks_ms': { - } + 'default_lease_time': { }, - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'unlimited': { - }, - 'scope': { - }, - 'type': { - } + 'gateway_ip_address': { }, - 'sessions': { - 'openFast': { - }, - 'closeFast': { - }, - 'max': { - }, - 'allocationOverride': { - }, - 'targetPerSecond': { - }, - 'target': { - }, - 'targetMatches': { - }, - 'maxPerSecond': { - }, - 'engine': { - }, - 'statDetail': { - }, - 'emphasis': { - }, - 'maxActive': { - } + 'ia_type': { }, - 'loadprofile': { - 'name': { - }, - 'label': { - } + 'id': { }, - 'profile': { + 'ip_address': { }, - 'ip': { - 'tos': { - }, - 'ttl': { - } + 'max_lease_time': { }, - 'resources': { - 'expand': { - } + 'offer_lifetime': { }, - 'experimental': { - 'tcpSegmentsBurst': { - }, - 'unify_l4_bufs': { - } + 'pool_base_address': { }, - 'ssl': { - 'ssl_client_keylog': { - }, - 'upgrade': { - }, - 'sslReuseType': { - }, - 'server_record_len': { - }, - 'client_record_len': { - }, - 'ssl_keylog_max_entries': { - } + 'pool_dns_address1': { }, - 'ip6': { - 'flowlabel': { - }, - 'traffic_class': { - }, - 'hop_limit': { - } + 'pool_dns_address2': { }, - 'srcPortDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } + 'pool_prefix_length': { }, - 'rampUpProfile': { - 'min': { - }, - 'max': { - }, - 'increment': { - }, - 'interval': { - }, - 'type': { - } + 'pool_size': { }, - 'delayStart': { + 'prefix_length': { + } + }], + 'ip6_dns_config': [{ + 'dns_domain': { }, - 'rampDist': { - 'upBehavior': { - }, - 'down': { - }, - 'steadyBehavior': { - }, - 'downBehavior': { - }, - 'up': { - }, - 'synRetryMode': { - }, - 'steady': { - } + 'dns_server_address': { + }, + 'id': { } - }, - '@type:security_all': { - 'maxConcurrAttacks': { + }], + 'ip6_dns_proxy': [{ + 'dns_proxy_ip_base': { }, - 'attackRetries': { + 'dns_proxy_ip_count': { }, - 'maxPacketsPerSecond': { + 'dns_proxy_src_ip_base': { }, - 'attackPlan': { + 'dns_proxy_src_ip_count': { }, - 'randomSeed': { + 'id': { + } + }], + 'ip6_external_hosts': [{ + 'behind_snapt': { }, - 'delayStart': { + 'count': { }, - 'attackProfile': { + 'id': { }, - 'attackPlanIterations': { + 'ip_address': { }, - 'attackPlanIterationDelay': { + 'proxy': { }, - 'maxAttacksPerSecond': { + 'tags': { } - }, - '@type:security_np': { - 'attackRetries': { + }], + 'ip6_geneve_tep': [{ + 'count': { }, - 'sessions': { - 'max': { - }, - 'maxPerSecond': { - } + 'default_container': { }, - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'unlimited': { + 'gateway_ip_address': { + }, + 'header_options': [{ + 'geneve_data': { }, - 'scope': { + 'geneve_option_class': { }, - 'type': { + 'geneve_type': { } + }], + 'id': { }, - 'attackPlan': { + 'ip_address': { }, - 'randomSeed': { + 'prefix_length': { }, - 'delayStart': { + 'vni_base': { }, - 'attackProfile': { + 'vni_count': { + } + }], + 'ip6_mac_static_hosts': [{ + 'behind_snapt': { }, - 'attackPlanIterations': { + 'count': { }, - 'attackPlanIterationDelay': { + 'default_container': { + }, + 'gateway_ip_address': { + }, + 'id': { + }, + 'ip_address': { + }, + 'mac_address': { + }, + 'mtu': { + }, + 'prefix_length': { + }, + 'proxy': { + }, + 'tags': { + }, + 'tep_vni_mapping': { } - }, - '@type:layer3': { - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'rate': { - }, - 'increment': { - }, - 'type': { - }, - 'ramptype': { - } + }], + 'ip6_router': [{ + 'default_container': { }, - 'bidirectional': { + 'gateway_ip_address': { }, - 'randomizeIP': { + 'hosts_ip_alloc_container': { }, - 'enableTCP': { + 'id': { }, - 'slowStart': { + 'ip_address': { }, - 'Templates': { - 'TemplateType': { - } + 'prefix_length': { + } + }], + 'ip6_static_hosts': [{ + 'behind_snapt': { }, - 'srcPort': { + 'count': { }, - 'slowStartFps': { + 'default_container': { }, - 'duration': { - 'disable_nd_probes': { - }, - 'durationTime': { - }, - 'durationFrames': { - } + 'dns': { }, - 'udpSrcPortMode': { + 'dns_proxy': { }, - 'dstPort': { + 'enable_stats': { }, - 'payload': { - 'data': { - }, - 'type': { - }, - 'dataWidth': { - } + 'gateway_ip_address': { }, - 'syncIP': { + 'host_ipv6_addr_alloc_mode': { }, - 'addrGenMode': { + 'id': { }, - 'maxStreams': { + 'ip_address': { }, - 'dstPortMask': { + 'ip_alloc_container': { }, - 'udpDstPortMode': { + 'ip_selection_type': { }, - 'advancedUDP': { - 'lengthVal': { - }, - 'lengthField': { - }, - 'checksumVal': { + 'maxmbps_per_host': { + }, + 'mpls_list': [{ + 'id': { }, - 'checksumField': { + 'value': { } + }], + 'prefix_length': { }, - 'delayStart': { + 'proxy': { }, - 'payloadAdvanced': { - 'udfMode': { - }, - 'udfLength': { - }, - 'udfDataWidth': { - }, - 'udfOffset': { - } + 'tags': { + } + }], + 'ip_dhcp_hosts': [{ + 'accept_local_offers_only': { }, - 'sizeDist': { - 'increment': { - }, - 'type': { - }, - 'min': { - }, - 'rate': { - }, - 'mixlen2': { - }, - 'mixweight6': { - }, - 'mixlen1': { - }, - 'mixweight7': { - }, - 'mixlen4': { - }, - 'mixweight4': { - }, - 'mixlen3': { - }, - 'mixweight5': { - }, - 'mixlen6': { - }, - 'mixlen5': { - }, - 'mixlen8': { - }, - 'mixweight8': { - }, - 'mixlen7': { - }, - 'mixweight9': { - }, - 'mixlen9': { - }, - 'mixweight2': { - }, - 'max': { - }, - 'mixweight3': { - }, - 'mixweight1': { - }, - 'mixlen10': { - }, - 'mixweight10': { - }, - 'unit': { - } + 'allocation_rate': { }, - 'advancedIPv4': { - 'lengthVal': { - }, - 'optionHeaderField': { - }, - 'optionHeaderData': { - }, - 'lengthField': { - }, - 'checksumVal': { - }, - 'tos': { - }, - 'checksumField': { - }, - 'ttl': { - } + 'behind_snapt': { }, - 'srcPortMask': { + 'count': { }, - 'advancedIPv6': { - 'flowLabel': { - }, - 'lengthVal': { - }, - 'extensionHeaderField': { - }, - 'lengthField': { - }, - 'nextHeader': { - }, - 'trafficClass': { - }, - 'extensionHeaderData': { - }, - 'hopLimit': { - } - } - }, - '@type:layer4': { - 'tcp': { - 'disable_ack_piggyback': { - }, - 'delay_acks': { - }, - 'mss': { - }, - 'raw_flags': { - }, - 'psh_every_segment': { - }, - 'ecn': { - }, - 'tcp_window_scale': { - }, - 'initial_receive_window': { - }, - 'reset_at_end': { - }, - 'dynamic_receive_window_size': { - }, - 'tcp_connect_delay_ms': { - }, - 'aging_time_data_type': { - }, - 'tcp_4_way_close': { - }, - 'shutdown_data': { - }, - 'tcp_icw': { - }, - 'tcp_keepalive_timer': { - }, - 'aging_time': { - }, - 'add_timestamps': { - }, - 'retries': { - }, - 'handshake_data': { - }, - 'ack_every_n': { - }, - 'syn_data_padding': { - }, - 'retry_quantum_ms': { - }, - 'delay_acks_ms': { - } + 'default_container': { }, - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'unlimited': { - }, - 'scope': { - }, - 'type': { - } + 'dns_proxy': { }, - 'sessions': { - 'openFast': { - }, - 'closeFast': { - }, - 'max': { - }, - 'allocationOverride': { - }, - 'targetPerSecond': { - }, - 'target': { - }, - 'targetMatches': { - }, - 'maxPerSecond': { - }, - 'engine': { - }, - 'statDetail': { - }, - 'emphasis': { - }, - 'maxActive': { - } + 'enable_stats': { }, - 'loadprofile': { - 'name': { - }, - 'label': { - } + 'id': { }, - 'ip': { - 'tos': { - }, - 'ttl': { - } + 'ldap': { }, - 'ip6': { - 'flowlabel': { - }, - 'traffic_class': { - }, - 'hop_limit': { - } + 'proxy': { }, - 'srcPortDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } + 'tags': { + } + }], + 'ip_dhcp_server': [{ + 'accept_local_requests_only': { }, - 'rampUpProfile': { - 'min': { - }, - 'max': { - }, - 'increment': { - }, - 'interval': { - }, - 'type': { - } + 'count': { }, - 'delayStart': { + 'default_container': { }, - 'payload': { - 'add_timestamp': { - }, - 'data': { - }, - 'http_type': { - }, - 'transport': { - }, - 'type': { - } + 'dns': { }, - 'rampDist': { - 'upBehavior': { - }, - 'down': { - }, - 'steadyBehavior': { - }, - 'downBehavior': { - }, - 'up': { - }, - 'synRetryMode': { - }, - 'steady': { - } + 'gateway_ip_address': { }, - 'packetsPerSession': { + 'id': { }, - 'payloadSizeDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } + 'ip_address': { }, - 'dstPortDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } + 'lease_address': { + }, + 'lease_time': { + }, + 'netmask': { } - }, - '@type:playback': { - 'tcp': { - 'disable_ack_piggyback': { - }, - 'delay_acks': { - }, - 'mss': { - }, - 'raw_flags': { - }, - 'psh_every_segment': { - }, - 'ecn': { - }, - 'tcp_window_scale': { - }, - 'initial_receive_window': { - }, - 'reset_at_end': { - }, - 'dynamic_receive_window_size': { - }, - 'tcp_connect_delay_ms': { - }, - 'aging_time_data_type': { - }, - 'tcp_4_way_close': { - }, - 'shutdown_data': { - }, - 'tcp_icw': { - }, - 'tcp_keepalive_timer': { - }, - 'aging_time': { - }, - 'add_timestamps': { - }, - 'retries': { - }, - 'handshake_data': { - }, - 'ack_every_n': { - }, - 'syn_data_padding': { - }, - 'retry_quantum_ms': { - }, - 'delay_acks_ms': { - } + }], + 'ip_dns_config': [{ + 'dns_domain': { }, - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'unlimited': { - }, - 'scope': { - }, - 'type': { - } + 'dns_server_address': { }, - 'sessions': { - 'openFast': { - }, - 'closeFast': { - }, - 'max': { - }, - 'allocationOverride': { - }, - 'targetPerSecond': { - }, - 'target': { - }, - 'targetMatches': { - }, - 'maxPerSecond': { - }, - 'engine': { - }, - 'statDetail': { - }, - 'emphasis': { - }, - 'maxActive': { - } + 'id': { + } + }], + 'ip_dns_proxy': [{ + 'dns_proxy_ip_base': { }, - 'loadprofile': { - 'name': { - }, - 'label': { - } + 'dns_proxy_ip_count': { }, - 'ip': { - 'tos': { - }, - 'ttl': { - } + 'dns_proxy_src_ip_base': { }, - 'modification': { - 'startpacket': { - }, - 'originalport': { - }, - 'newport': { - }, - 'replay': { - }, - 'bpfstring': { - }, - 'single': { - }, - 'loopcount': { - }, - 'endpacket': { - }, - 'independentflows': { - }, - 'serveripinjection': { - } + 'dns_proxy_src_ip_count': { }, - 'ip6': { - 'flowlabel': { - }, - 'traffic_class': { - }, - 'hop_limit': { - } + 'id': { + } + }], + 'ip_external_hosts': [{ + 'behind_snapt': { }, - 'srcPortDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } + 'count': { }, - 'rampUpProfile': { - 'min': { - }, - 'max': { - }, - 'increment': { - }, - 'interval': { - }, - 'type': { - } + 'id': { }, - 'delayStart': { + 'ip_address': { }, - 'file': { + 'proxy': { }, - 'rampDist': { - 'upBehavior': { - }, - 'down': { - }, - 'steadyBehavior': { - }, - 'downBehavior': { - }, - 'up': { - }, - 'synRetryMode': { - }, - 'steady': { - } + 'tags': { + } + }], + 'ip_ldap_server': [{ + 'auth_timeout': { }, - 'behavior': { + 'authentication_rate': { + }, + 'dn_fixed_val': { + }, + 'id': { + }, + 'ldap_password_start_tag': { + }, + 'ldap_server_address': { + }, + 'ldap_user_count': { + }, + 'ldap_user_max': { + }, + 'ldap_user_min': { + }, + 'ldap_username_start_tag': { } - }, - '@type:layer2': { - 'bidirectional': { + }], + 'ip_mac_static_hosts': [{ + 'behind_snapt': { }, - 'maxStreams': { + 'count': { }, - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'rate': { - }, - 'increment': { - }, - 'type': { - }, - 'ramptype': { - } + 'default_container': { }, - 'advanced': { - 'ethTypeField': { - }, - 'ethTypeVal': { - } + 'gateway_ip_address': { }, - 'slowStart': { + 'id': { }, - 'slowStartFps': { + 'ip_address': { }, - 'duration': { - 'disable_nd_probes': { - }, - 'durationTime': { - }, - 'durationFrames': { - } + 'mac_address': { }, - 'delayStart': { + 'mtu': { }, - 'payloadAdvanced': { - 'udfMode': { - }, - 'udfLength': { - }, - 'udfDataWidth': { - }, - 'udfOffset': { - } + 'netmask': { }, - 'sizeDist': { - 'increment': { - }, - 'type': { - }, - 'min': { - }, - 'rate': { - }, - 'mixlen2': { - }, - 'mixweight6': { - }, - 'mixlen1': { - }, - 'mixweight7': { - }, - 'mixlen4': { - }, - 'mixweight4': { - }, - 'mixlen3': { - }, - 'mixweight5': { - }, - 'mixlen6': { - }, - 'mixlen5': { - }, - 'mixlen8': { - }, - 'mixweight8': { - }, - 'mixlen7': { - }, - 'mixweight9': { - }, - 'mixlen9': { - }, - 'mixweight2': { - }, - 'max': { - }, - 'mixweight3': { - }, - 'mixweight1': { - }, - 'mixlen10': { - }, - 'mixweight10': { - }, - 'unit': { - } - }, - 'payload': { - 'data': { - }, - 'type': { - }, - 'dataWidth': { - } - } - }, - '@type:stackscrambler': { - 'tcp': { - 'disable_ack_piggyback': { - }, - 'delay_acks': { - }, - 'mss': { - }, - 'raw_flags': { - }, - 'psh_every_segment': { - }, - 'ecn': { - }, - 'tcp_window_scale': { - }, - 'initial_receive_window': { - }, - 'reset_at_end': { - }, - 'dynamic_receive_window_size': { - }, - 'tcp_connect_delay_ms': { - }, - 'aging_time_data_type': { - }, - 'tcp_4_way_close': { - }, - 'shutdown_data': { - }, - 'tcp_icw': { - }, - 'tcp_keepalive_timer': { - }, - 'aging_time': { - }, - 'add_timestamps': { - }, - 'retries': { - }, - 'handshake_data': { - }, - 'ack_every_n': { - }, - 'syn_data_padding': { - }, - 'retry_quantum_ms': { - }, - 'delay_acks_ms': { - } - }, - 'scrambleOptions': { - 'maxCorruptions': { - }, - 'badIPFlags': { - }, - 'badIPFragOffset': { - }, - 'badIPLength': { - }, - 'badUrgentPointer': { - }, - 'badIPFlowLabel': { - }, - 'badEthType': { - }, - 'badTCPOptions': { - }, - 'badGTPNext': { - }, - 'handshakeTCP': { - }, - 'badIPChecksum': { - }, - 'badSCTPLength': { - }, - 'badTCPFlags': { - }, - 'badICMPType': { - }, - 'badIPTTL': { - }, - 'badIPProtocol': { - }, - 'badSCTPFlags': { - }, - 'badGTPFlags': { - }, - 'badIPVersion': { - }, - 'badL4HeaderLength': { - }, - 'badL4Checksum': { - }, - 'badIPOptions': { - }, - 'badSCTPType': { - }, - 'badSCTPChecksum': { - }, - 'badGTPNpdu': { - }, - 'badICMPCode': { - }, - 'badSCTPVerificationTag': { - }, - 'badIPTOS': { - }, - 'badIPTotalLength': { - }, - 'badGTPLen': { - }, - 'badGTPType': { - }, - 'badGTPSeqno': { - } - }, - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'unlimited': { - }, - 'scope': { - }, - 'type': { - } - }, - 'sessions': { - 'openFast': { - }, - 'closeFast': { - }, - 'max': { - }, - 'allocationOverride': { - }, - 'targetPerSecond': { - }, - 'target': { - }, - 'targetMatches': { - }, - 'maxPerSecond': { - }, - 'engine': { - }, - 'statDetail': { - }, - 'emphasis': { - }, - 'maxActive': { - } - }, - 'loadprofile': { - 'name': { - }, - 'label': { - } - }, - 'ip': { - 'tos': { - }, - 'ttl': { - } - }, - 'ip6': { - 'flowlabel': { - }, - 'traffic_class': { - }, - 'hop_limit': { - } - }, - 'prng': { - 'seed': { - }, - 'offset': { - } - }, - 'srcPortDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } - }, - 'rampUpProfile': { - 'min': { - }, - 'max': { - }, - 'increment': { - }, - 'interval': { - }, - 'type': { - } - }, - 'delayStart': { - }, - 'payload': { - 'data': { - }, - 'transport': { - }, - 'type': { - } - }, - 'rampDist': { - 'upBehavior': { - }, - 'down': { - }, - 'steadyBehavior': { - }, - 'downBehavior': { - }, - 'up': { - }, - 'synRetryMode': { - }, - 'steady': { - } - }, - 'payloadSizeDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } - }, - 'dstPortDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } - } - }, - '@type:clientsim': { - 'app': { - 'replace_streams': { - }, - 'streamsPerSuperflow': { - }, - 'removedns': { - }, - 'fidelity': { - } - }, - 'tcp': { - 'disable_ack_piggyback': { - }, - 'delay_acks': { - }, - 'mss': { - }, - 'raw_flags': { - }, - 'psh_every_segment': { - }, - 'ecn': { - }, - 'tcp_window_scale': { - }, - 'initial_receive_window': { - }, - 'reset_at_end': { - }, - 'dynamic_receive_window_size': { - }, - 'tcp_connect_delay_ms': { - }, - 'aging_time_data_type': { - }, - 'tcp_4_way_close': { - }, - 'shutdown_data': { - }, - 'tcp_icw': { - }, - 'tcp_keepalive_timer': { - }, - 'aging_time': { - }, - 'add_timestamps': { - }, - 'retries': { - }, - 'handshake_data': { - }, - 'ack_every_n': { - }, - 'syn_data_padding': { - }, - 'retry_quantum_ms': { - }, - 'delay_acks_ms': { - } - }, - 'rateDist': { - 'unit': { - }, - 'min': { - }, - 'max': { - }, - 'unlimited': { - }, - 'scope': { - }, - 'type': { - } - }, - 'sessions': { - 'openFast': { - }, - 'closeFast': { - }, - 'max': { - }, - 'allocationOverride': { - }, - 'targetPerSecond': { - }, - 'target': { - }, - 'targetMatches': { - }, - 'maxPerSecond': { - }, - 'engine': { - }, - 'statDetail': { - }, - 'emphasis': { - }, - 'maxActive': { - } - }, - 'loadprofile': { - 'name': { - }, - 'label': { - } - }, - 'ip': { - 'tos': { - }, - 'ttl': { - } - }, - 'resources': { - 'expand': { - } - }, - 'ssl': { - 'ssl_client_keylog': { - }, - 'upgrade': { - }, - 'sslReuseType': { - }, - 'server_record_len': { - }, - 'client_record_len': { - }, - 'ssl_keylog_max_entries': { - } - }, - 'ip6': { - 'flowlabel': { - }, - 'traffic_class': { - }, - 'hop_limit': { - } - }, - 'srcPortDist': { - 'min': { - }, - 'max': { - }, - 'type': { - } - }, - 'rampUpProfile': { - 'min': { - }, - 'max': { - }, - 'increment': { - }, - 'interval': { - }, - 'type': { - } - }, - 'delayStart': { - }, - 'rampDist': { - 'upBehavior': { - }, - 'down': { - }, - 'steadyBehavior': { - }, - 'downBehavior': { - }, - 'up': { - }, - 'synRetryMode': { - }, - 'steady': { - } - }, - 'superflow': { - } - }, - 'createdOn': { - }, - 'tags': [{ - 'id': { - }, - 'type': { - }, - 'domainId': { - 'name': { - }, - 'iface': { - }, - 'external': { - } - } - }], - 'revision': { - }, - 'lockedBy': { - }, - 'createdBy': { - }, - 'reportResults': { - }, - 'timeline': { - 'timesegment': [{ - 'label': { - }, - 'size': { - }, - 'type': { - } - }] - }, - 'id': { - }, - 'clazz': { - }, - 'operations': { - 'getComponentPresetNames': [{ - }] - } - }], - 'lockedBy': { - }, - 'createdBy': { - }, - 'name': { - }, - 'clazz': { - }, - 'operations': { - 'clone': [{ - }], - 'search': [{ - }], - 'load': [{ - }], - 'new': [{ - }], - 'exportModel': [{ - }], - 'run': [{ - }], - 'realTimeStats': [{ - }], - 'importModel': [{ - }], - 'add': [{ - }], - 'saveAs': [{ - }], - 'save': [{ - }], - 'delete': [{ - }], - 'remove': [{ - }], - 'stopRun': [{ - }] - } - }, - 'results': [{ - 'name': { - }, - 'content': { - }, - 'datasetvals': { - }, - 'operations': { - 'getGroups': [{ - 'lockedBy': { - }, - 'createdBy': { - }, - 'author': { - }, - 'description': { - }, - 'label': { - }, - 'createdOn': { - }, - 'clazz': { - }, - 'revision': { - } - }], - 'getHistoricalSeries': [{ - }], - 'getHistoricalResultSize': [{ - }] - } - }], - 'superflow': { - 'actions': [{ - 'actionInfo': [{ - 'name': { - }, - 'description': { - }, - 'realtimeGroup': { - }, - 'label': { - }, - 'units': { - } - }], - 'flowlabel': { - }, - 'gotoBlock': { - }, - 'exflows': { - }, - 'matchBlock': { - }, - 'id': { - }, - 'source': { - }, - 'label': { - }, - 'type': { - }, - 'params': { - }, - 'flowid': { - }, - 'operations': { - 'getActionInfo': [{ - 'name': { - }, - 'description': { - }, - 'realtimeGroup': { - }, - 'label': { - }, - 'units': { - } - }], - 'getActionChoices': [{ - }] - } - }], - 'settings': [{ - 'name': { - }, - 'description': { - }, - 'realtimeGroup': { - }, - 'label': { - }, - 'units': { - } - }], - 'percentFlows': { - }, - 'seed': { - }, - 'hosts': [{ - 'iface': { - }, - 'hostname': { - }, - 'ip': { - 'type': { - } - }, - 'id': { - } - }], - 'author': { - }, - 'estimate_bytes': { - }, - 'estimate_flows': { - }, - 'weight': { - }, - 'description': { - }, - 'label': { - }, - 'params': { - }, - 'constraints': { - }, - 'createdOn': { - }, - 'revision': { - }, - 'lockedBy': { - }, - 'flows': [{ - 'singleNP': { - }, - 'name': { - }, - 'from': { - }, - 'label': { - }, - 'id': { - }, - 'to': { - }, - 'params': { - }, - 'flowcount': { - }, - 'operations': { - 'getCannedFlows': [{ - }], - 'getFlowChoices': [{ - 'lockedBy': { - }, - 'createdBy': { - }, - 'author': { - }, - 'description': { - }, - 'label': { - }, - 'createdOn': { - }, - 'clazz': { - }, - 'revision': { - } - }] - } - }], - 'generated': { - }, - 'createdBy': { - }, - 'percentBandwidth': { - }, - 'name': { - }, - 'clazz': { - }, - 'operations': { - 'importResource': [{ - }], - 'saveAs': [{ - }], - 'save': [{ - }], - 'addAction': [{ - }], - 'addHost': [{ - }], - 'addFlow': [{ - }], - 'removeFlow': [{ - }], - 'removeAction': [{ - }], - 'load': [{ - }], - 'new': [{ - }], - 'search': [{ - }], - 'delete': [{ - }] - } - }, - 'network': { - 'lockedBy': { - }, - 'createdBy': { - }, - 'author': { - }, - 'name': { - }, - 'interfaceCount': { - }, - 'description': { - }, - 'label': { - }, - 'networkModel': { - 'ip_router': [{ - 'gateway_ip_address': { + 'proxy': { }, - 'netmask': { + 'tags': { }, + 'tep_vni_mapping': { + } + }], + 'ip_router': [{ 'default_container': { }, + 'gateway_ip_address': { + }, 'id': { }, 'ip_address': { + }, + 'netmask': { } }], - 'ue_info': [{ - 'imsi_base': { - }, - 'secret_key_step': { + 'ip_static_hosts': [{ + 'behind_snapt': { }, 'count': { }, - 'operator_variant': { + 'default_container': { }, - 'secret_key': { + 'dns': { }, - 'imei_base': { + 'dns_proxy': { }, - 'msisdn_base': { + 'enable_stats': { }, - 'maxmbps_per_ue': { + 'gateway_ip_address': { }, - 'mobility_session_infos': [{ + 'id': { + }, + 'ip_address': { + }, + 'ip_selection_type': { + }, + 'ldap': { + }, + 'maxmbps_per_host': { + }, + 'mpls_list': [{ 'id': { }, 'value': { } }], - 'id': { + 'netmask': { + }, + 'proxy': { + }, + 'psn': { + }, + 'psn_netmask': { + }, + 'tags': { } }], - 'ip_ldap_server': [{ - 'auth_timeout': { + 'ipsec_config': [{ + 'debug_log': { }, - 'ldap_username_start_tag': { + 'dpd_delay': { }, - 'ldap_user_min': { + 'dpd_enabled': { }, - 'ldap_user_count': { + 'dpd_timeout': { }, - 'authentication_rate': { + 'enable_xauth': { }, - 'ldap_password_start_tag': { + 'esp_auth_alg': { }, - 'ldap_user_max': { + 'esp_encr_alg': { }, 'id': { }, - 'ldap_server_address': { + 'ike_1to1': { }, - 'dn_fixed_val': { - } - }], - 'mme_sgw_pgw6': [{ - 'ue_info': { + 'ike_auth_alg': { }, - 'max_sessions': { + 'ike_dh': { }, - 'lease_address': { + 'ike_encr_alg': { }, - 'dns': { + 'ike_lifetime': { }, - 'plmn': { + 'ike_mode': { }, - 'ip_address': { + 'ike_pfs': { }, - 'sgw_advertised_sgw': { + 'ike_prf_alg': { }, - 'sgw_advertised_pgw': { + 'ike_version': { }, - 'lease_address_v6': { + 'init_rate': { }, - 'gateway_ip_address': { + 'initial_contact': { }, - 'default_container': { + 'ipsec_lifetime': { }, - 'id': { + 'left_id': { }, - 'prefix_length': { + 'max_outstanding': { + }, + 'nat_traversal': { + }, + 'psk': { + }, + 'rekey_margin': { + }, + 'retrans_interval': { + }, + 'right_id': { + }, + 'setup_timeout': { + }, + 'wildcard_tsr': { + }, + 'xauth_password': { + }, + 'xauth_username': { } }], - 'mobility_session_info': [{ - 'password': { + 'ipsec_router': [{ + 'default_container': { + }, + 'gateway_ip_address': { }, - 'bearers': [{ - 'qci_label': { - } - }], 'id': { }, - 'access_point_name': { + 'ike_peer_ip_address': { }, - 'username': { + 'ip_address': { }, - 'initiated_dedicated_bearers': { + 'ipsec': { + }, + 'netmask': { } }], - 'ggsn6': [{ - 'lease_address': { - }, - 'count': { + 'mme_sgw_pgw': [{ + 'default_container': { }, 'dns': { }, - 'ggsn_advertised_control_ip_address': { + 'gateway_ip_address': { + }, + 'id': { }, 'ip_address': { }, - 'ggsn_advertised_data_ip_address': { + 'lease_address': { }, 'lease_address_v6': { }, - 'gateway_ip_address': { + 'max_sessions': { + }, + 'netmask': { + }, + 'plmn': { + }, + 'sgw_advertised_pgw': { + }, + 'sgw_advertised_sgw': { }, + 'ue_info': { + } + }], + 'mme_sgw_pgw6': [{ 'default_container': { }, + 'dns': { + }, + 'gateway_ip_address': { + }, 'id': { }, + 'ip_address': { + }, + 'lease_address': { + }, + 'lease_address_v6': { + }, + 'max_sessions': { + }, + 'plmn': { + }, 'prefix_length': { + }, + 'sgw_advertised_pgw': { + }, + 'sgw_advertised_sgw': { + }, + 'ue_info': { } }], - 'ip_static_hosts': [{ - 'mpls_list': [{ - 'id': { - }, - 'value': { + 'mobility_session_info': [{ + 'access_point_name': { + }, + 'bearers': [{ + 'qci_label': { } }], - 'ip_selection_type': { + 'id': { }, - 'count': { + 'initiated_dedicated_bearers': { }, - 'dns': { + 'password': { }, - 'psn': { + 'username': { + } + }], + 'mpls_settings': [{ + 'id': { }, - 'psn_netmask': { + 'mpls_tags': [{ + 'mpls_exp': { + }, + 'mpls_label': { + }, + 'mpls_ttl': { + } + }] + }], + 'path_advanced': [{ + 'destination_container': { }, - 'ip_address': { + 'destination_port_algorithm': { }, - 'tags': { + 'destination_port_base': { }, - 'proxy': { + 'destination_port_count': { }, - 'maxmbps_per_host': { + 'enable_external_file': { }, - 'gateway_ip_address': { + 'file': { }, - 'netmask': { + 'id': { }, - 'ldap': { + 'source_container': { }, - 'default_container': { + 'source_port_algorithm': { + }, + 'source_port_base': { + }, + 'source_port_count': { + }, + 'stream_group': { + }, + 'tags': { + }, + 'tuple_limit': { + }, + 'xor_bits': { + } + }], + 'path_basic': [{ + 'destination_container': { }, 'id': { }, - 'dns_proxy': { - }, - 'behind_snapt': { - }, - 'enable_stats': { + 'source_container': { } }], - 'ggsn': [{ - 'lease_address': { - }, - 'count': { + 'pgw': [{ + 'default_container': { }, 'dns': { }, - 'ggsn_advertised_control_ip_address': { + 'gateway_ip_address': { + }, + 'id': { }, 'ip_address': { }, - 'ggsn_advertised_data_ip_address': { + 'lease_address': { }, 'lease_address_v6': { }, - 'gateway_ip_address': { + 'max_sessions': { }, 'netmask': { }, - 'default_container': { - }, - 'id': { + 'plmn': { } }], - 'ue': [{ - 'allocation_rate': { - }, - 'mobility_interval_ms': { - }, - 'ue_info': { + 'pgw6': [{ + 'default_container': { }, 'dns': { }, - 'mobility_action': { - }, - 'tags': { + 'gateway_ip_address': { }, - 'proxy': { + 'id': { }, - 'default_container': { + 'ip_address': { }, - 'mobility_with_traffic': { + 'lease_address': { }, - 'id': { + 'lease_address_v6': { }, - 'behind_snapt': { + 'max_sessions': { }, - 'request_ipv6': { + 'plmn': { }, - 'enable_stats': { + 'prefix_length': { } }], - 'enodeb_mme_sgw6': [{ - 'dns': { - }, - 'plmn': { - }, - 'ip_allocation_mode': { + 'plmn': [{ + 'description': { }, - 'mme_ip_address': { + 'id': { }, - 'pgw_ip_address': { + 'mcc': { }, - 'ue_address': { + 'mnc': { + } + }], + 'sgsn': [{ + 'default_container': { }, 'gateway_ip_address': { }, - 'default_container': { + 'ggsn_ip_address': { }, 'id': { }, - 'prefix_length': { - } - }], - 'ds_lite_aftr': [{ - 'count': { - }, 'ip_address': { }, - 'ipv6_addr_alloc_mode': { - }, - 'gateway_ip_address': { - }, + 'netmask': { + } + }], + 'sgsn6': [{ 'default_container': { }, - 'b4_count': { + 'gateway_ip_address': { }, - 'b4_ip_address': { + 'ggsn_ip_address': { }, 'id': { }, + 'ip_address': { + }, 'prefix_length': { } }], - 'ipsec_router': [{ - 'gateway_ip_address': { - }, - 'netmask': { + 'sgw_pgw': [{ + 'default_container': { }, - 'ipsec': { + 'dns': { }, - 'default_container': { + 'gateway_ip_address': { }, 'id': { }, 'ip_address': { }, - 'ike_peer_ip_address': { - } - }], - 'dhcpv6c_req_opts_cfg': [{ - 'dhcpv6v_req_preference': { - }, - 'dhcpv6v_req_dns_list': { - }, - 'dhcpv6v_req_dns_resolvers': { + 'lease_address': { }, - 'dhcpv6v_req_server_id': { + 'lease_address_v6': { }, - 'id': { - } - }], - 'sgsn': [{ - 'gateway_ip_address': { + 'max_sessions': { }, 'netmask': { }, - 'default_container': { - }, - 'ggsn_ip_address': { + 'plmn': { }, - 'id': { + 'sgw_advertised_pgw': { }, - 'ip_address': { + 'sgw_advertised_sgw': { } }], - 'enodeb_mme6': [{ - 'dns': { - }, - 'plmn': { + 'sgw_pgw6': [{ + 'default_container': { }, - 'ip_allocation_mode': { + 'dns': { }, - 'enodebs': [{ - 'gateway_ip_address': { - }, - 'default_container': { - }, - 'enodebCount': { - }, - 'ip_address': { - }, - 'prefix_length': { - } - }], - 'mme_ip_address': { + 'gateway_ip_address': { }, - 'pgw_ip_address': { + 'id': { }, - 'ue_address': { + 'ip_address': { }, - 'gateway_ip_address': { + 'lease_address': { }, - 'default_container': { + 'lease_address_v6': { }, - 'sgw_ip_address': { + 'max_sessions': { }, - 'id': { + 'plmn': { }, 'prefix_length': { - } - }], - 'plmn': [{ - 'mnc': { - }, - 'description': { }, - 'id': { + 'sgw_advertised_pgw': { }, - 'mcc': { + 'sgw_advertised_sgw': { } }], - 'sgw_pgw': [{ - 'max_sessions': { + 'sixrd_ce': [{ + 'br_ip_address': { }, - 'lease_address': { + 'count': { + }, + 'default_container': { }, 'dns': { }, - 'plmn': { + 'enable_stats': { }, - 'ip_address': { + 'gateway_ip_address': { }, - 'sgw_advertised_sgw': { + 'hosts_per_ce': { }, - 'sgw_advertised_pgw': { + 'id': { }, - 'lease_address_v6': { + 'ip4_mask_length': { }, - 'gateway_ip_address': { + 'ip_address': { }, 'netmask': { }, - 'default_container': { + 'sixrd_prefix': { }, - 'id': { + 'sixrd_prefix_length': { + }, + 'tags': { } }], - 'ip6_dhcp_server': [{ - 'ia_type': { - }, - 'pool_size': { + 'slaac_cfg': [{ + 'enable_dad': { }, - 'ip_address': { + 'fallback_ip_address': { }, - 'pool_prefix_length': { + 'id': { }, - 'offer_lifetime': { + 'stateless_dhcpv6c_cfg': { }, - 'max_lease_time': { + 'use_rand_addr': { + } + }], + 'ue': [{ + 'allocation_rate': { }, - 'gateway_ip_address': { + 'behind_snapt': { }, 'default_container': { }, - 'pool_base_address': { - }, - 'default_lease_time': { + 'dns': { }, - 'pool_dns_address1': { + 'enable_stats': { }, 'id': { }, - 'prefix_length': { + 'mobility_action': { + }, + 'mobility_interval_ms': { + }, + 'mobility_with_traffic': { }, - 'pool_dns_address2': { - } - }], - 'ip6_external_hosts': [{ 'proxy': { }, + 'request_ipv6': { + }, + 'tags': { + }, + 'ue_info': { + } + }], + 'ue_info': [{ 'count': { }, 'id': { }, - 'ip_address': { + 'imei_base': { + }, + 'imsi_base': { + }, + 'maxmbps_per_ue': { + }, + 'mobility_session_infos': [{ + 'id': { + }, + 'value': { + } + }], + 'msisdn_base': { + }, + 'operator_variant': { }, - 'behind_snapt': { + 'secret_key': { }, - 'tags': { + 'secret_key_step': { } }], - 'dhcpv6c_tout_and_retr_cfg': [{ - 'dhcp6c_inforeq_attempts': { + 'vlan': [{ + 'count': { }, - 'dhcp6c_initial_rebind_tout': { + 'default_container': { }, - 'dhcp6c_sol_attempts': { + 'description': { }, - 'dhcp6c_max_rebind_tout': { + 'duplicate_mac_address': { }, - 'dhcp6c_release_attempts': { + 'id': { }, - 'dhcp6c_initial_release_tout': { + 'inner_vlan': { }, - 'dhcp6c_req_attempts': { + 'mac_address': { }, - 'dhcp6c_max_req_tout': { + 'mtu': { }, - 'dhcp6c_max_renew_tout': { + 'outer_vlan': { }, - 'dhcp6c_max_sol_tout': { + 'tpid': { + } + }] + }, + 'operations': { + 'delete': [{ + }], + 'importNetwork': [{ + }], + 'list': [{ + }], + 'load': [{ + }], + 'new': [{ + }], + 'save': [{ + }], + 'saveAs': [{ + }], + 'search': [{ + }] + }, + 'revision': { + } + }, + 'remote': { + 'operations': { + 'connectChassis': [{ + }], + 'disconnectChassis': [{ + }] + } + }, + 'reports': { + 'duration': { + }, + 'endtime': { + }, + 'isPartOfResiliency': { + }, + 'iteration': { + }, + 'label': { + }, + 'name': { + }, + 'network': { + }, + 'operations': { + 'delete': [{ + }], + 'exportReport': [{ + }], + 'getReportContents': [{ + }], + 'getReportTable': [{ + }], + 'search': [{ + }] + }, + 'result': { + }, + 'size': { + }, + 'starttime': { + }, + 'testid': { + 'host': { + }, + 'iteration': { + }, + 'name': { + } + }, + 'testname': { + }, + 'user': { + } + }, + 'results': [{ + 'content': { + }, + 'datasetvals': { + }, + 'name': { + }, + 'operations': { + 'getGroups': [{ + 'author': { }, - 'dhcp6c_initial_req_tout': { + 'clazz': { }, - 'dhcp6c_max_inforeq_tout': { + 'createdBy': { }, - 'dhcp6c_initial_sol_tout': { + 'createdOn': { }, - 'dhcp6c_initial_renew_tout': { + 'description': { }, - 'dhcp6c_initial_inforeq_tout': { + 'label': { }, - 'id': { + 'lockedBy': { + }, + 'revision': { } }], - 'sgw_pgw6': [{ - 'max_sessions': { - }, - 'lease_address': { + 'getHistoricalResultSize': [{ + }], + 'getHistoricalSeries': [{ + }] + } + }], + 'statistics': { + 'component': [{ + 'label': { + }, + 'statNames': [{ + 'description': { }, - 'dns': { + 'label': { }, - 'plmn': { + 'name': { }, - 'ip_address': { + 'realtimeGroup': { }, - 'sgw_advertised_sgw': { + 'units': { + } + }] + }] + }, + 'strikeList': { + 'SecurityBehavior': { + }, + 'StrikeOptions': { + }, + 'author': { + }, + 'clazz': { + }, + 'createdBy': { + }, + 'createdOn': { + }, + 'description': { + }, + 'label': { + }, + 'lockedBy': { + }, + 'name': { + }, + 'numStrikes': { + }, + 'operations': { + 'add': [{ + }], + 'delete': [{ + }], + 'exportStrikeList': [{ + }], + 'importStrikeList': [{ + }], + 'load': [{ + }], + 'new': [{ + }], + 'remove': [{ + }], + 'save': [{ + }], + 'saveAs': [{ + }], + 'search': [{ + }] + }, + 'queryString': { + }, + 'revision': { + }, + 'strikes': [{ + 'category': { + }, + 'direction': { + }, + 'fileExtension': { + }, + 'fileSize': { + }, + 'id': { + }, + 'keyword': [{ + 'name': { + } + }], + 'name': { + }, + 'path': { + }, + 'protocol': { + }, + 'reference': [{ + 'label': { }, - 'sgw_advertised_pgw': { + 'type': { }, - 'lease_address_v6': { + 'value': { + } + }], + 'severity': { + }, + 'strike': { + }, + 'strikeset': { + }, + 'variants': { + }, + 'year': { + } + }] + }, + 'strikes': { + 'category': { + }, + 'direction': { + }, + 'fileExtension': { + }, + 'fileSize': { + }, + 'id': { + }, + 'keyword': [{ + 'name': { + } + }], + 'name': { + }, + 'operations': { + 'search': [{ + }] + }, + 'path': { + }, + 'protocol': { + }, + 'reference': [{ + 'label': { + }, + 'type': { + }, + 'value': { + } + }], + 'severity': { + }, + 'variants': { + }, + 'year': { + } + }, + 'superflow': { + 'actions': [{ + 'actionInfo': [{ + 'description': { }, - 'gateway_ip_address': { + 'label': { }, - 'default_container': { + 'name': { }, - 'id': { + 'realtimeGroup': { }, - 'prefix_length': { + 'units': { } }], - 'mpls_settings': [{ - 'mpls_tags': [{ - 'mpls_ttl': { + 'exflows': { + }, + 'flowid': { + }, + 'flowlabel': { + }, + 'gotoBlock': { + }, + 'id': { + }, + 'label': { + }, + 'matchBlock': { + }, + 'operations': { + 'getActionChoices': [{ + }], + 'getActionInfo': [{ + 'description': { }, - 'mpls_label': { + 'label': { }, - 'mpls_exp': { + 'name': { + }, + 'realtimeGroup': { + }, + 'units': { } + }] + }, + 'params': { + }, + 'source': { + }, + 'type': { + } + }], + 'author': { + }, + 'clazz': { + }, + 'constraints': { + }, + 'createdBy': { + }, + 'createdOn': { + }, + 'description': { + }, + 'estimate_bytes': { + }, + 'estimate_flows': { + }, + 'flows': [{ + 'flowcount': { + }, + 'from': { + }, + 'id': { + }, + 'label': { + }, + 'name': { + }, + 'operations': { + 'getCannedFlows': [{ }], - 'id': { + 'getFlowChoices': [{ + 'author': { + }, + 'clazz': { + }, + 'createdBy': { + }, + 'createdOn': { + }, + 'description': { + }, + 'label': { + }, + 'lockedBy': { + }, + 'revision': { + } + }] + }, + 'params': { + }, + 'singleNP': { + }, + 'to': { + } + }], + 'generated': { + }, + 'hosts': [{ + 'hostname': { + }, + 'id': { + }, + 'iface': { + }, + 'ip': { + 'type': { } + } + }], + 'label': { + }, + 'lockedBy': { + }, + 'name': { + }, + 'operations': { + 'addAction': [{ }], - 'sixrd_ce': [{ - 'sixrd_prefix': { - }, - 'count': { - }, - 'dns': { - }, - 'sixrd_prefix_length': { - }, - 'ip_address': { - }, - 'tags': { - }, - 'br_ip_address': { - }, - 'gateway_ip_address': { - }, - 'netmask': { - }, - 'default_container': { - }, - 'hosts_per_ce': { - }, - 'ip4_mask_length': { - }, - 'id': { - }, - 'enable_stats': { - } + 'addFlow': [{ }], - 'ip_dhcp_hosts': [{ - 'allocation_rate': { - }, - 'count': { - }, - 'tags': { - }, - 'proxy': { - }, - 'ldap': { - }, - 'default_container': { - }, - 'accept_local_offers_only': { + 'addHost': [{ + }], + 'delete': [{ + }], + 'importResource': [{ + }], + 'load': [{ + }], + 'new': [{ + }], + 'removeAction': [{ + }], + 'removeFlow': [{ + }], + 'save': [{ + }], + 'saveAs': [{ + }], + 'search': [{ + }] + }, + 'params': { + }, + 'percentBandwidth': { + }, + 'percentFlows': { + }, + 'revision': { + }, + 'seed': { + }, + 'settings': [{ + 'description': { + }, + 'label': { + }, + 'name': { + }, + 'realtimeGroup': { + }, + 'units': { + } + }], + 'weight': { + } + }, + 'testmodel': { + 'author': { + }, + 'clazz': { + }, + 'component': [{ + '@type:appsim': { + 'app': { + 'fidelity': { + }, + 'removedns': { + }, + 'replace_streams': { + }, + 'streamsPerSuperflow': { + } }, - 'id': { + 'delayStart': { }, - 'behind_snapt': { + 'experimental': { + 'tcpSegmentsBurst': { + }, + 'unify_l4_bufs': { + } }, - 'dns_proxy': { + 'ip': { + 'tos': { + }, + 'ttl': { + } }, - 'enable_stats': { - } - }], - 'enodeb_mme': [{ - 'dns': { + 'ip6': { + 'flowlabel': { + }, + 'hop_limit': { + }, + 'traffic_class': { + } }, - 'plmn': { + 'loadprofile': { + 'label': { + }, + 'name': { + } }, - 'ip_allocation_mode': { + 'profile': { }, - 'enodebs': [{ - 'gateway_ip_address': { + 'rampDist': { + 'down': { }, - 'netmask': { + 'downBehavior': { }, - 'default_container': { + 'steady': { }, - 'enodebCount': { + 'steadyBehavior': { }, - 'ip_address': { + 'synRetryMode': { + }, + 'up': { + }, + 'upBehavior': { } - }], - 'mme_ip_address': { - }, - 'pgw_ip_address': { - }, - 'ue_address': { - }, - 'gateway_ip_address': { - }, - 'netmask': { - }, - 'default_container': { - }, - 'sgw_ip_address': { - }, - 'id': { - } - }], - 'enodeb': [{ - 'dns': { - }, - 'plmn': { }, - 'psn': { + 'rampUpProfile': { + 'increment': { + }, + 'interval': { + }, + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'psn_netmask': { + 'rateDist': { + 'max': { + }, + 'min': { + }, + 'scope': { + }, + 'type': { + }, + 'unit': { + }, + 'unlimited': { + } }, - 'sctp_over_udp': { + 'resources': { + 'expand': { + } }, - 'enodebs': [{ - 'mme_ip_address': { + 'sessions': { + 'allocationOverride': { }, - 'enodebCount': { + 'closeFast': { }, - 'ip_address': { + 'emphasis': { + }, + 'engine': { + }, + 'max': { + }, + 'maxActive': { + }, + 'maxPerSecond': { + }, + 'openFast': { + }, + 'statDetail': { + }, + 'target': { + }, + 'targetMatches': { + }, + 'targetPerSecond': { } - }], - 'gateway_ip_address': { - }, - 'netmask': { }, - 'default_container': { + 'srcPortDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'id': { + 'ssl': { + 'client_record_len': { + }, + 'server_record_len': { + }, + 'sslReuseType': { + }, + 'ssl_client_keylog': { + }, + 'ssl_keylog_max_entries': { + }, + 'upgrade': { + } }, - 'sctp_sport': { + 'tcp': { + 'ack_every_n': { + }, + 'add_timestamps': { + }, + 'aging_time': { + }, + 'aging_time_data_type': { + }, + 'delay_acks': { + }, + 'delay_acks_ms': { + }, + 'disable_ack_piggyback': { + }, + 'dynamic_receive_window_size': { + }, + 'ecn': { + }, + 'handshake_data': { + }, + 'initial_receive_window': { + }, + 'mss': { + }, + 'psh_every_segment': { + }, + 'raw_flags': { + }, + 'reset_at_end': { + }, + 'retries': { + }, + 'retry_quantum_ms': { + }, + 'shutdown_data': { + }, + 'syn_data_padding': { + }, + 'tcp_4_way_close': { + }, + 'tcp_connect_delay_ms': { + }, + 'tcp_icw': { + }, + 'tcp_keepalive_timer': { + }, + 'tcp_window_scale': { + } } - }], - 'ip6_router': [{ - 'hosts_ip_alloc_container': { - }, - 'gateway_ip_address': { - }, - 'default_container': { - }, - 'id': { - }, - 'ip_address': { + }, + '@type:clientsim': { + 'app': { + 'fidelity': { + }, + 'removedns': { + }, + 'replace_streams': { + }, + 'streamsPerSuperflow': { + } }, - 'prefix_length': { - } - }], - 'ip_external_hosts': [{ - 'proxy': { + 'delayStart': { }, - 'count': { + 'ip': { + 'tos': { + }, + 'ttl': { + } }, - 'id': { + 'ip6': { + 'flowlabel': { + }, + 'hop_limit': { + }, + 'traffic_class': { + } }, - 'ip_address': { + 'loadprofile': { + 'label': { + }, + 'name': { + } }, - 'behind_snapt': { + 'rampDist': { + 'down': { + }, + 'downBehavior': { + }, + 'steady': { + }, + 'steadyBehavior': { + }, + 'synRetryMode': { + }, + 'up': { + }, + 'upBehavior': { + } }, - 'tags': { - } - }], - 'interface': [{ - 'ignore_pause_frames': { + 'rampUpProfile': { + 'increment': { + }, + 'interval': { + }, + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'duplicate_mac_address': { + 'rateDist': { + 'max': { + }, + 'min': { + }, + 'scope': { + }, + 'type': { + }, + 'unit': { + }, + 'unlimited': { + } }, - 'description': { + 'resources': { + 'expand': { + } }, - 'packet_filter': { - 'not_dest_port': { + 'sessions': { + 'allocationOverride': { }, - 'not_src_ip': { + 'closeFast': { }, - 'filter': { + 'emphasis': { }, - 'src_ip': { + 'engine': { }, - 'src_port': { + 'max': { }, - 'vlan': { + 'maxActive': { }, - 'not_vlan': { + 'maxPerSecond': { }, - 'dest_ip': { + 'openFast': { }, - 'not_dest_ip': { + 'statDetail': { }, - 'dest_port': { + 'target': { }, - 'not_src_port': { + 'targetMatches': { + }, + 'targetPerSecond': { } }, - 'impairments': { - 'drop': { + 'srcPortDist': { + 'max': { }, - 'corrupt_lt64': { + 'min': { }, - 'rate': { + 'type': { + } + }, + 'ssl': { + 'client_record_len': { }, - 'corrupt_lt256': { + 'server_record_len': { }, - 'corrupt_rand': { + 'sslReuseType': { }, - 'corrupt_chksum': { + 'ssl_client_keylog': { }, - 'corrupt_gt256': { + 'ssl_keylog_max_entries': { }, - 'frack': { + 'upgrade': { } }, - 'mtu': { - }, - 'vlan_key': { - }, - 'number': { - }, - 'use_vnic_mac_address': { - }, - 'mac_address': { - }, - 'id': { - } - }], - 'ds_lite_b4': [{ - 'aftr_addr': { - }, - 'count': { - }, - 'ip_address': { - }, - 'host_ip_base_addr': { - }, - 'ipv6_addr_alloc_mode': { - }, - 'gateway_ip_address': { - }, - 'default_container': { - }, - 'aftr_count': { - }, - 'hosts_ip_increment': { - }, - 'id': { - }, - 'prefix_length': { - }, - 'host_ip_addr_alloc_mode': { - } - }], - 'ip_dns_proxy': [{ - 'dns_proxy_ip_count': { - }, - 'dns_proxy_src_ip_base': { - }, - 'id': { - }, - 'dns_proxy_ip_base': { - }, - 'dns_proxy_src_ip_count': { - } - }], - 'ip6_dns_proxy': [{ - 'dns_proxy_ip_count': { - }, - 'dns_proxy_src_ip_base': { - }, - 'id': { - }, - 'dns_proxy_ip_base': { - }, - 'dns_proxy_src_ip_count': { - } - }], - 'vlan': [{ - 'tpid': { - }, - 'duplicate_mac_address': { - }, - 'description': { - }, - 'mtu': { - }, - 'outer_vlan': { - }, - 'inner_vlan': { - }, - 'mac_address': { - }, - 'default_container': { - }, - 'id': { - } - }], - 'mme_sgw_pgw': [{ - 'ue_info': { - }, - 'max_sessions': { - }, - 'lease_address': { - }, - 'dns': { - }, - 'plmn': { - }, - 'ip_address': { - }, - 'sgw_advertised_sgw': { - }, - 'sgw_advertised_pgw': { - }, - 'lease_address_v6': { - }, - 'gateway_ip_address': { - }, - 'netmask': { - }, - 'default_container': { + 'superflow': { }, - 'id': { + 'tcp': { + 'ack_every_n': { + }, + 'add_timestamps': { + }, + 'aging_time': { + }, + 'aging_time_data_type': { + }, + 'delay_acks': { + }, + 'delay_acks_ms': { + }, + 'disable_ack_piggyback': { + }, + 'dynamic_receive_window_size': { + }, + 'ecn': { + }, + 'handshake_data': { + }, + 'initial_receive_window': { + }, + 'mss': { + }, + 'psh_every_segment': { + }, + 'raw_flags': { + }, + 'reset_at_end': { + }, + 'retries': { + }, + 'retry_quantum_ms': { + }, + 'shutdown_data': { + }, + 'syn_data_padding': { + }, + 'tcp_4_way_close': { + }, + 'tcp_connect_delay_ms': { + }, + 'tcp_icw': { + }, + 'tcp_keepalive_timer': { + }, + 'tcp_window_scale': { + } } - }], - 'ip_mac_static_hosts': [{ - 'mpls_list': [{ - 'id': { + }, + '@type:layer2': { + 'advanced': { + 'ethTypeField': { }, - 'value': { + 'ethTypeVal': { } - }], - 'ip_selection_type': { }, - 'count': { + 'bidirectional': { }, - 'dns': { + 'delayStart': { }, - 'psn': { + 'duration': { + 'disable_nd_probes': { + }, + 'durationFrames': { + }, + 'durationTime': { + } }, - 'psn_netmask': { + 'maxStreams': { }, - 'ip_address': { + 'payload': { + 'data': { + }, + 'dataWidth': { + }, + 'type': { + } }, - 'tags': { + 'payloadAdvanced': { + 'udfDataWidth': { + }, + 'udfLength': { + }, + 'udfMode': { + }, + 'udfOffset': { + } }, - 'proxy': { + 'rateDist': { + 'increment': { + }, + 'max': { + }, + 'min': { + }, + 'ramptype': { + }, + 'rate': { + }, + 'type': { + }, + 'unit': { + } }, - 'maxmbps_per_host': { + 'sizeDist': { + 'increment': { + }, + 'max': { + }, + 'min': { + }, + 'mixlen1': { + }, + 'mixlen10': { + }, + 'mixlen2': { + }, + 'mixlen3': { + }, + 'mixlen4': { + }, + 'mixlen5': { + }, + 'mixlen6': { + }, + 'mixlen7': { + }, + 'mixlen8': { + }, + 'mixlen9': { + }, + 'mixweight1': { + }, + 'mixweight10': { + }, + 'mixweight2': { + }, + 'mixweight3': { + }, + 'mixweight4': { + }, + 'mixweight5': { + }, + 'mixweight6': { + }, + 'mixweight7': { + }, + 'mixweight8': { + }, + 'mixweight9': { + }, + 'rate': { + }, + 'type': { + }, + 'unit': { + } }, - 'gateway_ip_address': { + 'slowStart': { }, - 'netmask': { + 'slowStartFps': { + } + }, + '@type:layer3': { + 'Templates': { + 'TemplateType': { + } }, - 'ldap': { + 'addrGenMode': { }, - 'mac_address': { + 'advancedIPv4': { + 'checksumField': { + }, + 'checksumVal': { + }, + 'lengthField': { + }, + 'lengthVal': { + }, + 'optionHeaderData': { + }, + 'optionHeaderField': { + }, + 'tos': { + }, + 'ttl': { + } }, - 'default_container': { + 'advancedIPv6': { + 'extensionHeaderData': { + }, + 'extensionHeaderField': { + }, + 'flowLabel': { + }, + 'hopLimit': { + }, + 'lengthField': { + }, + 'lengthVal': { + }, + 'nextHeader': { + }, + 'trafficClass': { + } }, - 'id': { + 'advancedUDP': { + 'checksumField': { + }, + 'checksumVal': { + }, + 'lengthField': { + }, + 'lengthVal': { + } }, - 'dns_proxy': { + 'bidirectional': { }, - 'behind_snapt': { + 'delayStart': { }, - 'enable_stats': { - } - }], - 'path_advanced': [{ - 'destination_port_count': { + 'dstPort': { }, - 'destination_port_base': { + 'dstPortMask': { }, - 'source_port_base': { + 'duration': { + 'disable_nd_probes': { + }, + 'durationFrames': { + }, + 'durationTime': { + } }, - 'tags': { + 'enableTCP': { }, - 'enable_external_file': { + 'maxStreams': { }, - 'source_container': { + 'payload': { + 'data': { + }, + 'dataWidth': { + }, + 'type': { + } }, - 'source_port_algorithm': { + 'payloadAdvanced': { + 'udfDataWidth': { + }, + 'udfLength': { + }, + 'udfMode': { + }, + 'udfOffset': { + } }, - 'tuple_limit': { + 'randomizeIP': { }, - 'file': { + 'rateDist': { + 'increment': { + }, + 'max': { + }, + 'min': { + }, + 'ramptype': { + }, + 'rate': { + }, + 'type': { + }, + 'unit': { + } }, - 'destination_port_algorithm': { + 'sizeDist': { + 'increment': { + }, + 'max': { + }, + 'min': { + }, + 'mixlen1': { + }, + 'mixlen10': { + }, + 'mixlen2': { + }, + 'mixlen3': { + }, + 'mixlen4': { + }, + 'mixlen5': { + }, + 'mixlen6': { + }, + 'mixlen7': { + }, + 'mixlen8': { + }, + 'mixlen9': { + }, + 'mixweight1': { + }, + 'mixweight10': { + }, + 'mixweight2': { + }, + 'mixweight3': { + }, + 'mixweight4': { + }, + 'mixweight5': { + }, + 'mixweight6': { + }, + 'mixweight7': { + }, + 'mixweight8': { + }, + 'mixweight9': { + }, + 'rate': { + }, + 'type': { + }, + 'unit': { + } }, - 'destination_container': { + 'slowStart': { }, - 'source_port_count': { + 'slowStartFps': { }, - 'xor_bits': { + 'srcPort': { }, - 'stream_group': { + 'srcPortMask': { }, - 'id': { - } - }], - 'path_basic': [{ - 'source_container': { + 'syncIP': { }, - 'destination_container': { + 'udpDstPortMode': { }, - 'id': { + 'udpSrcPortMode': { } - }], - 'geneve_tep': [{ - 'count': { - }, - 'ip_address': { + }, + '@type:layer3advanced': { + 'Templates': { + 'TemplateType': { + } }, - 'vni_base': { + 'advancedIPv4': { + 'checksumField': { + }, + 'checksumVal': { + }, + 'lengthField': { + }, + 'lengthVal': { + }, + 'optionHeaderData': { + }, + 'optionHeaderField': { + }, + 'tos': { + }, + 'ttl': { + } }, - 'gateway_ip_address': { + 'advancedIPv6': { + 'extensionHeaderData': { + }, + 'extensionHeaderField': { + }, + 'flowLabel': { + }, + 'hopLimit': { + }, + 'lengthField': { + }, + 'lengthVal': { + }, + 'nextHeader': { + }, + 'trafficClass': { + } }, - 'netmask': { + 'advancedUDP': { + 'checksumField': { + }, + 'checksumVal': { + }, + 'lengthField': { + }, + 'lengthVal': { + } }, - 'default_container': { + 'bidirectional': { }, - 'id': { + 'delayStart': { }, - 'vni_count': { - } - }], - 'pgw': [{ - 'max_sessions': { + 'duration': { + 'disable_nd_probes': { + }, + 'durationFrames': { + }, + 'durationTime': { + } }, - 'lease_address': { + 'enablePerStreamStats': { }, - 'dns': { + 'enableTCP': { }, - 'plmn': { + 'payload': { + 'data': { + }, + 'dataWidth': { + }, + 'type': { + } }, - 'ip_address': { + 'payloadAdvanced': { + 'udfDataWidth': { + }, + 'udfLength': { + }, + 'udfMode': { + }, + 'udfOffset': { + } }, - 'lease_address_v6': { + 'rateDist': { + 'increment': { + }, + 'max': { + }, + 'min': { + }, + 'ramptype': { + }, + 'rate': { + }, + 'type': { + }, + 'unit': { + } }, - 'gateway_ip_address': { + 'sizeDist': { + 'increment': { + }, + 'max': { + }, + 'min': { + }, + 'mixlen1': { + }, + 'mixlen10': { + }, + 'mixlen2': { + }, + 'mixlen3': { + }, + 'mixlen4': { + }, + 'mixlen5': { + }, + 'mixlen6': { + }, + 'mixlen7': { + }, + 'mixlen8': { + }, + 'mixlen9': { + }, + 'mixweight1': { + }, + 'mixweight10': { + }, + 'mixweight2': { + }, + 'mixweight3': { + }, + 'mixweight4': { + }, + 'mixweight5': { + }, + 'mixweight6': { + }, + 'mixweight7': { + }, + 'mixweight8': { + }, + 'mixweight9': { + }, + 'rate': { + }, + 'type': { + }, + 'unit': { + } }, - 'netmask': { + 'slowStart': { }, - 'default_container': { + 'slowStartFps': { }, - 'id': { + 'tuple_gen_seed': { } - }], - 'pgw6': [{ - 'max_sessions': { - }, - 'lease_address': { + }, + '@type:layer4': { + 'delayStart': { }, - 'dns': { + 'dstPortDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'plmn': { + 'ip': { + 'tos': { + }, + 'ttl': { + } }, - 'ip_address': { + 'ip6': { + 'flowlabel': { + }, + 'hop_limit': { + }, + 'traffic_class': { + } }, - 'lease_address_v6': { + 'loadprofile': { + 'label': { + }, + 'name': { + } }, - 'gateway_ip_address': { + 'packetsPerSession': { }, - 'default_container': { + 'payload': { + 'add_timestamp': { + }, + 'data': { + }, + 'http_type': { + }, + 'transport': { + }, + 'type': { + } }, - 'id': { + 'payloadSizeDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'prefix_length': { - } - }], - 'sgsn6': [{ - 'gateway_ip_address': { + 'rampDist': { + 'down': { + }, + 'downBehavior': { + }, + 'steady': { + }, + 'steadyBehavior': { + }, + 'synRetryMode': { + }, + 'up': { + }, + 'upBehavior': { + } }, - 'default_container': { + 'rampUpProfile': { + 'increment': { + }, + 'interval': { + }, + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'ggsn_ip_address': { + 'rateDist': { + 'max': { + }, + 'min': { + }, + 'scope': { + }, + 'type': { + }, + 'unit': { + }, + 'unlimited': { + } }, - 'id': { + 'sessions': { + 'allocationOverride': { + }, + 'closeFast': { + }, + 'emphasis': { + }, + 'engine': { + }, + 'max': { + }, + 'maxActive': { + }, + 'maxPerSecond': { + }, + 'openFast': { + }, + 'statDetail': { + }, + 'target': { + }, + 'targetMatches': { + }, + 'targetPerSecond': { + } }, - 'ip_address': { + 'srcPortDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'prefix_length': { + 'tcp': { + 'ack_every_n': { + }, + 'add_timestamps': { + }, + 'aging_time': { + }, + 'aging_time_data_type': { + }, + 'delay_acks': { + }, + 'delay_acks_ms': { + }, + 'disable_ack_piggyback': { + }, + 'dynamic_receive_window_size': { + }, + 'ecn': { + }, + 'handshake_data': { + }, + 'initial_receive_window': { + }, + 'mss': { + }, + 'psh_every_segment': { + }, + 'raw_flags': { + }, + 'reset_at_end': { + }, + 'retries': { + }, + 'retry_quantum_ms': { + }, + 'shutdown_data': { + }, + 'syn_data_padding': { + }, + 'tcp_4_way_close': { + }, + 'tcp_connect_delay_ms': { + }, + 'tcp_icw': { + }, + 'tcp_keepalive_timer': { + }, + 'tcp_window_scale': { + } } - }], - 'ip6_static_hosts': [{ - 'mpls_list': [{ - 'id': { + }, + '@type:liveappsim': { + 'app': { + 'fidelity': { }, - 'value': { + 'removeUnknownSSL': { + }, + 'removeUnknownTcpUdp': { + }, + 'removedns': { + }, + 'replace_streams': { + }, + 'streamsPerSuperflow': { } - }], - 'ip_alloc_container': { }, - 'ip_selection_type': { + 'concurrencyscalefactor': { }, - 'count': { + 'delayStart': { }, - 'dns': { + 'inflateDeflate': { }, - 'ip_address': { + 'ip': { + 'tos': { + }, + 'ttl': { + } }, - 'tags': { + 'ip6': { + 'flowlabel': { + }, + 'hop_limit': { + }, + 'traffic_class': { + } }, - 'proxy': { + 'liveProfile': { }, - 'maxmbps_per_host': { + 'loadprofile': { + 'label': { + }, + 'name': { + } }, - 'gateway_ip_address': { + 'rampDist': { + 'down': { + }, + 'downBehavior': { + }, + 'steady': { + }, + 'steadyBehavior': { + }, + 'synRetryMode': { + }, + 'up': { + }, + 'upBehavior': { + } }, - 'default_container': { + 'rampUpProfile': { + 'increment': { + }, + 'interval': { + }, + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'id': { + 'rateDist': { + 'max': { + }, + 'min': { + }, + 'scope': { + }, + 'type': { + }, + 'unit': { + }, + 'unlimited': { + } }, - 'host_ipv6_addr_alloc_mode': { + 'sessions': { + 'allocationOverride': { + }, + 'closeFast': { + }, + 'emphasis': { + }, + 'engine': { + }, + 'max': { + }, + 'maxActive': { + }, + 'maxPerSecond': { + }, + 'openFast': { + }, + 'statDetail': { + }, + 'target': { + }, + 'targetMatches': { + }, + 'targetPerSecond': { + } }, - 'prefix_length': { + 'sfratescalefactor': { }, - 'dns_proxy': { + 'srcPortDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'behind_snapt': { + 'tcp': { + 'ack_every_n': { + }, + 'add_timestamps': { + }, + 'aging_time': { + }, + 'aging_time_data_type': { + }, + 'delay_acks': { + }, + 'delay_acks_ms': { + }, + 'disable_ack_piggyback': { + }, + 'dynamic_receive_window_size': { + }, + 'ecn': { + }, + 'handshake_data': { + }, + 'initial_receive_window': { + }, + 'mss': { + }, + 'psh_every_segment': { + }, + 'raw_flags': { + }, + 'reset_at_end': { + }, + 'retries': { + }, + 'retry_quantum_ms': { + }, + 'shutdown_data': { + }, + 'syn_data_padding': { + }, + 'tcp_4_way_close': { + }, + 'tcp_connect_delay_ms': { + }, + 'tcp_icw': { + }, + 'tcp_keepalive_timer': { + }, + 'tcp_window_scale': { + } }, - 'enable_stats': { + 'tputscalefactor': { } - }], - 'enodeb_mme_sgw': [{ - 'dns': { + }, + '@type:playback': { + 'behavior': { }, - 'plmn': { + 'delayStart': { }, - 'ip_allocation_mode': { + 'file': { }, - 'mme_ip_address': { + 'ip': { + 'tos': { + }, + 'ttl': { + } }, - 'pgw_ip_address': { + 'ip6': { + 'flowlabel': { + }, + 'hop_limit': { + }, + 'traffic_class': { + } }, - 'ue_address': { + 'loadprofile': { + 'label': { + }, + 'name': { + } }, - 'gateway_ip_address': { + 'modification': { + 'bpfstring': { + }, + 'endpacket': { + }, + 'independentflows': { + }, + 'loopcount': { + }, + 'newport': { + }, + 'originalport': { + }, + 'replay': { + }, + 'serveripinjection': { + }, + 'single': { + }, + 'startpacket': { + } }, - 'netmask': { + 'rampDist': { + 'down': { + }, + 'downBehavior': { + }, + 'steady': { + }, + 'steadyBehavior': { + }, + 'synRetryMode': { + }, + 'up': { + }, + 'upBehavior': { + } }, - 'default_container': { + 'rampUpProfile': { + 'increment': { + }, + 'interval': { + }, + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'id': { - } - }], - 'enodeb6': [{ - 'dns': { + 'rateDist': { + 'max': { + }, + 'min': { + }, + 'scope': { + }, + 'type': { + }, + 'unit': { + }, + 'unlimited': { + } }, - 'plmn': { + 'sessions': { + 'allocationOverride': { + }, + 'closeFast': { + }, + 'emphasis': { + }, + 'engine': { + }, + 'max': { + }, + 'maxActive': { + }, + 'maxPerSecond': { + }, + 'openFast': { + }, + 'statDetail': { + }, + 'target': { + }, + 'targetMatches': { + }, + 'targetPerSecond': { + } }, - 'sctp_over_udp': { + 'srcPortDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'enodebs': [{ - 'mme_ip_address': { + 'tcp': { + 'ack_every_n': { + }, + 'add_timestamps': { + }, + 'aging_time': { + }, + 'aging_time_data_type': { + }, + 'delay_acks': { + }, + 'delay_acks_ms': { + }, + 'disable_ack_piggyback': { + }, + 'dynamic_receive_window_size': { + }, + 'ecn': { + }, + 'handshake_data': { + }, + 'initial_receive_window': { + }, + 'mss': { + }, + 'psh_every_segment': { + }, + 'raw_flags': { + }, + 'reset_at_end': { + }, + 'retries': { + }, + 'retry_quantum_ms': { + }, + 'shutdown_data': { + }, + 'syn_data_padding': { + }, + 'tcp_4_way_close': { + }, + 'tcp_connect_delay_ms': { + }, + 'tcp_icw': { }, - 'enodebCount': { + 'tcp_keepalive_timer': { }, - 'ip_address': { + 'tcp_window_scale': { } - }], - 'gateway_ip_address': { - }, - 'default_container': { - }, - 'id': { - }, - 'prefix_length': { - }, - 'sctp_sport': { - } - }], - 'slaac_cfg': [{ - 'use_rand_addr': { - }, - 'enable_dad': { - }, - 'id': { - }, - 'stateless_dhcpv6c_cfg': { - }, - 'fallback_ip_address': { - } - }], - 'ip_dns_config': [{ - 'dns_domain': { - }, - 'id': { - }, - 'dns_server_address': { } - }], - 'ip_dhcp_server': [{ - 'lease_address': { - }, - 'count': { - }, - 'dns': { + }, + '@type:security_all': { + 'attackPlan': { }, - 'ip_address': { + 'attackPlanIterationDelay': { }, - 'gateway_ip_address': { + 'attackPlanIterations': { }, - 'netmask': { + 'attackProfile': { }, - 'lease_time': { + 'attackRetries': { }, - 'default_container': { + 'delayStart': { }, - 'id': { + 'maxAttacksPerSecond': { }, - 'accept_local_requests_only': { - } - }], - 'ip6_dns_config': [{ - 'dns_domain': { + 'maxConcurrAttacks': { }, - 'id': { + 'maxPacketsPerSecond': { }, - 'dns_server_address': { + 'randomSeed': { } - }], - 'ipsec_config': [{ - 'ike_dh': { - }, - 'ipsec_lifetime': { - }, - 'ike_pfs': { - }, - 'ike_mode': { - }, - 'ike_1to1': { - }, - 'nat_traversal': { - }, - 'xauth_username': { - }, - 'ike_encr_alg': { - }, - 'psk': { + }, + '@type:security_np': { + 'attackPlan': { }, - 'dpd_enabled': { + 'attackPlanIterationDelay': { }, - 'dpd_timeout': { + 'attackPlanIterations': { }, - 'init_rate': { + 'attackProfile': { }, - 'setup_timeout': { + 'attackRetries': { }, - 'esp_encr_alg': { + 'delayStart': { }, - 'ike_lifetime': { + 'randomSeed': { }, - 'ike_version': { + 'rateDist': { + 'max': { + }, + 'min': { + }, + 'scope': { + }, + 'type': { + }, + 'unit': { + }, + 'unlimited': { + } }, - 'id': { + 'sessions': { + 'max': { + }, + 'maxPerSecond': { + } + } + }, + '@type:stackscrambler': { + 'delayStart': { }, - 'left_id': { + 'dstPortDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'ike_prf_alg': { + 'ip': { + 'tos': { + }, + 'ttl': { + } }, - 'esp_auth_alg': { + 'ip6': { + 'flowlabel': { + }, + 'hop_limit': { + }, + 'traffic_class': { + } }, - 'dpd_delay': { + 'loadprofile': { + 'label': { + }, + 'name': { + } }, - 'xauth_password': { + 'payload': { + 'data': { + }, + 'transport': { + }, + 'type': { + } }, - 'initial_contact': { + 'payloadSizeDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'debug_log': { + 'prng': { + 'offset': { + }, + 'seed': { + } }, - 'wildcard_tsr': { + 'rampDist': { + 'down': { + }, + 'downBehavior': { + }, + 'steady': { + }, + 'steadyBehavior': { + }, + 'synRetryMode': { + }, + 'up': { + }, + 'upBehavior': { + } }, - 'rekey_margin': { + 'rampUpProfile': { + 'increment': { + }, + 'interval': { + }, + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'ike_auth_alg': { + 'rateDist': { + 'max': { + }, + 'min': { + }, + 'scope': { + }, + 'type': { + }, + 'unit': { + }, + 'unlimited': { + } }, - 'right_id': { + 'scrambleOptions': { + 'badEthType': { + }, + 'badGTPFlags': { + }, + 'badGTPLen': { + }, + 'badGTPNext': { + }, + 'badGTPNpdu': { + }, + 'badGTPSeqno': { + }, + 'badGTPType': { + }, + 'badICMPCode': { + }, + 'badICMPType': { + }, + 'badIPChecksum': { + }, + 'badIPFlags': { + }, + 'badIPFlowLabel': { + }, + 'badIPFragOffset': { + }, + 'badIPLength': { + }, + 'badIPOptions': { + }, + 'badIPProtocol': { + }, + 'badIPTOS': { + }, + 'badIPTTL': { + }, + 'badIPTotalLength': { + }, + 'badIPVersion': { + }, + 'badL4Checksum': { + }, + 'badL4HeaderLength': { + }, + 'badSCTPChecksum': { + }, + 'badSCTPFlags': { + }, + 'badSCTPLength': { + }, + 'badSCTPType': { + }, + 'badSCTPVerificationTag': { + }, + 'badTCPFlags': { + }, + 'badTCPOptions': { + }, + 'badUrgentPointer': { + }, + 'handshakeTCP': { + }, + 'maxCorruptions': { + } }, - 'max_outstanding': { + 'sessions': { + 'allocationOverride': { + }, + 'closeFast': { + }, + 'emphasis': { + }, + 'engine': { + }, + 'max': { + }, + 'maxActive': { + }, + 'maxPerSecond': { + }, + 'openFast': { + }, + 'statDetail': { + }, + 'target': { + }, + 'targetMatches': { + }, + 'targetPerSecond': { + } }, - 'retrans_interval': { + 'srcPortDist': { + 'max': { + }, + 'min': { + }, + 'type': { + } }, - 'enable_xauth': { + 'tcp': { + 'ack_every_n': { + }, + 'add_timestamps': { + }, + 'aging_time': { + }, + 'aging_time_data_type': { + }, + 'delay_acks': { + }, + 'delay_acks_ms': { + }, + 'disable_ack_piggyback': { + }, + 'dynamic_receive_window_size': { + }, + 'ecn': { + }, + 'handshake_data': { + }, + 'initial_receive_window': { + }, + 'mss': { + }, + 'psh_every_segment': { + }, + 'raw_flags': { + }, + 'reset_at_end': { + }, + 'retries': { + }, + 'retry_quantum_ms': { + }, + 'shutdown_data': { + }, + 'syn_data_padding': { + }, + 'tcp_4_way_close': { + }, + 'tcp_connect_delay_ms': { + }, + 'tcp_icw': { + }, + 'tcp_keepalive_timer': { + }, + 'tcp_window_scale': { + } } - }], - 'dhcpv6c_cfg': [{ - 'dhcp6c_max_outstanding': { - }, - 'dhcp6c_duid_type': { - }, - 'dhcp6c_ia_type': { - }, - 'dhcp6c_req_opts_config': { - }, - 'dhcp6c_tout_and_retr_config': { - }, - 'dhcp6c_renew_timer': { - }, - 'dhcp6c_ia_t2': { + }, + 'active': { + }, + 'author': { + }, + 'clazz': { + }, + 'createdBy': { + }, + 'createdOn': { + }, + 'description': { + }, + 'id': { + }, + 'label': { + }, + 'lockedBy': { + }, + 'operations': { + 'getComponentPresetNames': [{ + }] + }, + 'originalPreset': { + }, + 'originalPresetLabel': { + }, + 'reportResults': { + }, + 'revision': { + }, + 'tags': [{ + 'domainId': { + 'external': { + }, + 'iface': { + }, + 'name': { + } }, 'id': { }, - 'dhcp6c_ia_t1': { - }, - 'dhcp6c_initial_srate': { + 'type': { } - }] + }], + 'timeline': { + 'timesegment': [{ + 'label': { + }, + 'size': { + }, + 'type': { + } + }] + }, + 'type': { + } + }], + 'createdBy': { }, 'createdOn': { }, - 'clazz': { + 'description': { }, - 'revision': { + 'duration': { + }, + 'label': { + }, + 'lastrun': { + }, + 'lastrunby': { + }, + 'lockedBy': { + }, + 'name': { + }, + 'network': { }, 'operations': { - 'search': [{ + 'add': [{ + }], + 'clone': [{ }], 'delete': [{ }], - 'importNetwork': [{ + 'exportModel': [{ }], - 'saveAs': [{ + 'importModel': [{ + }], + 'load': [{ + }], + 'new': [{ + }], + 'realTimeStats': [{ + }], + 'remove': [{ + }], + 'run': [{ }], 'save': [{ }], - 'list': [{ + 'saveAs': [{ }], - 'load': [{ + 'search': [{ }], - 'new': [{ + 'stopRun': [{ }] - } - }, - 'strikes': { - 'severity': { }, - 'year': { + 'result': { }, - 'variants': { + 'revision': { }, - 'reference': [{ - 'label': { + 'sharedComponentSettings': { + 'maxFlowCreationRate': { + 'content': { + }, + 'current': { + }, + 'original': { + } + }, + 'maximumConcurrentFlows': { + 'content': { + }, + 'current': { + }, + 'original': { + } + }, + 'samplePeriod': { + 'content': { + }, + 'current': { + }, + 'original': { + } }, - 'type': { + 'totalAddresses': { + 'content': { + }, + 'current': { + }, + 'original': { + } }, - 'value': { + 'totalAttacks': { + 'content': { + }, + 'current': { + }, + 'original': { + } + }, + 'totalBandwidth': { + 'content': { + }, + 'current': { + }, + 'original': { + } } - }], - 'path': { - }, - 'protocol': { - }, - 'fileSize': { - }, - 'fileExtension': { - }, - 'name': { - }, - 'id': { }, - 'category': { + 'summaryInfo': { + 'requiredMTU': { + }, + 'totalMacAddresses': { + }, + 'totalSubnets': { + }, + 'totalUniqueStrikes': { + }, + 'totalUniqueSuperflows': { + } }, - 'keyword': [{ + 'testComponentTypesDescription': [{ + 'description': { + }, + 'label': { + }, 'name': { + }, + 'template': { + }, + 'type': { } - }], - 'direction': { - }, - 'operations': { - 'search': [{ - }] - } + }] }, - 'reports': { - 'endtime': { - }, - 'starttime': { - }, - 'label': { - }, - 'testname': { - }, - 'network': { - }, - 'duration': { - }, - 'result': { - }, - 'size': { - }, - 'isPartOfResiliency': { - }, - 'name': { - }, - 'iteration': { + 'topology': { + 'chain': { + 'name': { + }, + 'remotes': { + } }, - 'testid': { - 'host': { + 'cnState': [{ + 'cnId': { }, - 'name': { + 'cnName': { }, - 'iteration': { + 'cnSerial': { + }, + 'cnSlotNo': { + }, + 'firmwareUpgrade': { + }, + 'licensed': { + }, + 'marketingName': { + }, + 'state': { } + }], + 'ixos': { }, - 'user': { + 'ixoslicensed': { + }, + 'model': { }, 'operations': { - 'delete': [{ + 'addPortNote': [{ }], - 'exportReport': [{ + 'addResourceNote': [{ }], - 'getReportContents': [{ + 'exportCapture': [{ }], - 'getReportTable': [{ + 'getFanoutModes': [{ + 'cardModel': { + }, + 'fanout': [{ + 'fanoutId': { + }, + 'name': { + } + }] }], - 'search': [{ + 'getPortAvailableModes': [{ + 'modes': [{ + 'fanoutId': { + }, + 'name': { + } + }], + 'port': { + }, + 'slot': { + } + }], + 'reboot': [{ + }], + 'rebootComputeNode': [{ + }], + 'releaseAllCnResources': [{ + }], + 'releaseResource': [{ + }], + 'releaseResources': [{ + }], + 'reserve': [{ + }], + 'reserveAllCnResources': [{ + }], + 'reserveResource': [{ + }], + 'reserveResources': [{ + }], + 'run': [{ + }], + 'setCardFanout': [{ + }], + 'setCardMode': [{ + }], + 'setCardSpeed': [{ + }], + 'setPerfAcc': [{ + }], + 'setPortFanoutMode': [{ + }], + 'setPortSettings': [{ + }], + 'softReboot': [{ + }], + 'stopRun': [{ + }], + 'unreserve': [{ }] - } - }, - 'appProfile': { - 'weightType': { - }, - 'lockedBy': { - }, - 'createdBy': { }, - 'author': { + 'resourceOverview': { + 'resourceOverviewList': [{ + 'l23Count': { + }, + 'l47Count': { + }, + 'portCount': { + }, + 'userAndGroup': { + } + }] }, - 'name': { + 'runningTest': [{ + 'capturing': { + }, + 'completed': { + }, + 'currentTest': { + }, + 'initProgress': { + }, + 'label': { + }, + 'phase': { + }, + 'port': [{ + }], + 'progress': { + }, + 'reservedEngines': [{ + }], + 'result': { + }, + 'runtime': { + }, + 'state': { + }, + 'testid': { + 'host': { + }, + 'iteration': { + }, + 'name': { + } + }, + 'timeRemaining': { + }, + 'user': { + } + }], + 'serialNumber': { }, - 'superflow': [{ - 'settings': [{ + 'slot': [{ + 'firmwareUpgrade': { + }, + 'fpga': [{ + 'group': { + }, + 'id': { + }, 'name': { }, - 'description': { + 'note': { }, - 'realtimeGroup': { + 'reservedBy': { }, - 'label': { + 'resourceType': { }, - 'units': { + 'state': { } }], - 'percentFlows': { - }, - 'seed': { - }, - 'author': { - }, - 'estimate_bytes': { - }, - 'estimate_flows': { - }, - 'weight': { - }, - 'description': { - }, - 'label': { - }, - 'params': { - }, - 'constraints': { - }, - 'createdOn': { - }, - 'revision': { + 'id': { }, - 'lockedBy': { + 'interfaceCount': { }, - 'generated': { + 'mode': { }, - 'createdBy': { + 'model': { }, - 'percentBandwidth': { + 'np': [{ + 'cnId': { + }, + 'group': { + }, + 'id': { + }, + 'name': { + }, + 'note': { + }, + 'reservedBy': { + }, + 'resourceType': { + }, + 'state': { + } + }], + 'port': [{ + 'active': { + }, + 'auto': { + }, + 'capture': { + }, + 'capturing': { + }, + 'currentMode': { + }, + 'exportProgress': { + }, + 'fullduplex': { + }, + 'group': { + }, + 'id': { + }, + 'ifmacaddr': { + }, + 'ifname': { + }, + 'ignorepause': { + }, + 'link': { + }, + 'media': { + }, + 'model': { + }, + 'mtu': { + }, + 'note': { + }, + 'number': { + }, + 'owner': { + }, + 'pcap': [{ + 'rxbytes': { + }, + 'rxframes': { + }, + 'txbytes': { + }, + 'txframes': { + } + }], + 'portGroup': { + }, + 'possibleModes': { + }, + 'precoder': { + }, + 'reservedBy': { + }, + 'speed': { + }, + 'state': { + } + }], + 'remoteInfo': { + 'host': { + }, + 'slotId': { + }, + 'state': { + } }, - 'name': { + 'serialNumber': { }, - 'clazz': { + 'state': { } - }], - 'description': { - }, - 'label': { - }, - 'createdOn': { - }, - 'clazz': { - }, - 'revision': { - }, - 'operations': { - 'add': [{ - }], - 'exportAppProfile': [{ - }], - 'importAppProfile': [{ - }], - 'delete': [{ - }], - 'remove': [{ - }], - 'search': [{ - }], - 'load': [{ - }], - 'new': [{ - }], - 'recompute': [{ - }], - 'saveAs': [{ - }], - 'save': [{ - }] - } - }, - 'remote': { - 'operations': { - 'connectChassis': [{ - }], - 'disconnectChassis': [{ - }] - } + }] } } - @staticmethod - def _get_from_model(path): - model_data = DataModelMeta._dataModel - model_path = "" - for path_part in path.split('/'): - if len(path_part) == 0: continue - if isinstance(model_data, list): - model_data = model_data[0] - continue - if path_part not in model_data: return (None, None) - model_data = model_data[path_part] - model_path = model_path + "/" + path_part - return (model_path, model_data) - - @staticmethod - def _decorate_model_object_operations(data_model, data_model_path, obj): - if 'operations' not in data_model: - return - for operation in data_model['operations']: - if obj.__full_path__().replace("/", "") == '': - continue - method_name = data_model_path.replace("/", "_") + '_operations_' + operation - setattr(obj, operation, obj._wrapper.__getattribute__(method_name).__get__(obj)) - setattr(getattr(obj, operation).__func__, '__name__', operation) + def __call__(cls, *args, **kwds): + return DataModelMeta._decorate_model_object(type.__call__(cls, *args, **kwds)) @staticmethod def _decorate_model_object(obj): @@ -6332,8 +6405,30 @@ def _decorate_model_object(obj): setattr(obj, extField, DataModelProxy(wrapper=obj._wrapper, name=extField, path=ext_path, model_path=ext_dm_path)) return obj - def __call__(cls, *args, **kwds): - return DataModelMeta._decorate_model_object(type.__call__(cls, *args, **kwds)) + @staticmethod + def _decorate_model_object_operations(data_model, data_model_path, obj): + if 'operations' not in data_model: + return + for operation in data_model['operations']: + if obj.__full_path__().replace("/", "") == '': + continue + method_name = data_model_path.replace("/", "_") + '_operations_' + operation + setattr(obj, operation, obj._wrapper.__getattribute__(method_name).__get__(obj)) + setattr(getattr(obj, operation).__func__, '__name__', operation) + + @staticmethod + def _get_from_model(path): + model_data = DataModelMeta._dataModel + model_path = "" + for path_part in path.split('/'): + if len(path_part) == 0: continue + if isinstance(model_data, list): + model_data = model_data[0] + continue + if path_part not in model_data: return (None, None) + model_data = model_data[path_part] + model_path = model_path + "/" + path_part + return (model_path, model_data) class DataModelProxy(object, metaclass = DataModelMeta): @@ -6347,43 +6442,43 @@ def __init__(self, wrapper, name, path='', model_path=None): else: self._model_path = model_path - def __full_path__(self): - return '%s/%s' % (self._path, self._name) + def __cached_get__(self, field): + if field not in self.__cache: self.__cache[field] = self._wrapper._BPS__get(self.__data_model_path__()+"/"+field) + return self.__cache[field] def __data_model_path__(self): return '%s/%s' % (self._model_path, self._name) - def __url__(self): - return 'https://%s/bps/api/v2/core%s' % (self._wrapper.host, self.__full_path__()) - - def __repr__(self): - return 'proxy object for \'%s\' ' % (self.__url__()) + def __full_path__(self): + return '%s/%s' % (self._path, self._name) def __getitem__(self, item): return self._getitem_(item) - def get(self, responseDepth=None, **kwargs): - return self._wrapper._get(self._path+'/'+self._name, responseDepth, **kwargs) - - def __cached_get__(self, field): - if field not in self.__cache: self.__cache[field] = self._wrapper._get(self.__data_model_path__()+"/"+field) - return self.__cache[field] - - def patch(self, value): - return self._wrapper._patch(self._path+'/'+self._name, value) - - def set(self, value): - return self.patch(value) + def __repr__(self): + return 'proxy object for \'%s\' ' % (self.__url__()) - def put(self, value): - return self._wrapper._put(self._path+'/'+self._name, value) + def __url__(self): + return 'https://%s/bps/api/v2/core%s' % (self._wrapper.host, self.__full_path__()) def delete(self): - return self._wrapper._delete(self._path+'/'+self._name) + return self._wrapper._BPS__delete(self._path+'/'+self._name) + + def get(self, responseDepth=None, **kwargs): + return self._wrapper._BPS__get(self._path+'/'+self._name, responseDepth, **kwargs) def help(self): - doc_data = self._wrapper._options(self._path+'/'+self._name) + doc_data = self._wrapper._BPS__options(self._path+'/'+self._name) if doc_data and 'custom' in doc_data: doc_data = doc_data['custom'] if doc_data and 'description' in doc_data: print(doc_data['description']) + + def patch(self, value): + return self._wrapper._BPS__patch(self._path+'/'+self._name, value) + + def put(self, value): + return self._wrapper._BPS__put(self._path+'/'+self._name, value) + + def set(self, value): + return self.patch(value) diff --git a/RestApi/Python/RestApi_v2/Modules/bps_restpy/rest_samples/s07_TestModel_Run.py b/RestApi/Python/RestApi_v2/Modules/bps_restpy/rest_samples/s07_TestModel_Run.py index 0f92773..c9d3504 100644 --- a/RestApi/Python/RestApi_v2/Modules/bps_restpy/rest_samples/s07_TestModel_Run.py +++ b/RestApi/Python/RestApi_v2/Modules/bps_restpy/rest_samples/s07_TestModel_Run.py @@ -29,10 +29,14 @@ test_name = "Test_Model" #bps system info -bps_system = '10.36.66.31' +bps_system = 'aps-m8400-us23051001.lbj.is.keysight.com' bpsuser = 'admin' bpspass = 'admin' +######################################## +#session inactivity - introduced in BreakingPoint 9.38 +inactivityTimeout = 180 + slot_number = 9 port_list = [0, 1] @@ -42,8 +46,16 @@ ######################################## # Login to BPS box bps = BPS(bps_system, bpsuser, bpspass) -bps.login() - +bps.login(inactivityTimeout = inactivityTimeout) + +#session management +sessionList = bps.administration.sessions.list() +for session in sessionList: + if session['user'] == bpsuser: + print ( f'Current user : {bpsuser} session {session["session"]} with\ + inactivity {session["inactivity"]} out of {session["inactivityTimeout"]} seconds') + ##if needed could be closed + #session.close(session=session["session"]) ######################################## print("Create a new test: ")