diff --git a/package/network/utils/iproute2/Makefile b/package/network/utils/iproute2/Makefile index 8617a8ef2f..c647331918 100644 --- a/package/network/utils/iproute2/Makefile +++ b/package/network/utils/iproute2/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=iproute2 -PKG_VERSION:=5.0.0 -PKG_RELEASE:=1 +PKG_VERSION:=4.19.0 +PKG_RELEASE:=8 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=@KERNEL/linux/utils/net/iproute2 -PKG_HASH:=df047302a39650ef832c07e8dab5df7a23218cd398bd310c8628e386161d20ba +PKG_HASH:=d9ec5ca1f47d8a85416fa26e7dc1cbf5d067640eb60e90bdc1c7e5bdc6a29984 PKG_BUILD_PARALLEL:=1 PKG_BUILD_DEPENDS:=iptables PKG_LICENSE:=GPL-2.0 @@ -37,7 +37,6 @@ define Package/ip-tiny $(call Package/iproute2/Default) TITLE:=Routing control utility (Minimal) VARIANT:=tiny - DEFAULT_VARIANT:=1 PROVIDES:=ip ALTERNATIVES:=200:/sbin/ip:/usr/libexec/ip-tiny DEPENDS:=+libnl-tiny +(PACKAGE_devlink||PACKAGE_rdma):libmnl @@ -49,66 +48,55 @@ $(call Package/iproute2/Default) VARIANT:=full PROVIDES:=ip ALTERNATIVES:=300:/sbin/ip:/usr/libexec/ip-full - DEPENDS:=+libnl-tiny +libelf +(PACKAGE_devlink||PACKAGE_rdma):libmnl + DEPENDS:=+libnl-tiny +(PACKAGE_devlink||PACKAGE_rdma):libmnl endef define Package/tc $(call Package/iproute2/Default) TITLE:=Traffic control utility - VARIANT:=tc - PROVIDES:=tc - DEPENDS:=+kmod-sched-core +libxtables +libelf +(PACKAGE_devlink||PACKAGE_rdma):libmnl + DEPENDS:=+kmod-sched-core +(PACKAGE_devlink||PACKAGE_rdma):libmnl +libelf1 endef define Package/genl $(call Package/iproute2/Default) TITLE:=General netlink utility frontend - DEPENDS:=+libnl-tiny +(PACKAGE_devlink||PACKAGE_rdma):libmnl +(PACKAGE_tc||PACKAGE_ip-full):libelf + DEPENDS:=+libnl-tiny +(PACKAGE_devlink||PACKAGE_rdma):libmnl endef define Package/ip-bridge $(call Package/iproute2/Default) TITLE:=Bridge configuration utility from iproute2 - DEPENDS:=+libnl-tiny +(PACKAGE_devlink||PACKAGE_rdma):libmnl +(PACKAGE_tc||PACKAGE_ip-full):libelf + DEPENDS:=+libnl-tiny +(PACKAGE_devlink||PACKAGE_rdma):libmnl endef define Package/ss $(call Package/iproute2/Default) TITLE:=Socket statistics utility - DEPENDS:=+libnl-tiny +(PACKAGE_devlink||PACKAGE_rdma):libmnl +(PACKAGE_tc||PACKAGE_ip-full):libelf + DEPENDS:=+libnl-tiny +(PACKAGE_devlink||PACKAGE_rdma):libmnl endef define Package/nstat $(call Package/iproute2/Default) TITLE:=Network statistics utility - DEPENDS:=+libnl-tiny +(PACKAGE_devlink||PACKAGE_rdma):libmnl +(PACKAGE_tc||PACKAGE_ip-full):libelf + DEPENDS:=+libnl-tiny +(PACKAGE_devlink||PACKAGE_rdma):libmnl endef define Package/devlink $(call Package/iproute2/Default) TITLE:=Network devlink utility - DEPENDS:=+libmnl +(PACKAGE_tc||PACKAGE_ip-full):libelf + DEPENDS:=+libmnl endef define Package/rdma $(call Package/iproute2/Default) TITLE:=Network rdma utility - DEPENDS:=+libmnl +(PACKAGE_tc||PACKAGE_ip-full):libelf + DEPENDS:=+libmnl endef ifeq ($(BUILD_VARIANT),tiny) IP_CONFIG_TINY:=y endif -ifeq ($(BUILD_VARIANT),full) - HAVE_ELF:=y -endif - -ifeq ($(BUILD_VARIANT),tc) - HAVE_ELF:=y - SHARED_LIBS:=y -endif - ifdef CONFIG_PACKAGE_devlink HAVE_MNL:=y endif @@ -118,22 +106,25 @@ ifdef CONFIG_PACKAGE_rdma endif define Build/Configure + $(SED) "s,-I/usr/include/db3,," $(PKG_BUILD_DIR)/Makefile + $(SED) "s,^KERNEL_INCLUDE.*,KERNEL_INCLUDE=$(LINUX_DIR)/include," \ + $(PKG_BUILD_DIR)/Makefile + $(SED) "s,^LIBC_INCLUDE.*,LIBC_INCLUDE=$(STAGING_DIR)/include," \ + $(PKG_BUILD_DIR)/Makefile echo "static const char SNAPSHOT[] = \"$(PKG_VERSION)-$(PKG_RELEASE)-openwrt\";" \ > $(PKG_BUILD_DIR)/include/SNAPSHOT.h endef TARGET_CFLAGS += -ffunction-sections -fdata-sections -TARGET_LDFLAGS += -Wl,--gc-sections -TARGET_CPPFLAGS += -I$(STAGING_DIR)/usr/include/libnl-tiny MAKE_FLAGS += \ - KERNEL_INCLUDE="$(LINUX_DIR)/user_headers/include" \ - SHARED_LIBS=$(SHARED_LIBS) \ + EXTRA_CCOPTS="-I$(STAGING_DIR)/usr/include/libnl-tiny" \ + KERNEL_INCLUDE="$(LINUX_DIR)/include" \ + SHARED_LIBS="" \ + LDFLAGS="$(TARGET_LDFLAGS) -Wl,--gc-sections" \ IP_CONFIG_TINY=$(IP_CONFIG_TINY) \ - HAVE_ELF=$(HAVE_ELF) \ HAVE_MNL=$(HAVE_MNL) \ IPT_LIB_DIR=/usr/lib/iptables \ - XT_LIB_DIR=/usr/lib/iptables \ FPIC="$(FPIC)" define Build/Compile @@ -162,10 +153,6 @@ define Package/tc/install $(INSTALL_BIN) $(PKG_BUILD_DIR)/tc/tc $(1)/usr/sbin/ $(INSTALL_DIR) $(1)/etc/hotplug.d/iface $(INSTALL_BIN) ./files/15-teql $(1)/etc/hotplug.d/iface/ -ifeq ($(SHARED_LIBS),y) - $(INSTALL_DIR) $(1)/usr/lib/tc - $(CP) $(PKG_BUILD_DIR)/tc/*.so $(1)/usr/lib/tc -endif endef define Package/genl/install diff --git a/package/network/utils/iproute2/patches/001-fix-print_0xhex-on-32-bit.patch b/package/network/utils/iproute2/patches/001-fix-print_0xhex-on-32-bit.patch new file mode 100644 index 0000000000..25994b4173 --- /dev/null +++ b/package/network/utils/iproute2/patches/001-fix-print_0xhex-on-32-bit.patch @@ -0,0 +1,343 @@ +From 90c5c969f0b9a2fbb0016b955fecc359aa884220 Mon Sep 17 00:00:00 2001 +From: Stephen Hemminger +Date: Mon, 10 Dec 2018 14:20:32 -0800 +Subject: [PATCH] fix print_0xhex on 32 bit + +The argument to print_0xhex is converted to unsigned long long +so the format string give for normal printout has to be some +variant of %llx. Otherwise, bogus values will be printed on +32 bit platforms. + +Signed-off-by: Stephen Hemminger +--- + bridge/link.c | 2 +- + ip/ipaddress.c | 2 +- + ip/iplink_bridge.c | 2 +- + ip/iplink_bridge_slave.c | 6 +++--- + ip/iplink_geneve.c | 5 ++--- + ip/iplink_vxlan.c | 8 +++----- + ip/ipntable.c | 2 +- + ip/iproute.c | 8 ++++---- + ip/iproute_lwtunnel.c | 2 +- + ip/iprule.c | 6 +++--- + ip/iptuntap.c | 2 +- + ip/link_gre.c | 6 +++--- + ip/link_gre6.c | 4 ++-- + ip/link_ip6tnl.c | 2 +- + ip/link_iptnl.c | 4 ++-- + ip/link_vti.c | 2 +- + ip/link_vti6.c | 2 +- + tc/m_ife.c | 2 +- + tc/q_htb.c | 2 +- + tc/q_taprio.c | 2 +- + 20 files changed, 34 insertions(+), 37 deletions(-) + +--- a/bridge/link.c ++++ b/bridge/link.c +@@ -90,7 +90,7 @@ static void print_hwmode(__u16 mode) + { + if (mode >= ARRAY_SIZE(hw_mode)) + print_0xhex(PRINT_ANY, "hwmode", +- "hwmode %#hx ", mode); ++ "hwmode %#llx ", mode); + else + print_string(PRINT_ANY, "hwmode", + "hwmode %s ", hw_mode[mode]); +--- a/ip/ipaddress.c ++++ b/ip/ipaddress.c +@@ -129,7 +129,7 @@ static void print_operstate(FILE *f, __u + if (is_json_context()) + print_uint(PRINT_JSON, "operstate_index", NULL, state); + else +- print_0xhex(PRINT_FP, NULL, "state %#x", state); ++ print_0xhex(PRINT_FP, NULL, "state %#llx", state); + } else if (brief) { + print_color_string(PRINT_ANY, + oper_state_color(state), +--- a/ip/iplink_bridge.c ++++ b/ip/iplink_bridge.c +@@ -524,7 +524,7 @@ static void bridge_print_opt(struct link + if (tb[IFLA_BR_GROUP_FWD_MASK]) + print_0xhex(PRINT_ANY, + "group_fwd_mask", +- "group_fwd_mask %#x ", ++ "group_fwd_mask %#llx ", + rta_getattr_u16(tb[IFLA_BR_GROUP_FWD_MASK])); + + if (tb[IFLA_BR_GROUP_ADDR]) { +--- a/ip/iplink_bridge_slave.c ++++ b/ip/iplink_bridge_slave.c +@@ -167,11 +167,11 @@ static void bridge_slave_print_opt(struc + rta_getattr_u8(tb[IFLA_BRPORT_UNICAST_FLOOD])); + + if (tb[IFLA_BRPORT_ID]) +- print_0xhex(PRINT_ANY, "id", "port_id 0x%x ", ++ print_0xhex(PRINT_ANY, "id", "port_id %#llx ", + rta_getattr_u16(tb[IFLA_BRPORT_ID])); + + if (tb[IFLA_BRPORT_NO]) +- print_0xhex(PRINT_ANY, "no", "port_no 0x%x ", ++ print_0xhex(PRINT_ANY, "no", "port_no %#llx ", + rta_getattr_u16(tb[IFLA_BRPORT_NO])); + + if (tb[IFLA_BRPORT_DESIGNATED_PORT]) +@@ -266,7 +266,7 @@ static void bridge_slave_print_opt(struc + + fwd_mask = rta_getattr_u16(tb[IFLA_BRPORT_GROUP_FWD_MASK]); + print_0xhex(PRINT_ANY, "group_fwd_mask", +- "group_fwd_mask 0x%x ", fwd_mask); ++ "group_fwd_mask %#llx ", fwd_mask); + _bitmask2str(fwd_mask, convbuf, sizeof(convbuf), fwd_mask_tbl); + print_string(PRINT_ANY, "group_fwd_mask_str", + "group_fwd_mask_str %s ", convbuf); +--- a/ip/iplink_geneve.c ++++ b/ip/iplink_geneve.c +@@ -276,7 +276,7 @@ static void geneve_print_opt(struct link + tos = rta_getattr_u8(tb[IFLA_GENEVE_TOS]); + if (tos) { + if (is_json_context() || tos != 1) +- print_0xhex(PRINT_ANY, "tos", "tos 0x%x ", tos); ++ print_0xhex(PRINT_ANY, "tos", "tos %#llx ", tos); + else + print_string(PRINT_FP, NULL, "tos %s ", "inherit"); + } +@@ -286,8 +286,7 @@ static void geneve_print_opt(struct link + + if (label) + print_0xhex(PRINT_ANY, +- "label", +- "flowlabel %#x ", ++ "label", "flowlabel %#llx ", + ntohl(label)); + } + +--- a/ip/iplink_vxlan.c ++++ b/ip/iplink_vxlan.c +@@ -522,7 +522,7 @@ static void vxlan_print_opt(struct link_ + tos = rta_getattr_u8(tb[IFLA_VXLAN_TOS]); + if (tos) { + if (is_json_context() || tos != 1) +- print_0xhex(PRINT_ANY, "tos", "tos 0x%x ", tos); ++ print_0xhex(PRINT_ANY, "tos", "tos %#llx ", tos); + else + print_string(PRINT_FP, NULL, "tos %s ", "inherit"); + } +@@ -542,10 +542,8 @@ static void vxlan_print_opt(struct link_ + __u32 label = rta_getattr_u32(tb[IFLA_VXLAN_LABEL]); + + if (label) +- print_0xhex(PRINT_ANY, +- "label", +- "flowlabel %#x ", +- ntohl(label)); ++ print_0xhex(PRINT_ANY, "label", ++ "flowlabel %#llx ", ntohl(label)); + } + + if (tb[IFLA_VXLAN_AGEING]) { +--- a/ip/ipntable.c ++++ b/ip/ipntable.c +@@ -360,7 +360,7 @@ static void print_ndtconfig(const struct + print_uint(PRINT_ANY, "hash_rnd", + " hash_rnd %u ", ndtc->ndtc_hash_rnd); + print_0xhex(PRINT_ANY, "hash_mask", +- "hash_mask %08x ", ndtc->ndtc_hash_mask); ++ "hash_mask %08llx ", ndtc->ndtc_hash_mask); + + print_uint(PRINT_ANY, "hash_chain_gc", + "hash_chain_gc %u ", ndtc->ndtc_hash_chain_gc); +--- a/ip/iproute.c ++++ b/ip/iproute.c +@@ -346,7 +346,7 @@ static void print_rtax_features(FILE *fp + + if (features) + print_0xhex(PRINT_ANY, +- "features", "0x%x ", of); ++ "features", "%#llx ", of); + } + + static void print_rt_flags(FILE *fp, unsigned int flags) +@@ -483,10 +483,10 @@ static void print_rta_cacheinfo(FILE *fp + } + if (ci->rta_id) + print_0xhex(PRINT_ANY, "ipid", +- "ipid 0x%04x ", ci->rta_id); ++ "ipid 0x%04llx ", ci->rta_id); + if (ci->rta_ts || ci->rta_tsage) { + print_0xhex(PRINT_ANY, "ts", +- "ts 0x%x", ci->rta_ts); ++ "ts 0x%llx", ci->rta_ts); + print_uint(PRINT_ANY, "tsage", + "tsage %usec ", ci->rta_tsage); + } +@@ -885,7 +885,7 @@ int print_route(const struct sockaddr_nl + print_uint(PRINT_JSON, "mark", NULL, mark); + else if (mark >= 16) + print_0xhex(PRINT_FP, NULL, +- "mark 0x%x ", mark); ++ "mark 0x%llx ", mark); + else + print_uint(PRINT_FP, NULL, + "mark %u ", mark); +--- a/ip/iproute_lwtunnel.c ++++ b/ip/iproute_lwtunnel.c +@@ -115,7 +115,7 @@ static void print_srh(FILE *fp, struct i + + tlv = (struct sr6_tlv_hmac *)((char *)srh + offset); + print_0xhex(PRINT_ANY, "hmac", +- "hmac 0x%X ", ntohl(tlv->hmackeyid)); ++ "hmac %llX ", ntohl(tlv->hmackeyid)); + } + } + +--- a/ip/iprule.c ++++ b/ip/iprule.c +@@ -263,10 +263,10 @@ int print_rule(const struct sockaddr_nl + + if (tb[FRA_FWMASK] && + (mask = rta_getattr_u32(tb[FRA_FWMASK])) != 0xFFFFFFFF) { +- print_0xhex(PRINT_ANY, "fwmark", "fwmark 0x%x", mark); +- print_0xhex(PRINT_ANY, "fwmask", "/0x%x ", mask); ++ print_0xhex(PRINT_ANY, "fwmark", "fwmark %#llx", mark); ++ print_0xhex(PRINT_ANY, "fwmask", "/%#llx ", mask); + } else { +- print_0xhex(PRINT_ANY, "fwmark", "fwmark 0x%x ", mark); ++ print_0xhex(PRINT_ANY, "fwmark", "fwmark %#llx ", mark); + } + } + +--- a/ip/iptuntap.c ++++ b/ip/iptuntap.c +@@ -254,7 +254,7 @@ static void print_flags(long flags) + flags &= ~(IFF_TUN | IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE | + IFF_VNET_HDR | IFF_PERSIST | IFF_NOFILTER); + if (flags) +- print_0xhex(PRINT_ANY, NULL, "%#x", flags); ++ print_0xhex(PRINT_ANY, NULL, "%#llx", flags); + + close_json_array(PRINT_JSON, NULL); + } +--- a/ip/link_gre.c ++++ b/ip/link_gre.c +@@ -463,7 +463,7 @@ static void gre_print_opt(struct link_ut + tos = rta_getattr_u8(tb[IFLA_GRE_TOS]); + if (tos) { + if (is_json_context() || tos != 1) +- print_0xhex(PRINT_ANY, "tos", "tos 0x%x ", tos); ++ print_0xhex(PRINT_ANY, "tos", "tos %#llx ", tos); + else + print_string(PRINT_FP, NULL, "tos %s ", "inherit"); + } +@@ -508,7 +508,7 @@ static void gre_print_opt(struct link_ut + + if (fwmark) { + print_0xhex(PRINT_ANY, +- "fwmark", "fwmark 0x%x ", fwmark); ++ "fwmark", "fwmark %#llx ", fwmark); + } + } + +@@ -541,7 +541,7 @@ static void gre_print_opt(struct link_ut + __u16 erspan_hwid = rta_getattr_u16(tb[IFLA_GRE_ERSPAN_HWID]); + + print_0xhex(PRINT_ANY, +- "erspan_hwid", "erspan_hwid 0x%x ", erspan_hwid); ++ "erspan_hwid", "erspan_hwid %#llx ", erspan_hwid); + } + + tnl_print_encap(tb, +--- a/ip/link_gre6.c ++++ b/ip/link_gre6.c +@@ -576,7 +576,7 @@ static void gre_print_opt(struct link_ut + + if (fwmark) { + print_0xhex(PRINT_ANY, +- "fwmark", "fwmark 0x%x ", fwmark); ++ "fwmark", "fwmark %#llx ", fwmark); + } + } + +@@ -609,7 +609,7 @@ static void gre_print_opt(struct link_ut + __u16 erspan_hwid = rta_getattr_u16(tb[IFLA_GRE_ERSPAN_HWID]); + + print_0xhex(PRINT_ANY, +- "erspan_hwid", "erspan_hwid 0x%x ", erspan_hwid); ++ "erspan_hwid", "erspan_hwid %#llx ", erspan_hwid); + } + + tnl_print_encap(tb, +--- a/ip/link_ip6tnl.c ++++ b/ip/link_ip6tnl.c +@@ -457,7 +457,7 @@ static void ip6tunnel_print_opt(struct l + + if (fwmark) { + print_0xhex(PRINT_ANY, +- "fwmark", "fwmark 0x%x ", fwmark); ++ "fwmark", "fwmark %#llx ", fwmark); + } + } + +--- a/ip/link_iptnl.c ++++ b/ip/link_iptnl.c +@@ -418,7 +418,7 @@ static void iptunnel_print_opt(struct li + tos = rta_getattr_u8(tb[IFLA_IPTUN_TOS]); + if (tos) { + if (is_json_context() || tos != 1) +- print_0xhex(PRINT_ANY, "tos", "tos 0x%x ", tos); ++ print_0xhex(PRINT_ANY, "tos", "tos %#llx ", tos); + else + print_string(PRINT_FP, NULL, "tos %s ", "inherit"); + } +@@ -476,7 +476,7 @@ static void iptunnel_print_opt(struct li + + if (fwmark) { + print_0xhex(PRINT_ANY, +- "fwmark", "fwmark 0x%x ", fwmark); ++ "fwmark", "fwmark %#llx ", fwmark); + } + } + +--- a/ip/link_vti.c ++++ b/ip/link_vti.c +@@ -208,7 +208,7 @@ static void vti_print_opt(struct link_ut + + if (fwmark) { + print_0xhex(PRINT_ANY, +- "fwmark", "fwmark 0x%x ", fwmark); ++ "fwmark", "fwmark %#llx ", fwmark); + } + } + } +--- a/ip/link_vti6.c ++++ b/ip/link_vti6.c +@@ -210,7 +210,7 @@ static void vti6_print_opt(struct link_u + + if (fwmark) { + print_0xhex(PRINT_ANY, +- "fwmark", "fwmark 0x%x ", fwmark); ++ "fwmark", "fwmark %#llx ", fwmark); + } + } + } +--- a/tc/m_ife.c ++++ b/tc/m_ife.c +@@ -247,7 +247,7 @@ static int print_ife(struct action_util + if (tb[TCA_IFE_TYPE]) { + ife_type = rta_getattr_u16(tb[TCA_IFE_TYPE]); + has_optional = 1; +- print_0xhex(PRINT_ANY, "type", "type 0x%X ", ife_type); ++ print_0xhex(PRINT_ANY, "type", "type %#llX ", ife_type); + } + + if (has_optional) +--- a/tc/q_htb.c ++++ b/tc/q_htb.c +@@ -332,7 +332,7 @@ static int htb_print_opt(struct qdisc_ut + if (RTA_PAYLOAD(tb[TCA_HTB_INIT]) < sizeof(*gopt)) return -1; + + print_int(PRINT_ANY, "r2q", "r2q %d", gopt->rate2quantum); +- print_0xhex(PRINT_ANY, "default", " default %x", gopt->defcls); ++ print_0xhex(PRINT_ANY, "default", " default %#llx", gopt->defcls); + print_uint(PRINT_ANY, "direct_packets_stat", + " direct_packets_stat %u", gopt->direct_pkts); + if (show_details) { diff --git a/package/network/utils/iproute2/patches/002-tc-fix-xtables-incorrect-usage-of-LDFLAGS.patch b/package/network/utils/iproute2/patches/002-tc-fix-xtables-incorrect-usage-of-LDFLAGS.patch new file mode 100644 index 0000000000..d5981360a9 --- /dev/null +++ b/package/network/utils/iproute2/patches/002-tc-fix-xtables-incorrect-usage-of-LDFLAGS.patch @@ -0,0 +1,35 @@ +From 6ddb36c3a9686df1cca2f4d06518395f1eb9d5cc Mon Sep 17 00:00:00 2001 +From: Syrone Wong +Date: Wed, 12 Dec 2018 19:35:08 +0800 +Subject: [PATCH] tc: fix xtables incorrect usage of LDFLAGS + +The incorrect setting of LDFLAGS causes error below: + +> em_ipt.o: In function `em_ipt_print_epot': +> em_ipt.c:(.text.em_ipt_print_epot+0x2e): undefined reference to +> `xtables_init_all' + +em_ipt.c gets involved when TC_CONFIG_XT=y, which requires xtables, +while tc/Makefile doesn't pass flags correctly. It adds '-lxtables' +to LDFLAGS instead of LDLIBS. + +Fixes: dd296215 ("tc: add em_ipt ematch for calling xtables matches from tc matching context") + +Signed-off-by: Syrone Wong +Acked-by: Eyal Birger +Signed-off-by: Stephen Hemminger +--- + tc/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/tc/Makefile ++++ b/tc/Makefile +@@ -170,7 +170,7 @@ em_ipset.o: CFLAGS += $$($(PKG_CONFIG) x + em_ipt.o: CFLAGS += $$($(PKG_CONFIG) xtables --cflags) + + ifeq ($(TC_CONFIG_XT),y) +- LDFLAGS += $$($(PKG_CONFIG) xtables --libs) ++ LDLIBS += $$($(PKG_CONFIG) xtables --libs) + endif + + %.yacc.c: %.y diff --git a/package/network/utils/iproute2/patches/010-cake-fwmark.patch b/package/network/utils/iproute2/patches/010-cake-fwmark.patch deleted file mode 100644 index 46981067bc..0000000000 --- a/package/network/utils/iproute2/patches/010-cake-fwmark.patch +++ /dev/null @@ -1,152 +0,0 @@ -From a7cd7badedcb643dc1adb41edeb4cf8e4d9ec063 Mon Sep 17 00:00:00 2001 -From: Stephen Hemminger -Date: Tue, 19 Mar 2019 10:36:56 -0700 -Subject: uapi: add CAKE FWMARK - -Signed-off-by: Stephen Hemminger ---- - include/uapi/linux/pkt_sched.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/include/uapi/linux/pkt_sched.h b/include/uapi/linux/pkt_sched.h -index 1eb572e..7ee74c3 100644 ---- a/include/uapi/linux/pkt_sched.h -+++ b/include/uapi/linux/pkt_sched.h -@@ -1021,6 +1021,7 @@ enum { - TCA_CAKE_INGRESS, - TCA_CAKE_ACK_FILTER, - TCA_CAKE_SPLIT_GSO, -+ TCA_CAKE_FWMARK, - __TCA_CAKE_MAX - }; - #define TCA_CAKE_MAX (__TCA_CAKE_MAX - 1) - -From 5ebfe1f6fea2bb3bfccf4cf93829516caaa0233d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= -Date: Mon, 18 Mar 2019 01:30:45 +0100 -Subject: [PATCH] q_cake: Add support for setting the fwmark option -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This adds support for the newly added fwmark option to CAKE, which allows -overriding the tin selection from the per-packet firewall marks. The fwmark -field is a bitmask that is applied to the fwmark to select the tin. - -Signed-off-by: Toke Høiland-Jørgensen ---- - man/man8/tc-cake.8 | 16 ++++++++++++++++ - tc/q_cake.c | 24 ++++++++++++++++++++++++ - 2 files changed, 40 insertions(+) - -diff --git a/man/man8/tc-cake.8 b/man/man8/tc-cake.8 -index eda436e1..8c57eadd 100644 ---- a/man/man8/tc-cake.8 -+++ b/man/man8/tc-cake.8 -@@ -91,6 +91,10 @@ TIME | - LIMIT ] - .br - [ -+.BR fwmark -+MASK ] -+.br -+[ - .BR ptm - | - .BR atm -@@ -524,6 +528,18 @@ preset on the modern Internet is firmly discouraged. - .br - Voice (CS7, CS6, EF, VA, TOS4), 25% threshold, reduced Codel interval. - -+.PP -+.B fwmark -+MASK -+.br -+ This options turns on fwmark-based overriding of CAKE's tin selection. -+If set, the option specifies a bitmask that will be applied to the fwmark -+associated with each packet. If the result of this masking is non-zero, the -+result will be right-shifted by the number of least-significant unset bits in -+the mask value, and the result will be used as a the tin number for that packet. -+This can be used to set policies in a firewall script that will override CAKE's -+built-in tin selection. -+ - .SH OTHER PARAMETERS - .B memlimit - LIMIT -diff --git a/tc/q_cake.c b/tc/q_cake.c -index e827e3f1..307a12c0 100644 ---- a/tc/q_cake.c -+++ b/tc/q_cake.c -@@ -82,6 +82,7 @@ static void explain(void) - " [ split-gso* | no-split-gso ]\n" - " [ ack-filter | ack-filter-aggressive | no-ack-filter* ]\n" - " [ memlimit LIMIT ]\n" -+" [ fwmark MASK ]\n" - " [ ptm | atm | noatm* ] [ overhead N | conservative | raw* ]\n" - " [ mpu N ] [ ingress | egress* ]\n" - " (* marks defaults)\n"); -@@ -106,6 +107,7 @@ static int cake_parse_opt(struct qdisc_util *qu, int argc, char **argv, - int autorate = -1; - int ingress = -1; - int overhead = 0; -+ int fwmark = -1; - int wash = -1; - int nat = -1; - int atm = -1; -@@ -332,6 +334,16 @@ static int cake_parse_opt(struct qdisc_util *qu, int argc, char **argv, - "Illegal value for \"memlimit\": \"%s\"\n", *argv); - return -1; - } -+ } else if (strcmp(*argv, "fwmark") == 0) { -+ unsigned int fwm; -+ -+ NEXT_ARG(); -+ if (get_u32(&fwm, *argv, 0)) { -+ fprintf(stderr, -+ "Illegal value for \"fwmark\": \"%s\"\n", *argv); -+ return -1; -+ } -+ fwmark = fwm; - } else if (strcmp(*argv, "help") == 0) { - explain(); - return -1; -@@ -376,6 +388,9 @@ static int cake_parse_opt(struct qdisc_util *qu, int argc, char **argv, - if (memlimit) - addattr_l(n, 1024, TCA_CAKE_MEMORY, &memlimit, - sizeof(memlimit)); -+ if (fwmark != -1) -+ addattr_l(n, 1024, TCA_CAKE_FWMARK, &fwmark, -+ sizeof(fwmark)); - if (nat != -1) - addattr_l(n, 1024, TCA_CAKE_NAT, &nat, sizeof(nat)); - if (wash != -1) -@@ -409,6 +424,7 @@ static int cake_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt) - struct rtattr *tb[TCA_CAKE_MAX + 1]; - unsigned int interval = 0; - unsigned int memlimit = 0; -+ unsigned int fwmark = 0; - __u64 bandwidth = 0; - int ack_filter = 0; - int split_gso = 0; -@@ -507,6 +523,10 @@ static int cake_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt) - RTA_PAYLOAD(tb[TCA_CAKE_RTT]) >= sizeof(__u32)) { - interval = rta_getattr_u32(tb[TCA_CAKE_RTT]); - } -+ if (tb[TCA_CAKE_FWMARK] && -+ RTA_PAYLOAD(tb[TCA_CAKE_FWMARK]) >= sizeof(__u32)) { -+ fwmark = rta_getattr_u32(tb[TCA_CAKE_FWMARK]); -+ } - - if (wash) - print_string(PRINT_FP, NULL, "wash ", NULL); -@@ -559,6 +579,10 @@ static int cake_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt) - sprint_size(memlimit, b1)); - } - -+ if (fwmark) -+ print_uint(PRINT_FP, NULL, "fwmark 0x%x ", fwmark); -+ print_0xhex(PRINT_JSON, "fwmark", NULL, fwmark); -+ - return 0; - } - diff --git a/package/network/utils/iproute2/patches/100-config.patch b/package/network/utils/iproute2/patches/100-config.patch new file mode 100644 index 0000000000..7f23cfc35e --- /dev/null +++ b/package/network/utils/iproute2/patches/100-config.patch @@ -0,0 +1,7 @@ +--- /dev/null ++++ b/Config +@@ -0,0 +1,4 @@ ++# Fixed config to disable ATM support even if present on host system ++IP_CONFIG_SETNS:=y ++TC_CONFIG_ATM:=n ++TC_CONFIG_XT:=y diff --git a/package/network/utils/iproute2/patches/100-configure.patch b/package/network/utils/iproute2/patches/100-configure.patch deleted file mode 100644 index 248b1c0e01..0000000000 --- a/package/network/utils/iproute2/patches/100-configure.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/configure -+++ b/configure -@@ -32,7 +32,8 @@ int main(int argc, char **argv) { - } - EOF - -- if $CC -I$INCLUDE -o $TMPDIR/atmtest $TMPDIR/atmtest.c -latm >/dev/null 2>&1; then -+# OpenWrt: disable ATM support even if present on host system -+ if [ 1 -eq 0 ]; then - echo "TC_CONFIG_ATM:=y" >>$CONFIG - echo yes - else diff --git a/package/network/utils/iproute2/patches/115-add-config-xtlibdir.patch b/package/network/utils/iproute2/patches/115-add-config-xtlibdir.patch deleted file mode 100644 index 6795be74bf..0000000000 --- a/package/network/utils/iproute2/patches/115-add-config-xtlibdir.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/tc/Makefile -+++ b/tc/Makefile -@@ -120,6 +120,9 @@ CFLAGS += -DCONFIG_GACT -DCONFIG_GACT_PR - ifneq ($(IPT_LIB_DIR),) - CFLAGS += -DIPT_LIB_DIR=\"$(IPT_LIB_DIR)\" - endif -+ifneq ($(XT_LIB_DIR),) -+ CFLAGS += -DXT_LIB_DIR=\"$(XT_LIB_DIR)\" -+endif - - YACC := bison - LEX := flex diff --git a/package/network/utils/iproute2/patches/130-no_netem.patch b/package/network/utils/iproute2/patches/130-no_netem.patch index aa93366f29..58062655c9 100644 --- a/package/network/utils/iproute2/patches/130-no_netem.patch +++ b/package/network/utils/iproute2/patches/130-no_netem.patch @@ -1,6 +1,6 @@ --- a/Makefile +++ b/Makefile -@@ -55,7 +55,7 @@ WFLAGS += -Wmissing-declarations -Wold-s +@@ -61,7 +61,7 @@ WFLAGS += -Wmissing-declarations -Wold-s CFLAGS := $(WFLAGS) $(CCOPTS) -I../include -I../include/uapi $(DEFINES) $(CFLAGS) YACCFLAGS = -d -t -v diff --git a/package/network/utils/iproute2/patches/135-sync-iptables-header.patch b/package/network/utils/iproute2/patches/135-sync-iptables-header.patch deleted file mode 100644 index bba90e69ab..0000000000 --- a/package/network/utils/iproute2/patches/135-sync-iptables-header.patch +++ /dev/null @@ -1,101 +0,0 @@ -Description: Sync header from iptables - The current versions in several suites have the same content: - - 1.6.1-2 (unstable) -Bug: https://bugs.debian.org/868059 -Forwarded: not-needed -Author: Cyril Brulebois -Last-Update: 2017-11-22 ---- a/include/xtables.h -+++ b/include/xtables.h -@@ -206,9 +206,24 @@ enum xtables_ext_flags { - XTABLES_EXT_ALIAS = 1 << 0, - }; - -+struct xt_xlate; -+ -+struct xt_xlate_mt_params { -+ const void *ip; -+ const struct xt_entry_match *match; -+ int numeric; -+ bool escape_quotes; -+}; -+ -+struct xt_xlate_tg_params { -+ const void *ip; -+ const struct xt_entry_target *target; -+ int numeric; -+ bool escape_quotes; -+}; -+ - /* Include file for additions: new matches and targets. */ --struct xtables_match --{ -+struct xtables_match { - /* - * ABI/API version this module requires. Must be first member, - * as the rest of this struct may be subject to ABI changes. -@@ -270,6 +285,10 @@ struct xtables_match - void (*x6_fcheck)(struct xt_fcheck_call *); - const struct xt_option_entry *x6_options; - -+ /* Translate iptables to nft */ -+ int (*xlate)(struct xt_xlate *xl, -+ const struct xt_xlate_mt_params *params); -+ - /* Size of per-extension instance extra "global" scratch space */ - size_t udata_size; - -@@ -281,8 +300,7 @@ struct xtables_match - unsigned int loaded; /* simulate loading so options are merged properly */ - }; - --struct xtables_target --{ -+struct xtables_target { - /* - * ABI/API version this module requires. Must be first member, - * as the rest of this struct may be subject to ABI changes. -@@ -347,6 +365,10 @@ struct xtables_target - void (*x6_fcheck)(struct xt_fcheck_call *); - const struct xt_option_entry *x6_options; - -+ /* Translate iptables to nft */ -+ int (*xlate)(struct xt_xlate *xl, -+ const struct xt_xlate_tg_params *params); -+ - size_t udata_size; - - /* Ignore these men behind the curtain: */ -@@ -407,6 +429,17 @@ struct xtables_globals - - #define XT_GETOPT_TABLEEND {.name = NULL, .has_arg = false} - -+/* -+ * enum op- -+ * -+ * For writing clean nftables translations code -+ */ -+enum xt_op { -+ XT_OP_EQ, -+ XT_OP_NEQ, -+ XT_OP_MAX, -+}; -+ - #ifdef __cplusplus - extern "C" { - #endif -@@ -549,6 +582,14 @@ extern void xtables_lmap_free(struct xta - extern int xtables_lmap_name2id(const struct xtables_lmap *, const char *); - extern const char *xtables_lmap_id2name(const struct xtables_lmap *, int); - -+/* xlate infrastructure */ -+struct xt_xlate *xt_xlate_alloc(int size); -+void xt_xlate_free(struct xt_xlate *xl); -+void xt_xlate_add(struct xt_xlate *xl, const char *fmt, ...); -+void xt_xlate_add_comment(struct xt_xlate *xl, const char *comment); -+const char *xt_xlate_get_comment(struct xt_xlate *xl); -+const char *xt_xlate_get(struct xt_xlate *xl); -+ - #ifdef XTABLES_INTERNAL - - /* Shipped modules rely on this... */ diff --git a/package/network/utils/iproute2/patches/140-keep_libmnl_optional.patch b/package/network/utils/iproute2/patches/140-keep_libmnl_optional.patch index d255ae7b0e..697a6471a7 100644 --- a/package/network/utils/iproute2/patches/140-keep_libmnl_optional.patch +++ b/package/network/utils/iproute2/patches/140-keep_libmnl_optional.patch @@ -1,11 +1,11 @@ --- a/configure +++ b/configure -@@ -255,7 +255,7 @@ check_selinux() +@@ -281,7 +281,7 @@ check_selinux() check_mnl() { -- if ${PKG_CONFIG} libmnl --exists; then -+ if [ "${HAVE_MNL}" = "y" ] && ${PKG_CONFIG} libmnl --exists; then +- if ${PKG_CONFIG} libmnl --exists ++ if [ "${HAVE_MNL}" = "y" ] && ${PKG_CONFIG} libmnl --exists + then echo "HAVE_MNL:=y" >>$CONFIG echo "yes" - diff --git a/package/network/utils/iproute2/patches/145-keep_libelf_optional.patch b/package/network/utils/iproute2/patches/145-keep_libelf_optional.patch deleted file mode 100644 index 2e3ad18809..0000000000 --- a/package/network/utils/iproute2/patches/145-keep_libelf_optional.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/configure -+++ b/configure -@@ -228,7 +228,7 @@ EOF - - check_elf() - { -- if ${PKG_CONFIG} libelf --exists; then -+ if [ "${HAVE_ELF}" = "y" ] && ${PKG_CONFIG} libelf --exists; then - echo "HAVE_ELF:=y" >>$CONFIG - echo "yes" - diff --git a/package/network/utils/iproute2/patches/150-extra-ccopts.patch b/package/network/utils/iproute2/patches/150-extra-ccopts.patch new file mode 100644 index 0000000000..d036ba703c --- /dev/null +++ b/package/network/utils/iproute2/patches/150-extra-ccopts.patch @@ -0,0 +1,11 @@ +--- a/Makefile ++++ b/Makefile +@@ -54,7 +54,7 @@ HOSTCC ?= $(CC) + DEFINES += -D_GNU_SOURCE + # Turn on transparent support for LFS + DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE +-CCOPTS = -O2 ++CCOPTS = -O2 $(EXTRA_CCOPTS) + WFLAGS := -Wall -Wstrict-prototypes -Wmissing-prototypes + WFLAGS += -Wmissing-declarations -Wold-style-definition -Wformat=2 + diff --git a/package/network/utils/iproute2/patches/170-ip_tiny.patch b/package/network/utils/iproute2/patches/170-ip_tiny.patch index fb5a6466e4..dc0547a256 100644 --- a/package/network/utils/iproute2/patches/170-ip_tiny.patch +++ b/package/network/utils/iproute2/patches/170-ip_tiny.patch @@ -41,7 +41,7 @@ +#endif " OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |\n" " -h[uman-readable] | -iec | -j[son] | -p[retty] |\n" - " -f[amily] { inet | inet6 | mpls | bridge | link } |\n" + " -f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } |\n" @@ -72,32 +78,44 @@ static const struct cmd { int (*func)(int argc, char **argv); } cmds[] = { @@ -87,6 +87,24 @@ { "vrf", do_ipvrf}, { "sr", do_seg6 }, { "help", do_help }, +--- a/lib/utils.c ++++ b/lib/utils.c +@@ -1012,6 +1012,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: +@@ -1021,6 +1022,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); + case AF_BRIDGE: --- a/lib/Makefile +++ b/lib/Makefile @@ -3,6 +3,10 @@ include ../config.mk diff --git a/package/network/utils/iproute2/patches/175-reduce-dynamic-syms.patch b/package/network/utils/iproute2/patches/175-reduce-dynamic-syms.patch deleted file mode 100644 index 64ab135589..0000000000 --- a/package/network/utils/iproute2/patches/175-reduce-dynamic-syms.patch +++ /dev/null @@ -1,44 +0,0 @@ ---- a/tc/Makefile -+++ b/tc/Makefile -@@ -107,7 +107,7 @@ LDLIBS += -L. -lm - - ifeq ($(SHARED_LIBS),y) - LDLIBS += -ldl --LDFLAGS += -Wl,-export-dynamic -+LDFLAGS += -Wl,--dynamic-list=dynsyms.list - endif - - TCLIB := tc_core.o -@@ -137,7 +137,7 @@ MODDESTDIR := $(DESTDIR)$(LIBDIR)/tc - all: tc $(TCSO) - - tc: $(TCOBJ) $(LIBNETLINK) libtc.a -- $(QUIET_LINK)$(CC) $^ $(LDFLAGS) $(LDLIBS) -o $@ -+ $(QUIET_LINK)$(CC) $(filter-out dynsyms.list, $^) $(LDFLAGS) $(LDLIBS) -o $@ - - libtc.a: $(TCLIB) - $(QUIET_AR)$(AR) rcs $@ $^ -@@ -159,6 +159,7 @@ install: all - clean: - rm -f $(TCOBJ) $(TCLIB) libtc.a tc *.so emp_ematch.yacc.h; \ - rm -f emp_ematch.yacc.* -+ rm -f dynsyms.list - - q_atm.so: q_atm.c - $(QUIET_CC)$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -shared -fpic -o q_atm.so q_atm.c -latm -@@ -198,4 +199,15 @@ static-syms.h: $(wildcard *.c) - sed -n '/'$$s'[^ ]* =/{s:.* \([^ ]*'$$s'[^ ]*\) .*:extern char \1[] __attribute__((weak)); if (!strcmp(sym, "\1")) return \1;:;p}' $$files ; \ - done > $@ - -+else -+ -+tc: dynsyms.list -+dynsyms.list: $(wildcard *.c) -+ files="$(filter-out $(patsubst %.so,%.c,$(TCSO)), $^)" ; \ -+ echo "{" > $@ ; \ -+ for s in `grep -B 3 '\> $@ ; \ -+ echo "show_stats; print_tm; parse_rtattr; get_u32; matches; addattr_l; addattr_nest; addattr_nest_end; };" >> $@ -+ - endif diff --git a/package/network/utils/iproute2/patches/190-link-libelf-to-tc-only.patch b/package/network/utils/iproute2/patches/190-link-libelf-to-tc-only.patch new file mode 100644 index 0000000000..1c44616253 --- /dev/null +++ b/package/network/utils/iproute2/patches/190-link-libelf-to-tc-only.patch @@ -0,0 +1,60 @@ +--- a/configure ++++ b/configure +@@ -257,8 +257,9 @@ check_elf() + echo "HAVE_ELF:=y" >>$CONFIG + echo "yes" + +- echo 'CFLAGS += -DHAVE_ELF' `${PKG_CONFIG} libelf --cflags` >> $CONFIG +- echo 'LDLIBS += ' `${PKG_CONFIG} libelf --libs` >>$CONFIG ++ echo 'CFLAGS += -DHAVE_ELF' >> $CONFIG ++ echo 'ELF_CFLAGS += ' `${PKG_CONFIG} libelf --cflags` >> $CONFIG ++ echo 'ELF_LDLIBS += ' `${PKG_CONFIG} libelf --libs` >>$CONFIG + else + echo "no" + fi +--- a/lib/Makefile ++++ b/lib/Makefile +@@ -11,9 +11,17 @@ UTILOBJ = utils.o rt_names.o ll_map.o ll + inet_proto.o namespace.o json_writer.o json_print.o \ + names.o color.o bpf.o exec.o fs.o + ++ELFOBJ=$(patsubst %.o,%.elf.o,$(UTILOBJ)) ++ + NLOBJ=libgenl.o libnetlink.o + +-all: libnetlink.a libutil.a ++all: libnetlink.a libutil.a libutil-elf.a ++ ++%.o: %.c ++ $(QUIET_CC)$(CC) $(CFLAGS) -UHAVE_ELF $(EXTRA_CFLAGS) -c -o $@ $< ++ ++%.elf.o: %.c ++ $(QUIET_CC)$(CC) $(CFLAGS) $(ELF_CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $< + + libnetlink.a: $(NLOBJ) + $(QUIET_AR)$(AR) rcs $@ $^ +@@ -21,7 +29,10 @@ libnetlink.a: $(NLOBJ) + libutil.a: $(UTILOBJ) $(ADDLIB) + $(QUIET_AR)$(AR) rcs $@ $^ + ++libutil-elf.a: $(ELFOBJ) $(ADDLIB) ++ $(QUIET_AR)$(AR) rcs $@ $^ ++ + install: + + clean: +- rm -f $(NLOBJ) $(UTILOBJ) $(ADDLIB) libnetlink.a libutil.a ++ rm -f $(NLOBJ) $(UTILOBJ) $(ELFOBJ) $(ADDLIB) libnetlink.a libutil.a libutil-elf.a +--- a/tc/Makefile ++++ b/tc/Makefile +@@ -132,8 +132,8 @@ MODDESTDIR := $(DESTDIR)$(LIBDIR)/tc + + all: tc $(TCSO) + +-tc: $(TCOBJ) $(LIBNETLINK) libtc.a +- $(QUIET_LINK)$(CC) $^ $(LDFLAGS) $(LDLIBS) -o $@ ++tc: $(TCOBJ) $(subst libutil.a,libutil-elf.a,$(LIBNETLINK)) libtc.a ++ $(QUIET_LINK)$(CC) $^ $(LDFLAGS) $(LDLIBS) $(ELF_LDLIBS) -o $@ + + libtc.a: $(TCLIB) + $(QUIET_AR)$(AR) rcs $@ $^ diff --git a/package/network/utils/iproute2/patches/200-drop_libbsd_dependency.patch b/package/network/utils/iproute2/patches/200-drop_libbsd_dependency.patch deleted file mode 100644 index f6ec945297..0000000000 --- a/package/network/utils/iproute2/patches/200-drop_libbsd_dependency.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- a/configure -+++ b/configure -@@ -299,14 +299,8 @@ EOF - if $CC -I$INCLUDE -o $TMPDIR/strtest $TMPDIR/strtest.c >/dev/null 2>&1; then - echo "no" - else -- if ${PKG_CONFIG} libbsd --exists; then -- echo 'CFLAGS += -DHAVE_LIBBSD' `${PKG_CONFIG} libbsd --cflags` >>$CONFIG -- echo 'LDLIBS +=' `${PKG_CONFIG} libbsd --libs` >> $CONFIG -- echo "no" -- else -- echo 'CFLAGS += -DNEED_STRLCPY' >>$CONFIG -- echo "yes" -- fi -+ echo 'CFLAGS += -DNEED_STRLCPY' >>$CONFIG -+ echo "yes" - fi - rm -f $TMPDIR/strtest.c $TMPDIR/strtest - }