Lines Matching +full:max +full:- +full:rt

1 // SPDX-License-Identifier: GPL-2.0-only
33 ka->net = xs_net(x);
34 ka->family = x->props.family;
35 ka->saddr = x->props.saddr;
36 ka->daddr = x->id.daddr;
37 ka->encap_sport = x->encap->encap_sport;
38 ka->encap_dport = x->encap->encap_dport;
39 ka->smark = xfrm_smark_get(0, x);
45 struct net *net = ka->net;
47 struct rtable *rt;
52 flowi4_init_output(&fl4, 0 /* oif */, skb->mark, tos,
54 ka->daddr.a4, ka->saddr.a4, ka->encap_dport,
55 ka->encap_sport, sock_net_uid(net, NULL));
57 rt = ip_route_output_key(net, &fl4);
58 if (IS_ERR(rt))
59 return PTR_ERR(rt);
61 skb_dst_set(skb, &rt->dst);
77 struct net *net = ka->net;
84 csum = skb_checksum(skb, 0, skb->len, 0);
85 uh->check = csum_ipv6_magic(&ka->saddr.in6, &ka->daddr.in6,
86 skb->len, IPPROTO_UDP, csum);
87 if (uh->check == 0)
88 uh->check = CSUM_MANGLED_0;
91 fl6.flowi6_mark = skb->mark;
92 fl6.saddr = ka->saddr.in6;
93 fl6.daddr = ka->daddr.in6;
95 fl6.fl6_sport = ka->encap_sport;
96 fl6.fl6_dport = ka->encap_dport;
101 dst = ipv6_stub->ipv6_dst_lookup_flow(net, sk, &fl6, NULL);
108 err = ipv6_stub->ip6_xmit(sk, skb, &fl6, skb->mark, NULL, 0, 0);
117 const int nat_ka_hdrs_len = max(sizeof(struct iphdr),
121 int err = -EAFNOSUPPORT;
134 uh->source = ka->encap_sport;
135 uh->dest = ka->encap_dport;
136 uh->len = htons(skb->len);
137 uh->check = 0;
139 skb->mark = ka->smark;
141 switch (ka->family) {
169 interval = x->nat_keepalive_interval;
173 spin_lock(&x->lock);
175 delta = (int)(ctx->now - x->lastused);
177 x->nat_keepalive_expiration = ctx->now + interval - delta;
178 next_run = x->nat_keepalive_expiration;
179 } else if (x->nat_keepalive_expiration > ctx->now) {
180 next_run = x->nat_keepalive_expiration;
182 next_run = ctx->now + interval;
187 spin_unlock(&x->lock);
192 if (!ctx->next_run || next_run < ctx->next_run)
193 ctx->next_run = next_run;
211 schedule_delayed_work(&net->xfrm.nat_keepalive_work,
212 (ctx.next_run - ctx.now) * HZ);
227 per_cpu_ptr(socks, i)->sock = sk;
233 inet_ctl_sock_destroy(per_cpu_ptr(socks, i)->sock);
242 inet_ctl_sock_destroy(per_cpu_ptr(socks, i)->sock);
249 if (!x->nat_keepalive_interval)
253 schedule_delayed_work(&net->xfrm.nat_keepalive_work, 0);
258 INIT_DELAYED_WORK(&net->xfrm.nat_keepalive_work, nat_keepalive_work);
264 cancel_delayed_work_sync(&net->xfrm.nat_keepalive_work);
270 int err = -EAFNOSUPPORT;