diff options
| author | dpward <david.ward@ll.mit.edu> | 2011-09-05 12:47:24 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2011-09-16 17:47:28 -0400 |
| commit | aa1c366e4febc7f5c2b84958a2dd7cd70e28f9d0 (patch) | |
| tree | 336ecab3185913c78fb3ac81779a373e4d4ae5af /include | |
| parent | 728871bc05afc8ff310b17dba3e57a2472792b13 (diff) | |
net: Handle different key sizes between address families in flow cache
With the conversion of struct flowi to a union of AF-specific structs, some
operations on the flow cache need to account for the exact size of the key.
Signed-off-by: David Ward <david.ward@ll.mit.edu>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
| -rw-r--r-- | include/net/flow.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/include/net/flow.h b/include/net/flow.h index 2ec377d9ab9f..a09447749e2d 100644 --- a/include/net/flow.h +++ b/include/net/flow.h | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | #ifndef _NET_FLOW_H | 7 | #ifndef _NET_FLOW_H |
| 8 | #define _NET_FLOW_H | 8 | #define _NET_FLOW_H |
| 9 | 9 | ||
| 10 | #include <linux/socket.h> | ||
| 10 | #include <linux/in6.h> | 11 | #include <linux/in6.h> |
| 11 | #include <linux/atomic.h> | 12 | #include <linux/atomic.h> |
| 12 | 13 | ||
| @@ -161,6 +162,24 @@ static inline struct flowi *flowidn_to_flowi(struct flowidn *fldn) | |||
| 161 | return container_of(fldn, struct flowi, u.dn); | 162 | return container_of(fldn, struct flowi, u.dn); |
| 162 | } | 163 | } |
| 163 | 164 | ||
| 165 | typedef unsigned long flow_compare_t; | ||
| 166 | |||
| 167 | static inline size_t flow_key_size(u16 family) | ||
| 168 | { | ||
| 169 | switch (family) { | ||
| 170 | case AF_INET: | ||
| 171 | BUILD_BUG_ON(sizeof(struct flowi4) % sizeof(flow_compare_t)); | ||
| 172 | return sizeof(struct flowi4) / sizeof(flow_compare_t); | ||
| 173 | case AF_INET6: | ||
| 174 | BUILD_BUG_ON(sizeof(struct flowi6) % sizeof(flow_compare_t)); | ||
| 175 | return sizeof(struct flowi6) / sizeof(flow_compare_t); | ||
| 176 | case AF_DECnet: | ||
| 177 | BUILD_BUG_ON(sizeof(struct flowidn) % sizeof(flow_compare_t)); | ||
| 178 | return sizeof(struct flowidn) / sizeof(flow_compare_t); | ||
| 179 | } | ||
| 180 | return 0; | ||
| 181 | } | ||
| 182 | |||
| 164 | #define FLOW_DIR_IN 0 | 183 | #define FLOW_DIR_IN 0 |
| 165 | #define FLOW_DIR_OUT 1 | 184 | #define FLOW_DIR_OUT 1 |
| 166 | #define FLOW_DIR_FWD 2 | 185 | #define FLOW_DIR_FWD 2 |
