aboutsummaryrefslogtreecommitdiffstats
path: root/src/vpp-api
AgeCommit message (Expand)AuthorFilesLines
2019-01-06vpp-api: Add context to VPPStatsIOError.Paul Vinciguerra2-7/+29
2018-12-28vpp_papi: MACAddress equals fails in unittest.Paul Vinciguerra2-0/+21
2018-12-18VAPI/VOM: Removing legacy stats tests, add string type.Ole Troan2-0/+2
2018-12-18PAPI: Add MACAddress object wrapper for vl_api_mac_address_tOle Troan4-3/+67
2018-12-13API: Use string type instead of u8.Ole Troan3-17/+80
2018-12-13vapi: code cleanupKlement Sekera1-5/+4
2018-12-12PAPI: Allow ipaddress object as argument and return values from API callsOle Troan4-220/+266
2018-12-10Python API: Use services to determine stream RPCOle Troan1-4/+11
2018-12-10Test framework: StringIO fixes for Python3Ole Troan1-2/+7
2018-12-06stat_client: Fix the type castingMohsin Kazmi2-7/+10
2018-12-06API: Change ip4_address and ip6_address to use type alias.Ole Troan4-20/+39
2018-12-05stat-client: pass names as const stringsNeale Ranns2-4/+4
2018-11-29vpp_papi: Add custom exceptions.Paul Vinciguerra6-54/+121
2018-11-29vpp_papi: Fix: raise NotImplemented.Paul Vinciguerra1-1/+1
2018-11-29API: Add support for type aliasesOle Troan5-23/+87
2018-11-29VPP-1508: vpp_transport_socket.py fix importPaul Vinciguerra1-1/+4
2018-11-28vpp_papi: Reserved keywords.Paul Vinciguerra2-3/+3
2018-11-28vpp_papi: Use new style classes.Paul Vinciguerra6-13/+13
2018-11-26stats: Remove unneeded dependencies in stat_clientOle Troan2-7/+21
2018-11-26vapi: break if parsing progress cannot be madeKlement Sekera1-0/+1
2018-11-22stat_client issues while running parallel tests.Paul Vinciguerra4-52/+162
2018-11-07Unresolved symbols in libvapiclientNeale Ranns1-0/+1
2018-11-05Provide return value for PAPI disconnect()Igor Mikhailov (imichail)2-1/+3
2018-11-05Alter logging semantics for VPP PAPI objectIgor Mikhailov (imichail)1-1/+1
2018-10-23c11 safe string handling supportDave Barach4-13/+14
2018-10-22PAPI: Add support for format/unformat functions.Ole Troan5-12/+247
2018-10-22stats: Add wrapper for vec_freeOle Troan3-0/+8
2018-10-18PAPI: Expose API enums to tests / applicationsOle Troan2-16/+43
2018-10-16PAPI: Add bool type support in vppapigen.Ole Troan1-0/+2
2018-10-16PAPI: Add timeout support for socket transportOle Troan1-3/+6
2018-10-09API: Spurious timeouts from timeout thread.Ole Troan1-13/+27
2018-10-03stat_client.c coverity error.Ole Troan1-2/+0
2018-10-02VPP-1440: clean up coverity warningsDave Barach1-0/+4
2018-10-02Stats: vpp_prometheus_export fixes.Ole Troan1-0/+4
2018-10-02PAPI: Use UNIX domain sockets instead of shared memoryOle Troan5-111/+332
2018-09-27Trivial: Cleanup some typos.Paul Vinciguerra1-1/+1
2018-09-27IPIP and IPv6 fragmentationOle Troan1-1/+2
2018-09-18STATS: Optimistic concurrency handling in Python library.Ole Troan1-4/+24
2018-09-18STATS: Add Python 3 support to vpp_stats.py.Ole Troan2-4/+4
2018-09-17STATS: Dynamically mapped shared memory segmentOle Troan5-264/+270
2018-09-11vapi: support VLAs in typedefsKlement Sekera2-28/+96
2018-09-07cmake: set packaging component for different filesDamjan Marion1-2/+11
2018-09-07VPP-API: Cancel timeout thread without sending READ_TIMEOUT message.Ole Troan1-8/+6
2018-09-07PAPI: Unpack embedded types with variable length arrays.Ole Troan3-36/+97
2018-09-03vapi: init clib mem heap on connect if neededKlement Sekera1-0/+4
2018-09-02STATS: Python binding to access VPP statistics and counters.Ole Troan4-8/+187
2018-09-02Switch to cmakeDamjan Marion2-97/+0
2018-08-30cmake: missing dependenciesDamjan Marion1-2/+2
2018-08-30cmake: a bit of packaging workDamjan Marion1-0/+1
2018-08-29STATS: stat_client updates.Ole Troan4-3/+447
"data does not exist in path.") else: raise HoneycombError( "The configuration of classify table was not successful. " "Status code: {0}.".format(status_code)) return resp @staticmethod def add_classify_table(node, table): """Add a classify table to the list of classify tables. The keyword does not validate given data. :param node: Honeycomb node. :param table: Classify table to be added. :type node: dict :type table: dict :returns: Content of response. :rtype: bytearray """ path = "/classify-table/" + table["name"] data = {"classify-table": [table, ]} return ACLKeywords._set_classify_table_properties(node, path, data) @staticmethod def remove_all_classify_tables(node): """Remove all classify tables defined on the node. :param node: Honeycomb node. :type node: dict :returns: Content of response. :rtype: bytearray """ return ACLKeywords._set_classify_table_properties(node, path="") @staticmethod def remove_classify_table(node, table_name): """Remove the given classify table. :param node: Honeycomb node. :param table_name: Name of the classify table to be removed. :type node: dict :type table_name: str :returns: Content of response. :rtype: bytearray """ path = "/classify-table/" + table_name return ACLKeywords._set_classify_table_properties(node, path) @staticmethod def get_all_classify_tables_oper_data(node): """Get operational data about all classify tables present on the node. :param node: Honeycomb node. :type node: dict :returns: List of classify tables. :rtype: list """ status_code, resp = HcUtil.\ get_honeycomb_data(node, "oper_classify_table") if status_code != HTTPCodes.OK: raise HoneycombError( "Not possible to get operational information about the " "classify tables. Status code: {0}.".format(status_code)) return resp["vpp-classifier-state"]["classify-table"] @staticmethod def get_classify_table_oper_data(node, table_name): """Get operational data about the given classify table. :param node: Honeycomb node. :param table_name: Name of the classify table. :type node: dict :type table_name: str :returns: Operational data about the given classify table. :rtype: dict """ tables = ACLKeywords.get_all_classify_tables_oper_data(node) for table in tables: if table["name"] == table_name: return table raise HoneycombError("Table {0} not found in ACL table list.".format( table_name)) @staticmethod def get_all_classify_tables_cfg_data(node): """Get configuration data about all classify tables present on the node. :param node: Honeycomb node. :type node: dict :returns: List of classify tables. :rtype: list """ status_code, resp = HcUtil.\ get_honeycomb_data(node, "config_classify_table") if status_code != HTTPCodes.OK: raise HoneycombError( "Not possible to get operational information about the " "classify tables. Status code: {0}.".format(status_code)) try: return resp["vpp-classifier"]["classify-table"] except (KeyError, TypeError): return [] @staticmethod def add_classify_session(node, table_name, session): """Add a classify session to the classify table. :param node: Honeycomb node. :param table_name: Name of the classify table. :param session: Classify session to be added to the classify table. :type node: dict :type table_name: str :type session: dict :returns: Content of response. :rtype: bytearray """ path = "/classify-table/" + table_name + \ "/classify-session/" + session["match"] data = {"classify-session": [session, ]} return ACLKeywords._set_classify_table_properties(node, path, data) @staticmethod def remove_classify_session(node, table_name, session_match): """Remove the given classify session from the classify table. :param node: Honeycomb node. :param table_name: Name of the classify table. :param session_match: Classify session match. :type node: dict :type table_name: str :type session_match: str :returns: Content of response. :rtype: bytearray """ path = "/classify-table/" + table_name + \ "/classify-session/" + session_match return ACLKeywords._set_classify_table_properties(node, path) @staticmethod def get_all_classify_sessions_oper_data(node, table_name): """Get operational data about all classify sessions in the classify table. :param node: Honeycomb node. :param table_name: Name of the classify table. :type node: dict :type table_name: str :returns: List of classify sessions present in the classify table. :rtype: list """ table_data = ACLKeywords.get_classify_table_oper_data(node, table_name) return table_data["classify-session"] @staticmethod def get_classify_session_oper_data(node, table_name, session_match): """Get operational data about the given classify session in the classify table. :param node: Honeycomb node. :param table_name: Name of the classify table. :param session_match: Classify session match. :type node: dict :type table_name: str :type session_match: str :returns: Classify session operational data. :rtype: dict :raises HoneycombError: If no session the specified match Id is found. """ sessions = ACLKeywords.get_all_classify_sessions_oper_data( node, table_name) for session in sessions: if session["match"] == session_match: return session raise HoneycombError( "Session with match value \"{0}\" not found" " under ACL table {1}.".format(session_match, table_name)) @staticmethod def create_acl_plugin_classify_chain(node, list_name, data, macip=False): """Create classify chain using the ietf-acl node. :param node: Honeycomb node. :param list_name: Name for the classify list. :param data: Dictionary of settings to send to Honeycomb. :param macip: Use simple MAC+IP classifier. Optional. :type node: dict :type list_name: str :type data: dict :type macip: bool :returns: Content of response. :rtype: bytearray :raises HoneycombError: If the operation fails. """ if macip: path = "/acl/vpp-acl:vpp-macip-acl/{0}".format(list_name) else: path = "/acl/vpp-acl:vpp-acl/{0}".format(list_name) status_code, resp = HcUtil.put_honeycomb_data( node, "config_plugin_acl", data, path) if status_code not in (HTTPCodes.OK, HTTPCodes.ACCEPTED): raise HoneycombError( "Could not create classify chain." "Status code: {0}.".format(status_code)) return resp @staticmethod def set_acl_plugin_interface(node, interface, acl_name, direction, macip=False): """Assign an interface to an ietf-acl classify chain. :param node: Honeycomb node. :param interface: Name of an interface on the node. :param acl_name: Name of an ACL chain configured through ACL-plugin. :param direction: Classify incoming or outgiong packets. Valid options are: ingress, egress :param macip: Use simple MAC+IP classifier. Optional. :type node: dict :type interface: str or int :type acl_name: str :type direction: str :type macip: bool :returns: Content of response. :rtype: bytearray :raises ValueError: If the direction argument is incorrect. :raises HoneycombError: If the operation fails. """ interface = Topology.convert_interface_reference( node, interface, "name") interface = interface.replace("/", "%2F") if direction not in ("ingress", "egress"): raise ValueError("Unknown traffic direction {0}. " "Valid options are: ingress, egress." .format(direction)) path = "/interface/{0}/interface-acl:acl/{1}".format( interface, direction) if macip: data = { direction: { "vpp-macip-acl": { "type": "vpp-acl:vpp-macip-acl", "name": acl_name } } } else: data = { direction: { "vpp-acls": [ { "type": "vpp-acl:vpp-acl", "name": acl_name } ] } } status_code, resp = HcUtil.put_honeycomb_data( node, "config_vpp_interfaces", data, path) if status_code not in (HTTPCodes.OK, HTTPCodes.ACCEPTED): raise HoneycombError( "Could not configure ACL on interface. " "Status code: {0}.".format(status_code)) return resp @staticmethod def delete_interface_plugin_acls(node, interface): """Remove all plugin-acl assignments from an interface. :param node: Honeycomb node. :param interface: Name of an interface on the node. :type node: dict :type interface: str or int """ interface = Topology.convert_interface_reference( node, interface, "name") interface = interface.replace("/", "%2F") path = "/interface/{0}/interface-acl:acl/".format(interface) status_code, _ = HcUtil.delete_honeycomb_data( node, "config_vpp_interfaces", path) if status_code != HTTPCodes.OK: raise HoneycombError( "Could not remove ACL assignment from interface. " "Status code: {0}.".format(status_code)) @staticmethod def delete_acl_plugin_classify_chains(node): """Remove all plugin-ACL classify chains. :param node: Honeycomb node. :type node: dict """ status_code, _ = HcUtil.delete_honeycomb_data( node, "config_plugin_acl") if status_code != HTTPCodes.OK: raise HoneycombError( "Could not remove plugin-acl chain. " "Status code: {0}.".format(status_code))