This series gets rid of the remaining indirect calls in the conntrack packet path (except the conntrack entry points themselves). To do this, the last remaining modular l4 tracker (GRE) is made built-in. The second upside is that this allows to remove all the 'dynamic registration' infrastructure. While at it, this also moves the l4 sysctl handling into a single location. The nat core still contains several indirect calls, those are not addressed here. Before this series: text data bss dec hex filename 6281 1732 4 8017 1f51 nf_conntrack_proto_gre.ko 108356 20613 236 129205 1f8b5 nf_conntrack.ko After: 294864 net/netfilter/nf_conntrack.ko text data bss dec hex filename 106979 19557 240 126776 1ef38 nf_conntrack.ko So even with PROTO_GRE=y, total size is reduced. Florian Westphal (16): netfilter: conntrack: handle builtin l4proto packet functions via direct calls netfilter: conntrack: handle icmp pkt_to_tuple helper via direct calls netfilter: conntrack: gre: convert rwlock to rcu netfilter: conntrack: gre: switch module to be built-in netfilter: conntrack: remove net_id netfilter: conntrack: remove pkt_to_tuple callback netfilter: conntrack: remove invert_tuple callback netfilter: conntrack: remove module owner field netfilter: conntrack: remove remaining l4proto indirect packet calls netfilter: conntrack: remove pernet l4 proto register interface netfilter: conntrack: avoid unneeded nf_conntrack_l4proto lookups netfilter: conntrack: unify sysctl handling netfilter: conntrack: remove sysctl registration helpers netfilter: conntrack: remove l4proto init and get_net callbacks netfilter: conntrack: remove l4proto destroy hook netfilter: conntrack: remove nf_ct_l4proto_find_get include/linux/netfilter/nf_conntrack_proto_gre.h | 17 include/net/netfilter/ipv4/nf_conntrack_ipv4.h | 3 include/net/netfilter/nf_conntrack.h | 2 include/net/netfilter/nf_conntrack_core.h | 5 include/net/netfilter/nf_conntrack_l4proto.h | 126 ++++--- include/net/netns/conntrack.h | 32 - net/ipv4/netfilter/nf_nat_l3proto_ipv4.c | 2 net/ipv6/netfilter/nf_nat_l3proto_ipv6.c | 2 net/netfilter/Kconfig | 2 net/netfilter/Makefile | 3 net/netfilter/nf_conntrack_core.c | 170 +++++---- net/netfilter/nf_conntrack_expect.c | 2 net/netfilter/nf_conntrack_netlink.c | 14 net/netfilter/nf_conntrack_pptp.c | 2 net/netfilter/nf_conntrack_proto.c | 406 +++-------------------- net/netfilter/nf_conntrack_proto_dccp.c | 136 +------ net/netfilter/nf_conntrack_proto_generic.c | 87 ---- net/netfilter/nf_conntrack_proto_gre.c | 208 ++--------- net/netfilter/nf_conntrack_proto_icmp.c | 69 --- net/netfilter/nf_conntrack_proto_icmpv6.c | 71 ---- net/netfilter/nf_conntrack_proto_sctp.c | 130 ------- net/netfilter/nf_conntrack_proto_tcp.c | 162 --------- net/netfilter/nf_conntrack_proto_udp.c | 82 ---- net/netfilter/nf_conntrack_standalone.c | 397 +++++++++++++++++++++- net/netfilter/nf_flow_table_core.c | 2 net/netfilter/nf_nat_core.c | 12 net/netfilter/nfnetlink_cttimeout.c | 19 - net/netfilter/nft_ct.c | 4 net/netfilter/xt_CT.c | 2 net/openvswitch/conntrack.c | 2 30 files changed, 808 insertions(+), 1363 deletions(-)