summaryrefslogtreecommitdiff
path: root/datapath-windows/ovsext/Conntrack.c
diff options
context:
space:
mode:
authorSairam Venugopal <vsairam@vmware.com>2017-03-21 00:02:02 -0700
committerGurucharan Shetty <guru@ovn.org>2017-03-22 09:05:43 -0700
commit69bd24493eedb7d09db3bf3376be75c7d4a53f07 (patch)
tree0e744a7904714b7fd2b6308a0f1abd160e662293 /datapath-windows/ovsext/Conntrack.c
parent86b7637c0bd20caa06ca449c5ef380b53626b297 (diff)
downloadopenvswitch-69bd24493eedb7d09db3bf3376be75c7d4a53f07.tar.gz
datapath-windows: Add support for OVS_CT_ATTR_FORCE_COMMIT
Add support for handling OVS_CT_ATTR_FORCE_COMMIT in Conntrack action. When this flag is specified, it implicitly means commit and deletes entries in the reverse direction. 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.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/datapath-windows/ovsext/Conntrack.c b/datapath-windows/ovsext/Conntrack.c
index 9f41861f7..35ab7a153 100644
--- a/datapath-windows/ovsext/Conntrack.c
+++ b/datapath-windows/ovsext/Conntrack.c
@@ -633,6 +633,7 @@ OvsCtExecute_(PNET_BUFFER_LIST curNbl,
OvsFlowKey *key,
OVS_PACKET_HDR_INFO *layers,
BOOLEAN commit,
+ BOOLEAN force,
UINT16 zone,
MD_MARK *mark,
MD_LABELS *labels,
@@ -653,6 +654,13 @@ OvsCtExecute_(PNET_BUFFER_LIST curNbl,
/* Lookup Conntrack entries for a matching entry */
entry = OvsCtLookup(&ctx);
BOOLEAN entryCreated = FALSE;
+
+ /* Delete entry in reverse direction if 'force' is specified */
+ if (entry && force && ctx.reply) {
+ OvsCtEntryDelete(entry);
+ entry = NULL;
+ }
+
if (!entry) {
/* If no matching entry was found, create one and add New state */
entry = OvsCtEntryCreate(curNbl, key->ipKey.nwProto,
@@ -709,6 +717,7 @@ OvsExecuteConntrackAction(PNET_BUFFER_LIST curNbl,
{
PNL_ATTR ctAttr;
BOOLEAN commit = FALSE;
+ BOOLEAN force = FALSE;
UINT16 zone = 0;
MD_MARK *mark = NULL;
MD_LABELS *labels = NULL;
@@ -721,6 +730,7 @@ OvsExecuteConntrackAction(PNET_BUFFER_LIST curNbl,
return status;
}
+ /* XXX Convert this to NL_ATTR_FOR_EACH */
ctAttr = NlAttrFindNested(a, OVS_CT_ATTR_ZONE);
if (ctAttr) {
zone = NlAttrGetU16(ctAttr);
@@ -748,9 +758,15 @@ OvsExecuteConntrackAction(PNET_BUFFER_LIST curNbl,
return NDIS_STATUS_NOT_SUPPORTED;
}
}
+ ctAttr = NlAttrFindNested(a, OVS_CT_ATTR_FORCE_COMMIT);
+ if (ctAttr) {
+ force = TRUE;
+ /* Force implicitly means commit */
+ commit = TRUE;
+ }
- status = OvsCtExecute_(curNbl, key, layers,
- commit, zone, mark, labels, helper);
+ status = OvsCtExecute_(curNbl, key, layers, commit, force,
+ zone, mark, labels, helper);
return status;
}