--- a/ip/Makefile +++ b/ip/Makefile @@ -17,6 +17,13 @@ ifeq ($(IP_CONFIG_SETNS),y) CFLAGS += -DHAVE_SETNS endif +STATIC_SYM_FILTER:= +ifeq ($(IP_CONFIG_TINY),y) + STATIC_SYM_FILTER:=iplink_can.c iplink_ipoib.c iplink_vxlan.c + CFLAGS += -DIPROUTE2_TINY +endif +STATIC_SYM_SOURCES:=$(filter-out $(STATIC_SYM_FILTER),$(wildcard *.c)) + ALLOBJ=$(IPOBJ) $(RTMONOBJ) SCRIPTS=ifcfg rtpr routel routef TARGETS=ip rtmon @@ -44,7 +51,7 @@ else ip: static-syms.o static-syms.o: static-syms.h -static-syms.h: $(wildcard *.c) +static-syms.h: $(STATIC_SYM_SOURCES) files="$^" ; \ for s in `grep -B 3 '\<dlsym' $$files | sed -n '/snprintf/{s:.*"\([^"]*\)".*:\1:;s:%s::;p}'` ; do \ sed -n '/'$$s'[^ ]* =/{s:.* \([^ ]*'$$s'[^ ]*\) .*:extern char \1[] __attribute__((weak)); if (!strcmp(sym, "\1")) return \1;:;p}' $$files ; \ --- a/ip/ip.c +++ b/ip/ip.c @@ -73,30 +73,42 @@ static const struct cmd { int (*func)(int argc, char **argv); } cmds[] = { { "address", do_ipaddr }, +#ifndef IPROUTE2_TINY { "addrlabel", do_ipaddrlabel }, +#endif { "maddress", do_multiaddr }, { "route", do_iproute }, { "rule", do_iprule }, { "neighbor", do_ipneigh }, { "neighbour", do_ipneigh }, +#ifndef IPROUTE2_TINY { "ntable", do_ipntable }, { "ntbl", do_ipntable }, +#endif { "link", do_iplink }, +#ifndef IPROUTE2_TINY { "l2tp", do_ipl2tp }, { "fou", do_ipfou }, +#endif { "tunnel", do_iptunnel }, { "tunl", do_iptunnel }, +#ifndef IPROUTE2_TINY { "tuntap", do_iptuntap }, { "tap", do_iptuntap }, { "token", do_iptoken }, { "tcpmetrics", do_tcp_metrics }, { "tcp_metrics", do_tcp_metrics }, +#endif { "monitor", do_ipmonitor }, +#ifndef IPROUTE2_TINY { "xfrm", do_xfrm }, +#endif { "mroute", do_multiroute }, { "mrule", do_multirule }, { "netns", do_netns }, +#ifndef IPROUTE2_TINY { "netconf", do_ipnetconf }, +#endif { "help", do_help }, { 0 } }; --- a/lib/utils.c +++ b/lib/utils.c @@ -710,6 +710,7 @@ const char *rt_addr_n2a(int af, int len, return inet_ntop(af, addr, buf, buflen); case AF_MPLS: return mpls_ntop(af, addr, buf, buflen); +#ifndef IPROUTE2_TINY case AF_IPX: return ipx_ntop(af, addr, buf, buflen); case AF_DECnet: @@ -718,6 +719,7 @@ const char *rt_addr_n2a(int af, int len, memcpy(dna.a_addr, addr, 2); return dnet_ntop(af, &dna, buf, buflen); } +#endif case AF_PACKET: return ll_addr_n2a(addr, len, ARPHRD_VOID, buf, buflen); default: --- a/lib/Makefile +++ b/lib/Makefile @@ -4,6 +4,10 @@ ifeq ($(IP_CONFIG_SETNS),y) CFLAGS += -DHAVE_SETNS endif +ifeq ($(IP_CONFIG_TINY),y) + CFLAGS += -DIPROUTE2_TINY +endif + CFLAGS += $(FPIC) UTILOBJ = utils.o rt_names.o ll_types.o ll_proto.o ll_addr.o \