On 26 January 2017 at 15:43, Alin Serdean <aserd...@cloudbasesolutions.com>
wrote:

> From: Alin Serdean <aserd...@cloudbasesolutions.com>
>
> This patch adds support for set action with OVS_KEY_ATTR_TCP attribute
> (change TCP source or destination port).
>
> If the source or destination TCP port was changed, update the TCP checksum.
>
> A sample flow can look like the following:
> set(tcp(src=80,dst=443))
>
> Signed-off-by: Alin Gabriel Serdean <aserd...@cloudbasesolutions.com>
>

I applied the series to master. Was this the series that you needed for OVN
to work on Windows and needed it in 2.7?


> ---
> v3: check for layers->isTcp as suggested by Sairam Venugopal <
> vsai...@vmware.com>
> v2: set action for tcp attribute changed to function: OvsUpdateTcpPorts
> ---
>  datapath-windows/ovsext/Actions.c | 48 ++++++++++++++++++++++++++++++
> +++++++++
>  1 file changed, 48 insertions(+)
>
> diff --git a/datapath-windows/ovsext/Actions.c b/datapath-windows/ovsext/
> Actions.c
> index 3dfcc68..bce37f8 100644
> --- a/datapath-windows/ovsext/Actions.c
> +++ b/datapath-windows/ovsext/Actions.c
> @@ -1430,6 +1430,49 @@ OvsUpdateUdpPorts(OvsForwardingContext *ovsFwdCtx,
>
>  /*
>   *-----------------------------------------------------------
> -----------------
> + * OvsUpdateTcpPorts --
> + *      Updates the TCP source or destination port in ovsFwdCtx.curNbl
> inline
> + *      based on the specified key.
> + *-----------------------------------------------------------
> -----------------
> + */
> +static __inline NDIS_STATUS
> +OvsUpdateTcpPorts(OvsForwardingContext *ovsFwdCtx,
> +                  const struct ovs_key_tcp *tcpAttr)
> +{
> +    PUINT8 bufferStart;
> +    OVS_PACKET_HDR_INFO *layers = &ovsFwdCtx->layers;
> +    TCPHdr *tcpHdr = NULL;
> +
> +    ASSERT(layers->value != 0);
> +
> +    if (!layers->isTcp) {
> +        ovsActionStats.noCopiedNbl++;
> +        return NDIS_STATUS_FAILURE;
> +    }
> +
> +    bufferStart = OvsGetHeaderBySize(ovsFwdCtx, layers->l7Offset);
> +    if (!bufferStart) {
> +        return NDIS_STATUS_RESOURCES;
> +    }
> +
> +    tcpHdr = (TCPHdr *)(bufferStart + layers->l4Offset);
> +
> +    if (tcpHdr->source != tcpAttr->tcp_src) {
> +        tcpHdr->check = ChecksumUpdate16(tcpHdr->check, tcpHdr->source,
> +                                         tcpAttr->tcp_src);
> +        tcpHdr->source = tcpAttr->tcp_src;
> +    }
> +    if (tcpHdr->dest != tcpAttr->tcp_dst) {
> +        tcpHdr->check = ChecksumUpdate16(tcpHdr->check, tcpHdr->dest,
> +                                         tcpAttr->tcp_dst);
> +        tcpHdr->dest = tcpAttr->tcp_dst;
> +    }
> +
> +    return NDIS_STATUS_SUCCESS;
> +}
> +
> +/*
> + *-----------------------------------------------------------
> -----------------
>   * OvsUpdateIPv4Header --
>   *      Updates the IPv4 header in ovsFwdCtx.curNbl inline based on the
>   *      specified key.
> @@ -1575,6 +1618,11 @@ OvsExecuteSetAction(OvsForwardingContext
> *ovsFwdCtx,
>              NlAttrGetUnspec(a, sizeof(struct ovs_key_udp)));
>          break;
>
> +    case OVS_KEY_ATTR_TCP:
> +        status = OvsUpdateTcpPorts(ovsFwdCtx,
> +            NlAttrGetUnspec(a, sizeof(struct ovs_key_tcp)));
> +        break;
> +
>      default:
>          OVS_LOG_INFO("Unhandled attribute %#x", type);
>          break;
> --
> 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

Reply via email to