On 19 April 2017 at 13:18, Yin Lin <li...@vmware.com> wrote: > There dependencies in Contrack module such as NAT and fragmentation on > OvsForwardingContext. This patch will make OvsForwardingContext public > in order to implement these functionalities. >
Can you please respin this with a Signed-off-by and Acked-by? > --- > datapath-windows/ovsext/Actions.c | 61 ++---------------------------- > ------- > datapath-windows/ovsext/Actions.h | 58 ++++++++++++++++++++++++++++++ > +++++ > datapath-windows/ovsext/Conntrack.c | 5 +-- > datapath-windows/ovsext/Conntrack.h | 4 +-- > 4 files changed, 65 insertions(+), 63 deletions(-) > > diff --git a/datapath-windows/ovsext/Actions.c b/datapath-windows/ovsext/ > Actions.c > index 46f84bc..3bd00a7 100644 > --- a/datapath-windows/ovsext/Actions.c > +++ b/datapath-windows/ovsext/Actions.c > @@ -71,63 +71,6 @@ typedef struct _OVS_ACTION_STATS { > OVS_ACTION_STATS ovsActionStats; > > /* > - * There a lot of data that needs to be maintained while executing the > pipeline > - * as dictated by the actions of a flow, across different functions at > different > - * levels. Such data is put together in a 'context' structure. Care > should be > - * exercised while adding new members to the structure - only add ones > that get > - * used across multiple stages in the pipeline/get used in multiple > functions. > - */ > -typedef struct OvsForwardingContext { > - POVS_SWITCH_CONTEXT switchContext; > - /* The NBL currently used in the pipeline. */ > - PNET_BUFFER_LIST curNbl; > - /* NDIS forwarding detail for 'curNbl'. */ > - PNDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO fwdDetail; > - /* Array of destination ports for 'curNbl'. */ > - PNDIS_SWITCH_FORWARDING_DESTINATION_ARRAY destinationPorts; > - /* send flags while sending 'curNbl' into NDIS. */ > - ULONG sendFlags; > - /* Total number of output ports, used + unused, in 'curNbl'. */ > - UINT32 destPortsSizeIn; > - /* Total number of used output ports in 'curNbl'. */ > - UINT32 destPortsSizeOut; > - /* > - * If 'curNbl' is not owned by OVS, they need to be tracked, if they > need to > - * be freed/completed. > - */ > - OvsCompletionList *completionList; > - /* > - * vport number of 'curNbl' when it is passed from the PIF bridge to > the INT > - * bridge. ie. during tunneling on the Rx side. > - */ > - UINT32 srcVportNo; > - > - /* > - * Tunnel key: > - * - specified in actions during tunneling Tx > - * - extracted from an NBL during tunneling Rx > - */ > - OvsIPv4TunnelKey tunKey; > - > - /* > - * Tunneling - Tx: > - * To store the output port, when it is a tunneled port. We don't > foresee > - * multiple tunneled ports as outport for any given NBL. > - */ > - POVS_VPORT_ENTRY tunnelTxNic; > - > - /* > - * Tunneling - Rx: > - * Points to the Internal port on the PIF Bridge, if the packet needs > to be > - * de-tunneled. > - */ > - POVS_VPORT_ENTRY tunnelRxNic; > - > - /* header information */ > - OVS_PACKET_HDR_INFO layers; > -} OvsForwardingContext; > - > -/* > * ------------------------------------------------------------ > -------------- > * OvsInitForwardingCtx -- > * Function to init/re-init the 'ovsFwdCtx' context as the actions > pipeline > @@ -2032,8 +1975,8 @@ OvsDoExecuteActions(POVS_SWITCH_CONTEXT > switchContext, > } > } > > - status = OvsExecuteConntrackAction(ovsFwdCtx.curNbl, layers, > - key, (const PNL_ATTR)a); > + status = OvsExecuteConntrackAction(&ovsFwdCtx, key, > + (const PNL_ATTR)a); > if (status != NDIS_STATUS_SUCCESS) { > OVS_LOG_ERROR("CT Action failed"); > dropReason = L"OVS-conntrack action failed"; > diff --git a/datapath-windows/ovsext/Actions.h b/datapath-windows/ovsext/ > Actions.h > index c56c260..1ce6c20 100644 > --- a/datapath-windows/ovsext/Actions.h > +++ b/datapath-windows/ovsext/Actions.h > @@ -20,6 +20,64 @@ > #include "Switch.h" > #include "PacketIO.h" > > + > +/* > + * There a lot of data that needs to be maintained while executing the > pipeline > + * as dictated by the actions of a flow, across different functions at > different > + * levels. Such data is put together in a 'context' structure. Care > should be > + * exercised while adding new members to the structure - only add ones > that get > + * used across multiple stages in the pipeline/get used in multiple > functions. > + */ > +typedef struct OvsForwardingContext { > + POVS_SWITCH_CONTEXT switchContext; > + /* The NBL currently used in the pipeline. */ > + PNET_BUFFER_LIST curNbl; > + /* NDIS forwarding detail for 'curNbl'. */ > + PNDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO fwdDetail; > + /* Array of destination ports for 'curNbl'. */ > + PNDIS_SWITCH_FORWARDING_DESTINATION_ARRAY destinationPorts; > + /* send flags while sending 'curNbl' into NDIS. */ > + ULONG sendFlags; > + /* Total number of output ports, used + unused, in 'curNbl'. */ > + UINT32 destPortsSizeIn; > + /* Total number of used output ports in 'curNbl'. */ > + UINT32 destPortsSizeOut; > + /* > + * If 'curNbl' is not owned by OVS, they need to be tracked, if they > need to > + * be freed/completed. > + */ > + OvsCompletionList *completionList; > + /* > + * vport number of 'curNbl' when it is passed from the PIF bridge to > the INT > + * bridge. ie. during tunneling on the Rx side. > + */ > + UINT32 srcVportNo; > + > + /* > + * Tunnel key: > + * - specified in actions during tunneling Tx > + * - extracted from an NBL during tunneling Rx > + */ > + OvsIPv4TunnelKey tunKey; > + > + /* > + * Tunneling - Tx: > + * To store the output port, when it is a tunneled port. We don't > foresee > + * multiple tunneled ports as outport for any given NBL. > + */ > + POVS_VPORT_ENTRY tunnelTxNic; > + > + /* > + * Tunneling - Rx: > + * Points to the Internal port on the PIF Bridge, if the packet needs > to be > + * de-tunneled. > + */ > + POVS_VPORT_ENTRY tunnelRxNic; > + > + /* header information */ > + OVS_PACKET_HDR_INFO layers; > +} OvsForwardingContext; > + > NDIS_STATUS > OvsActionsExecute(POVS_SWITCH_CONTEXT switchContext, > OvsCompletionList *completionList, > diff --git a/datapath-windows/ovsext/Conntrack.c > b/datapath-windows/ovsext/Conntrack.c > index 35ab7a1..8658910 100644 > --- a/datapath-windows/ovsext/Conntrack.c > +++ b/datapath-windows/ovsext/Conntrack.c > @@ -710,8 +710,7 @@ OvsCtExecute_(PNET_BUFFER_LIST curNbl, > *----------------------------------------------------------- > ---------------- > */ > NDIS_STATUS > -OvsExecuteConntrackAction(PNET_BUFFER_LIST curNbl, > - OVS_PACKET_HDR_INFO *layers, > +OvsExecuteConntrackAction(OvsForwardingContext *fwdCtx, > OvsFlowKey *key, > const PNL_ATTR a) > { > @@ -722,6 +721,8 @@ OvsExecuteConntrackAction(PNET_BUFFER_LIST curNbl, > MD_MARK *mark = NULL; > MD_LABELS *labels = NULL; > PCHAR helper = NULL; > + PNET_BUFFER_LIST curNbl = fwdCtx->curNbl; > + OVS_PACKET_HDR_INFO *layers = &fwdCtx->layers; > > NDIS_STATUS status; > > diff --git a/datapath-windows/ovsext/Conntrack.h > b/datapath-windows/ovsext/Conntrack.h > index af99885..87d7eeb 100644 > --- a/datapath-windows/ovsext/Conntrack.h > +++ b/datapath-windows/ovsext/Conntrack.h > @@ -20,6 +20,7 @@ > #include "precomp.h" > #include "Flow.h" > #include "Debug.h" > +#include "Actions.h" > #include <stddef.h> > > #ifdef OVS_DBG_MOD > @@ -155,8 +156,7 @@ OvsGetTcpPayloadLength(PNET_BUFFER_LIST nbl) > VOID OvsCleanupConntrack(VOID); > NTSTATUS OvsInitConntrack(POVS_SWITCH_CONTEXT context); > > -NDIS_STATUS OvsExecuteConntrackAction(PNET_BUFFER_LIST curNbl, > - OVS_PACKET_HDR_INFO *layers, > +NDIS_STATUS OvsExecuteConntrackAction(OvsForwardingContext *fwdCtx, > OvsFlowKey *key, > const PNL_ATTR a); > BOOLEAN OvsConntrackValidateTcpPacket(const TCPHdr *tcp); > -- > 2.10.2.windows.1 > > > _______________________________________________ > dev mailing list > d...@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev