Here's an incremental.

---
 NEWS          |    4 +++-
 lib/packets.c |    6 +++---
 lib/packets.h |    5 ++---
 3 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/NEWS b/NEWS
index 5f6ae2c..8cd38dd 100644
--- a/NEWS
+++ b/NEWS
@@ -5,7 +5,9 @@ post-v1.7.0
     - Added support for arbitrary ethernet masks
     - Additional protocols are not mirrored and dropped when forward-bpdu is
       false.  For a full list, see the ovs-vswitchd.conf.db man page.
-    - Learning packets are now RARPs making us consistent with qemu and VMware.
+    - Open vSwitch now sends RARP packets in situations where it previously
+      sent a custom protocol, making it consistent with behavior of QEMU and
+      VMware.
 
 
 v1.7.0 - xx xxx xxxx
diff --git a/lib/packets.c b/lib/packets.c
index 6d7b99d..9b61d04 100644
--- a/lib/packets.c
+++ b/lib/packets.c
@@ -145,12 +145,12 @@ compose_benign_packet(struct ofpbuf *b, const uint8_t 
eth_src[ETH_ADDR_LEN])
     rarp->hw_addr_space = htons(ARP_HTYPE_ETH);
     rarp->proto_addr_space = htons(ETH_TYPE_IP);
     rarp->hw_addr_length = ETH_ADDR_LEN;
-    rarp->proto_addr_length = IPV4_ADDR_LEN;
+    rarp->proto_addr_length = sizeof rarp->src_proto_addr;
     rarp->opcode = htons(RARP_REQUEST_REVERSE);
     memcpy(rarp->src_hw_addr, eth_src, ETH_ADDR_LEN);
-    memset(rarp->src_proto_addr, 0, IPV4_ADDR_LEN);
+    rarp->src_proto_addr = htonl(0);
     memcpy(rarp->target_hw_addr, eth_src, ETH_ADDR_LEN);
-    memset(rarp->target_proto_addr, 0, IPV4_ADDR_LEN);
+    rarp->target_proto_addr = htonl(0);
 }
 
 /* Insert VLAN header according to given TCI. Packet passed must be Ethernet
diff --git a/lib/packets.h b/lib/packets.h
index eabc7bc..c1d404d 100644
--- a/lib/packets.h
+++ b/lib/packets.h
@@ -34,7 +34,6 @@ struct flow;
 bool dpid_from_string(const char *s, uint64_t *dpidp);
 
 #define ETH_ADDR_LEN           6
-#define IPV4_ADDR_LEN          4
 
 static const uint8_t eth_addr_broadcast[ETH_ADDR_LEN] OVS_UNUSED
     = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
@@ -241,9 +240,9 @@ struct rarp_header {
     uint8_t proto_addr_length;     /* IPV4_ADDR_LEN. */
     ovs_be16 opcode;               /* RARP_REQUEST_REVERSE. */
     uint8_t src_hw_addr[ETH_ADDR_LEN];
-    uint8_t src_proto_addr[IPV4_ADDR_LEN];
+    ovs_be32 src_proto_addr;
     uint8_t target_hw_addr[ETH_ADDR_LEN];
-    uint8_t target_proto_addr[IPV4_ADDR_LEN];
+    ovs_be32 target_proto_addr;
 } __attribute__((packed));
 BUILD_ASSERT_DECL(RARP_HEADER_LEN == sizeof(struct rarp_header));
 
-- 
1.7.10.2

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to