From: Eli Britstein <elibr@mellanox.com>
To: Pravin B Shelar <pshelar@ovn.org>
Cc: netdev@vger.kernel.org, dev@openvswitch.org,
Simon Horman <simon.horman@netronome.com>,
"David S. Miller" <davem@davemloft.net>, Ben Pfaff <blp@ovn.org>,
Roi Dayan <roid@mellanox.com>, Eli Britstein <elibr@mellanox.com>
Subject: [PATCH net-next V2 1/1] openvswitch: Declare ovs key structures using macros
Date: Sun, 3 Feb 2019 11:12:17 +0200 [thread overview]
Message-ID: <20190203091217.8459-1-elibr@mellanox.com> (raw)
Declare ovs key structures using macros as a pre-step towards to
enable retrieving fields information, as a work done in proposed
commit in the OVS tree https://patchwork.ozlabs.org/patch/1023406/
("odp-util: Do not rewrite fields with the same values as matched"),
with no functional change.
Signed-off-by: Eli Britstein <elibr@mellanox.com>
Reviewed-by: Roi Dayan <roid@mellanox.com>
---
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.5
next reply other threads:[~2019-02-03 9:12 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-03 9:12 Eli Britstein [this message]
2019-02-04 5:55 ` [PATCH net-next V2 1/1] openvswitch: Declare ovs key structures using macros Pravin Shelar
2019-02-04 18:47 ` [ovs-dev] " Yi-Hung Wei
2019-02-04 20:07 ` David Miller
2019-02-05 12:02 ` Eli Britstein
2019-02-05 18:22 ` Gregory Rose
2019-02-05 20:23 ` Ben Pfaff
2019-02-07 5:47 ` Eli Britstein
2019-02-04 19:41 ` Gregory Rose
2019-02-04 20:09 ` David Miller
2019-02-08 7:59 ` Simon Horman
2019-02-08 9:33 ` Eli Britstein
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190203091217.8459-1-elibr@mellanox.com \
--to=elibr@mellanox.com \
--cc=blp@ovn.org \
--cc=davem@davemloft.net \
--cc=dev@openvswitch.org \
--cc=netdev@vger.kernel.org \
--cc=pshelar@ovn.org \
--cc=roid@mellanox.com \
--cc=simon.horman@netronome.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.