summaryrefslogtreecommitdiff
path: root/datapath-windows/ovsext/Conntrack.c
diff options
context:
space:
mode:
authorSairam Venugopal <vsairam@vmware.com>2017-06-02 10:37:22 -0700
committerGurucharan Shetty <guru@ovn.org>2017-06-08 11:06:41 -0700
commit813f5f0ace37876d9c13891514d0a2aa76e852c7 (patch)
tree86562b26ad3b403b9132c008ee91366c34050cfe /datapath-windows/ovsext/Conntrack.c
parentae9c09850a173f32f56321e7fd2dc334d570b727 (diff)
downloadopenvswitch-813f5f0ace37876d9c13891514d0a2aa76e852c7.tar.gz
datapath-windows: Add original conntrack tuple to FlowKey
Add the original tuple to Flow Key. In case of ICMP and UDP, default the parent entry to NULL until related connections is supported. Signed-off-by: Sairam Venugopal <vsairam@vmware.com> Acked-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com> Signed-off-by: Gurucharan Shetty <guru@ovn.org>
Diffstat (limited to 'datapath-windows/ovsext/Conntrack.c')
-rw-r--r--datapath-windows/ovsext/Conntrack.c35
1 files changed, 29 insertions, 6 deletions
diff --git a/datapath-windows/ovsext/Conntrack.c b/datapath-windows/ovsext/Conntrack.c
index dce0c1bcc..609ae5a95 100644
--- a/datapath-windows/ovsext/Conntrack.c
+++ b/datapath-windows/ovsext/Conntrack.c
@@ -198,7 +198,7 @@ OvsCtEntryCreate(PNET_BUFFER_LIST curNbl,
}
state |= OVS_CS_F_NEW;
- POVS_CT_ENTRY parentEntry = NULL;
+ POVS_CT_ENTRY parentEntry;
parentEntry = OvsCtRelatedLookup(ctx->key, currentTime);
if (parentEntry != NULL) {
state |= OVS_CS_F_RELATED;
@@ -209,10 +209,10 @@ OvsCtEntryCreate(PNET_BUFFER_LIST curNbl,
if (!entry) {
return NULL;
}
- /* If this is related entry, then update parent */
- if (parentEntry != NULL) {
- entry->parent = parentEntry;
- }
+
+ /* Set parent entry for related FTP connections */
+ entry->parent = parentEntry;
+
OvsCtAddEntry(entry, ctx, currentTime);
*entryCreated = TRUE;
}
@@ -235,6 +235,9 @@ OvsCtEntryCreate(PNET_BUFFER_LIST curNbl,
if (!entry) {
return NULL;
}
+
+ /* XXX Add support for ICMP-Related */
+ entry->parent = NULL;
OvsCtAddEntry(entry, ctx, currentTime);
*entryCreated = TRUE;
}
@@ -250,6 +253,9 @@ OvsCtEntryCreate(PNET_BUFFER_LIST curNbl,
if (!entry) {
return NULL;
}
+
+ /* Default UDP related to NULL until TFTP is supported */
+ entry->parent = NULL;
OvsCtAddEntry(entry, ctx, currentTime);
*entryCreated = TRUE;
}
@@ -586,8 +592,8 @@ OvsProcessConntrackEntry(PNET_BUFFER_LIST curNbl,
} else {
POVS_CT_ENTRY parentEntry;
parentEntry = OvsCtRelatedLookup(ctx->key, currentTime);
+ entry->parent = parentEntry;
if (parentEntry != NULL) {
- entry->parent = parentEntry;
state |= OVS_CS_F_RELATED;
}
}
@@ -702,6 +708,23 @@ OvsCtExecute_(PNET_BUFFER_LIST curNbl,
}
}
+ /* Add original tuple information to flow Key */
+ if (entry && entry->key.dl_type == ntohs(ETH_TYPE_IPV4)) {
+ OVS_CT_KEY *ctKey;
+ if (entry->parent != NULL) {
+ POVS_CT_ENTRY parent = entry->parent;
+ ctKey = &parent->key;
+ } else {
+ ctKey = &entry->key;
+ }
+
+ 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;
+ }
+
if (entryCreated && entry) {
OvsPostCtEventEntry(entry, OVS_EVENT_CT_NEW);
}