X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=datapath%2Fflow.h;h=5c232791ada53e96b846f0ca9c45daf7cf195e3b;hb=34276a57908ddac57a1f7f67addad7896503055a;hp=9cf5c678c3079fca0978f63e1caa2dc8c5313981;hpb=7d332293f8f8d3faa50ba6faf415af864d32b686;p=openvswitch diff --git a/datapath/flow.h b/datapath/flow.h index 9cf5c678..5c232791 100644 --- a/datapath/flow.h +++ b/datapath/flow.h @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -37,11 +38,11 @@ struct sw_flow_key { __be32 ipv4_dst; /* IPv4 destination address. */ }; struct { - __be32 ipv6_src[4]; /* IPv6 source address. */ - __be32 ipv6_dst[4]; /* IPv6 source address. */ + struct in6_addr ipv6_src; /* IPv6 source address. */ + struct in6_addr ipv6_dst; /* IPv6 source address. */ }; }; - __be32 nd_target[4]; /* IPv6 ND target address. */ + struct in6_addr nd_target; /* IPv6 ND target address. */ u16 in_port; /* Input switch port. */ __be16 dl_tci; /* 0 if no VLAN, VLAN_TAG_PRESENT set otherwise. */ __be16 dl_type; /* Ethernet frame type. */ @@ -107,8 +108,21 @@ u64 flow_used_time(unsigned long flow_jiffies); u32 flow_hash(const struct sw_flow_key *); int flow_cmp(const struct tbl_node *, void *target); -/* By my calculations currently the longest valid nlattr-formatted flow key is - * 132 bytes long. +/* Upper bound on the length of a nlattr-formatted flow key. The longest + * nlattr-formatted flow key would be: + * + * struct pad nl hdr total + * ------ --- ------ ----- + * ODP_KEY_ATTR_TUN_ID 8 -- 4 12 + * ODP_KEY_ATTR_IN_PORT 4 -- 4 8 + * ODP_KEY_ATTR_ETHERNET 12 -- 4 16 + * ODP_KEY_ATTR_8021Q 4 -- 4 8 + * ODP_KEY_ATTR_ETHERTYPE 2 2 4 8 + * ODP_KEY_ATTR_IPV6 34 2 4 40 + * ODP_KEY_ATTR_ICMPV6 2 2 4 8 + * ODP_KEY_ATTR_ND 28 -- 4 32 + * ------------------------------------------------- + * total 132 */ #define FLOW_BUFSIZE 132