Opendaylight:如何从数据路径ID获取交换机的MAC地址?

时间:2017-09-11 18:43:05

标签: openflow opendaylight

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

2 个答案:

答案 0 :(得分:1)

不确定您指的是哪个MAC。如果你引用DPN的每个端口的MAC地址,那么你可以注册FlowCapableNodeConnector模型的监听器,你可以通过在监听器的add方法中调用FlowCapableNodeConnector#getHardwareAddress来获取MAC。如果您正在谈论VM /数据包源/目标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();
        }
    }
}

答案 1 :(得分:0)

DPID唯一标识交换机。通常不会暴露MAC地址。 而且,交换机本身通常没有MAC地址 (它们可能有不同功能/接口的数十个MAC地址)。 但是,交换机工作在较低级别,它们可以使用MAC地址。