+ node, super_interface, path, new_sub_interface_structure)
+
+ @staticmethod
+ def get_sub_interface_oper_data(node, super_interface, identifier):
+ """Retrieves sub-interface operational data using Honeycomb API.
+
+ :param node: Honeycomb node.
+ :param super_interface: Super interface.
+ :param identifier: The ID of sub-interface.
+ :type node: dict
+ :type super_interface: str
+ :type identifier: int
+ :return: Sub-interface operational data.
+ :rtype: dict
+ :raises HoneycombError: If there is no sub-interface with the given ID.
+ """
+
+ if_data = InterfaceKeywords.get_interface_oper_data(node,
+ super_interface)
+ for sub_if in if_data["vpp-vlan:sub-interfaces"]["sub-interface"]:
+ if str(sub_if["identifier"]) == str(identifier):
+ return sub_if
+
+ raise HoneycombError("The interface {0} does not have sub-interface "
+ "with ID {1}".format(super_interface, identifier))
+
+ @staticmethod
+ def remove_all_sub_interfaces(node, super_interface):
+ """Remove all sub-interfaces from the given interface.
+
+ :param node: Honeycomb node.
+ :param super_interface: Super interface.
+ :type node: dict
+ :type super_interface: str
+ :return: Content of response.
+ :rtype: bytearray
+ """
+
+ path = ("interfaces",
+ ("interface", "name", super_interface),
+ "vpp-vlan:sub-interfaces")
+
+ return InterfaceKeywords._set_interface_properties(
+ node, super_interface, path, {})
+
+ @staticmethod
+ def set_sub_interface_state(node, super_interface, identifier, state):
+ """Set the administrative state of sub-interface.
+
+ :param node: Honeycomb node.
+ :param super_interface: Super interface.
+ :param identifier: The ID of sub-interface.
+ :param state: Required sub-interface state - up or down.
+ :type node: dict
+ :type super_interface: str
+ :type identifier: int
+ :type state: str
+ :return: Content of response.
+ :rtype: bytearray
+ """
+
+ intf_state = {"up": "true",
+ "down": "false"}
+
+ path = ("interfaces",
+ ("interface", "name", super_interface),
+ "vpp-vlan:sub-interfaces",
+ ("sub-interface", "identifier", identifier),
+ "enabled")
+
+ return InterfaceKeywords._set_interface_properties(
+ node, super_interface, path, intf_state[state])
+
+ @staticmethod
+ def add_bridge_domain_to_sub_interface(node, super_interface, identifier,
+ config):
+ """Add a sub-interface to a bridge domain and set its parameters.
+
+ :param node: Honeycomb node.
+ :param super_interface: Super interface.
+ :param identifier: The ID of sub-interface.
+ :param config: Bridge domain configuration.
+ :type node: dict
+ :type super_interface: str
+ :type identifier: int
+ :type config: dict
+ :return: Content of response.
+ :rtype: bytearray
+ """
+
+ path = ("interfaces",
+ ("interface", "name", super_interface),
+ "vpp-vlan:sub-interfaces",
+ ("sub-interface", "identifier", int(identifier)),
+ "l2")
+
+ return InterfaceKeywords._set_interface_properties(
+ node, super_interface, path, config)
+
+ @staticmethod
+ def get_bd_data_from_sub_interface(node, super_interface, identifier):
+ """Get the operational data about the bridge domain from sub-interface.
+
+ :param node: Honeycomb node.
+ :param super_interface: Super interface.
+ :param identifier: The ID of sub-interface.
+ :type node: dict
+ :type super_interface: str
+ :type identifier: int
+ :return: Operational data about the bridge domain.
+ :rtype: dict
+ :raises HoneycombError: If there is no sub-interface with the given ID.
+ """
+
+ try:
+ bd_data = InterfaceKeywords.get_sub_interface_oper_data(
+ node, super_interface, identifier)["l2"]
+ return bd_data
+ except KeyError:
+ raise HoneycombError("The operational data does not contain "
+ "information about a bridge domain.")
+
+ @staticmethod
+ def configure_tag_rewrite(node, super_interface, identifier, config):
+ """Add / change / disable vlan tag rewrite on a sub-interface.
+
+ :param node: Honeycomb node.
+ :param super_interface: Super interface.
+ :param identifier: The ID of sub-interface.
+ :param config: Rewrite tag configuration.
+ :type node: dict
+ :type super_interface: str
+ :type identifier: int
+ :type config: dict
+ :return: Content of response.
+ :rtype: bytearray
+ """
+
+ path = ("interfaces",
+ ("interface", "name", super_interface),
+ "vpp-vlan:sub-interfaces",
+ ("sub-interface", "identifier", int(identifier)),
+ "l2",
+ "rewrite")
+
+ return InterfaceKeywords._set_interface_properties(
+ node, super_interface, path, config)