--- a/ip/Makefile +++ b/ip/Makefile @@ -28,6 +28,13 @@ ifeq ($(HAVE_MNL),y) LDLIBS += $(shell $(PKG_CONFIG) libmnl --libs) 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 @@ -57,7 +64,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 @@ -74,32 +74,44 @@ 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 { "ila", do_ipila }, { "macsec", do_ipmacsec }, { "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 { "vrf", do_ipvrf}, { "sr", do_seg6 }, { "help", do_help }, --- a/lib/utils.c +++ b/lib/utils.c @@ -787,6 +787,7 @@ const char *rt_addr_n2a_r(int af, int le 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: @@ -796,6 +797,7 @@ const char *rt_addr_n2a_r(int af, int le 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 @@ -12,6 +12,10 @@ ifeq ($(HAVE_MNL),y) CFLAGS += -DHAVE_LIBMNL $(shell $(PKG_CONFIG) libmnl --cflags) 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 \