Loading include/net/route.h +24 −36 Original line number Diff line number Diff line Loading @@ -149,17 +149,12 @@ static inline struct rtable *ip_route_output_ports(struct net *net, struct sock __be16 dport, __be16 sport, __u8 proto, __u8 tos, int oif) { struct flowi4 fl4 = { .flowi4_oif = oif, .flowi4_flags = sk ? inet_sk_flowi_flags(sk) : 0, .flowi4_mark = sk ? sk->sk_mark : 0, .daddr = daddr, .saddr = saddr, .flowi4_tos = tos, .flowi4_proto = proto, .fl4_dport = dport, .fl4_sport = sport, }; struct flowi4 fl4; flowi4_init_output(&fl4, oif, sk ? sk->sk_mark : 0, tos, RT_SCOPE_UNIVERSE, proto, sk ? inet_sk_flowi_flags(sk) : 0, daddr, saddr, dport, sport); if (sk) security_sk_classify_flow(sk, flowi4_to_flowi(&fl4)); return ip_route_output_flow(net, &fl4, sk); Loading Loading @@ -229,25 +224,21 @@ static inline struct rtable *ip_route_connect(__be32 dst, __be32 src, u32 tos, __be16 sport, __be16 dport, struct sock *sk, bool can_sleep) { struct flowi4 fl4 = { .flowi4_oif = oif, .flowi4_mark = sk->sk_mark, .daddr = dst, .saddr = src, .flowi4_tos = tos, .flowi4_proto = protocol, .fl4_sport = sport, .fl4_dport = dport, }; struct net *net = sock_net(sk); struct rtable *rt; struct flowi4 fl4; __u8 flow_flags; flow_flags = 0; if (inet_sk(sk)->transparent) fl4.flowi4_flags |= FLOWI_FLAG_ANYSRC; flow_flags |= FLOWI_FLAG_ANYSRC; if (protocol == IPPROTO_TCP) fl4.flowi4_flags |= FLOWI_FLAG_PRECOW_METRICS; flow_flags |= FLOWI_FLAG_PRECOW_METRICS; if (can_sleep) fl4.flowi4_flags |= FLOWI_FLAG_CAN_SLEEP; flow_flags |= FLOWI_FLAG_CAN_SLEEP; flowi4_init_output(&fl4, oif, sk->sk_mark, tos, RT_SCOPE_UNIVERSE, protocol, flow_flags, dst, src, dport, sport); if (!dst || !src) { rt = __ip_route_output_key(net, &fl4); Loading @@ -267,20 +258,17 @@ static inline struct rtable *ip_route_newports(struct rtable *rt, __be16 dport, struct sock *sk) { if (sport != orig_sport || dport != orig_dport) { struct flowi4 fl4 = { .flowi4_oif = rt->rt_oif, .flowi4_mark = rt->rt_mark, .daddr = rt->rt_dst, .saddr = rt->rt_src, .flowi4_tos = rt->rt_tos, .flowi4_proto = protocol, .fl4_sport = sport, .fl4_dport = dport }; struct flowi4 fl4; __u8 flow_flags; flow_flags = 0; if (inet_sk(sk)->transparent) fl4.flowi4_flags |= FLOWI_FLAG_ANYSRC; flow_flags |= FLOWI_FLAG_ANYSRC; if (protocol == IPPROTO_TCP) fl4.flowi4_flags |= FLOWI_FLAG_PRECOW_METRICS; flow_flags |= FLOWI_FLAG_PRECOW_METRICS; flowi4_init_output(&fl4, rt->rt_oif, rt->rt_mark, rt->rt_tos, RT_SCOPE_UNIVERSE, protocol, flow_flags, rt->rt_dst, rt->rt_src, dport, sport); ip_rt_put(rt); security_sk_classify_flow(sk, flowi4_to_flowi(&fl4)); return ip_route_output_flow(sock_net(sk), &fl4, sk); Loading Loading
include/net/route.h +24 −36 Original line number Diff line number Diff line Loading @@ -149,17 +149,12 @@ static inline struct rtable *ip_route_output_ports(struct net *net, struct sock __be16 dport, __be16 sport, __u8 proto, __u8 tos, int oif) { struct flowi4 fl4 = { .flowi4_oif = oif, .flowi4_flags = sk ? inet_sk_flowi_flags(sk) : 0, .flowi4_mark = sk ? sk->sk_mark : 0, .daddr = daddr, .saddr = saddr, .flowi4_tos = tos, .flowi4_proto = proto, .fl4_dport = dport, .fl4_sport = sport, }; struct flowi4 fl4; flowi4_init_output(&fl4, oif, sk ? sk->sk_mark : 0, tos, RT_SCOPE_UNIVERSE, proto, sk ? inet_sk_flowi_flags(sk) : 0, daddr, saddr, dport, sport); if (sk) security_sk_classify_flow(sk, flowi4_to_flowi(&fl4)); return ip_route_output_flow(net, &fl4, sk); Loading Loading @@ -229,25 +224,21 @@ static inline struct rtable *ip_route_connect(__be32 dst, __be32 src, u32 tos, __be16 sport, __be16 dport, struct sock *sk, bool can_sleep) { struct flowi4 fl4 = { .flowi4_oif = oif, .flowi4_mark = sk->sk_mark, .daddr = dst, .saddr = src, .flowi4_tos = tos, .flowi4_proto = protocol, .fl4_sport = sport, .fl4_dport = dport, }; struct net *net = sock_net(sk); struct rtable *rt; struct flowi4 fl4; __u8 flow_flags; flow_flags = 0; if (inet_sk(sk)->transparent) fl4.flowi4_flags |= FLOWI_FLAG_ANYSRC; flow_flags |= FLOWI_FLAG_ANYSRC; if (protocol == IPPROTO_TCP) fl4.flowi4_flags |= FLOWI_FLAG_PRECOW_METRICS; flow_flags |= FLOWI_FLAG_PRECOW_METRICS; if (can_sleep) fl4.flowi4_flags |= FLOWI_FLAG_CAN_SLEEP; flow_flags |= FLOWI_FLAG_CAN_SLEEP; flowi4_init_output(&fl4, oif, sk->sk_mark, tos, RT_SCOPE_UNIVERSE, protocol, flow_flags, dst, src, dport, sport); if (!dst || !src) { rt = __ip_route_output_key(net, &fl4); Loading @@ -267,20 +258,17 @@ static inline struct rtable *ip_route_newports(struct rtable *rt, __be16 dport, struct sock *sk) { if (sport != orig_sport || dport != orig_dport) { struct flowi4 fl4 = { .flowi4_oif = rt->rt_oif, .flowi4_mark = rt->rt_mark, .daddr = rt->rt_dst, .saddr = rt->rt_src, .flowi4_tos = rt->rt_tos, .flowi4_proto = protocol, .fl4_sport = sport, .fl4_dport = dport }; struct flowi4 fl4; __u8 flow_flags; flow_flags = 0; if (inet_sk(sk)->transparent) fl4.flowi4_flags |= FLOWI_FLAG_ANYSRC; flow_flags |= FLOWI_FLAG_ANYSRC; if (protocol == IPPROTO_TCP) fl4.flowi4_flags |= FLOWI_FLAG_PRECOW_METRICS; flow_flags |= FLOWI_FLAG_PRECOW_METRICS; flowi4_init_output(&fl4, rt->rt_oif, rt->rt_mark, rt->rt_tos, RT_SCOPE_UNIVERSE, protocol, flow_flags, rt->rt_dst, rt->rt_src, dport, sport); ip_rt_put(rt); security_sk_classify_flow(sk, flowi4_to_flowi(&fl4)); return ip_route_output_flow(sock_net(sk), &fl4, sk); Loading