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();
}
}
}
我正在为 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();
}
}
}