コード例 #1
0
    def test_edit_link(self, grpc_server: CoreGrpcServer,
                       ip_prefixes: IpPrefixes):
        # given
        client = CoreGrpcClient()
        session = grpc_server.coreemu.create_session()
        switch = session.add_node(SwitchNode)
        node = session.add_node(CoreNode)
        interface = ip_prefixes.create_interface(node)
        session.add_link(node.id, switch.id, interface)
        options = core_pb2.LinkOptions(bandwidth=30000)
        link = switch.all_link_data()[0]
        assert options.bandwidth != link.bandwidth

        # then
        with client.context_connect():
            response = client.edit_link(session.id,
                                        node.id,
                                        switch.id,
                                        options,
                                        interface_one_id=interface.id)

        # then
        assert response.result is True
        link = switch.all_link_data()[0]
        assert options.bandwidth == link.bandwidth
コード例 #2
0
def handle_link_event(event):
    """
    Handle link event when there is a link event

    :param core.emulator.data.LinkData event: link data
    :return: link event that has message type and link information
    :rtype: core.api.grpc.core_pb2.LinkEvent
    """
    interface_one = None
    if event.interface1_id is not None:
        interface_one = core_pb2.Interface(
            id=event.interface1_id,
            name=event.interface1_name,
            mac=convert_value(event.interface1_mac),
            ip4=convert_value(event.interface1_ip4),
            ip4mask=event.interface1_ip4_mask,
            ip6=convert_value(event.interface1_ip6),
            ip6mask=event.interface1_ip6_mask,
        )

    interface_two = None
    if event.interface2_id is not None:
        interface_two = core_pb2.Interface(
            id=event.interface2_id,
            name=event.interface2_name,
            mac=convert_value(event.interface2_mac),
            ip4=convert_value(event.interface2_ip4),
            ip4mask=event.interface2_ip4_mask,
            ip6=convert_value(event.interface2_ip6),
            ip6mask=event.interface2_ip6_mask,
        )

    options = core_pb2.LinkOptions(
        opaque=event.opaque,
        jitter=event.jitter,
        key=event.key,
        mburst=event.mburst,
        mer=event.mer,
        per=event.per,
        bandwidth=event.bandwidth,
        burst=event.burst,
        delay=event.delay,
        dup=event.dup,
        unidirectional=event.unidirectional,
    )
    link = core_pb2.Link(
        type=event.link_type,
        node_one_id=event.node1_id,
        node_two_id=event.node2_id,
        interface_one=interface_one,
        interface_two=interface_two,
        options=options,
    )
    return core_pb2.LinkEvent(message_type=event.message_type, link=link)
コード例 #3
0
ファイル: grpcutils.py プロジェクト: lsh23/core
def convert_link(link_data: LinkData) -> core_pb2.Link:
    """
    Convert link_data into core protobuf link.

    :param link_data: link to convert
    :return: core protobuf Link
    """
    interface_one = None
    if link_data.interface1_id is not None:
        interface_one = core_pb2.Interface(
            id=link_data.interface1_id,
            name=link_data.interface1_name,
            mac=convert_value(link_data.interface1_mac),
            ip4=convert_value(link_data.interface1_ip4),
            ip4mask=link_data.interface1_ip4_mask,
            ip6=convert_value(link_data.interface1_ip6),
            ip6mask=link_data.interface1_ip6_mask,
        )
    interface_two = None
    if link_data.interface2_id is not None:
        interface_two = core_pb2.Interface(
            id=link_data.interface2_id,
            name=link_data.interface2_name,
            mac=convert_value(link_data.interface2_mac),
            ip4=convert_value(link_data.interface2_ip4),
            ip4mask=link_data.interface2_ip4_mask,
            ip6=convert_value(link_data.interface2_ip6),
            ip6mask=link_data.interface2_ip6_mask,
        )
    options = core_pb2.LinkOptions(
        opaque=link_data.opaque,
        jitter=link_data.jitter,
        key=link_data.key,
        mburst=link_data.mburst,
        mer=link_data.mer,
        per=link_data.per,
        bandwidth=link_data.bandwidth,
        burst=link_data.burst,
        delay=link_data.delay,
        dup=link_data.dup,
        unidirectional=link_data.unidirectional,
    )
    return core_pb2.Link(
        type=link_data.link_type.value,
        node_one_id=link_data.node1_id,
        node_two_id=link_data.node2_id,
        interface_one=interface_one,
        interface_two=interface_two,
        options=options,
        network_id=link_data.network_id,
        label=link_data.label,
        color=link_data.color,
    )
コード例 #4
0
ファイル: grpcutils.py プロジェクト: umr-ds/core
def convert_link_options(options_data: LinkOptions) -> core_pb2.LinkOptions:
    return core_pb2.LinkOptions(
        jitter=options_data.jitter,
        key=options_data.key,
        mburst=options_data.mburst,
        mer=options_data.mer,
        loss=options_data.loss,
        bandwidth=options_data.bandwidth,
        burst=options_data.burst,
        delay=options_data.delay,
        dup=options_data.dup,
        unidirectional=options_data.unidirectional,
    )
コード例 #5
0
 def to_proto(self) -> core_pb2.LinkOptions:
     return core_pb2.LinkOptions(
         jitter=self.jitter,
         key=self.key,
         mburst=self.mburst,
         mer=self.mer,
         loss=self.loss,
         bandwidth=self.bandwidth,
         burst=self.burst,
         delay=self.delay,
         dup=self.dup,
         unidirectional=self.unidirectional,
     )
コード例 #6
0
ファイル: server.py プロジェクト: yanhc519/core
def convert_link(session, link_data):
    interface_one = None
    if link_data.interface1_id is not None:
        node = session.get_node(link_data.node1_id)
        interface_name = None
        if not isinstance(node, CoreNetworkBase):
            interface = node.netif(link_data.interface1_id)
            interface_name = interface.name
        interface_one = core_pb2.Interface(
            id=link_data.interface1_id,
            name=interface_name,
            mac=convert_value(link_data.interface1_mac),
            ip4=convert_value(link_data.interface1_ip4),
            ip4mask=link_data.interface1_ip4_mask,
            ip6=convert_value(link_data.interface1_ip6),
            ip6mask=link_data.interface1_ip6_mask)

    interface_two = None
    if link_data.interface2_id is not None:
        node = session.get_node(link_data.node2_id)
        interface_name = None
        if not isinstance(node, CoreNetworkBase):
            interface = node.netif(link_data.interface2_id)
            interface_name = interface.name
        interface_two = core_pb2.Interface(
            id=link_data.interface2_id,
            name=interface_name,
            mac=convert_value(link_data.interface2_mac),
            ip4=convert_value(link_data.interface2_ip4),
            ip4mask=link_data.interface2_ip4_mask,
            ip6=convert_value(link_data.interface2_ip6),
            ip6mask=link_data.interface2_ip6_mask)

    options = core_pb2.LinkOptions(opaque=link_data.opaque,
                                   jitter=link_data.jitter,
                                   key=link_data.key,
                                   mburst=link_data.mburst,
                                   mer=link_data.mer,
                                   per=link_data.per,
                                   bandwidth=link_data.bandwidth,
                                   burst=link_data.burst,
                                   delay=link_data.delay,
                                   dup=link_data.dup,
                                   unidirectional=link_data.unidirectional)

    return core_pb2.Link(type=link_data.link_type,
                         node_one_id=link_data.node1_id,
                         node_two_id=link_data.node2_id,
                         interface_one=interface_one,
                         interface_two=interface_two,
                         options=options)
コード例 #7
0
ファイル: server.py プロジェクト: yanhc519/core
    def _handle_link_event(self, event):
        interface_one = None
        if event.interface1_id is not None:
            interface_one = core_pb2.Interface(
                id=event.interface1_id,
                name=event.interface1_name,
                mac=convert_value(event.interface1_mac),
                ip4=convert_value(event.interface1_ip4),
                ip4mask=event.interface1_ip4_mask,
                ip6=convert_value(event.interface1_ip6),
                ip6mask=event.interface1_ip6_mask)

        interface_two = None
        if event.interface2_id is not None:
            interface_two = core_pb2.Interface(
                id=event.interface2_id,
                name=event.interface2_name,
                mac=convert_value(event.interface2_mac),
                ip4=convert_value(event.interface2_ip4),
                ip4mask=event.interface2_ip4_mask,
                ip6=convert_value(event.interface2_ip6),
                ip6mask=event.interface2_ip6_mask)

        options = core_pb2.LinkOptions(opaque=event.opaque,
                                       jitter=event.jitter,
                                       key=event.key,
                                       mburst=event.mburst,
                                       mer=event.mer,
                                       per=event.per,
                                       bandwidth=event.bandwidth,
                                       burst=event.burst,
                                       delay=event.delay,
                                       dup=event.dup,
                                       unidirectional=event.unidirectional)
        link = core_pb2.Link(type=event.link_type,
                             node_one_id=event.node1_id,
                             node_two_id=event.node2_id,
                             interface_one=interface_one,
                             interface_two=interface_two,
                             options=options)
        return core_pb2.LinkEvent(message_type=event.message_type, link=link)
コード例 #8
0
    def click_apply(self):
        self.app.canvas.itemconfigure(self.edge.id, width=self.width.get())
        self.app.canvas.itemconfigure(self.edge.id, fill=self.color.get())
        link = self.edge.link
        bandwidth = get_int(self.bandwidth)
        jitter = get_int(self.jitter)
        delay = get_int(self.delay)
        duplicate = get_int(self.duplicate)
        loss = get_float(self.loss)
        options = core_pb2.LinkOptions(bandwidth=bandwidth,
                                       jitter=jitter,
                                       delay=delay,
                                       dup=duplicate,
                                       per=loss)
        link.options.CopyFrom(options)

        interface_one = None
        if link.HasField("interface_one"):
            interface_one = link.interface_one.id
        interface_two = None
        if link.HasField("interface_two"):
            interface_two = link.interface_two.id

        if not self.is_symmetric:
            link.options.unidirectional = True
            asym_interface_one = None
            if interface_one:
                asym_interface_one = core_pb2.Interface(id=interface_one)
            asym_interface_two = None
            if interface_two:
                asym_interface_two = core_pb2.Interface(id=interface_two)
            down_bandwidth = get_int(self.down_bandwidth)
            down_jitter = get_int(self.down_jitter)
            down_delay = get_int(self.down_delay)
            down_duplicate = get_int(self.down_duplicate)
            down_loss = get_float(self.down_loss)
            options = core_pb2.LinkOptions(
                bandwidth=down_bandwidth,
                jitter=down_jitter,
                delay=down_delay,
                dup=down_duplicate,
                per=down_loss,
                unidirectional=True,
            )
            self.edge.asymmetric_link = core_pb2.Link(
                node_one_id=link.node_two_id,
                node_two_id=link.node_one_id,
                interface_one=asym_interface_one,
                interface_two=asym_interface_two,
                options=options,
            )
        else:
            link.options.unidirectional = False
            self.edge.asymmetric_link = None

        if self.app.core.is_runtime() and link.HasField("options"):
            session_id = self.app.core.session_id
            self.app.core.client.edit_link(
                session_id,
                link.node_one_id,
                link.node_two_id,
                link.options,
                interface_one,
                interface_two,
            )
            if self.edge.asymmetric_link:
                self.app.core.client.edit_link(
                    session_id,
                    link.node_two_id,
                    link.node_one_id,
                    self.edge.asymmetric_link.options,
                    interface_one,
                    interface_two,
                )

        self.destroy()
コード例 #9
0
ファイル: linkconfig.py プロジェクト: umr-ds/core
    def click_apply(self) -> None:
        self.app.canvas.itemconfigure(self.edge.id, width=self.width.get())
        self.app.canvas.itemconfigure(self.edge.id, fill=self.color.get())
        link = self.edge.link
        bandwidth = get_int(self.bandwidth)
        jitter = get_int(self.jitter)
        delay = get_int(self.delay)
        duplicate = get_int(self.duplicate)
        loss = get_float(self.loss)
        options = core_pb2.LinkOptions(bandwidth=bandwidth,
                                       jitter=jitter,
                                       delay=delay,
                                       dup=duplicate,
                                       loss=loss)
        link.options.CopyFrom(options)

        iface1_id = None
        if link.HasField("iface1"):
            iface1_id = link.iface1.id
        iface2_id = None
        if link.HasField("iface2"):
            iface2_id = link.iface2.id

        if not self.is_symmetric:
            link.options.unidirectional = True
            asym_iface1 = None
            if iface1_id:
                asym_iface1 = core_pb2.Interface(id=iface1_id)
            asym_iface2 = None
            if iface2_id:
                asym_iface2 = core_pb2.Interface(id=iface2_id)
            down_bandwidth = get_int(self.down_bandwidth)
            down_jitter = get_int(self.down_jitter)
            down_delay = get_int(self.down_delay)
            down_duplicate = get_int(self.down_duplicate)
            down_loss = get_float(self.down_loss)
            options = core_pb2.LinkOptions(
                bandwidth=down_bandwidth,
                jitter=down_jitter,
                delay=down_delay,
                dup=down_duplicate,
                loss=down_loss,
                unidirectional=True,
            )
            self.edge.asymmetric_link = core_pb2.Link(
                node1_id=link.node2_id,
                node2_id=link.node1_id,
                iface1=asym_iface1,
                iface2=asym_iface2,
                options=options,
            )
        else:
            link.options.unidirectional = False
            self.edge.asymmetric_link = None

        if self.app.core.is_runtime() and link.HasField("options"):
            session_id = self.app.core.session_id
            self.app.core.client.edit_link(
                session_id,
                link.node1_id,
                link.node2_id,
                link.options,
                iface1_id,
                iface2_id,
            )
            if self.edge.asymmetric_link:
                self.app.core.client.edit_link(
                    session_id,
                    link.node2_id,
                    link.node1_id,
                    self.edge.asymmetric_link.options,
                    iface1_id,
                    iface2_id,
                )

        # update edge label
        self.edge.draw_link_options()
        self.destroy()
コード例 #10
0
ファイル: grpcutils.py プロジェクト: devdkerr/core-1
def convert_link(session, link_data):
    """
    Convert link_data into core protobuf Link

    :param core.emulator.session.Session session:
    :param core.emulator.data.LinkData link_data:
    :return: core protobuf Link
    :rtype: core.api.grpc.core_pb2.Link
    """
    interface_one = None
    if link_data.interface1_id is not None:
        node = session.get_node(link_data.node1_id)
        interface_name = None
        if not isinstance(node, CoreNetworkBase):
            interface = node.netif(link_data.interface1_id)
            interface_name = interface.name
        interface_one = core_pb2.Interface(
            id=link_data.interface1_id,
            name=interface_name,
            mac=convert_value(link_data.interface1_mac),
            ip4=convert_value(link_data.interface1_ip4),
            ip4mask=link_data.interface1_ip4_mask,
            ip6=convert_value(link_data.interface1_ip6),
            ip6mask=link_data.interface1_ip6_mask,
        )

    interface_two = None
    if link_data.interface2_id is not None:
        node = session.get_node(link_data.node2_id)
        interface_name = None
        if not isinstance(node, CoreNetworkBase):
            interface = node.netif(link_data.interface2_id)
            interface_name = interface.name
        interface_two = core_pb2.Interface(
            id=link_data.interface2_id,
            name=interface_name,
            mac=convert_value(link_data.interface2_mac),
            ip4=convert_value(link_data.interface2_ip4),
            ip4mask=link_data.interface2_ip4_mask,
            ip6=convert_value(link_data.interface2_ip6),
            ip6mask=link_data.interface2_ip6_mask,
        )

    options = core_pb2.LinkOptions(
        opaque=link_data.opaque,
        jitter=link_data.jitter,
        key=link_data.key,
        mburst=link_data.mburst,
        mer=link_data.mer,
        per=link_data.per,
        bandwidth=link_data.bandwidth,
        burst=link_data.burst,
        delay=link_data.delay,
        dup=link_data.dup,
        unidirectional=link_data.unidirectional,
    )

    return core_pb2.Link(
        type=link_data.link_type,
        node_one_id=link_data.node1_id,
        node_two_id=link_data.node2_id,
        interface_one=interface_one,
        interface_two=interface_two,
        options=options,
    )