[PATCH 4/6] extensions: use __attribute__((constructor)) for autoregistration

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The ebtables initialization is easier, and, judging from the "static"
recipe in Makefile, that calling ebt_*_register ahead of main is
safe.

This means that a static build won't need the pseudomain hack,
and that -nostartfiles can also go away.
---
 Makefile                    | 34 +---------------------------------
 extensions/Makefile         |  4 ++--
 extensions/ebt_802_3.c      |  2 +-
 extensions/ebt_among.c      |  2 +-
 extensions/ebt_arp.c        |  2 +-
 extensions/ebt_arpreply.c   |  2 +-
 extensions/ebt_inat.c       |  3 +--
 extensions/ebt_ip.c         |  2 +-
 extensions/ebt_ip6.c        |  2 +-
 extensions/ebt_limit.c      |  2 +-
 extensions/ebt_log.c        |  2 +-
 extensions/ebt_mark.c       |  2 +-
 extensions/ebt_mark_m.c     |  2 +-
 extensions/ebt_nat.c        |  2 +-
 extensions/ebt_nflog.c      |  2 +-
 extensions/ebt_pkttype.c    |  2 +-
 extensions/ebt_redirect.c   |  2 +-
 extensions/ebt_standard.c   |  2 +-
 extensions/ebt_stp.c        |  2 +-
 extensions/ebt_string.c     |  2 +-
 extensions/ebt_ulog.c       |  2 +-
 extensions/ebt_vlan.c       |  2 +-
 extensions/ebtable_broute.c |  2 +-
 extensions/ebtable_filter.c |  2 +-
 extensions/ebtable_nat.c    |  2 +-
 include/ebtables_u.h        |  2 ++
 26 files changed, 28 insertions(+), 59 deletions(-)

diff --git a/Makefile b/Makefile
index 7c70db0..4d7b10f 100644
--- a/Makefile
+++ b/Makefile
@@ -116,39 +116,7 @@ daemon: ebtablesd ebtablesu
 # a little scripting for a static binary, making one for ebtables-restore
 # should be completely analogous
 static: extensions/ebt_*.c extensions/ebtable_*.c ebtables.c communication.c ebtables-standalone.c getethertype.c libebtc.c useful_functions.c
-	cp ebtables-standalone.c ebtables-standalone.c_ ; \
-	cp include/ebtables_u.h include/ebtables_u.h_ ; \
-	sed "s/ main(/ pseudomain(/" ebtables-standalone.c > ebtables-standalone.c__ ; \
-	mv ebtables-standalone.c__ ebtables-standalone.c ; \
-	printf "\nint main(int argc, char *argv[])\n{\n "  >> ebtables-standalone.c ; \
-	for arg in $(EXT_FUNC) \
-	; do \
-	sed s/_init/_$${arg}_init/ extensions/ebt_$${arg}.c > extensions/ebt_$${arg}.c_ ; \
-	mv extensions/ebt_$${arg}.c_ extensions/ebt_$${arg}.c ; \
-	printf "\t%s();\n" _$${arg}_init >> ebtables-standalone.c ; \
-	printf "extern void %s();\n" _$${arg}_init >> include/ebtables_u.h ; \
-	done ; \
-	for arg in $(EXT_TABLES) \
-	; do \
-	sed s/_init/_t_$${arg}_init/ extensions/ebtable_$${arg}.c > extensions/ebtable_$${arg}.c_ ; \
-	mv extensions/ebtable_$${arg}.c_ extensions/ebtable_$${arg}.c ; \
-	printf "\t%s();\n" _t_$${arg}_init >> ebtables-standalone.c ; \
-	printf "extern void %s();\n" _t_$${arg}_init >> include/ebtables_u.h ; \
-	done ; \
-	printf "\n\tpseudomain(argc, argv);\n\treturn 0;\n}\n" >> ebtables-standalone.c ;\
-	$(CC) $(CFLAGS) $(LDFLAGS) $(PROGSPECS) -o $@ $^ -I$(KERNEL_INCLUDES) -Iinclude ; \
-	for arg in $(EXT_FUNC) \
-	; do \
-	sed "s/ .*_init/ _init/" extensions/ebt_$${arg}.c > extensions/ebt_$${arg}.c_ ; \
-	mv extensions/ebt_$${arg}.c_ extensions/ebt_$${arg}.c ; \
-	done ; \
-	for arg in $(EXT_TABLES) \
-	; do \
-	sed "s/ .*_init/ _init/" extensions/ebtable_$${arg}.c > extensions/ebtable_$${arg}.c_ ; \
-	mv extensions/ebtable_$${arg}.c_ extensions/ebtable_$${arg}.c ; \
-	done ; \
-	mv ebtables-standalone.c_ ebtables-standalone.c ; \
-	mv include/ebtables_u.h_ include/ebtables_u.h
+	$(CC) $(CFLAGS) $(LDFLAGS) $(PROGSPECS) -o $@ $^ -I$(KERNEL_INCLUDES) -Iinclude
 
 tmp1:=$(shell printf $(BINDIR) | sed 's/\//\\\//g')
 tmp2:=$(shell printf $(SYSCONFIGDIR) | sed 's/\//\\\//g')
diff --git a/extensions/Makefile b/extensions/Makefile
index 60a70a2..daa11fc 100644
--- a/extensions/Makefile
+++ b/extensions/Makefile
@@ -11,13 +11,13 @@ EXT_LIBSI+=$(foreach T,$(EXT_FUNC), -lebt_$(T))
 EXT_LIBSI+=$(foreach T,$(EXT_TABLES), -lebtable_$(T))
 
 extensions/ebt_%.so: extensions/ebt_%.o
-	$(CC) $(LDFLAGS) -shared -o $@ -lc $< -nostartfiles
+	$(CC) $(LDFLAGS) -shared -o $@ -lc $<
 
 extensions/libebt_%.so: extensions/ebt_%.so
 	mv $< $@
 
 extensions/ebtable_%.so: extensions/ebtable_%.o
-	$(CC) $(LDFLAGS) -shared -o $@ -lc $< -nostartfiles
+	$(CC) $(LDFLAGS) -shared -o $@ -lc $<
 
 extensions/libebtable_%.so: extensions/ebtable_%.so
 	mv $< $@
diff --git a/extensions/ebt_802_3.c b/extensions/ebt_802_3.c
index 4584849..d70fd44 100644
--- a/extensions/ebt_802_3.c
+++ b/extensions/ebt_802_3.c
@@ -141,7 +141,7 @@ static struct ebt_u_match _802_3_match =
 	.extra_ops	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_match(&_802_3_match);
 }
diff --git a/extensions/ebt_among.c b/extensions/ebt_among.c
index e4fc5ac..b1560e8 100644
--- a/extensions/ebt_among.c
+++ b/extensions/ebt_among.c
@@ -491,7 +491,7 @@ static struct ebt_u_match among_match = {
 	.extra_ops 	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_match(&among_match);
 }
diff --git a/extensions/ebt_arp.c b/extensions/ebt_arp.c
index b281955..84b6e90 100644
--- a/extensions/ebt_arp.c
+++ b/extensions/ebt_arp.c
@@ -362,7 +362,7 @@ static struct ebt_u_match arp_match =
 	.extra_ops	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_match(&arp_match);
 }
diff --git a/extensions/ebt_arpreply.c b/extensions/ebt_arpreply.c
index 51eda66..399868b 100644
--- a/extensions/ebt_arpreply.c
+++ b/extensions/ebt_arpreply.c
@@ -133,7 +133,7 @@ static struct ebt_u_target arpreply_target =
 	.extra_ops	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_target(&arpreply_target);
 }
diff --git a/extensions/ebt_inat.c b/extensions/ebt_inat.c
index 681975d..48f65b4 100644
--- a/extensions/ebt_inat.c
+++ b/extensions/ebt_inat.c
@@ -379,8 +379,7 @@ static struct ebt_u_target idnat_target =
 	.extra_ops	= opts_d,
 };
 
-static void _init(void) __attribute__ ((constructor));
-static void _init(void)
+static void _INIT(void)
 {
 	register_target(&isnat_target);
 	register_target(&idnat_target);
diff --git a/extensions/ebt_ip.c b/extensions/ebt_ip.c
index 1ffdb95..faffade 100644
--- a/extensions/ebt_ip.c
+++ b/extensions/ebt_ip.c
@@ -472,7 +472,7 @@ static struct ebt_u_match ip_match =
 	.extra_ops	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_match(&ip_match);
 }
diff --git a/extensions/ebt_ip6.c b/extensions/ebt_ip6.c
index 347797b..17a4303 100644
--- a/extensions/ebt_ip6.c
+++ b/extensions/ebt_ip6.c
@@ -413,7 +413,7 @@ static struct ebt_u_match ip6_match =
 	.extra_ops	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_match(&ip6_match);
 }
diff --git a/extensions/ebt_limit.c b/extensions/ebt_limit.c
index 2cbf4de..1fe9d84 100644
--- a/extensions/ebt_limit.c
+++ b/extensions/ebt_limit.c
@@ -212,7 +212,7 @@ static struct ebt_u_match limit_match =
 	.extra_ops	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_match(&limit_match);
 }
diff --git a/extensions/ebt_log.c b/extensions/ebt_log.c
index 97d5091..b5d3232 100644
--- a/extensions/ebt_log.c
+++ b/extensions/ebt_log.c
@@ -217,7 +217,7 @@ static struct ebt_u_watcher log_watcher =
 	.extra_ops	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_watcher(&log_watcher);
 }
diff --git a/extensions/ebt_mark.c b/extensions/ebt_mark.c
index 4cf1378..b4f93b5 100644
--- a/extensions/ebt_mark.c
+++ b/extensions/ebt_mark.c
@@ -172,7 +172,7 @@ static struct ebt_u_target mark_target =
 	.extra_ops	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_target(&mark_target);
 }
diff --git a/extensions/ebt_mark_m.c b/extensions/ebt_mark_m.c
index 7561f05..b6d11a2 100644
--- a/extensions/ebt_mark_m.c
+++ b/extensions/ebt_mark_m.c
@@ -121,7 +121,7 @@ static struct ebt_u_match mark_match =
 	.extra_ops	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_match(&mark_match);
 }
diff --git a/extensions/ebt_nat.c b/extensions/ebt_nat.c
index 00d9cd4..fe7e987 100644
--- a/extensions/ebt_nat.c
+++ b/extensions/ebt_nat.c
@@ -231,7 +231,7 @@ static struct ebt_u_target dnat_target =
 	.extra_ops	= opts_d,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_target(&snat_target);
 	ebt_register_target(&dnat_target);
diff --git a/extensions/ebt_nflog.c b/extensions/ebt_nflog.c
index 405673a..04c547d 100644
--- a/extensions/ebt_nflog.c
+++ b/extensions/ebt_nflog.c
@@ -166,7 +166,7 @@ static struct ebt_u_watcher nflog_watcher = {
 	.extra_ops = nflog_opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_watcher(&nflog_watcher);
 }
diff --git a/extensions/ebt_pkttype.c b/extensions/ebt_pkttype.c
index 486c85c..bf578fc 100644
--- a/extensions/ebt_pkttype.c
+++ b/extensions/ebt_pkttype.c
@@ -125,7 +125,7 @@ static struct ebt_u_match pkttype_match =
 	.extra_ops	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_match(&pkttype_match);
 }
diff --git a/extensions/ebt_redirect.c b/extensions/ebt_redirect.c
index 3f8227a..59fe818 100644
--- a/extensions/ebt_redirect.c
+++ b/extensions/ebt_redirect.c
@@ -108,7 +108,7 @@ static struct ebt_u_target redirect_target =
 	.extra_ops	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_target(&redirect_target);
 }
diff --git a/extensions/ebt_standard.c b/extensions/ebt_standard.c
index 81edead..f3c3308 100644
--- a/extensions/ebt_standard.c
+++ b/extensions/ebt_standard.c
@@ -84,7 +84,7 @@ static struct ebt_u_target standard =
 	.extra_ops	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_target(&standard);
 }
diff --git a/extensions/ebt_stp.c b/extensions/ebt_stp.c
index 5c5fc33..311bc63 100644
--- a/extensions/ebt_stp.c
+++ b/extensions/ebt_stp.c
@@ -337,7 +337,7 @@ static struct ebt_u_match stp_match =
 	.extra_ops	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_match(&stp_match);
 }
diff --git a/extensions/ebt_string.c b/extensions/ebt_string.c
index 3deff1b..6af06b8 100644
--- a/extensions/ebt_string.c
+++ b/extensions/ebt_string.c
@@ -310,7 +310,7 @@ static struct ebt_u_match string_match =
 	.extra_ops	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_match(&string_match);
 }
diff --git a/extensions/ebt_ulog.c b/extensions/ebt_ulog.c
index 54eec53..72a6c8b 100644
--- a/extensions/ebt_ulog.c
+++ b/extensions/ebt_ulog.c
@@ -180,7 +180,7 @@ static struct ebt_u_watcher ulog_watcher =
 	.extra_ops	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_watcher(&ulog_watcher);
 }
diff --git a/extensions/ebt_vlan.c b/extensions/ebt_vlan.c
index 0a37067..0818d48 100644
--- a/extensions/ebt_vlan.c
+++ b/extensions/ebt_vlan.c
@@ -181,7 +181,7 @@ static struct ebt_u_match vlan_match = {
 	.extra_ops	= opts,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_match(&vlan_match);
 }
diff --git a/extensions/ebtable_broute.c b/extensions/ebtable_broute.c
index 5259355..c106f08 100644
--- a/extensions/ebtable_broute.c
+++ b/extensions/ebtable_broute.c
@@ -23,7 +23,7 @@ ebt_u_table table =
 	.help		= print_help,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_table(&table);
 }
diff --git a/extensions/ebtable_filter.c b/extensions/ebtable_filter.c
index e41fb84..c0bf105 100644
--- a/extensions/ebtable_filter.c
+++ b/extensions/ebtable_filter.c
@@ -29,7 +29,7 @@ static struct ebt_u_table table =
 	.help		= print_help,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_table(&table);
 }
diff --git a/extensions/ebtable_nat.c b/extensions/ebtable_nat.c
index b21c9dd..ee04482 100644
--- a/extensions/ebtable_nat.c
+++ b/extensions/ebtable_nat.c
@@ -30,7 +30,7 @@ ebt_u_table table =
 	.help		= print_help,
 };
 
-void _init(void)
+static void _INIT(void)
 {
 	ebt_register_table(&table);
 }
diff --git a/include/ebtables_u.h b/include/ebtables_u.h
index 3235bf5..7f5968d 100644
--- a/include/ebtables_u.h
+++ b/include/ebtables_u.h
@@ -44,6 +44,8 @@
 #define EBT_ALIGN(s) (((s) + (EBT_MIN_ALIGN-1)) & ~(EBT_MIN_ALIGN-1))
 #define ERRORMSG_MAXLEN 128
 
+#define _INIT __attribute__((constructor)) _init
+
 struct ebt_u_entries
 {
 	int policy;
-- 
2.17.1

--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux