From patchwork Fri Sep 27 11:58:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 60022 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 78E781BEDE; Fri, 27 Sep 2019 13:58:26 +0200 (CEST) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id 1A29E1BEAA for ; Fri, 27 Sep 2019 13:58:25 +0200 (CEST) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7F39C307C828; Fri, 27 Sep 2019 11:58:24 +0000 (UTC) Received: from dmarchan.remote.csb (ovpn-204-157.brq.redhat.com [10.40.204.157]) by smtp.corp.redhat.com (Postfix) with ESMTP id 071FD5C21A; Fri, 27 Sep 2019 11:58:22 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: ian.stokes@intel.com, i.maximets@ovn.org, ktraynor@redhat.com, Olivier Matz Date: Fri, 27 Sep 2019 13:58:02 +0200 Message-Id: <1569585482-24513-1-git-send-email-david.marchand@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.40]); Fri, 27 Sep 2019 11:58:24 +0000 (UTC) Subject: [dpdk-dev] [PATCH] net: add missing endianness annotations X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" OVS currently maintains a copy of those headers with the right endianness annotations so that sparse checks can pass. We introduced rte_beXX_t for better readibility in v17.08. Let's make use of them, OVS then only needs to override those rte_beXX_t types by exposing a tweaked rte_byteorder.h header. Other existing dpdk users won't be affected since rte_beXX_t types are mapped to uintXX_t types. Signed-off-by: David Marchand Acked-by: Olivier Matz --- lib/librte_net/rte_icmp.h | 12 +++++++----- lib/librte_net/rte_ip.h | 28 ++++++++++++++-------------- lib/librte_net/rte_sctp.h | 10 ++++++---- lib/librte_net/rte_tcp.h | 20 +++++++++++--------- lib/librte_net/rte_udp.h | 10 ++++++---- 5 files changed, 44 insertions(+), 36 deletions(-) diff --git a/lib/librte_net/rte_icmp.h b/lib/librte_net/rte_icmp.h index 3f8100a..e0aeed4 100644 --- a/lib/librte_net/rte_icmp.h +++ b/lib/librte_net/rte_icmp.h @@ -16,6 +16,8 @@ #include +#include + #ifdef __cplusplus extern "C" { #endif @@ -24,11 +26,11 @@ extern "C" { * ICMP Header */ struct rte_icmp_hdr { - uint8_t icmp_type; /* ICMP packet type. */ - uint8_t icmp_code; /* ICMP packet code. */ - uint16_t icmp_cksum; /* ICMP packet checksum. */ - uint16_t icmp_ident; /* ICMP packet identifier. */ - uint16_t icmp_seq_nb; /* ICMP packet sequence number. */ + uint8_t icmp_type; /* ICMP packet type. */ + uint8_t icmp_code; /* ICMP packet code. */ + rte_be16_t icmp_cksum; /* ICMP packet checksum. */ + rte_be16_t icmp_ident; /* ICMP packet identifier. */ + rte_be16_t icmp_seq_nb; /* ICMP packet sequence number. */ } __attribute__((__packed__)); /* ICMP packet types */ diff --git a/lib/librte_net/rte_ip.h b/lib/librte_net/rte_ip.h index f82454b..731ee4f 100644 --- a/lib/librte_net/rte_ip.h +++ b/lib/librte_net/rte_ip.h @@ -33,14 +33,14 @@ extern "C" { struct rte_ipv4_hdr { uint8_t version_ihl; /**< version and header length */ uint8_t type_of_service; /**< type of service */ - uint16_t total_length; /**< length of packet */ - uint16_t packet_id; /**< packet ID */ - uint16_t fragment_offset; /**< fragmentation offset */ + rte_be16_t total_length; /**< length of packet */ + rte_be16_t packet_id; /**< packet ID */ + rte_be16_t fragment_offset; /**< fragmentation offset */ uint8_t time_to_live; /**< time to live */ uint8_t next_proto_id; /**< protocol ID */ - uint16_t hdr_checksum; /**< header checksum */ - uint32_t src_addr; /**< source address */ - uint32_t dst_addr; /**< destination address */ + rte_be16_t hdr_checksum; /**< header checksum */ + rte_be32_t src_addr; /**< source address */ + rte_be32_t dst_addr; /**< destination address */ } __attribute__((__packed__)); /** Create IPv4 address */ @@ -354,12 +354,12 @@ rte_ipv4_udptcp_cksum(const struct rte_ipv4_hdr *ipv4_hdr, const void *l4_hdr) * IPv6 Header */ struct rte_ipv6_hdr { - uint32_t vtc_flow; /**< IP version, traffic class & flow label. */ - uint16_t payload_len; /**< IP packet length - includes sizeof(ip_header). */ - uint8_t proto; /**< Protocol, next header. */ - uint8_t hop_limits; /**< Hop limits. */ - uint8_t src_addr[16]; /**< IP address of source host. */ - uint8_t dst_addr[16]; /**< IP address of destination host(s). */ + rte_be32_t vtc_flow; /**< IP version, traffic class & flow label. */ + rte_be16_t payload_len; /**< IP packet length - includes header size */ + uint8_t proto; /**< Protocol, next header. */ + uint8_t hop_limits; /**< Hop limits. */ + uint8_t src_addr[16]; /**< IP address of source host. */ + uint8_t dst_addr[16]; /**< IP address of destination host(s). */ } __attribute__((__packed__)); /* IPv6 vtc_flow: IPv / TC / flow_label */ @@ -392,8 +392,8 @@ rte_ipv6_phdr_cksum(const struct rte_ipv6_hdr *ipv6_hdr, uint64_t ol_flags) { uint32_t sum; struct { - uint32_t len; /* L4 length. */ - uint32_t proto; /* L4 protocol - top 3 bytes must be zero */ + rte_be32_t len; /* L4 length. */ + rte_be32_t proto; /* L4 protocol - top 3 bytes must be zero */ } psd_hdr; psd_hdr.proto = (uint32_t)(ipv6_hdr->proto << 24); diff --git a/lib/librte_net/rte_sctp.h b/lib/librte_net/rte_sctp.h index b3661b0..ab38be7 100644 --- a/lib/librte_net/rte_sctp.h +++ b/lib/librte_net/rte_sctp.h @@ -20,14 +20,16 @@ extern "C" { #include +#include + /** * SCTP Header */ struct rte_sctp_hdr { - uint16_t src_port; /**< Source port. */ - uint16_t dst_port; /**< Destin port. */ - uint32_t tag; /**< Validation tag. */ - uint32_t cksum; /**< Checksum. */ + rte_be16_t src_port; /**< Source port. */ + rte_be16_t dst_port; /**< Destin port. */ + rte_be32_t tag; /**< Validation tag. */ + rte_be32_t cksum; /**< Checksum. */ } __attribute__((__packed__)); #ifdef __cplusplus diff --git a/lib/librte_net/rte_tcp.h b/lib/librte_net/rte_tcp.h index 7d649a2..06f623d 100644 --- a/lib/librte_net/rte_tcp.h +++ b/lib/librte_net/rte_tcp.h @@ -16,6 +16,8 @@ #include +#include + #ifdef __cplusplus extern "C" { #endif @@ -24,15 +26,15 @@ extern "C" { * TCP Header */ struct rte_tcp_hdr { - uint16_t src_port; /**< TCP source port. */ - uint16_t dst_port; /**< TCP destination port. */ - uint32_t sent_seq; /**< TX data sequence number. */ - uint32_t recv_ack; /**< RX data acknowledgement sequence number. */ - uint8_t data_off; /**< Data offset. */ - uint8_t tcp_flags; /**< TCP flags */ - uint16_t rx_win; /**< RX flow control window. */ - uint16_t cksum; /**< TCP checksum. */ - uint16_t tcp_urp; /**< TCP urgent pointer, if any. */ + rte_be16_t src_port; /**< TCP source port. */ + rte_be16_t dst_port; /**< TCP destination port. */ + rte_be32_t sent_seq; /**< TX data sequence number. */ + rte_be32_t recv_ack; /**< RX data acknowledgment sequence number. */ + uint8_t data_off; /**< Data offset. */ + uint8_t tcp_flags; /**< TCP flags */ + rte_be16_t rx_win; /**< RX flow control window. */ + rte_be16_t cksum; /**< TCP checksum. */ + rte_be16_t tcp_urp; /**< TCP urgent pointer, if any. */ } __attribute__((__packed__)); /** diff --git a/lib/librte_net/rte_udp.h b/lib/librte_net/rte_udp.h index 1c3437c..01c26b3 100644 --- a/lib/librte_net/rte_udp.h +++ b/lib/librte_net/rte_udp.h @@ -16,6 +16,8 @@ #include +#include + #ifdef __cplusplus extern "C" { #endif @@ -24,10 +26,10 @@ extern "C" { * UDP Header */ struct rte_udp_hdr { - uint16_t src_port; /**< UDP source port. */ - uint16_t dst_port; /**< UDP destination port. */ - uint16_t dgram_len; /**< UDP datagram length */ - uint16_t dgram_cksum; /**< UDP datagram checksum */ + rte_be16_t src_port; /**< UDP source port. */ + rte_be16_t dst_port; /**< UDP destination port. */ + rte_be16_t dgram_len; /**< UDP datagram length */ + rte_be16_t dgram_cksum; /**< UDP datagram checksum */ } __attribute__((__packed__)); #ifdef __cplusplus