我正在尝试从SDN OpenFlow交换机发送ARP请求以查找预定义主机的MAC地址(主机的IP地址已知:10.0.0.8/24)
我正在尝试为控制器使用虚拟IP和MAC地址。
Please find the attached image of my topology
我想要做的是,当控制器和交换机之间的连接建立时,在控制器中制作ARP请求,并通过交换机泛洪请求。
# respond to switch connection up event
def _handle_ConnectionUp(self, event):
self.connection = event.connection
print("connecting to %s" %(self.connection))
# code to send ARP requests to servers
r = arp()
r.hwtype = r.HW_TYPE_ETHERNET
r.prototype = r.PROTO_TYPE_IP
r.hwlen = 6
r.protolen = r.protolen
r.opcode = r.REQUEST
r.hwdst = ETHER_BROADCAST
r.protodst = IPAddr("10.0.0.8")
r.hwsrc = EthAddr("00:12:34:56:78:90")
r.protosrc = IPAddr("10.1.2.3")
e = ethernet(type=ethernet.ARP_TYPE, src=EthAddr("00:12:34:56:78:90") , dst=ETHER_BROADCAST)
e.set_payload(r)
msg = of.ofp_packet_out()
msg.data = e.pack()
msg.actions.append(of.ofp_action_output(port = of.OFPP_FLOOD))
event.connection.send(msg)
但我看不到来自host-10.0.0.8的任何ARP回复。
tcpdump from the host is attached herewith
如果我对上述代码做错了,请告诉我。非常感谢你提前。
经过几次尝试失败,我意识到自己的错误。
所有节点都应位于单个广播域中以发送或接收ARP。因此,控制器的虚拟IP应该更改为10.0.0.x / 24