【发布时间】:2017-09-11 18:43:05
【问题描述】:
我正在为 opendaylight Carbon 开发一个应用程序,我需要知道交换机的 MAC 地址。我可以在交换机连接时从 DpnId 确定这一点吗?谢谢。
【问题讨论】:
标签: openflow opendaylight
我正在为 opendaylight Carbon 开发一个应用程序,我需要知道交换机的 MAC 地址。我可以在交换机连接时从 DpnId 确定这一点吗?谢谢。
【问题讨论】:
标签: openflow opendaylight
不确定您指的是哪个 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();
}
}
}
【讨论】:
DPID 唯一标识交换机。 MAC地址一般不会暴露。 而且交换机本身一般没有MAC地址 (它们可能有数十个用于不同功能/接口的 MAC 地址)。 交换机在较低级别上工作,但它们使用 MAC 地址。
【讨论】: