コード例 #1
0
ファイル: BierController.py プロジェクト: uni-tue-kn/p4-bier
    def __init__(self, base):
        self._baseController = base
        Event.on("topology_change",
                 self.update)  # update bier tables when topology changes

        # this controller manages the following tables
        self.table_manager = TableEntryManager(controller=base,
                                               name="BierController")
        self.table_manager.init_table("ingress.bier_c.bift")
コード例 #2
0
    def __init__(self, base):
        """
        Init Maccontroller with base controller
        :param base:
        """

        # table manager
        self.table_manager = TableEntryManager(controller=base,
                                               name="MacController")
        self.table_manager.init_table("egress.mac_c.adjust_mac")

        Event.on("topology_change", self.update)
コード例 #3
0
    def __init__(self, thrift_port=9090, base=None):
        self.thrift_port = thrift_port
        self.cli = "simple_switch_CLI"

        self.max_port = 8

        self.mcgrp_to_port = defaultdict(list)

        Event.on("igmp_packet_to_controller", self.update_igmp)

        self.table_manager = TableEntryManager(controller=base,
                                               name="GroupController")
        self.table_manager.init_table("ingress.ipv4_c.ipv4_mc")
コード例 #4
0
ファイル: IPv4Controller.py プロジェクト: uni-tue-kn/p4-bier
    def __init__(self, base):
        """
        Init IPv4Controller with base controller and add IPv4 cli commands
        :param base:
        """
        self._baseController = base

        self.table_manager = TableEntryManager(controller=base,
                                               name="IPv4Controller")
        self.table_manager.init_table("ingress.ipv4_c.ipv4")
        self.table_manager.init_table("ingress.ipv4_c.encap_ipv4")

        Event.on("group_update", self.update_based_on_group)

        Event.on("topology_change", self.update_ipv4_rules)
コード例 #5
0
    def __init__(self, controller=None):
        """
        Initialize PortController with base controller and notification_socket
        :param controller: BaseController which manages SwitchConnection
        :param notification_socket: notification_socket for nanomsg
        """
        # this may be removed later when registers are used
        self.table_manager = TableEntryManager(controller=controller,
                                               name="PortController")

        self.table_manager.init_table(
            table_name="SwitchIngress.port_c.port_status")

        # save port status received by nanomsg message, default up
        self.port_status = defaultdict(lambda: 1)

        Event.on("port_down", self.updatePorts)
コード例 #6
0
    def __init__(self, base):
        """
        Init Tunnelcontroller with base controller and add cli commands
        :param base: basecontroller
        :param type: Sets bier or bier-te type
        """
        self._baseController = base
        Event.on("group_update", self.update_based_on_group)
        Event.on("topology_change", self.update_based_on_topology)

        # add decap rules for devices
        Event.on("switch_connected", self.add_ipv4_decap_rule)

        self.table_manager = TableEntryManager(controller=base,
                                               name="TunnelController")
        self.table_manager.init_table("ingress.tunnel_c.decap_bier")
        self.table_manager.init_table("ingress.tunnel_c.decap_ipv4")
        self.table_manager.init_table("egress.tunnel_c.encap_ipv4")
コード例 #7
0
    def __init__(self, base):
        """
        Init BierController with base controller

        Args:
            base (libs.core.BaseController): Base controller
        """

        # table manager
        self.table_manager = TableEntryManager(controller=base,
                                               name="BierController")
        self.table_manager.init_table("ingress.reset_clone")

        entry = TableEntry(match_fields={"hdr.bier_md.bs": 0},
                           action_name="ingress.nop")

        TableEntryManager.handle_table_entry(manager=self.table_manager,
                                             table_name="ingress.reset_clone",
                                             table_entry=entry)
コード例 #8
0
ファイル: PortController.py プロジェクト: uni-tue-kn/p4-bier
    def __init__(self, controller=None, notification_socket=None):
        """
        Initialize PortController with base controller and notification_socket
        :param controller: BaseController which manages SwitchConnection
        :param notification_socket: notification_socket for nanomsg
        """
        # this may be removed later when registers are used
        self.table_manager = TableEntryManager(controller=controller, name="PortController")

        self.table_manager.init_table(table_name="ingress.port_c.port_status")

        # save port status received by nanomsg message, default up
        self.port_status = defaultdict(lambda: 1)

        self.sub = nnpy.Socket(nnpy.AF_SP, nnpy.SUB)
        self.sub.connect(notification_socket)
        self.sub.setsockopt(nnpy.SUB, nnpy.SUB_SUBSCRIBE, '')

        Event.on("topology_change", self.update)