[ovs-dev] [PATCH v3 1/2] ovn-controller: Add 'dns_lookup' action

Ben Pfaff blp at ovn.org
Wed Mar 29 17:42:28 UTC 2017


On Mon, Mar 27, 2017 at 07:42:58PM +0530, nusiddiq at redhat.com wrote:
> From: Numan Siddique <nusiddiq at redhat.com>
> 
> This patch adds a new OVN action 'dns_lookup' to support native DNS.
> ovn-controller parses this action and adds a NXT_PACKET_IN2
> OF flow with 'pause' flag set.
> 
> A new table 'DNS' is added in the SB DB to look up and resolve
> the DNS queries. When a valid DNS packet is received by
> ovn-controller, it looks up the DNS name in the 'DNS' table
> and if successful, it frames a DNS reply, resumes the packet
> and stores 1 in the 1-bit subfield. If the packet is invalid
> or cannot be resolved, it resumes the packet without any
> modifications and stores 0 in the 1-bit subfield.
> 
> reg0[4] = dns_lookup(); next;
> 
> An upcoming patch will use this action and adds logical flows.
> 
> Signed-off-by: Numan Siddique <nusiddiq at redhat.com>

I didn't do a thorough review, but here's a suggested incremental for
the documentation.  (I started by noticing that a DNS request should
have udp.dst 53, not udp.src 53, and then got carried away a little.)

diff --git a/ovn/ovn-sb.xml b/ovn/ovn-sb.xml
index e0e4f67b3bb6..692925aa9856 100644
--- a/ovn/ovn-sb.xml
+++ b/ovn/ovn-sb.xml
@@ -1482,21 +1482,21 @@
           </p>
 
           <p>
-            When this action is applied to a valid DNS (UDP packet with
-            udp.src 53) request packet, it changes the packet into a DNS reply
-            if it is able to resolve the query and stores 1 in <var>R</var>.
-            It leaves the packet unchanged if it is not able to resolve and
-            stores 0 in <var>R</var>.
+            When this action is applied to a valid DNS request (a UDP packet
+            typically directed to port 53), it attempts to resolve the query
+            using the contents of the <ref table="DNS"/> table.  If it is
+            successful, it changes the packet into a DNS reply and stores 1 in
+            <var>R</var>.  If the action is applied to a non-DNS packet, an
+            invalid DNS request packet, or a valid DNS request for which the
+            <ref table="DNS"/> table does not supply an answer, it leaves the
+            packet unchanged and stores 0 in <var>R</var>.
           </p>
 
           <p>
-            When this action is applied to a non-DNS or an invalid
-            DNS request packet , it leaves the packet unchanged and stores
-            0 in <var>R</var>.
-          </p>
-
-          <p>
-            The contents of the <ref table="DNS"/> table control the DNS lookup.
+            Regardless of success, the action does not make any of the changes
+            to the flow that are necessary to direct the packet back to the
+            requester.  The logical pipeline can implement this behavior with
+            matches and actions in later tables.
           </p>
 
           <p>
@@ -1505,6 +1505,10 @@
               reg0[3] = dns_lookup();
             </code>
           </p>
+
+          <p>
+            <b>Prerequisite:</b> <code>udp</code>
+          </p>
         </dd>
       </dl>
 


More information about the dev mailing list