[ovs-dev] [PATCH] datapath-windows: Update ICMP-Type and Code comparison in CT lookup

Sairam Venugopal vsairam at vmware.com
Fri Aug 11 21:36:54 UTC 2017


Acked-by: Sairam Venugopal <vsairam at vmware.com>





On 8/11/17, 1:41 PM, "ovs-dev-bounces at openvswitch.org on behalf of Anand Kumar" <ovs-dev-bounces at openvswitch.org on behalf of kumaranand at vmware.com> wrote:

> - Update the CT comparison function to compare individual fields instead of
>NdisEqualMemory.
>- Add in some padding for the ct_endpoint's union.
>- Update the Orig Tuple to use ICMP Type and Code instead of Port for ICMP
>
>Co-authored-by: Sairam Venugopal <vsairam at vmware.com>
>Signed-off-by: Anand Kumar <kumaranand at vmware.com>
>---
> datapath-windows/ovsext/Conntrack.c | 27 +++++++++++++++++++++------
> datapath-windows/ovsext/Conntrack.h |  5 ++++-
> 2 files changed, 25 insertions(+), 7 deletions(-)
>
>diff --git a/datapath-windows/ovsext/Conntrack.c b/datapath-windows/ovsext/Conntrack.c
>index 917ebee..81c2167 100644
>--- a/datapath-windows/ovsext/Conntrack.c
>+++ b/datapath-windows/ovsext/Conntrack.c
>@@ -373,10 +373,18 @@ OvsDetectCtPacket(OvsForwardingContext *fwdCtx,
> BOOLEAN
> OvsCtKeyAreSame(OVS_CT_KEY ctxKey, OVS_CT_KEY entryKey)
> {
>-    return ((NdisEqualMemory(&ctxKey.src, &entryKey.src,
>-                             sizeof(struct ct_endpoint))) &&
>-            (NdisEqualMemory(&ctxKey.dst, &entryKey.dst,
>-                             sizeof(struct ct_endpoint))) &&
>+    return ((ctxKey.src.addr.ipv4 == entryKey.src.addr.ipv4) &&
>+            (ctxKey.src.addr.ipv4_aligned == entryKey.src.addr.ipv4_aligned) &&
>+            (ctxKey.src.port == entryKey.src.port) &&
>+            (ctxKey.src.icmp_id == entryKey.src.icmp_id) &&
>+            (ctxKey.src.icmp_type == entryKey.src.icmp_type) &&
>+            (ctxKey.src.icmp_code == entryKey.src.icmp_code) &&
>+            (ctxKey.dst.addr.ipv4 == entryKey.dst.addr.ipv4) &&
>+            (ctxKey.dst.addr.ipv4_aligned == entryKey.dst.addr.ipv4_aligned) &&
>+            (ctxKey.dst.port == entryKey.dst.port) &&
>+            (ctxKey.dst.icmp_id == entryKey.dst.icmp_id) &&
>+            (ctxKey.dst.icmp_type == entryKey.dst.icmp_type) &&
>+            (ctxKey.dst.icmp_code == entryKey.dst.icmp_code) &&
>             (ctxKey.dl_type == entryKey.dl_type) &&
>             (ctxKey.nw_proto == entryKey.nw_proto) &&
>             (ctxKey.zone == entryKey.zone));
>@@ -782,9 +790,16 @@ OvsCtExecute_(OvsForwardingContext *fwdCtx,
> 
>         key->ct.tuple_ipv4.ipv4_src = ctKey->src.addr.ipv4_aligned;
>         key->ct.tuple_ipv4.ipv4_dst = ctKey->dst.addr.ipv4_aligned;
>-        key->ct.tuple_ipv4.src_port = ctKey->src.port;
>-        key->ct.tuple_ipv4.dst_port = ctKey->dst.port;
>         key->ct.tuple_ipv4.ipv4_proto = ctKey->nw_proto;
>+
>+        /* Orig tuple Port is overloaded to take in ICMP-Type & Code */
>+        /* This mimics the behavior in lib/conntrack.c*/
>+        key->ct.tuple_ipv4.src_port = ctKey->nw_proto != IPPROTO_ICMP ?
>+                                      ctKey->src.port :
>+                                      htons(ctKey->src.icmp_type);
>+        key->ct.tuple_ipv4.dst_port = ctKey->nw_proto != IPPROTO_ICMP ?
>+                                      ctKey->dst.port :
>+                                      htons(ctKey->src.icmp_code);
>     }
> 
>     if (entryCreated && entry) {
>diff --git a/datapath-windows/ovsext/Conntrack.h b/datapath-windows/ovsext/Conntrack.h
>index 04ca299..4904c7e 100644
>--- a/datapath-windows/ovsext/Conntrack.h
>+++ b/datapath-windows/ovsext/Conntrack.h
>@@ -41,7 +41,10 @@ struct ct_addr {
> struct ct_endpoint {
>     struct ct_addr addr;
>     union {
>-        ovs_be16 port;
>+        struct {
>+            ovs_be16 port;
>+            uint16 pad_port;
>+        };
>         struct {
>             ovs_be16 icmp_id;
>             uint8_t icmp_type;
>-- 
>2.9.3.windows.1
>
>_______________________________________________
>dev mailing list
>dev at openvswitch.org
>https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=Z6vowHUOjP5ysP_g372c49Nqc1vEKqHKNBkR5Q5Z7uo&m=jv5eh3bLA-gmtkDuLhimROtMSTOYl817LE81oKgfKo8&s=zIJGnXCflvEaG9FWrbvkouqo9uSfZ-KoRq7H_GzPiMo&e= 


More information about the dev mailing list