[ovs-dev] [PATCH v3] OVN: Fix ARP request flow in router ingress table

Chandra S Vejendla csvejend at us.ibm.com
Thu Jul 7 22:12:48 UTC 2016


TPA in arp requests generated for unknown MAC-to-IP bindings is currently set
to DST_IP of the original packet. These arps will not be resolved when the
DST_IP is rechable via the default gateway. This patch fixes the issue by
setting the TPA to reg0. In routing stage reg0 is set to IP of the default
gateway when the packet has to go through the default gateway, otherwise reg0
is set to the DST_IP of the original packet.

Signed-off-by: Chandra Sekhar Vejendla <csvejend at us.ibm.com>
---
 ovn/northd/ovn-northd.8.xml | 9 ++++++---
 ovn/northd/ovn-northd.c     | 1 +
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/ovn/northd/ovn-northd.8.xml b/ovn/northd/ovn-northd.8.xml
index 6bc83ea..04903ed 100644
--- a/ovn/northd/ovn-northd.8.xml
+++ b/ovn/northd/ovn-northd.8.xml
@@ -866,8 +866,9 @@ icmp4 {
       <code>ip4.dst</code>, the packet's final destination, unchanged) and
       advances to the next table for ARP resolution.  It also sets
       <code>reg1</code> to the IP address owned by the selected router port
-      (which is used later in table 6 as the IP source address for an ARP
-      request, if needed).
+      (Table 6 will generate ARP request, if needed, with <code>reg0</code> as
+      the target protocol address and <code>reg1</code> as the source protocol
+      address)
     </p>
 
     <p>
@@ -1011,6 +1012,7 @@ icmp4 {
 arp {
     eth.dst = ff:ff:ff:ff:ff:ff;
     arp.spa = reg1;
+    arp.tpa = reg0;
     arp.op = 1;  /* ARP request. */
     output;
 };
@@ -1018,7 +1020,8 @@ arp {
 
         <p>
           (Ingress table 4 initialized <code>reg1</code> with the IP address
-          owned by <code>outport</code>.)
+          owned by <code>outport</code> and <code>reg0</code> with the next-hop
+          IP address)
         </p>
 
         <p>
diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c
index f4b4435..afcd7fd 100644
--- a/ovn/northd/ovn-northd.c
+++ b/ovn/northd/ovn-northd.c
@@ -2693,6 +2693,7 @@ build_lrouter_flows(struct hmap *datapaths, struct hmap *ports,
                       "arp { "
                       "eth.dst = ff:ff:ff:ff:ff:ff; "
                       "arp.spa = reg1; "
+                      "arp.tpa = reg0; "
                       "arp.op = 1; " /* ARP request */
                       "output; "
                       "};");
-- 
2.6.1




More information about the dev mailing list