Example #1
0
class NeighborMonitor(Module):
    '''
    用于维护邻居信息和邻居可达的Switch与Controller信息。详见:
    @HelloPacketHandler
    @SwitchPacketHandler
    
    TODO
    1. 定时发送keepalive信息,检测邻居是否活着,若Down了产生NeighborControllerDown事件;
    2. 若新Switch出现,产生SwitchUp事件;
    3. 若Switch消失(即该Switch没有Controller可达),产生SwitchDown事件;
    '''

    PROVIDER = 'provider'
    PEER = 'peer'
    CUSTOMER = 'customer'

    def __init__(self):
        self._myself = None
        self._relation_of_neighbor = {}
        self._neighbors_with_relation = {}

    def start(self):
        for neighbor in self._relation_of_neighbor.keys():
            core.routing.add_address(neighbor, neighbor.get_address())

        from flex.neighbor_monitor.hello_packet_handler import HelloPacketHandler
        self.hello = HelloPacketHandler(self._myself, self._relation_of_neighbor, self._neighbors_with_relation)

        core.forwarding.register_handler(Packet.HELLO, self.hello)
        core.event.register_handler(FlexUpEvent, self.hello)

    def get_neighbor_relation(self, controller):
        return self.hello.get_neighbor_relation(controller)

    def get_neighbors(self):
        return self.hello.get_neighbors()

    def get_peers(self):
        return self.hello.get_peers()

    def get_providers(self):
        return self.hello.get_providers()

    def get_customers(self):
        return self.hello.get_customers()
Example #2
0
    def start(self):
        for neighbor in self._relation_of_neighbor.keys():
            core.routing.add_address(neighbor, neighbor.get_address())

        from flex.neighbor_monitor.hello_packet_handler import HelloPacketHandler
        self.hello = HelloPacketHandler(self._myself, self._relation_of_neighbor, self._neighbors_with_relation)

        core.forwarding.register_handler(Packet.HELLO, self.hello)
        core.event.register_handler(FlexUpEvent, self.hello)