1101
1101
static int inet_sk_reselect_saddr(struct sock *sk)
1103
1103
struct inet_sock *inet = inet_sk(sk);
1104
__be32 old_saddr = inet->inet_saddr;
1105
__be32 daddr = inet->inet_daddr;
1105
1106
struct rtable *rt;
1106
__be32 old_saddr = inet->inet_saddr;
1107
1107
__be32 new_saddr;
1108
__be32 daddr = inet->inet_daddr;
1110
1109
if (inet->opt && inet->opt->srr)
1111
1110
daddr = inet->opt->faddr;
1113
1112
/* Query new route. */
1114
err = ip_route_connect(&rt, daddr, 0,
1116
sk->sk_bound_dev_if,
1118
inet->inet_sport, inet->inet_dport, sk, 0);
1113
rt = ip_route_connect(daddr, 0, RT_CONN_FLAGS(sk),
1114
sk->sk_bound_dev_if, sk->sk_protocol,
1115
inet->inet_sport, inet->inet_dport, sk, false);
1122
1119
sk_setup_caps(sk, &rt->dst);
1160
1157
daddr = inet->inet_daddr;
1161
1158
if (inet->opt && inet->opt->srr)
1162
1159
daddr = inet->opt->faddr;
1165
.oif = sk->sk_bound_dev_if,
1166
.mark = sk->sk_mark,
1168
.fl4_src = inet->inet_saddr,
1169
.fl4_tos = RT_CONN_FLAGS(sk),
1170
.proto = sk->sk_protocol,
1171
.flags = inet_sk_flowi_flags(sk),
1172
.fl_ip_sport = inet->inet_sport,
1173
.fl_ip_dport = inet->inet_dport,
1176
security_sk_classify_flow(sk, &fl);
1177
err = ip_route_output_flow(sock_net(sk), &rt, &fl, sk, 0);
1160
rt = ip_route_output_ports(sock_net(sk), sk, daddr, inet->inet_saddr,
1161
inet->inet_dport, inet->inet_sport,
1162
sk->sk_protocol, RT_CONN_FLAGS(sk),
1163
sk->sk_bound_dev_if);
1180
1166
sk_setup_caps(sk, &rt->dst);
1182
1170
/* Routing failed... */
1183
1171
sk->sk_route_caps = 0;