datapath: optimize flow compare and mask functions
[sliver-openvswitch.git] / datapath / flow.h
index d8277b5..eda74f3 100644 (file)
@@ -101,8 +101,8 @@ struct sw_flow_key {
                        } addr;
                        union {
                                struct {
-                                       __be16 src;             /* TCP/UDP source port. */
-                                       __be16 dst;             /* TCP/UDP destination port. */
+                                       __be16 src;             /* TCP/UDP/SCTP source port. */
+                                       __be16 dst;             /* TCP/UDP/SCTP destination port. */
                                } tp;
                                struct {
                                        u8 sha[ETH_ALEN];       /* ARP source hardware address. */
@@ -117,8 +117,8 @@ struct sw_flow_key {
                        } addr;
                        __be32 label;                   /* IPv6 flow label. */
                        struct {
-                               __be16 src;             /* TCP/UDP source port. */
-                               __be16 dst;             /* TCP/UDP destination port. */
+                               __be16 src;             /* TCP/UDP/SCTP source port. */
+                               __be16 dst;             /* TCP/UDP/SCTP destination port. */
                        } tp;
                        struct {
                                struct in6_addr target; /* ND target address. */
@@ -127,7 +127,7 @@ struct sw_flow_key {
                        } nd;
                } ipv6;
        };
-};
+} __aligned(__alignof__(long));
 
 struct sw_flow {
        struct rcu_head rcu;
@@ -151,11 +151,6 @@ struct sw_flow_key_range {
        size_t end;
 };
 
-static inline u16 ovs_sw_flow_key_range_actual_size(const struct sw_flow_key_range *range)
-{
-       return range->end - range->start;
-}
-
 struct sw_flow_match {
        struct sw_flow_key *key;
        struct sw_flow_key_range range;
@@ -245,7 +240,7 @@ int ovs_ipv4_tun_to_nlattr(struct sk_buff *skb,
                           const struct ovs_key_ipv4_tunnel *output);
 
 bool ovs_flow_cmp_unmasked_key(const struct sw_flow *flow,
-               const struct sw_flow_key *key, int key_len);
+               const struct sw_flow_key *key, int key_end);
 
 struct sw_flow_mask {
        int ref_count;
@@ -255,18 +250,6 @@ struct sw_flow_mask {
        struct sw_flow_key key;
 };
 
-static inline u16
-ovs_sw_flow_mask_actual_size(const struct sw_flow_mask *mask)
-{
-       return ovs_sw_flow_key_range_actual_size(&mask->range);
-}
-
-static inline u16
-ovs_sw_flow_mask_size_roundup(const struct sw_flow_mask *mask)
-{
-       return roundup(ovs_sw_flow_mask_actual_size(mask), sizeof(u32));
-}
-
 struct sw_flow_mask *ovs_sw_flow_mask_alloc(void);
 void ovs_sw_flow_mask_add_ref(struct sw_flow_mask *);
 void ovs_sw_flow_mask_del_ref(struct sw_flow_mask *, bool deferred);