signal_pending(current);
}
+INDIRECT_CALLABLE_DECLARE(union tcp_seq_and_ts_off
+ tcp_v4_init_seq_and_ts_off(const struct net *net,
+ const struct sk_buff *skb));
+INDIRECT_CALLABLE_DECLARE(union tcp_seq_and_ts_off
+ tcp_v6_init_seq_and_ts_off(const struct net *net,
+ const struct sk_buff *skb));
#endif /* _TCP_H */
goto drop_and_free;
if (tmp_opt.tstamp_ok || (!want_cookie && !isn))
- st = af_ops->init_seq_and_ts_off(net, skb);
+ st = INDIRECT_CALL_INET(af_ops->init_seq_and_ts_off,
+ tcp_v6_init_seq_and_ts_off,
+ tcp_v4_init_seq_and_ts_off,
+ net, skb);
if (tmp_opt.tstamp_ok) {
tcp_rsk(req)->req_usec_ts = dst_tcp_usec_ts(dst);
static DEFINE_MUTEX(tcp_exit_batch_mutex);
-static union tcp_seq_and_ts_off
+INDIRECT_CALLABLE_SCOPE union tcp_seq_and_ts_off
tcp_v4_init_seq_and_ts_off(const struct net *net, const struct sk_buff *skb)
{
return secure_tcp_seq_and_ts_off(net,
}
}
-static union tcp_seq_and_ts_off
+INDIRECT_CALLABLE_SCOPE union tcp_seq_and_ts_off
tcp_v6_init_seq_and_ts_off(const struct net *net, const struct sk_buff *skb)
{
return secure_tcpv6_seq_and_ts_off(net,