lvxiafei <xiafei_xupt@xxxxxxx> wrote: > + Maximum number of allowed connection tracking entries per netns. This value > + is set to nf_conntrack_buckets by default. > + > + Note that connection tracking entries are added to the table twice -- once > + for the original direction and once for the reply direction (i.e., with > + the reversed address). This means that with default settings a maxed-out > + table will have a average hash chain length of 2, not 1. > + > + The limit of other netns cannot be greater than init_net netns. > + +----------------+-------------+----------------+ > + | init_net netns | other netns | limit behavior | > + +----------------+-------------+----------------+ > + | 0 | 0 | unlimited | > + +----------------+-------------+----------------+ > + | 0 | not 0 | other | > + +----------------+-------------+----------------+ > + | not 0 | 0 | init_net | > + +----------------+-------------+----------------+ > + | not 0 | not 0 | min | > + +----------------+-------------+----------------+ > > nf_conntrack_tcp_be_liberal - BOOLEAN > - 0 - disabled (default) > diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h > index 3f02a45773e8..062e67b9a5d7 100644 > --- a/include/net/netfilter/nf_conntrack.h > +++ b/include/net/netfilter/nf_conntrack.h > @@ -320,7 +320,6 @@ int nf_conntrack_hash_resize(unsigned int hashsize); > extern struct hlist_nulls_head *nf_conntrack_hash; > extern unsigned int nf_conntrack_htable_size; > extern seqcount_spinlock_t nf_conntrack_generation; > -extern unsigned int nf_conntrack_max; > > /* must be called with rcu read lock held */ > static inline void > @@ -360,6 +359,13 @@ static inline struct nf_conntrack_net *nf_ct_pernet(const struct net *net) > return net_generic(net, nf_conntrack_net_id); > } > > +static inline unsigned int nf_conntrack_max(const struct net *net) > +{ > + return likely(init_net.ct.sysctl_max && net->ct.sysctl_max) ? > + min(init_net.ct.sysctl_max, net->ct.sysctl_max) : > + max(init_net.ct.sysctl_max, net->ct.sysctl_max); > +} Is there a reason you did not follow my suggstion in https://lore.kernel.org/netdev/20250410105352.GB6272@xxxxxxxxxxxxx/ to disable net->ct.sysctl_max == 0 for non init netns? You could then make this if (likely(init_net.ct.sysctl_max)) return min(init_net.ct.sysctl_max, net->ct.sysctl_max); return net->ct.sysctl_max; ... or am i missing something? Aside from that (and the needed #IS_ENABLED() guard) this change looks good to me.