mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 22:51:37 +00:00
ipv4: Make output route lookup return rtable directly.
Instead of on the stack. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
452edd598f
commit
b23dd4fe42
36 changed files with 267 additions and 224 deletions
|
@ -1101,23 +1101,20 @@ int sysctl_ip_dynaddr __read_mostly;
|
|||
static int inet_sk_reselect_saddr(struct sock *sk)
|
||||
{
|
||||
struct inet_sock *inet = inet_sk(sk);
|
||||
int err;
|
||||
struct rtable *rt;
|
||||
__be32 old_saddr = inet->inet_saddr;
|
||||
__be32 new_saddr;
|
||||
__be32 daddr = inet->inet_daddr;
|
||||
struct rtable *rt;
|
||||
__be32 new_saddr;
|
||||
|
||||
if (inet->opt && inet->opt->srr)
|
||||
daddr = inet->opt->faddr;
|
||||
|
||||
/* Query new route. */
|
||||
err = ip_route_connect(&rt, daddr, 0,
|
||||
RT_CONN_FLAGS(sk),
|
||||
sk->sk_bound_dev_if,
|
||||
sk->sk_protocol,
|
||||
inet->inet_sport, inet->inet_dport, sk, false);
|
||||
if (err)
|
||||
return err;
|
||||
rt = ip_route_connect(daddr, 0, RT_CONN_FLAGS(sk),
|
||||
sk->sk_bound_dev_if, sk->sk_protocol,
|
||||
inet->inet_sport, inet->inet_dport, sk, false);
|
||||
if (IS_ERR(rt))
|
||||
return PTR_ERR(rt);
|
||||
|
||||
sk_setup_caps(sk, &rt->dst);
|
||||
|
||||
|
@ -1160,7 +1157,7 @@ int inet_sk_rebuild_header(struct sock *sk)
|
|||
daddr = inet->inet_daddr;
|
||||
if (inet->opt && inet->opt->srr)
|
||||
daddr = inet->opt->faddr;
|
||||
{
|
||||
{
|
||||
struct flowi fl = {
|
||||
.oif = sk->sk_bound_dev_if,
|
||||
.mark = sk->sk_mark,
|
||||
|
@ -1174,11 +1171,14 @@ int inet_sk_rebuild_header(struct sock *sk)
|
|||
};
|
||||
|
||||
security_sk_classify_flow(sk, &fl);
|
||||
err = ip_route_output_flow(sock_net(sk), &rt, &fl, sk);
|
||||
}
|
||||
if (!err)
|
||||
rt = ip_route_output_flow(sock_net(sk), &fl, sk);
|
||||
}
|
||||
if (!IS_ERR(rt)) {
|
||||
err = 0;
|
||||
sk_setup_caps(sk, &rt->dst);
|
||||
else {
|
||||
} else {
|
||||
err = PTR_ERR(rt);
|
||||
|
||||
/* Routing failed... */
|
||||
sk->sk_route_caps = 0;
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue