From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D57FDC282C3 for ; Thu, 24 Jan 2019 09:47:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A68B720855 for ; Thu, 24 Jan 2019 09:47:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727404AbfAXJru (ORCPT ); Thu, 24 Jan 2019 04:47:50 -0500 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:57118 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726105AbfAXJru (ORCPT ); Thu, 24 Jan 2019 04:47:50 -0500 Received: from Internal Mail-Server by MTLPINE1 (envelope-from elibr@mellanox.com) with ESMTPS (AES256-SHA encrypted); 24 Jan 2019 11:47:42 +0200 Received: from l-dev-uefi25.mtl.labs.mlnx. (l-dev-uefi25.mtl.labs.mlnx [10.134.223.1]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id x0O9lWga030174; Thu, 24 Jan 2019 11:47:42 +0200 From: Eli Britstein To: Pravin B Shelar Cc: netdev@vger.kernel.org, Ben Pfaff , dev@openvswitch.org, Roi Dayan , Simon Horman , Eli Britstein Subject: [PATCH net-next 1/1] openvswitch: Declare ovs key structures using macros Date: Thu, 24 Jan 2019 11:46:47 +0200 Message-Id: <20190124094647.24579-1-elibr@mellanox.com> X-Mailer: git-send-email 2.14.5 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Declare ovs key structures using macros to enable retrieving fields information, with no functional change. Signed-off-by: Eli Britstein Reviewed-by: Roi Dayan --- include/uapi/linux/openvswitch.h | 102 ++++++++++++++++++++++++++------------- 1 file changed, 69 insertions(+), 33 deletions(-) diff --git a/include/uapi/linux/openvswitch.h b/include/uapi/linux/openvswitch.h index dbe0cbe4f1b7..dc8246f871fd 100644 --- a/include/uapi/linux/openvswitch.h +++ b/include/uapi/linux/openvswitch.h @@ -387,73 +387,109 @@ enum ovs_frag_type { #define OVS_FRAG_TYPE_MAX (__OVS_FRAG_TYPE_MAX - 1) +#define OVS_KEY_FIELD_ARR(type, name, elements) type name[elements]; +#define OVS_KEY_FIELD(type, name) type name; + +#define OVS_KEY_ETHERNET_FIELDS \ + OVS_KEY_FIELD_ARR(__u8, eth_src, ETH_ALEN) \ + OVS_KEY_FIELD_ARR(__u8, eth_dst, ETH_ALEN) + struct ovs_key_ethernet { - __u8 eth_src[ETH_ALEN]; - __u8 eth_dst[ETH_ALEN]; + OVS_KEY_ETHERNET_FIELDS }; struct ovs_key_mpls { __be32 mpls_lse; }; +#define OVS_KEY_IPV4_FIELDS \ + OVS_KEY_FIELD(__be32, ipv4_src) \ + OVS_KEY_FIELD(__be32, ipv4_dst) \ + OVS_KEY_FIELD(__u8, ipv4_proto) \ + OVS_KEY_FIELD(__u8, ipv4_tos) \ + OVS_KEY_FIELD(__u8, ipv4_ttl) \ + OVS_KEY_FIELD(__u8, ipv4_frag /* One of OVS_FRAG_TYPE_*. */) + struct ovs_key_ipv4 { - __be32 ipv4_src; - __be32 ipv4_dst; - __u8 ipv4_proto; - __u8 ipv4_tos; - __u8 ipv4_ttl; - __u8 ipv4_frag; /* One of OVS_FRAG_TYPE_*. */ + OVS_KEY_IPV4_FIELDS }; +#define OVS_KEY_IPV6_FIELDS \ + OVS_KEY_FIELD_ARR(__be32, ipv6_src, 4) \ + OVS_KEY_FIELD_ARR(__be32, ipv6_dst, 4) \ + OVS_KEY_FIELD(__be32, ipv6_label /* 20-bits in least-significant bits. */) \ + OVS_KEY_FIELD(__u8, ipv6_proto) \ + OVS_KEY_FIELD(__u8, ipv6_tclass) \ + OVS_KEY_FIELD(__u8, ipv6_hlimit) \ + OVS_KEY_FIELD(__u8, ipv6_frag /* One of OVS_FRAG_TYPE_*. */) + struct ovs_key_ipv6 { - __be32 ipv6_src[4]; - __be32 ipv6_dst[4]; - __be32 ipv6_label; /* 20-bits in least-significant bits. */ - __u8 ipv6_proto; - __u8 ipv6_tclass; - __u8 ipv6_hlimit; - __u8 ipv6_frag; /* One of OVS_FRAG_TYPE_*. */ + OVS_KEY_IPV6_FIELDS }; +#define OVS_KEY_TCP_FIELDS \ + OVS_KEY_FIELD(__be16, tcp_src) \ + OVS_KEY_FIELD(__be16, tcp_dst) + struct ovs_key_tcp { - __be16 tcp_src; - __be16 tcp_dst; + OVS_KEY_TCP_FIELDS }; +#define OVS_KEY_UDP_FIELDS \ + OVS_KEY_FIELD(__be16, udp_src) \ + OVS_KEY_FIELD(__be16, udp_dst) + struct ovs_key_udp { - __be16 udp_src; - __be16 udp_dst; + OVS_KEY_UDP_FIELDS }; +#define OVS_KEY_SCTP_FIELDS \ + OVS_KEY_FIELD(__be16, sctp_src) \ + OVS_KEY_FIELD(__be16, sctp_dst) + struct ovs_key_sctp { - __be16 sctp_src; - __be16 sctp_dst; + OVS_KEY_SCTP_FIELDS }; +#define OVS_KEY_ICMP_FIELDS \ + OVS_KEY_FIELD(__u8, icmp_type) \ + OVS_KEY_FIELD(__u8, icmp_code) + struct ovs_key_icmp { - __u8 icmp_type; - __u8 icmp_code; + OVS_KEY_ICMP_FIELDS }; +#define OVS_KEY_ICMPV6_FIELDS \ + OVS_KEY_FIELD(__u8, icmpv6_type) \ + OVS_KEY_FIELD(__u8, icmpv6_code) + struct ovs_key_icmpv6 { - __u8 icmpv6_type; - __u8 icmpv6_code; + OVS_KEY_ICMPV6_FIELDS }; +#define OVS_KEY_ARP_FIELDS \ + OVS_KEY_FIELD(__be32, arp_sip) \ + OVS_KEY_FIELD(__be32, arp_tip) \ + OVS_KEY_FIELD(__be16, arp_op) \ + OVS_KEY_FIELD_ARR(__u8, arp_sha, ETH_ALEN) \ + OVS_KEY_FIELD_ARR(__u8, arp_tha, ETH_ALEN) + struct ovs_key_arp { - __be32 arp_sip; - __be32 arp_tip; - __be16 arp_op; - __u8 arp_sha[ETH_ALEN]; - __u8 arp_tha[ETH_ALEN]; + OVS_KEY_ARP_FIELDS }; +#define OVS_KEY_ND_FIELDS \ + OVS_KEY_FIELD_ARR(__be32, nd_target, 4) \ + OVS_KEY_FIELD_ARR(__u8, nd_sll, ETH_ALEN) \ + OVS_KEY_FIELD_ARR(__u8, nd_tll, ETH_ALEN) + struct ovs_key_nd { - __be32 nd_target[4]; - __u8 nd_sll[ETH_ALEN]; - __u8 nd_tll[ETH_ALEN]; + OVS_KEY_ND_FIELDS }; +#undef OVS_KEY_FIELD_ARR +#undef OVS_KEY_FIELD + #define OVS_CT_LABELS_LEN_32 4 #define OVS_CT_LABELS_LEN (OVS_CT_LABELS_LEN_32 * sizeof(__u32)) struct ovs_key_ct_labels { -- 2.14.4