lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Sun, 3 Feb 2019 11:12:17 +0200 From: Eli Britstein <elibr@...lanox.com> To: Pravin B Shelar <pshelar@....org> Cc: netdev@...r.kernel.org, dev@...nvswitch.org, Simon Horman <simon.horman@...ronome.com>, "David S. Miller" <davem@...emloft.net>, Ben Pfaff <blp@....org>, Roi Dayan <roid@...lanox.com>, Eli Britstein <elibr@...lanox.com> Subject: [PATCH net-next V2 1/1] openvswitch: Declare ovs key structures using macros 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@...lanox.com> Reviewed-by: Roi Dayan <roid@...lanox.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
Powered by blists - more mailing lists