aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/net/flow.h3
-rw-r--r--include/net/inet_sock.h8
-rw-r--r--include/net/route.h4
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
220static inline __u8 inet_sk_flowi_flags(const struct sock *sk) 220static 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);