Message ID | 20170613052149.3076-1-kumaranand@vmware.com |
---|---|
State | Changes Requested |
Headers | show |
Acked-by: Sairam Venugopal <vsairam@vmware.com> On 6/12/17, 10:21 PM, "ovs-dev-bounces@openvswitch.org on behalf of Anand Kumar" <ovs-dev-bounces@openvswitch.org on behalf of kumaranand@vmware.com> 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 <kumaranand@vmware.com> >--- > 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 >dev@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=tjK3aU9e8CVYTaTVbb1zPBYceJkw5SURdJFFj_gA4XM&s=4cptEEUB_ExyTR9ueY9GMafYz3EzxWhhP7T1pAPS-Qg&e=
On 12 June 2017 at 22:21, Anand Kumar <kumaranand@vmware.com> 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 <kumaranand@vmware.com> > This breaks linux builds. > --- > 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 > dev@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev >
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;
- 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 <kumaranand@vmware.com> --- 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(-)