diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/net/flow.h | 3 | ||||
| -rw-r--r-- | include/net/inet_sock.h | 8 | ||||
| -rw-r--r-- | include/net/route.h | 4 |
3 files changed, 13 insertions, 2 deletions
diff --git a/include/net/flow.h b/include/net/flow.h index 240b7f356c71..1ae901f24436 100644 --- a/include/net/flow.h +++ b/include/net/flow.h | |||
| @@ -48,7 +48,8 @@ struct flowi { | |||
| 48 | 48 | ||
| 49 | __u8 proto; | 49 | __u8 proto; |
| 50 | __u8 flags; | 50 | __u8 flags; |
| 51 | #define FLOWI_FLAG_ANYSRC 0x01 | 51 | #define FLOWI_FLAG_ANYSRC 0x01 |
| 52 | #define FLOWI_FLAG_PRECOW_METRICS 0x02 | ||
| 52 | union { | 53 | union { |
| 53 | struct { | 54 | struct { |
| 54 | __be16 sport; | 55 | __be16 sport; |
diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h index 8181498fa96c..6e6dfd757682 100644 --- a/include/net/inet_sock.h +++ b/include/net/inet_sock.h | |||
| @@ -219,7 +219,13 @@ static inline struct request_sock *inet_reqsk_alloc(struct request_sock_ops *ops | |||
| 219 | 219 | ||
| 220 | static inline __u8 inet_sk_flowi_flags(const struct sock *sk) | 220 | static inline __u8 inet_sk_flowi_flags(const struct sock *sk) |
| 221 | { | 221 | { |
| 222 | return inet_sk(sk)->transparent ? FLOWI_FLAG_ANYSRC : 0; | 222 | __u8 flags = 0; |
| 223 | |||
| 224 | if (inet_sk(sk)->transparent) | ||
| 225 | flags |= FLOWI_FLAG_ANYSRC; | ||
| 226 | if (sk->sk_protocol == IPPROTO_TCP) | ||
| 227 | flags |= FLOWI_FLAG_PRECOW_METRICS; | ||
| 228 | return flags; | ||
| 223 | } | 229 | } |
| 224 | 230 | ||
| 225 | #endif /* _INET_SOCK_H */ | 231 | #endif /* _INET_SOCK_H */ |
diff --git a/include/net/route.h b/include/net/route.h index 5677cbf0c6e6..e5864658dc76 100644 --- a/include/net/route.h +++ b/include/net/route.h | |||
| @@ -182,6 +182,8 @@ static inline int ip_route_connect(struct rtable **rp, __be32 dst, | |||
| 182 | 182 | ||
| 183 | if (inet_sk(sk)->transparent) | 183 | if (inet_sk(sk)->transparent) |
| 184 | fl.flags |= FLOWI_FLAG_ANYSRC; | 184 | fl.flags |= FLOWI_FLAG_ANYSRC; |
| 185 | if (protocol == IPPROTO_TCP) | ||
| 186 | fl.flags |= FLOWI_FLAG_PRECOW_METRICS; | ||
| 185 | 187 | ||
| 186 | if (!dst || !src) { | 188 | if (!dst || !src) { |
| 187 | err = __ip_route_output_key(net, rp, &fl); | 189 | err = __ip_route_output_key(net, rp, &fl); |
| @@ -209,6 +211,8 @@ static inline int ip_route_newports(struct rtable **rp, u8 protocol, | |||
| 209 | fl.proto = protocol; | 211 | fl.proto = protocol; |
| 210 | if (inet_sk(sk)->transparent) | 212 | if (inet_sk(sk)->transparent) |
| 211 | fl.flags |= FLOWI_FLAG_ANYSRC; | 213 | fl.flags |= FLOWI_FLAG_ANYSRC; |
| 214 | if (protocol == IPPROTO_TCP) | ||
| 215 | fl.flags |= FLOWI_FLAG_PRECOW_METRICS; | ||
| 212 | ip_rt_put(*rp); | 216 | ip_rt_put(*rp); |
| 213 | *rp = NULL; | 217 | *rp = NULL; |
| 214 | security_sk_classify_flow(sk, &fl); | 218 | security_sk_classify_flow(sk, &fl); |
