+ 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)