mirror of
https://github.com/armbian/linux-cix.git
synced 2026-01-06 12:30:45 -08:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf
Pablo Neira Ayuso says:
====================
Netfilter fixes for net
The following patchset contains Netfilter fixes for net:
1) Fix a deadlock when module is requested via netlink_bind()
in nfnetlink, from Florian Westphal.
2) Fix ipt_rpfilter and ip6t_rpfilter with VRF, from Miaohe Lin.
3) Skip master comparison in SIP helper to fix expectation clash
under two valid scenarios, from xiao ruizhu.
4) Remove obsolete comments in nf_conntrack codebase, from
Yonatan Goldschmidt.
5) Fix redirect extension module autoload, from Christian Hesse.
6) Fix incorrect mssg option sent to client in synproxy,
from Fernando Fernandez.
7) Fix incorrect window calculations in TCP conntrack, from
Florian Westphal.
8) Don't bail out when updating basechain policy due to recent
offload works, also from Florian.
9) Allow symhash to use modulus 1 as other hash extensions do,
from Laura.Garcia.
10) Missing NAT chain module autoload for the inet family,
from Phil Sutter.
11) Fix missing adjustment of TCP RST packet in synproxy,
from Fernando Fernandez.
12) Skip EAGAIN path when nft_meta_bridge is built-in or
not selected.
13) Conntrack bridge does not depend on nf_tables_bridge.
14) Turn NF_TABLES_BRIDGE into tristate to fix possible
link break of nft_meta_bridge, from Arnd Bergmann.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/****************************************************************************
|
||||
* ip_conntrack_h323_asn1.h - BER and PER decoding library for H.323
|
||||
* conntrack/NAT module.
|
||||
* BER and PER decoding library for H.323 conntrack/NAT module.
|
||||
*
|
||||
* Copyright (c) 2006 by Jing Min Zhao <zhaojingmin@users.sourceforge.net>
|
||||
*
|
||||
|
||||
@@ -76,6 +76,11 @@ struct nf_conntrack_expect_policy {
|
||||
#define NF_CT_EXPECT_CLASS_DEFAULT 0
|
||||
#define NF_CT_EXPECT_MAX_CNT 255
|
||||
|
||||
/* Allow to reuse expectations with the same tuples from different master
|
||||
* conntracks.
|
||||
*/
|
||||
#define NF_CT_EXP_F_SKIP_MASTER 0x1
|
||||
|
||||
int nf_conntrack_expect_pernet_init(struct net *net);
|
||||
void nf_conntrack_expect_pernet_fini(struct net *net);
|
||||
|
||||
@@ -122,10 +127,11 @@ void nf_ct_expect_init(struct nf_conntrack_expect *, unsigned int, u_int8_t,
|
||||
u_int8_t, const __be16 *, const __be16 *);
|
||||
void nf_ct_expect_put(struct nf_conntrack_expect *exp);
|
||||
int nf_ct_expect_related_report(struct nf_conntrack_expect *expect,
|
||||
u32 portid, int report);
|
||||
static inline int nf_ct_expect_related(struct nf_conntrack_expect *expect)
|
||||
u32 portid, int report, unsigned int flags);
|
||||
static inline int nf_ct_expect_related(struct nf_conntrack_expect *expect,
|
||||
unsigned int flags)
|
||||
{
|
||||
return nf_ct_expect_related_report(expect, 0, 0);
|
||||
return nf_ct_expect_related_report(expect, 0, 0, flags);
|
||||
}
|
||||
|
||||
#endif /*_NF_CONNTRACK_EXPECT_H*/
|
||||
|
||||
@@ -68,6 +68,7 @@ struct synproxy_options {
|
||||
u8 options;
|
||||
u8 wscale;
|
||||
u16 mss;
|
||||
u16 mss_encode;
|
||||
u32 tsval;
|
||||
u32 tsecr;
|
||||
};
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
menuconfig NF_TABLES_BRIDGE
|
||||
depends on BRIDGE && NETFILTER && NF_TABLES
|
||||
select NETFILTER_FAMILY_BRIDGE
|
||||
bool "Ethernet Bridge nf_tables support"
|
||||
tristate "Ethernet Bridge nf_tables support"
|
||||
|
||||
if NF_TABLES_BRIDGE
|
||||
|
||||
@@ -25,6 +25,8 @@ config NF_LOG_BRIDGE
|
||||
tristate "Bridge packet logging"
|
||||
select NF_LOG_COMMON
|
||||
|
||||
endif # NF_TABLES_BRIDGE
|
||||
|
||||
config NF_CONNTRACK_BRIDGE
|
||||
tristate "IPv4/IPV6 bridge connection tracking support"
|
||||
depends on NF_CONNTRACK
|
||||
@@ -39,8 +41,6 @@ config NF_CONNTRACK_BRIDGE
|
||||
|
||||
To compile it as a module, choose M here. If unsure, say N.
|
||||
|
||||
endif # NF_TABLES_BRIDGE
|
||||
|
||||
menuconfig BRIDGE_NF_EBTABLES
|
||||
tristate "Ethernet Bridge tables (ebtables) support"
|
||||
depends on BRIDGE && NETFILTER && NETFILTER_XTABLES
|
||||
|
||||
@@ -416,8 +416,8 @@ clusterip_tg(struct sk_buff *skb, const struct xt_action_param *par)
|
||||
ctinfo == IP_CT_RELATED_REPLY))
|
||||
return XT_CONTINUE;
|
||||
|
||||
/* ip_conntrack_icmp guarantees us that we only have ICMP_ECHO,
|
||||
* TIMESTAMP, INFO_REQUEST or ADDRESS type icmp packets from here
|
||||
/* nf_conntrack_proto_icmp guarantees us that we only have ICMP_ECHO,
|
||||
* TIMESTAMP, INFO_REQUEST or ICMP_ADDRESS type icmp packets from here
|
||||
* on, which all have an ID field [relevant for hashing]. */
|
||||
|
||||
hash = clusterip_hashfn(skb, cipinfo->config);
|
||||
|
||||
@@ -36,6 +36,8 @@ synproxy_tg4(struct sk_buff *skb, const struct xt_action_param *par)
|
||||
opts.options |= XT_SYNPROXY_OPT_ECN;
|
||||
|
||||
opts.options &= info->options;
|
||||
opts.mss_encode = opts.mss;
|
||||
opts.mss = info->mss;
|
||||
if (opts.options & XT_SYNPROXY_OPT_TIMESTAMP)
|
||||
synproxy_init_timestamp_cookie(info, &opts);
|
||||
else
|
||||
|
||||
@@ -78,6 +78,7 @@ static bool rpfilter_mt(const struct sk_buff *skb, struct xt_action_param *par)
|
||||
flow.flowi4_mark = info->flags & XT_RPFILTER_VALID_MARK ? skb->mark : 0;
|
||||
flow.flowi4_tos = RT_TOS(iph->tos);
|
||||
flow.flowi4_scope = RT_SCOPE_UNIVERSE;
|
||||
flow.flowi4_oif = l3mdev_master_ifindex_rcu(xt_in(par));
|
||||
|
||||
return rpfilter_lookup_reverse(xt_net(par), &flow, xt_in(par), info->flags) ^ invert;
|
||||
}
|
||||
|
||||
@@ -221,11 +221,11 @@ static int nat_rtp_rtcp(struct sk_buff *skb, struct nf_conn *ct,
|
||||
int ret;
|
||||
|
||||
rtp_exp->tuple.dst.u.udp.port = htons(nated_port);
|
||||
ret = nf_ct_expect_related(rtp_exp);
|
||||
ret = nf_ct_expect_related(rtp_exp, 0);
|
||||
if (ret == 0) {
|
||||
rtcp_exp->tuple.dst.u.udp.port =
|
||||
htons(nated_port + 1);
|
||||
ret = nf_ct_expect_related(rtcp_exp);
|
||||
ret = nf_ct_expect_related(rtcp_exp, 0);
|
||||
if (ret == 0)
|
||||
break;
|
||||
else if (ret == -EBUSY) {
|
||||
@@ -296,7 +296,7 @@ static int nat_t120(struct sk_buff *skb, struct nf_conn *ct,
|
||||
int ret;
|
||||
|
||||
exp->tuple.dst.u.tcp.port = htons(nated_port);
|
||||
ret = nf_ct_expect_related(exp);
|
||||
ret = nf_ct_expect_related(exp, 0);
|
||||
if (ret == 0)
|
||||
break;
|
||||
else if (ret != -EBUSY) {
|
||||
@@ -352,7 +352,7 @@ static int nat_h245(struct sk_buff *skb, struct nf_conn *ct,
|
||||
int ret;
|
||||
|
||||
exp->tuple.dst.u.tcp.port = htons(nated_port);
|
||||
ret = nf_ct_expect_related(exp);
|
||||
ret = nf_ct_expect_related(exp, 0);
|
||||
if (ret == 0)
|
||||
break;
|
||||
else if (ret != -EBUSY) {
|
||||
@@ -444,7 +444,7 @@ static int nat_q931(struct sk_buff *skb, struct nf_conn *ct,
|
||||
int ret;
|
||||
|
||||
exp->tuple.dst.u.tcp.port = htons(nated_port);
|
||||
ret = nf_ct_expect_related(exp);
|
||||
ret = nf_ct_expect_related(exp, 0);
|
||||
if (ret == 0)
|
||||
break;
|
||||
else if (ret != -EBUSY) {
|
||||
@@ -537,7 +537,7 @@ static int nat_callforwarding(struct sk_buff *skb, struct nf_conn *ct,
|
||||
int ret;
|
||||
|
||||
exp->tuple.dst.u.tcp.port = htons(nated_port);
|
||||
ret = nf_ct_expect_related(exp);
|
||||
ret = nf_ct_expect_related(exp, 0);
|
||||
if (ret == 0)
|
||||
break;
|
||||
else if (ret != -EBUSY) {
|
||||
|
||||
@@ -36,6 +36,8 @@ synproxy_tg6(struct sk_buff *skb, const struct xt_action_param *par)
|
||||
opts.options |= XT_SYNPROXY_OPT_ECN;
|
||||
|
||||
opts.options &= info->options;
|
||||
opts.mss_encode = opts.mss;
|
||||
opts.mss = info->mss;
|
||||
if (opts.options & XT_SYNPROXY_OPT_TIMESTAMP)
|
||||
synproxy_init_timestamp_cookie(info, &opts);
|
||||
else
|
||||
|
||||
@@ -55,7 +55,9 @@ static bool rpfilter_lookup_reverse6(struct net *net, const struct sk_buff *skb,
|
||||
if (rpfilter_addr_linklocal(&iph->saddr)) {
|
||||
lookup_flags |= RT6_LOOKUP_F_IFACE;
|
||||
fl6.flowi6_oif = dev->ifindex;
|
||||
} else if ((flags & XT_RPFILTER_LOOSE) == 0)
|
||||
/* Set flowi6_oif for vrf devices to lookup route in l3mdev domain. */
|
||||
} else if (netif_is_l3_master(dev) || netif_is_l3_slave(dev) ||
|
||||
(flags & XT_RPFILTER_LOOSE) == 0)
|
||||
fl6.flowi6_oif = dev->ifindex;
|
||||
|
||||
rt = (void *)ip6_route_lookup(net, &fl6, skb, lookup_flags);
|
||||
@@ -70,7 +72,9 @@ static bool rpfilter_lookup_reverse6(struct net *net, const struct sk_buff *skb,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (rt->rt6i_idev->dev == dev || (flags & XT_RPFILTER_LOOSE))
|
||||
if (rt->rt6i_idev->dev == dev ||
|
||||
l3mdev_master_ifindex_rcu(rt->rt6i_idev->dev) == dev->ifindex ||
|
||||
(flags & XT_RPFILTER_LOOSE))
|
||||
ret = true;
|
||||
out:
|
||||
ip6_rt_put(rt);
|
||||
|
||||
@@ -223,8 +223,6 @@ config NF_CONNTRACK_FTP
|
||||
of Network Address Translation on them.
|
||||
|
||||
This is FTP support on Layer 3 independent connection tracking.
|
||||
Layer 3 independent connection tracking is experimental scheme
|
||||
which generalize ip_conntrack to support other layer 3 protocols.
|
||||
|
||||
To compile it as a module, choose M here. If unsure, say N.
|
||||
|
||||
@@ -338,7 +336,7 @@ config NF_CONNTRACK_SIP
|
||||
help
|
||||
SIP is an application-layer control protocol that can establish,
|
||||
modify, and terminate multimedia sessions (conferences) such as
|
||||
Internet telephony calls. With the ip_conntrack_sip and
|
||||
Internet telephony calls. With the nf_conntrack_sip and
|
||||
the nf_nat_sip modules you can support the protocol on a connection
|
||||
tracking/NATing firewall.
|
||||
|
||||
@@ -1313,7 +1311,7 @@ config NETFILTER_XT_MATCH_HELPER
|
||||
depends on NETFILTER_ADVANCED
|
||||
help
|
||||
Helper matching allows you to match packets in dynamic connections
|
||||
tracked by a conntrack-helper, ie. ip_conntrack_ftp
|
||||
tracked by a conntrack-helper, ie. nf_conntrack_ftp
|
||||
|
||||
To compile it as a module, choose M here. If unsure, say Y.
|
||||
|
||||
|
||||
@@ -231,7 +231,7 @@ void ip_vs_nfct_expect_related(struct sk_buff *skb, struct nf_conn *ct,
|
||||
|
||||
IP_VS_DBG_BUF(7, "%s: ct=%p, expect tuple=" FMT_TUPLE "\n",
|
||||
__func__, ct, ARG_TUPLE(&exp->tuple));
|
||||
nf_ct_expect_related(exp);
|
||||
nf_ct_expect_related(exp, 0);
|
||||
nf_ct_expect_put(exp);
|
||||
}
|
||||
EXPORT_SYMBOL(ip_vs_nfct_expect_related);
|
||||
|
||||
@@ -159,7 +159,7 @@ static int amanda_help(struct sk_buff *skb,
|
||||
if (nf_nat_amanda && ct->status & IPS_NAT_MASK)
|
||||
ret = nf_nat_amanda(skb, ctinfo, protoff,
|
||||
off - dataoff, len, exp);
|
||||
else if (nf_ct_expect_related(exp) != 0) {
|
||||
else if (nf_ct_expect_related(exp, 0) != 0) {
|
||||
nf_ct_helper_log(skb, ct, "cannot add expectation");
|
||||
ret = NF_DROP;
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ int nf_conntrack_broadcast_help(struct sk_buff *skb,
|
||||
exp->class = NF_CT_EXPECT_CLASS_DEFAULT;
|
||||
exp->helper = NULL;
|
||||
|
||||
nf_ct_expect_related(exp);
|
||||
nf_ct_expect_related(exp, 0);
|
||||
nf_ct_expect_put(exp);
|
||||
|
||||
nf_ct_refresh(ct, skb, timeout * HZ);
|
||||
|
||||
@@ -1817,9 +1817,7 @@ EXPORT_SYMBOL_GPL(nf_ct_kill_acct);
|
||||
#include <linux/netfilter/nfnetlink_conntrack.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
/* Generic function for tcp/udp/sctp/dccp and alike. This needs to be
|
||||
* in ip_conntrack_core, since we don't want the protocols to autoload
|
||||
* or depend on ctnetlink */
|
||||
/* Generic function for tcp/udp/sctp/dccp and alike. */
|
||||
int nf_ct_port_tuple_to_nlattr(struct sk_buff *skb,
|
||||
const struct nf_conntrack_tuple *tuple)
|
||||
{
|
||||
|
||||
@@ -249,13 +249,22 @@ static inline int expect_clash(const struct nf_conntrack_expect *a,
|
||||
static inline int expect_matches(const struct nf_conntrack_expect *a,
|
||||
const struct nf_conntrack_expect *b)
|
||||
{
|
||||
return a->master == b->master &&
|
||||
nf_ct_tuple_equal(&a->tuple, &b->tuple) &&
|
||||
return nf_ct_tuple_equal(&a->tuple, &b->tuple) &&
|
||||
nf_ct_tuple_mask_equal(&a->mask, &b->mask) &&
|
||||
net_eq(nf_ct_net(a->master), nf_ct_net(b->master)) &&
|
||||
nf_ct_zone_equal_any(a->master, nf_ct_zone(b->master));
|
||||
}
|
||||
|
||||
static bool master_matches(const struct nf_conntrack_expect *a,
|
||||
const struct nf_conntrack_expect *b,
|
||||
unsigned int flags)
|
||||
{
|
||||
if (flags & NF_CT_EXP_F_SKIP_MASTER)
|
||||
return true;
|
||||
|
||||
return a->master == b->master;
|
||||
}
|
||||
|
||||
/* Generally a bad idea to call this: could have matched already. */
|
||||
void nf_ct_unexpect_related(struct nf_conntrack_expect *exp)
|
||||
{
|
||||
@@ -399,7 +408,8 @@ static void evict_oldest_expect(struct nf_conn *master,
|
||||
nf_ct_remove_expect(last);
|
||||
}
|
||||
|
||||
static inline int __nf_ct_expect_check(struct nf_conntrack_expect *expect)
|
||||
static inline int __nf_ct_expect_check(struct nf_conntrack_expect *expect,
|
||||
unsigned int flags)
|
||||
{
|
||||
const struct nf_conntrack_expect_policy *p;
|
||||
struct nf_conntrack_expect *i;
|
||||
@@ -417,8 +427,10 @@ static inline int __nf_ct_expect_check(struct nf_conntrack_expect *expect)
|
||||
}
|
||||
h = nf_ct_expect_dst_hash(net, &expect->tuple);
|
||||
hlist_for_each_entry_safe(i, next, &nf_ct_expect_hash[h], hnode) {
|
||||
if (expect_matches(i, expect)) {
|
||||
if (i->class != expect->class)
|
||||
if (master_matches(i, expect, flags) &&
|
||||
expect_matches(i, expect)) {
|
||||
if (i->class != expect->class ||
|
||||
i->master != expect->master)
|
||||
return -EALREADY;
|
||||
|
||||
if (nf_ct_remove_expect(i))
|
||||
@@ -453,12 +465,12 @@ out:
|
||||
}
|
||||
|
||||
int nf_ct_expect_related_report(struct nf_conntrack_expect *expect,
|
||||
u32 portid, int report)
|
||||
u32 portid, int report, unsigned int flags)
|
||||
{
|
||||
int ret;
|
||||
|
||||
spin_lock_bh(&nf_conntrack_expect_lock);
|
||||
ret = __nf_ct_expect_check(expect);
|
||||
ret = __nf_ct_expect_check(expect, flags);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
|
||||
@@ -525,7 +525,7 @@ skip_nl_seq:
|
||||
protoff, matchoff, matchlen, exp);
|
||||
else {
|
||||
/* Can't expect this? Best to drop packet now. */
|
||||
if (nf_ct_expect_related(exp) != 0) {
|
||||
if (nf_ct_expect_related(exp, 0) != 0) {
|
||||
nf_ct_helper_log(skb, ct, "cannot add expectation");
|
||||
ret = NF_DROP;
|
||||
} else
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* ip_conntrack_helper_h323_asn1.c - BER and PER decoding library for H.323
|
||||
* conntrack/NAT module.
|
||||
* BER and PER decoding library for H.323 conntrack/NAT module.
|
||||
*
|
||||
* Copyright (c) 2006 by Jing Min Zhao <zhaojingmin@users.sourceforge.net>
|
||||
*
|
||||
* See ip_conntrack_helper_h323_asn1.h for details.
|
||||
* See nf_conntrack_helper_h323_asn1.h for details.
|
||||
*/
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
@@ -305,8 +305,8 @@ static int expect_rtp_rtcp(struct sk_buff *skb, struct nf_conn *ct,
|
||||
ret = nat_rtp_rtcp(skb, ct, ctinfo, protoff, data, dataoff,
|
||||
taddr, port, rtp_port, rtp_exp, rtcp_exp);
|
||||
} else { /* Conntrack only */
|
||||
if (nf_ct_expect_related(rtp_exp) == 0) {
|
||||
if (nf_ct_expect_related(rtcp_exp) == 0) {
|
||||
if (nf_ct_expect_related(rtp_exp, 0) == 0) {
|
||||
if (nf_ct_expect_related(rtcp_exp, 0) == 0) {
|
||||
pr_debug("nf_ct_h323: expect RTP ");
|
||||
nf_ct_dump_tuple(&rtp_exp->tuple);
|
||||
pr_debug("nf_ct_h323: expect RTCP ");
|
||||
@@ -364,7 +364,7 @@ static int expect_t120(struct sk_buff *skb,
|
||||
ret = nat_t120(skb, ct, ctinfo, protoff, data, dataoff, taddr,
|
||||
port, exp);
|
||||
} else { /* Conntrack only */
|
||||
if (nf_ct_expect_related(exp) == 0) {
|
||||
if (nf_ct_expect_related(exp, 0) == 0) {
|
||||
pr_debug("nf_ct_h323: expect T.120 ");
|
||||
nf_ct_dump_tuple(&exp->tuple);
|
||||
} else
|
||||
@@ -701,7 +701,7 @@ static int expect_h245(struct sk_buff *skb, struct nf_conn *ct,
|
||||
ret = nat_h245(skb, ct, ctinfo, protoff, data, dataoff, taddr,
|
||||
port, exp);
|
||||
} else { /* Conntrack only */
|
||||
if (nf_ct_expect_related(exp) == 0) {
|
||||
if (nf_ct_expect_related(exp, 0) == 0) {
|
||||
pr_debug("nf_ct_q931: expect H.245 ");
|
||||
nf_ct_dump_tuple(&exp->tuple);
|
||||
} else
|
||||
@@ -825,7 +825,7 @@ static int expect_callforwarding(struct sk_buff *skb,
|
||||
protoff, data, dataoff,
|
||||
taddr, port, exp);
|
||||
} else { /* Conntrack only */
|
||||
if (nf_ct_expect_related(exp) == 0) {
|
||||
if (nf_ct_expect_related(exp, 0) == 0) {
|
||||
pr_debug("nf_ct_q931: expect Call Forwarding ");
|
||||
nf_ct_dump_tuple(&exp->tuple);
|
||||
} else
|
||||
@@ -1284,7 +1284,7 @@ static int expect_q931(struct sk_buff *skb, struct nf_conn *ct,
|
||||
ret = nat_q931(skb, ct, ctinfo, protoff, data,
|
||||
taddr, i, port, exp);
|
||||
} else { /* Conntrack only */
|
||||
if (nf_ct_expect_related(exp) == 0) {
|
||||
if (nf_ct_expect_related(exp, 0) == 0) {
|
||||
pr_debug("nf_ct_ras: expect Q.931 ");
|
||||
nf_ct_dump_tuple(&exp->tuple);
|
||||
|
||||
@@ -1349,7 +1349,7 @@ static int process_gcf(struct sk_buff *skb, struct nf_conn *ct,
|
||||
IPPROTO_UDP, NULL, &port);
|
||||
exp->helper = nf_conntrack_helper_ras;
|
||||
|
||||
if (nf_ct_expect_related(exp) == 0) {
|
||||
if (nf_ct_expect_related(exp, 0) == 0) {
|
||||
pr_debug("nf_ct_ras: expect RAS ");
|
||||
nf_ct_dump_tuple(&exp->tuple);
|
||||
} else
|
||||
@@ -1561,7 +1561,7 @@ static int process_acf(struct sk_buff *skb, struct nf_conn *ct,
|
||||
exp->flags = NF_CT_EXPECT_PERMANENT;
|
||||
exp->helper = nf_conntrack_helper_q931;
|
||||
|
||||
if (nf_ct_expect_related(exp) == 0) {
|
||||
if (nf_ct_expect_related(exp, 0) == 0) {
|
||||
pr_debug("nf_ct_ras: expect Q.931 ");
|
||||
nf_ct_dump_tuple(&exp->tuple);
|
||||
} else
|
||||
@@ -1615,7 +1615,7 @@ static int process_lcf(struct sk_buff *skb, struct nf_conn *ct,
|
||||
exp->flags = NF_CT_EXPECT_PERMANENT;
|
||||
exp->helper = nf_conntrack_helper_q931;
|
||||
|
||||
if (nf_ct_expect_related(exp) == 0) {
|
||||
if (nf_ct_expect_related(exp, 0) == 0) {
|
||||
pr_debug("nf_ct_ras: expect Q.931 ");
|
||||
nf_ct_dump_tuple(&exp->tuple);
|
||||
} else
|
||||
|
||||
@@ -213,7 +213,7 @@ static int help(struct sk_buff *skb, unsigned int protoff,
|
||||
addr_beg_p - ib_ptr,
|
||||
addr_end_p - addr_beg_p,
|
||||
exp);
|
||||
else if (nf_ct_expect_related(exp) != 0) {
|
||||
else if (nf_ct_expect_related(exp, 0) != 0) {
|
||||
nf_ct_helper_log(skb, ct,
|
||||
"cannot add expectation");
|
||||
ret = NF_DROP;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user