iptables: use different approach for managing loadable extensions
authorJo-Philipp Wich <jo@mein.io>
Tue, 9 Aug 2016 09:00:45 +0000 (11:00 +0200)
committerJo-Philipp Wich <jo@mein.io>
Tue, 1 Nov 2016 13:00:02 +0000 (14:00 +0100)
commitc5c87e46994635c11b75d01129a57ba42570fa03
tree3a06e0239053ec9b66b3f66396465ddda8ebb69f
parent18f4c6fda6afb912f53ded3112b1f270ddf5ff6c
iptables: use different approach for managing loadable extensions

Since musl libc does not support unloading libraries via dlclose() and since
we should not explicitely call library constructors we need to use an
alternative approach to track the match registrations performed by iptables
shared objects.

This commit changes the iptables glue code to keep a global registry of non-
builtin matches and targets.

We implement the bookkeeping by intercepting xtables_register_match() and
xtables_register_target() calls in order to record any extension registration
attempt performed by a loadable iptables library.

The code subsequently uses the global list of dynamically loaded extensions
to re-register dynamic matches and targets for each address family / table
combination.

As a consequence we can get rid of the lib vector in the iptables handle
and remove the dlclose() handling entirely. This simplifies the
load_extension() as well.

Fixes FS#31.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
iptables.c
iptables.h