Opendaylight:如何从数据路径 ID 获取 MAC 开关地址?

Opendaylight: how to get MAC address of switch from datapath ID?

我正在为 opendaylight Carbon 开发一个应用程序,我需要知道开关的 MAC 地址。我可以在交换机连接时从 DpnId 确定吗?谢谢

DPID唯一标识交换机。 MAC 地址一般不会暴露。 而且交换机本身一般没有MAC地址 (他们可能有数十个 MAC 地址用于不同的 functions/interfaces)。 开关在较低级别工作,但它们使用 MAC 个地址。

不确定您指的是哪个 MAC。如果您引用的是 DPN 的每个端口的 MAC 地址,那么您可以为 FlowCapableNodeConnector 模型注册侦听器,您可以通过在侦听器的添加方法中调用 FlowCapableNodeConnector#getHardwareAddress 来获得 MAC。如果你在谈论 VM/packet Source/destination MAC,那么你首先需要将数据包发送到控制器,然后你可以使用 PacketProcessingListener 并提取 MAC如下图

public void onPacketReceived(PacketReceived notification) {

   final short tableId = notification.getTableId().getValue();
   final byte[] data = notification.getPayload();
   Ethernet res = new Ethernet();

    try {
        res.deserialize(data, 0, data.length * NetUtils.NumBitsInAByte);
    } catch (Exception e) {
        LOG.warn("PacketInHandler: Failed to decode Packet ", e);
        return;
    }
    try {
        Packet pkt = res.getPayload();
        LOG.info("Packet type is ->{}", pkt.getClass().getName());
        if (pkt instanceof IPv4) {
            IPv4 ipv4 = (IPv4) pkt;
            byte[] srcMac = res.getSourceMACAddress();
            byte[] dstMac = res.getDestinationMACAddress();
        }
    }
}