From bde96a9a8973ccaacb61265765933f70927b249c Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sun, 10 May 2015 00:01:59 -0700 Subject: [PATCH] netdev-dummy: Implement ARP responder. This is the only missing piece to make native tunneling work with dummy devices for testing purposes. Signed-off-by: Ben Pfaff Acked-by: Alex Wang --- lib/netdev-dummy.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c index 4d1ef8aca..ff6568996 100644 --- a/lib/netdev-dummy.c +++ b/lib/netdev-dummy.c @@ -932,6 +932,23 @@ netdev_dummy_send(struct netdev *netdev, int qid OVS_UNUSED, dummy_packet_conn_send(&dev->conn, buffer, size); + /* Reply to ARP requests for 'dev''s assigned IP address. */ + if (dev->address.s_addr) { + struct dp_packet packet; + struct flow flow; + + dp_packet_use_const(&packet, buffer, size); + flow_extract(&packet, &flow); + if (flow.dl_type == htons(ETH_TYPE_ARP) + && flow.nw_proto == ARP_OP_REQUEST + && flow.nw_dst == dev->address.s_addr) { + struct dp_packet *reply = dp_packet_new(0); + compose_arp(reply, ARP_OP_REPLY, dev->hwaddr, flow.dl_src, + false, flow.nw_dst, flow.nw_src); + netdev_dummy_queue_packet(dev, reply); + } + } + if (dev->tx_pcap) { struct dp_packet packet; -- 2.39.5