Acked-by: Sairam Venugopal <[email protected]>
On 6/12/17, 10:21 PM, "[email protected] on behalf of Anand Kumar" <[email protected] on behalf of [email protected]> wrote: > - Parse netlink ct attr OVS_CT_ATTR_EVENTMASK > - Add a new CT_EVENT_TYPE, OVS_EVENT_CT_UPDATE which is triggered > only when CT_ATTR_EVENTMASK is set for MARK and LABEL updates. > >Signed-off-by: Anand Kumar <[email protected]> >--- > datapath-windows/include/OvsDpInterfaceCtExt.h | 1 + > datapath-windows/ovsext/Conntrack.c | 27 ++++++++++++++++++++++++-- > datapath-windows/ovsext/Datapath.c | 3 +++ > datapath-windows/ovsext/DpInternal.h | 3 ++- > datapath-windows/ovsext/Event.c | 3 ++- > lib/netlink-conntrack.c | 3 +++ > 6 files changed, 36 insertions(+), 4 deletions(-) > >diff --git a/datapath-windows/include/OvsDpInterfaceCtExt.h >b/datapath-windows/include/OvsDpInterfaceCtExt.h >index 3b94778..45e7ff8 100644 >--- a/datapath-windows/include/OvsDpInterfaceCtExt.h >+++ b/datapath-windows/include/OvsDpInterfaceCtExt.h >@@ -154,6 +154,7 @@ enum cntl_msg_types { > IPCTNL_MSG_CT_GET_STATS, > IPCTNL_MSG_CT_GET_DYING, > IPCTNL_MSG_CT_GET_UNCONFIRMED, >+ IPCTNL_MSG_CT_UPDATE, > IPCTNL_MSG_MAX > }; > >diff --git a/datapath-windows/ovsext/Conntrack.c >b/datapath-windows/ovsext/Conntrack.c >index 68ed395..ab53993 100644 >--- a/datapath-windows/ovsext/Conntrack.c >+++ b/datapath-windows/ovsext/Conntrack.c >@@ -698,9 +698,11 @@ OvsCtExecute_(OvsForwardingContext *fwdCtx, > MD_MARK *mark, > MD_LABELS *labels, > PCHAR helper, >- PNAT_ACTION_INFO natInfo) >+ PNAT_ACTION_INFO natInfo, >+ BOOLEAN postUpdateEvent) > { > NDIS_STATUS status = NDIS_STATUS_SUCCESS; >+ BOOLEAN sendUpdateEvent = FALSE; > POVS_CT_ENTRY entry = NULL; > PNET_BUFFER_LIST curNbl = fwdCtx->curNbl; > OvsConntrackKeyLookupCtx ctx = { 0 }; >@@ -752,10 +754,16 @@ OvsCtExecute_(OvsForwardingContext *fwdCtx, > } > > if (entry && mark) { >+ if (!entryCreated) { >+ sendUpdateEvent = TRUE; >+ } > OvsConntrackSetMark(key, entry, mark->value, mark->mask); > } > > if (entry && labels) { >+ if (!entryCreated) { >+ sendUpdateEvent = TRUE; >+ } > OvsConntrackSetLabels(key, entry, &labels->value, &labels->mask); > } > >@@ -790,6 +798,9 @@ OvsCtExecute_(OvsForwardingContext *fwdCtx, > if (entryCreated && entry) { > OvsPostCtEventEntry(entry, OVS_EVENT_CT_NEW); > } >+ if (postUpdateEvent && sendUpdateEvent) { >+ OvsPostCtEventEntry(entry, OVS_EVENT_CT_UPDATE); >+ } > > NdisReleaseRWLock(ovsConntrackLockObj, &lockState); > >@@ -811,7 +822,9 @@ OvsExecuteConntrackAction(OvsForwardingContext *fwdCtx, > PNL_ATTR ctAttr; > BOOLEAN commit = FALSE; > BOOLEAN force = FALSE; >+ BOOLEAN postUpdateEvent = FALSE; > UINT16 zone = 0; >+ UINT32 eventmask = 0; > MD_MARK *mark = NULL; > MD_LABELS *labels = NULL; > PCHAR helper = NULL; >@@ -932,9 +945,17 @@ OvsExecuteConntrackAction(OvsForwardingContext *fwdCtx, > /* Force implicitly means commit */ > commit = TRUE; > } >+ ctAttr = NlAttrFindNested(a, OVS_CT_ATTR_EVENTMASK); >+ if (ctAttr) { >+ eventmask = NlAttrGetU32(ctAttr); >+ /* Only mark and label updates are supported. */ >+ if (eventmask & (1 << IPCT_MARK | 1 << IPCT_LABEL)) >+ postUpdateEvent = TRUE; >+ } > /* If newNbl is not allocated, use the current Nbl*/ > status = OvsCtExecute_(fwdCtx, key, layers, >- commit, force, zone, mark, labels, helper, >&natActionInfo); >+ commit, force, zone, mark, labels, helper, >&natActionInfo, >+ postUpdateEvent); > return status; > } > >@@ -1290,6 +1311,8 @@ OvsCreateNlMsgFromCtEntry(POVS_CT_ENTRY entry, > nlmsgType = (UINT16) (NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_CT_NEW); > } else if (eventType == OVS_EVENT_CT_DELETE) { > nlmsgType = (UINT16) (NFNL_SUBSYS_CTNETLINK << 8 | > IPCTNL_MSG_CT_DELETE); >+ } else if (eventType == OVS_EVENT_CT_UPDATE) { >+ nlmsgType = (UINT16) (NFNL_SUBSYS_CTNETLINK << 8 | >IPCTNL_MSG_CT_UPDATE); > } else { > return STATUS_INVALID_PARAMETER; > } >diff --git a/datapath-windows/ovsext/Datapath.c >b/datapath-windows/ovsext/Datapath.c >index 83d996e..10412a1 100644 >--- a/datapath-windows/ovsext/Datapath.c >+++ b/datapath-windows/ovsext/Datapath.c >@@ -1312,6 +1312,9 @@ OvsSubscribeEventCmdHandler(POVS_USER_PARAMS_CONTEXT >usrParamsCtx, > if (mcastGrp == NFNLGRP_CONNTRACK_DESTROY) { > request.mask = OVS_EVENT_CT_DELETE; > } >+ if (mcastGrp == NFNLGRP_CONNTRACK_UPDATE) { >+ request.mask = OVS_EVENT_CT_UPDATE; >+ } > } > > status = OvsSubscribeEventIoctl(instance->fileObject, &request, >diff --git a/datapath-windows/ovsext/DpInternal.h >b/datapath-windows/ovsext/DpInternal.h >index 743891c..3e351b7 100644 >--- a/datapath-windows/ovsext/DpInternal.h >+++ b/datapath-windows/ovsext/DpInternal.h >@@ -336,7 +336,8 @@ enum { > enum { > OVS_EVENT_CT_NEW = (1 << 0), > OVS_EVENT_CT_DELETE = (1 << 1), >- OVS_EVENT_CT_MASK_ALL = 0x3 >+ OVS_EVENT_CT_UPDATE = (1 << 2), >+ OVS_EVENT_CT_MASK_ALL = 0x7 > }; > > /* Supported mcast event groups */ >diff --git a/datapath-windows/ovsext/Event.c b/datapath-windows/ovsext/Event.c >index cb0dc92..2b54692 100644 >--- a/datapath-windows/ovsext/Event.c >+++ b/datapath-windows/ovsext/Event.c >@@ -71,7 +71,8 @@ OvsGetMcastEventId(UINT32 protocol, UINT32 mcastMask, UINT32 >*eventId) > return NDIS_STATUS_SUCCESS; > case NETLINK_NETFILTER: > if ((mcastMask & OVS_EVENT_CT_NEW) >- || (mcastMask & OVS_EVENT_CT_DELETE)) { >+ || (mcastMask & OVS_EVENT_CT_DELETE) >+ || (mcastMask & OVS_EVENT_CT_UPDATE)) { > *eventId = OVS_MCAST_CT_EVENT; > return NDIS_STATUS_SUCCESS; > } >diff --git a/lib/netlink-conntrack.c b/lib/netlink-conntrack.c >index f0e2aea..e976fb3 100644 >--- a/lib/netlink-conntrack.c >+++ b/lib/netlink-conntrack.c >@@ -728,6 +728,9 @@ nl_ct_parse_header_policy(struct ofpbuf *buf, > case IPCTNL_MSG_CT_DELETE: > *event_type = NL_CT_EVENT_DELETE; > break; >+ case IPCTNL_MSG_CT_UPDATE: >+ *event_type = NL_CT_EVENT_UPDATE; >+ break; > default: > VLOG_ERR_RL(&rl, "Can't parse conntrack event type."); > return false; >-- >2.9.3.windows.1 > >_______________________________________________ >dev mailing list >[email protected] >https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=Z6vowHUOjP5ysP_g372c49Nqc1vEKqHKNBkR5Q5Z7uo&m=tjK3aU9e8CVYTaTVbb1zPBYceJkw5SURdJFFj_gA4XM&s=4cptEEUB_ExyTR9ueY9GMafYz3EzxWhhP7T1pAPS-Qg&e= > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
