在POX控制器中制作ARP请求

问题描述 投票:0回答:1

我正在尝试从SDN OpenFlow交换机发送ARP请求以查找预定义主机的MAC地址(主机的IP地址已知:10.0.0.8/24)

我正在尝试为控制器使用虚拟IP和MAC地址。

  • 控制器的虚拟IP:10.1.2.3
  • 控制器的虚拟MAC地址:00:12:34:56:78:90

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

如果我对上述代码做错了,请告诉我。非常感谢你提前。

sdn mininet pox
1个回答
0
投票

经过几次尝试失败,我意识到自己的错误。

所有节点都应位于单个广播域中以发送或接收ARP。因此,控制器的虚拟IP应该更改为10.0.0.x / 24

© www.soinside.com 2019 - 2024. All rights reserved.