@@ 687-718 (lines=32) @@ | ||
684 | ||
685 | return flow_mod |
|
686 | ||
687 | def _prepare_push_flow(self, *args, queue_id=None): |
|
688 | """Prepare push flow. |
|
689 | ||
690 | Arguments: |
|
691 | in_interface(str): Interface input. |
|
692 | out_interface(str): Interface output. |
|
693 | in_vlan(str): Vlan input. |
|
694 | out_vlan(str): Vlan output. |
|
695 | ||
696 | Return: |
|
697 | dict: An python dictionary representing a FlowMod |
|
698 | ||
699 | """ |
|
700 | # assign all arguments |
|
701 | in_interface, out_interface, in_vlan, out_vlan = args |
|
702 | ||
703 | flow_mod = self._prepare_flow_mod(in_interface, out_interface, |
|
704 | queue_id) |
|
705 | ||
706 | # the service tag must be always pushed |
|
707 | new_action = {"action_type": "set_vlan", "vlan_id": out_vlan} |
|
708 | flow_mod["actions"].insert(0, new_action) |
|
709 | ||
710 | new_action = {"action_type": "push_vlan", "tag_type": "s"} |
|
711 | flow_mod["actions"].insert(0, new_action) |
|
712 | ||
713 | if in_vlan: |
|
714 | # if in_vlan is set, it must be included in the match |
|
715 | flow_mod['match']['dl_vlan'] = in_vlan |
|
716 | new_action = {"action_type": "pop_vlan"} |
|
717 | flow_mod["actions"].insert(0, new_action) |
|
718 | return flow_mod |
|
719 | ||
720 | def _prepare_pop_flow(self, in_interface, out_interface, in_vlan, |
|
721 | out_vlan, queue_id=None): |
|
@@ 720-734 (lines=15) @@ | ||
717 | flow_mod["actions"].insert(0, new_action) |
|
718 | return flow_mod |
|
719 | ||
720 | def _prepare_pop_flow(self, in_interface, out_interface, in_vlan, |
|
721 | out_vlan, queue_id=None): |
|
722 | # pylint: disable=too-many-arguments |
|
723 | """Prepare pop flow.""" |
|
724 | flow_mod = self._prepare_flow_mod(in_interface, out_interface, |
|
725 | queue_id) |
|
726 | flow_mod['match']['dl_vlan'] = out_vlan |
|
727 | if in_vlan: |
|
728 | new_action = {'action_type': 'set_vlan', 'vlan_id': in_vlan} |
|
729 | flow_mod['actions'].insert(0, new_action) |
|
730 | new_action = {'action_type': 'push_vlan', 'tag_type': 'c'} |
|
731 | flow_mod['actions'].insert(0, new_action) |
|
732 | new_action = {"action_type": "pop_vlan"} |
|
733 | flow_mod["actions"].insert(0, new_action) |
|
734 | return flow_mod |
|
735 | ||
736 | @staticmethod |
|
737 | def run_sdntrace(uni): |