コード例 #1
0
    def addBridge(self, bridge_name):
        switch = self.ovs_state.switch
        if bridge_name in [br.name for br in list(self.ovs_state.bridges.values()) if br.name == bridge_name]:
            raise OVSExceptions.OVSBridgeExists(bridge_name)

        transaction = Transaction(self.cur_id)

        # Generate Wait operations
        for instance in list(self.ovs_state.ports.values()) + list(self.ovs_state.bridges.values()):
            transaction.addOperation(WaitOperation(instance))

        # Build sub-components of a bridge
        intern_if = OVSInterface(bridge_name)
        intern_if.type = "internal"
        intern_port = OVSPort(bridge_name, [intern_if])
        bridge = OVSBridge(bridge_name, [intern_port])

        # Generate Insert Operations for built components
        transaction.addOperation(InsertOperation(intern_if))
        transaction.addOperation(InsertOperation(intern_port))
        transaction.addOperation(InsertOperation(bridge))

        switch.addBridge(bridge)
        transaction.addOperation(UpdateOperation(switch, ["bridges"]))
        transaction.addOperation(MutateOperation(switch, "next_cfg", "+="))
        self.sock.send(bytes(json.dumps(transaction), "utf-8"))
        del switch.bridges[bridge.uuid]
        handled = False
        while not handled:
            responses = self.get_responses(self.sock.recv(self.BUFF_SIZE))
            for response in responses:
                res = json.loads(response)
                handled = transaction.handleResult(res)
                self.update_notification(res)
        self.cur_id += 1
コード例 #2
0
    def addPort(self, bridge_name, port_name):
        if bridge_name not in \
                [br.name for br in list(self.ovs_state.bridges.values())]:
            raise OVSExceptions.OVSNoSuchBridge(bridge_name)
        if port_name in \
                [port.name for port in list(self.ovs_state.ports.values())]:
            raise OVSExceptions.OVSPortExists(port_name)

        transaction = Transaction(self.cur_id)
        for instance in list(self.ovs_state.bridges.values()) + list(
                self.ovs_state.ports.values()):
            transaction.addOperation(WaitOperation(instance))
        switch = self.ovs_state.switch
        iface = OVSInterface(port_name)
        port = OVSPort(port_name, [iface])
        transaction.addOperation(InsertOperation(iface))
        transaction.addOperation(InsertOperation(port))
        bridge = None
        for br in list(self.ovs_state.bridges.values()):
            if br.name == bridge_name:
                bridge = br
                break
        bridge.ports[port.uuid] = port
        transaction.addOperation(UpdateOperation(bridge, 'ports'))
        transaction.addOperation(MutateOperation(switch, 'next_cfg', '+='))
        self.sock.send(bytes(json.dumps(transaction), 'utf-8'))
        del bridge.ports[port.uuid]
        responses = self.get_responses(self.sock.recv(self.BUFF_SIZE))
        for response in responses:
            res = json.loads(response)
            transaction.handleResult(res)
            self.update_notification(res)
        self.cur_id += 1
        return True
コード例 #3
0
    def addBridge(self, bridge_name):
        switch = self.ovs_state.switch
        if bridge_name in \
                [br.name for br in list(self.ovs_state.bridges.values()) if br.name == bridge_name]:
            raise OVSExceptions.OVSBridgeExists(bridge_name)

        transaction = Transaction(self.cur_id)

        # Generate Wait operations
        for instance in list(self.ovs_state.ports.values()) + list(
                self.ovs_state.bridges.values()):
            transaction.addOperation(WaitOperation(instance))

        # Build sub-components of a bridge
        intern_if = OVSInterface(bridge_name)
        intern_if.type = 'internal'
        intern_port = OVSPort(bridge_name, [intern_if])
        bridge = OVSBridge(bridge_name, [intern_port])

        # Generate Insert Operations for built components
        transaction.addOperation(InsertOperation(intern_if))
        transaction.addOperation(InsertOperation(intern_port))
        transaction.addOperation(InsertOperation(bridge))

        switch.addBridge(bridge)
        transaction.addOperation(UpdateOperation(switch, ['bridges']))
        transaction.addOperation(MutateOperation(switch, 'next_cfg', '+='))
        self.sock.send(bytes(json.dumps(transaction), 'utf-8'))
        del switch.bridges[bridge.uuid]
        handled = False
        while not handled:
            responses = self.get_responses(self.sock.recv(self.BUFF_SIZE))
            for response in responses:
                res = json.loads(response)
                handled = transaction.handleResult(res)
                self.update_notification(res)
        self.cur_id += 1
コード例 #4
0
 def __update_Interface(self, result):
     for uuid, table_states in list(result.items()):
         self.interfaces[uuid] = OVSInterface.parse(self, uuid,
                                                    table_states)
コード例 #5
0
 def __update_Interface(self, result):
     for uuid, table_states in list(result.items()):
         self.interfaces[uuid] = OVSInterface.parse(self, uuid, table_states)