On 11/27/2014 08:46 PM, Bala Manoharan wrote:
I agree the #defines are bit verbose in this patch but I tried to create the hash defines to be compatible with the current syntax in ODP header files.

Also we had a discussion today in ODP API scrum regarding including /usr/include/linux/tcp.h header file directly in linux-generic implementations rather than using a header file in helper directory.

and ip.h and ipsec.h but it will require some rework of our apps. So it it might be better to do it after 1.0.

However I think it's better to have previous Balas version with bitfields and add BE support for bitfield there.

Maxim.





We can also get views on that approach in this wider group.

Regards,
Bala

On 27 November 2014 at 22:43, Bill Fischofer <[email protected] <mailto:[email protected]>> wrote:

    The TCP header is defined in RFC 793 as:

    TCP Header Format

0 1 2 3
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |          Source Port          |       Destination Port        |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                        Sequence Number                        |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                    Acknowledgment Number                      |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |  Data |           |U|A|P|R|S|F|                               |
        | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
        |       |           |G|K|H|T|N|N|                               |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |           Checksum            |         Urgent Pointer        |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                    Options                    |    Padding    |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                             data                              |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                                 TCP Header Format

               Note that one tick mark represents one bit position.

                                    Figure 3.


    If we're going to provide a mapping for this in ODP, it needs to
    cover the entire header.  For validation, getting the 4-bit Data
    Offset mapped correctly is critical, since this is needed to
    ensure that the packet is well formed.  That's omitted from the
    proposed mapping.

    The standard way of mapping the flag byte as a byte is to use
    #defines:

    #define FIN 0x01
    #define SYN 0x02
    #define RST 0x04
    #define PSH 0x08
    #define ACK 0x10
    #define URG 0x20

    And then say things like

    if (flags & SYN) ...

    or

    flags = SYN+ACK;

    The proposed routines for these bit accesses is overly verbose and
    awkward.

    For the bitfields, if LInux has no problem with #ifdefs to dual
    map based on endianness I don't see why we shouldn't adopt the
    same convention.

    The Linux tcp header is in /usr/include/linux/tcp.h:

    struct tcphdr {
    __be16source;
    __be16dest;
    __be32seq;
    __be32ack_seq;
    #if defined(__LITTLE_ENDIAN_BITFIELD)
    __u16res1:4,
    doff:4,
    fin:1,
    syn:1,
    rst:1,
    psh:1,
    ack:1,
    urg:1,
    ece:1,
    cwr:1;
    #elif defined(__BIG_ENDIAN_BITFIELD)
    __u16doff:4,
    res1:4,
    cwr:1,
    ece:1,
    urg:1,
    ack:1,
    psh:1,
    rst:1,
    syn:1,
    fin:1;
    #else
    #error"Adjust your <asm/byteorder.h> defines"
    #endif
    __be16window;
    __sum16check;
    __be16urg_ptr;
    };



    On Thu, Nov 27, 2014 at 11:32 AM, Balasubramanian Manoharan
    <[email protected] <mailto:[email protected]>> wrote:

        This patch adds TCP header description struct odph_tcphdr_t
        This structure is used for accessing TCP header information
        from the packet

        Signed-off-by: Balasubramanian Manoharan
        <[email protected] <mailto:[email protected]>>
        ---
         helper/include/odph_tcp.h | 90
        +++++++++++++++++++++++++++++++++++++++++++++++
         1 file changed, 90 insertions(+)
         create mode 100644 helper/include/odph_tcp.h

        diff --git a/helper/include/odph_tcp.h b/helper/include/odph_tcp.h
        new file mode 100644
        index 0000000..f625ac7
        --- /dev/null
        +++ b/helper/include/odph_tcp.h
        @@ -0,0 +1,90 @@
        +/* Copyright (c) 2014, Linaro Limited
        + * All rights reserved.
        + *
        + * SPDX-License-Identifier:  BSD-3-Clause
        + */
        +
        +
        +/**
        + * @file
        + *
        + * ODP TCP header
        + */
        +
        +#ifndef ODPH_TCP_H_
        +#define ODPH_TCP_H_
        +
        +#ifdef __cplusplus
        +extern "C" {
        +#endif
        +
        +#include <odp_align.h>
        +#include <odp_debug.h>
        +#include <odp_byteorder.h>
        +
        +/** @internal TCP header flag FIN offset */
        +#define ODPH_TCPHDR_FIN_OFFSET 0
        +
        +/** @internal TCP header flag SYN offset */
        +#define ODPH_TCPHDR_SYN_OFFSET 1
        +
        +/** @internal TCP header flag RST offset */
        +#define ODPH_TCPHDR_RST_OFFSET 2
        +
        +/** @internal TCP header flag PSH offset */
        +#define ODPH_TCPHDR_PSH_OFFSET 3
        +
        +/** @internal TCP header flag ACK offset */
        +#define ODPH_TCPHDR_ACK_OFFSET 4
        +
        +/** @internal TCP header flag URG offset */
        +#define ODPH_TCPHDR_URG_OFFSET 5
        +
        +/** @internal TCP header flag ECE offset */
        +#define ODPH_TCPHDR_ECE_OFFSET 6
        +
        +/** @internal TCP header flag CWR offset */
        +#define ODPH_TCPHDR_CWR_OFFSET 7
        +
        +/** @internal Returns TCP header FIN flag */
        +#define ODPH_TCPHDR_FLAGS_FIN(flags) ((flags) & (1 <<
        ODPH_TCPHDR_FIN_OFFSET))
        +
        +/** @internal Returns TCP header SYN flag */
        +#define ODPH_TCPHDR_FLAGS_SYN(flags) ((flags) & (1 <<
        ODPH_TCPHDR_SYN_OFFSET))
        +
        +/** @internal Returns TCP header RST flag */
        +#define ODPH_TCPHDR_FLAGS_RST(flags) ((flags) & (1 <<
        ODPH_TCPHDR_RST_OFFSET))
        +
        +/** @internal Returns TCP header PSH flag */
        +#define ODPH_TCPHDR_FLAGS_PSH(flags) ((flags) & (1 <<
        ODPH_TCPHDR_PSH_OFFSET))
        +
        +/** @internal Returns TCP header ACK flag */
        +#define ODPH_TCPHDR_FLAGS_ACK(flags) ((flags) & (1 <<
        ODPH_TCPHDR_ACK_OFFSET))
        +
        +/** @internal Returns TCP header URG flag */
        +#define ODPH_TCPHDR_FLAGS_URG(flags) ((flags) & (1 <<
        ODPH_TCPHDR_URG_OFFSET))
        +
        +/** @internal Returns TCP header ECE flag */
        +#define ODPH_TCPHDR_FLAGS_ECE(flags) ((flags) & (1 <<
        ODPH_TCPHDR_ECE_OFFSET))
        +
        +/** @internal Returns TCP header CWR flag */
        +#define ODPH_TCPHDR_FLAGS_CWR(flags) ((flags) & (1 <<
        ODPH_TCPHDR_CWR_OFFSET))
        +
        +/** TCP header */
        +typedef struct ODP_PACKED {
        +       uint16be_t src_port; /**< Source port */
        +       uint16be_t dst_port; /**< Destinatino port */
        +       uint32be_t seq_no;   /**< Sequence number */
        +       uint32be_t ack_no;   /**< Acknowledgment number */
        +       uint8_t data_offset; /**< Data offset and reserved */
        +       uint8_t flags;       /**< TCP flags as a byte */
        +       uint16be_t window;   /**< Window size */
        +       uint16be_t cksm;     /**< Checksum */
        +       uint16be_t urgptr;   /**< Urgent pointer */
        +} odph_tcphdr_t;
        +
        +#ifdef __cplusplus
        +}
        +#endif
        +
        +#endif
        --
        2.0.1.472.g6f92e5f


        _______________________________________________
        lng-odp mailing list
        [email protected] <mailto:[email protected]>
        http://lists.linaro.org/mailman/listinfo/lng-odp





_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp


_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to