diff --git a/alfred/Makefile b/alfred/Makefile index 8d651a5..09f62d4 100644 --- a/alfred/Makefile +++ b/alfred/Makefile @@ -11,9 +11,9 @@ include $(TOPDIR)/rules.mk # The latest alfred git hash in PKG_REV can be obtained from https://git.open-mesh.org/alfred.git # PKG_NAME:=alfred -PKG_VERSION:=2016.2 +PKG_VERSION:=2016.4 PKG_RELEASE:=0 -PKG_MD5SUM:=cc7d5b352942477033a4cafbed84152d +PKG_MD5SUM:=172501ca734ac584fa13f10dcfa708da PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://downloads.open-mesh.org/batman/releases/batman-adv-$(PKG_VERSION) @@ -28,7 +28,7 @@ define Package/alfred SECTION:=net CATEGORY:=Network TITLE:=A.L.F.R.E.D. - Almighty Lightweight Fact Remote Exchange Daemon - DEPENDS:= +libc @IPV6 +librt \ + DEPENDS:= +libc @IPV6 +libnl-tiny +librt \ +ALFRED_NEEDS_lua:lua \ +ALFRED_NEEDS_libgps:libgps endef @@ -60,7 +60,9 @@ endef MAKE_ALFRED_FLAGS=\ CONFIG_ALFRED_VIS=$(if $(CONFIG_PACKAGE_ALFRED_VIS),y,n) \ CONFIG_ALFRED_GPSD=$(if $(CONFIG_PACKAGE_ALFRED_GPSD),y,n) \ - CONFIG_ALFRED_CAPABILITIES=n + CONFIG_ALFRED_CAPABILITIES=n \ + LIBNL_NAME="libnl-tiny" \ + LIBNL_GENL_NAME="libnl-tiny" TARGET_CFLAGS += -ffunction-sections -fdata-sections -flto TARGET_LDFLAGS += -Wl,--gc-sections -fuse-linker-plugin diff --git a/batctl/Makefile b/batctl/Makefile index 174b18e..7ae81b5 100644 --- a/batctl/Makefile +++ b/batctl/Makefile @@ -9,9 +9,9 @@ include $(TOPDIR)/rules.mk PKG_NAME:=batctl -PKG_VERSION:=2016.2 +PKG_VERSION:=2016.4 PKG_RELEASE:=0 -PKG_MD5SUM:=50f42d06611afae58ccfcde502f94c1a +PKG_MD5SUM:=0112f35b2a48d32f23a17a6f45348e63 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://downloads.open-mesh.org/batman/releases/batman-adv-$(PKG_VERSION) @@ -55,7 +55,8 @@ MAKE_BATCTL_ENV += \ CPPFLAGS="$(TARGET_CPPFLAGS)" \ CFLAGS="$(TARGET_CFLAGS)" \ LDFLAGS="$(TARGET_LDFLAGS)" \ - LIBNL_NAME="libnl-tiny" + LIBNL_NAME="libnl-tiny" \ + LIBNL_GENL_NAME="libnl-tiny" MAKE_BATCTL_ARGS += \ REVISION="$(PKG_BATCTL_SHORTREV)" \ diff --git a/batman-adv/Config.in b/batman-adv/Config.in index 48092e7..8c75f31 100644 --- a/batman-adv/Config.in +++ b/batman-adv/Config.in @@ -14,6 +14,11 @@ config KMOD_BATMAN_ADV_DAT depends on PACKAGE_kmod-batman-adv default y +config KMOD_BATMAN_ADV_DEBUGFS + bool "enable debugfs support" + depends on PACKAGE_kmod-batman-adv + default y + config KMOD_BATMAN_ADV_MCAST bool "enable multicast transmission optimization" depends on PACKAGE_kmod-batman-adv diff --git a/batman-adv/Makefile b/batman-adv/Makefile index c45cbb4..23b2f74 100644 --- a/batman-adv/Makefile +++ b/batman-adv/Makefile @@ -10,9 +10,9 @@ include $(TOPDIR)/rules.mk PKG_NAME:=batman-adv -PKG_VERSION:=2016.2 -PKG_RELEASE:=1 -PKG_MD5SUM:=dd1ab664475902fc3dbf34998bbe5a90 +PKG_VERSION:=2016.4 +PKG_RELEASE:=0 +PKG_MD5SUM:=1ed28d02ad86050d1518023e354737b6 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://downloads.open-mesh.org/batman/releases/batman-adv-$(PKG_VERSION) @@ -50,6 +50,7 @@ endef PKG_EXTRA_KCONFIG:= \ CONFIG_BATMAN_ADV=m \ CONFIG_BATMAN_ADV_DEBUG=$(if $(CONFIG_KMOD_BATMAN_ADV_DEBUG_LOG),y,n) \ + CONFIG_BATMAN_ADV_DEBUGFS=$(if $(CONFIG_KMOD_BATMAN_ADV_DEBUGFS),y,n) \ CONFIG_BATMAN_ADV_BLA=$(if $(CONFIG_KMOD_BATMAN_ADV_BLA),y,n) \ CONFIG_BATMAN_ADV_DAT=$(if $(CONFIG_KMOD_BATMAN_ADV_DAT),y,n) \ CONFIG_BATMAN_ADV_MCAST=$(if $(CONFIG_KMOD_BATMAN_ADV_MCAST),y,n) \ @@ -62,15 +63,22 @@ PKG_EXTRA_CFLAGS:= \ NOSTDINC_FLAGS = \ -I$(PKG_BUILD_DIR)/net/batman-adv \ - -I$(STAGING_DIR)/usr/include/mac80211-backport/uapi \ -I$(STAGING_DIR)/usr/include/mac80211-backport \ - -I$(STAGING_DIR)/usr/include/mac80211/uapi \ + -I$(STAGING_DIR)/usr/include/mac80211-backport/uapi \ -I$(STAGING_DIR)/usr/include/mac80211 \ + -I$(STAGING_DIR)/usr/include/mac80211/uapi \ + -I$(PKG_BUILD_DIR)/include/ \ -include backport/backport.h \ -include $(PKG_BUILD_DIR)/compat-hacks.h +COMPAT_SOURCES = \ + $(if $(CONFIG_KMOD_BATMAN_ADV_MCAST),../../compat-sources/net/core/skbuff.o,) \ + $(if $(CONFIG_KMOD_BATMAN_ADV_MCAST),../../compat-sources/net/ipv4/igmp.o,) \ + $(if $(CONFIG_KMOD_BATMAN_ADV_MCAST),../../compat-sources/net/ipv6/mcast_snoop.o,) \ + define Build/Compile - +$(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \ + +env "batman-adv-y=$(COMPAT_SOURCES)" \ + $(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \ ARCH="$(LINUX_KARCH)" \ CROSS_COMPILE="$(TARGET_CROSS)" \ SUBDIRS="$(PKG_BUILD_DIR)/net/batman-adv" \ @@ -83,8 +91,6 @@ endef define Build/Prepare $(call Build/Prepare/Default) $(CP) ./files/compat-hacks.h $(PKG_BUILD_DIR)/ - $(SED) '/#define _NET_BATMAN_ADV_MAIN_H_/a\#undef CONFIG_MODULE_STRIPPED' \ - $(PKG_BUILD_DIR)/net/batman-adv/main.h endef define Build/Clean diff --git a/batman-adv/files/compat-hacks.h b/batman-adv/files/compat-hacks.h index a910c2d..32903b5 100644 --- a/batman-adv/files/compat-hacks.h +++ b/batman-adv/files/compat-hacks.h @@ -1,5 +1,7 @@ /* Please avoid adding hacks here - instead add it to mac80211/backports.git */ +#undef CONFIG_MODULE_STRIPPED + #include /* LINUX_VERSION_CODE */ #include @@ -31,6 +33,17 @@ #endif /* < KERNEL_VERSION(4, 5, 0) */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0) + +struct sk_buff *skb_checksum_trimmed(struct sk_buff *skb, + unsigned int transport_len, + __sum16(*skb_chkf)(struct sk_buff *skb)); + +int ip_mc_check_igmp(struct sk_buff *skb, struct sk_buff **skb_trimmed); + +int ipv6_mc_check_mld(struct sk_buff *skb, struct sk_buff **skb_trimmed); + +#endif /* < KERNEL_VERSION(4, 2, 0) */ #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 3, 0) @@ -84,3 +97,93 @@ static inline void batadv_netif_trans_update(struct net_device *dev) } #endif /* < KERNEL_VERSION(4, 7, 0) */ + + +#include_next + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0) + +#include_next + +static inline bool batadv_nla_need_padding_for_64bit(struct sk_buff *skb); + +static inline int batadv_nla_align_64bit(struct sk_buff *skb, int padattr) +{ + if (batadv_nla_need_padding_for_64bit(skb) && + !nla_reserve(skb, padattr, 0)) + return -EMSGSIZE; + + return 0; +} + +static inline struct nlattr *batadv__nla_reserve_64bit(struct sk_buff *skb, + int attrtype, + int attrlen, int padattr) +{ + if (batadv_nla_need_padding_for_64bit(skb)) + batadv_nla_align_64bit(skb, padattr); + + return __nla_reserve(skb, attrtype, attrlen); +} + +static inline void batadv__nla_put_64bit(struct sk_buff *skb, int attrtype, + int attrlen, const void *data, + int padattr) +{ + struct nlattr *nla; + + nla = batadv__nla_reserve_64bit(skb, attrtype, attrlen, padattr); + memcpy(nla_data(nla), data, attrlen); +} + +static inline bool batadv_nla_need_padding_for_64bit(struct sk_buff *skb) +{ +#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS + /* The nlattr header is 4 bytes in size, that's why we test + * if the skb->data _is_ aligned. A NOP attribute, plus + * nlattr header for next attribute, will make nla_data() + * 8-byte aligned. + */ + if (IS_ALIGNED((unsigned long)skb_tail_pointer(skb), 8)) + return true; +#endif + return false; +} + +static inline int batadv_nla_total_size_64bit(int payload) +{ + return NLA_ALIGN(nla_attr_size(payload)) +#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS + + NLA_ALIGN(nla_attr_size(0)) +#endif + ; +} + +static inline int batadv_nla_put_64bit(struct sk_buff *skb, int attrtype, + int attrlen, const void *data, + int padattr) +{ + size_t len; + + if (batadv_nla_need_padding_for_64bit(skb)) + len = batadv_nla_total_size_64bit(attrlen); + else + len = nla_total_size(attrlen); + if (unlikely(skb_tailroom(skb) < len)) + return -EMSGSIZE; + + batadv__nla_put_64bit(skb, attrtype, attrlen, data, padattr); + return 0; +} + +#define nla_put_u64_64bit(_skb, _attrtype, _value, _padattr) \ + batadv_nla_put_u64_64bit(_skb, _attrtype, _value, _padattr) +static inline int batadv_nla_put_u64_64bit(struct sk_buff *skb, int attrtype, + u64 value, int padattr) +{ + return batadv_nla_put_64bit(skb, attrtype, sizeof(u64), &value, + padattr); +} + +#endif /* < KERNEL_VERSION(4, 7, 0) */ + diff --git a/batman-adv/patches/0001-batman-adv-Avoid-nullptr-dereference-in-bla-after-vl.patch b/batman-adv/patches/0001-batman-adv-Avoid-nullptr-dereference-in-bla-after-vl.patch deleted file mode 100644 index 49c0637..0000000 --- a/batman-adv/patches/0001-batman-adv-Avoid-nullptr-dereference-in-bla-after-vl.patch +++ /dev/null @@ -1,35 +0,0 @@ -From: Sven Eckelmann -Date: Sat, 2 Jul 2016 09:52:13 +0200 -Subject: [PATCH] batman-adv: Avoid nullptr dereference in bla after vlan_insert_tag - -vlan_insert_tag can return NULL on errors. The bridge loop avoidance code -therefore has to check the return value of vlan_insert_tag for NULL before -it can safely operate on this pointer. - -Fixes: a9ce0dc43e2c ("batman-adv: add basic bridge loop avoidance code") -Signed-off-by: Sven Eckelmann -Signed-off-by: Marek Lindner - -Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/e4cffba4d3353ea15287abbfbdd65208aa62c156 ---- - net/batman-adv/bridge_loop_avoidance.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c -index 748a9ea..7129780 100644 ---- a/net/batman-adv/bridge_loop_avoidance.c -+++ b/net/batman-adv/bridge_loop_avoidance.c -@@ -418,9 +418,12 @@ static void batadv_bla_send_claim(struct batadv_priv *bat_priv, u8 *mac, - break; - } - -- if (vid & BATADV_VLAN_HAS_TAG) -+ if (vid & BATADV_VLAN_HAS_TAG) { - skb = vlan_insert_tag(skb, htons(ETH_P_8021Q), - vid & VLAN_VID_MASK); -+ if (!skb) -+ goto out; -+ } - - skb_reset_mac_header(skb); - skb->protocol = eth_type_trans(skb, soft_iface); diff --git a/batman-adv/patches/0002-batman-adv-Avoid-nullptr-dereference-in-dat-after-vl.patch b/batman-adv/patches/0002-batman-adv-Avoid-nullptr-dereference-in-dat-after-vl.patch deleted file mode 100644 index e5e72d7..0000000 --- a/batman-adv/patches/0002-batman-adv-Avoid-nullptr-dereference-in-dat-after-vl.patch +++ /dev/null @@ -1,49 +0,0 @@ -From: Sven Eckelmann -Date: Sat, 2 Jul 2016 09:52:14 +0200 -Subject: [PATCH] batman-adv: Avoid nullptr dereference in dat after vlan_insert_tag - -vlan_insert_tag can return NULL on errors. The distributed arp table code -therefore has to check the return value of vlan_insert_tag for NULL before -it can safely operate on this pointer. - -Fixes: 53c6c262a581 ("batman-adv: tag locally generated ARP reply if needed") -Signed-off-by: Sven Eckelmann -Signed-off-by: Marek Lindner - -Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/898382d11fa1f737cd4f7033db1088c601fd11ed ---- - net/batman-adv/distributed-arp-table.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/net/batman-adv/distributed-arp-table.c b/net/batman-adv/distributed-arp-table.c -index 278800a..aee3b39 100644 ---- a/net/batman-adv/distributed-arp-table.c -+++ b/net/batman-adv/distributed-arp-table.c -@@ -1009,9 +1009,12 @@ bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv, - if (!skb_new) - goto out; - -- if (vid & BATADV_VLAN_HAS_TAG) -+ if (vid & BATADV_VLAN_HAS_TAG) { - skb_new = vlan_insert_tag(skb_new, htons(ETH_P_8021Q), - vid & VLAN_VID_MASK); -+ if (!skb_new) -+ goto out; -+ } - - skb_reset_mac_header(skb_new); - skb_new->protocol = eth_type_trans(skb_new, -@@ -1089,9 +1092,12 @@ bool batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv, - */ - skb_reset_mac_header(skb_new); - -- if (vid & BATADV_VLAN_HAS_TAG) -+ if (vid & BATADV_VLAN_HAS_TAG) { - skb_new = vlan_insert_tag(skb_new, htons(ETH_P_8021Q), - vid & VLAN_VID_MASK); -+ if (!skb_new) -+ goto out; -+ } - - /* To preserve backwards compatibility, the node has choose the outgoing - * format based on the incoming request packet type. The assumption is diff --git a/batman-adv/patches/0003-batman-adv-Avoid-tt_req_node-list-put-for-unhashed-e.patch b/batman-adv/patches/0003-batman-adv-Avoid-tt_req_node-list-put-for-unhashed-e.patch deleted file mode 100644 index 60d4e12..0000000 --- a/batman-adv/patches/0003-batman-adv-Avoid-tt_req_node-list-put-for-unhashed-e.patch +++ /dev/null @@ -1,41 +0,0 @@ -From: Sven Eckelmann -Date: Fri, 24 Jun 2016 21:43:32 +0200 -Subject: [PATCH] batman-adv: Avoid tt_req_node list put for unhashed entry - -It can happen that a tt_req_node list entry was already removed from -tt.req_list when batadv_send_tt_request reaches the end of the function. -The reference counter was already reduced by 1 for the list entry and thus -the reference counter is not allowed to be reduced again. Otherwise, the -entry is freed too early and the next batadv_tt_req_node_put in this -function will operate on freed memory. - -Fixes: cea194d90b11 ("batman-adv: improved client announcement mechanism") -Signed-off-by: Sven Eckelmann -Signed-off-by: Marek Lindner - -Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/03ecc9f957b837c755f09251c5f684996521e487 ---- - net/batman-adv/translation-table.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - -diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c -index d033a05..57ec87f 100644 ---- a/net/batman-adv/translation-table.c -+++ b/net/batman-adv/translation-table.c -@@ -2639,11 +2639,13 @@ static bool batadv_send_tt_request(struct batadv_priv *bat_priv, - out: - if (primary_if) - batadv_hardif_put(primary_if); -+ - if (ret && tt_req_node) { - spin_lock_bh(&bat_priv->tt.req_list_lock); -- /* hlist_del_init() verifies tt_req_node still is in the list */ -- hlist_del_init(&tt_req_node->list); -- batadv_tt_req_node_put(tt_req_node); -+ if (!hlist_unhashed(&tt_req_node->list)) { -+ hlist_del_init(&tt_req_node->list); -+ batadv_tt_req_node_put(tt_req_node); -+ } - spin_unlock_bh(&bat_priv->tt.req_list_lock); - } - diff --git a/batman-adv/patches/0004-batman-adv-Fix-orig_node_vlan-leak-on-orig_node_rele.patch b/batman-adv/patches/0004-batman-adv-Fix-orig_node_vlan-leak-on-orig_node_rele.patch deleted file mode 100644 index 7af3162..0000000 --- a/batman-adv/patches/0004-batman-adv-Fix-orig_node_vlan-leak-on-orig_node_rele.patch +++ /dev/null @@ -1,43 +0,0 @@ -From: Sven Eckelmann -Date: Thu, 30 Jun 2016 20:10:46 +0200 -Subject: [PATCH] batman-adv: Fix orig_node_vlan leak on orig_node_release - -batadv_orig_node_new uses batadv_orig_node_vlan_new to allocate a new -batadv_orig_node_vlan and add it to batadv_orig_node::vlan_list. References -to this list have also to be cleaned when the batadv_orig_node is removed. - -Fixes: 21a57f6e7a3b ("batman-adv: make the TT CRC logic VLAN specific") -Signed-off-by: Sven Eckelmann -Signed-off-by: Marek Lindner - -Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/719afd254e812c7ff8688ce79bebb7324ec438d6 ---- - net/batman-adv/originator.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c -index 7f51bc2..fe2fcda 100644 ---- a/net/batman-adv/originator.c -+++ b/net/batman-adv/originator.c -@@ -765,6 +765,7 @@ static void batadv_orig_node_release(struct kref *ref) - struct batadv_neigh_node *neigh_node; - struct batadv_orig_node *orig_node; - struct batadv_orig_ifinfo *orig_ifinfo; -+ struct batadv_orig_node_vlan *vlan; - - orig_node = container_of(ref, struct batadv_orig_node, refcount); - -@@ -784,6 +785,13 @@ static void batadv_orig_node_release(struct kref *ref) - } - spin_unlock_bh(&orig_node->neigh_list_lock); - -+ spin_lock_bh(&orig_node->vlan_list_lock); -+ hlist_for_each_entry_safe(vlan, node_tmp, &orig_node->vlan_list, list) { -+ hlist_del_rcu(&vlan->list); -+ batadv_orig_node_vlan_put(vlan); -+ } -+ spin_unlock_bh(&orig_node->vlan_list_lock); -+ - /* Free nc_nodes */ - batadv_nc_purge_orig(orig_node->bat_priv, orig_node, NULL); - diff --git a/batman-adv/patches/0005-batman-adv-Fix-non-atomic-bla_claim-backbone_gw-acce.patch b/batman-adv/patches/0005-batman-adv-Fix-non-atomic-bla_claim-backbone_gw-acce.patch deleted file mode 100644 index 5e0afdd..0000000 --- a/batman-adv/patches/0005-batman-adv-Fix-non-atomic-bla_claim-backbone_gw-acce.patch +++ /dev/null @@ -1,291 +0,0 @@ -From: Sven Eckelmann -Date: Fri, 1 Jul 2016 15:49:43 +0200 -Subject: [PATCH] batman-adv: Fix non-atomic bla_claim::backbone_gw access - -The pointer batadv_bla_claim::backbone_gw can be changed at any time. -Therefore, access to it must be protected to ensure that two function -accessing the same backbone_gw are actually accessing the same. This is -especially important when the crc_lock is used or when the backbone_gw of a -claim is exchanged. - -Not doing so leads to invalid memory access and/or reference leaks. - -Fixes: a9ce0dc43e2c ("batman-adv: add basic bridge loop avoidance code") -Fixes: b307e72d119f ("batman-adv: lock crc access in bridge loop avoidance") -Signed-off-by: Sven Eckelmann -Acked-by: Simon Wunderlich -Signed-off-by: Marek Lindner - -Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/e401297e3a393896e9b07bef8d6e2df203b60d43 ---- - net/batman-adv/bridge_loop_avoidance.c | 111 ++++++++++++++++++++++++++------- - net/batman-adv/types.h | 2 + - 2 files changed, 90 insertions(+), 23 deletions(-) - -diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c -index 7129780..825a5cd 100644 ---- a/net/batman-adv/bridge_loop_avoidance.c -+++ b/net/batman-adv/bridge_loop_avoidance.c -@@ -177,10 +177,21 @@ static void batadv_backbone_gw_put(struct batadv_bla_backbone_gw *backbone_gw) - static void batadv_claim_release(struct kref *ref) - { - struct batadv_bla_claim *claim; -+ struct batadv_bla_backbone_gw *old_backbone_gw; - - claim = container_of(ref, struct batadv_bla_claim, refcount); - -- batadv_backbone_gw_put(claim->backbone_gw); -+ spin_lock_bh(&claim->backbone_lock); -+ old_backbone_gw = claim->backbone_gw; -+ claim->backbone_gw = NULL; -+ spin_unlock_bh(&claim->backbone_lock); -+ -+ spin_lock_bh(&old_backbone_gw->crc_lock); -+ old_backbone_gw->crc ^= crc16(0, claim->addr, ETH_ALEN); -+ spin_unlock_bh(&old_backbone_gw->crc_lock); -+ -+ batadv_backbone_gw_put(old_backbone_gw); -+ - kfree_rcu(claim, rcu); - } - -@@ -677,8 +688,10 @@ static void batadv_bla_add_claim(struct batadv_priv *bat_priv, - const u8 *mac, const unsigned short vid, - struct batadv_bla_backbone_gw *backbone_gw) - { -+ struct batadv_bla_backbone_gw *old_backbone_gw; - struct batadv_bla_claim *claim; - struct batadv_bla_claim search_claim; -+ bool remove_crc = false; - int hash_added; - - ether_addr_copy(search_claim.addr, mac); -@@ -692,8 +705,10 @@ static void batadv_bla_add_claim(struct batadv_priv *bat_priv, - return; - - ether_addr_copy(claim->addr, mac); -+ spin_lock_init(&claim->backbone_lock); - claim->vid = vid; - claim->lasttime = jiffies; -+ kref_get(&backbone_gw->refcount); - claim->backbone_gw = backbone_gw; - - kref_init(&claim->refcount); -@@ -721,15 +736,26 @@ static void batadv_bla_add_claim(struct batadv_priv *bat_priv, - "bla_add_claim(): changing ownership for %pM, vid %d\n", - mac, BATADV_PRINT_VID(vid)); - -- spin_lock_bh(&claim->backbone_gw->crc_lock); -- claim->backbone_gw->crc ^= crc16(0, claim->addr, ETH_ALEN); -- spin_unlock_bh(&claim->backbone_gw->crc_lock); -- batadv_backbone_gw_put(claim->backbone_gw); -+ remove_crc = true; - } -- /* set (new) backbone gw */ -+ -+ /* replace backbone_gw atomically and adjust reference counters */ -+ spin_lock_bh(&claim->backbone_lock); -+ old_backbone_gw = claim->backbone_gw; - kref_get(&backbone_gw->refcount); - claim->backbone_gw = backbone_gw; -+ spin_unlock_bh(&claim->backbone_lock); - -+ if (remove_crc) { -+ /* remove claim address from old backbone_gw */ -+ spin_lock_bh(&old_backbone_gw->crc_lock); -+ old_backbone_gw->crc ^= crc16(0, claim->addr, ETH_ALEN); -+ spin_unlock_bh(&old_backbone_gw->crc_lock); -+ } -+ -+ batadv_backbone_gw_put(old_backbone_gw); -+ -+ /* add claim address to new backbone_gw */ - spin_lock_bh(&backbone_gw->crc_lock); - backbone_gw->crc ^= crc16(0, claim->addr, ETH_ALEN); - spin_unlock_bh(&backbone_gw->crc_lock); -@@ -740,6 +766,26 @@ claim_free_ref: - } - - /** -+ * batadv_bla_claim_get_backbone_gw - Get valid reference for backbone_gw of -+ * claim -+ * @claim: claim whose backbone_gw should be returned -+ * -+ * Return: valid reference to claim::backbone_gw -+ */ -+static struct batadv_bla_backbone_gw * -+batadv_bla_claim_get_backbone_gw(struct batadv_bla_claim *claim) -+{ -+ struct batadv_bla_backbone_gw *backbone_gw; -+ -+ spin_lock_bh(&claim->backbone_lock); -+ backbone_gw = claim->backbone_gw; -+ kref_get(&backbone_gw->refcount); -+ spin_unlock_bh(&claim->backbone_lock); -+ -+ return backbone_gw; -+} -+ -+/** - * batadv_bla_del_claim - delete a claim from the claim hash - * @bat_priv: the bat priv with all the soft interface information - * @mac: mac address of the claim to be removed -@@ -763,10 +809,6 @@ static void batadv_bla_del_claim(struct batadv_priv *bat_priv, - batadv_choose_claim, claim); - batadv_claim_put(claim); /* reference from the hash is gone */ - -- spin_lock_bh(&claim->backbone_gw->crc_lock); -- claim->backbone_gw->crc ^= crc16(0, claim->addr, ETH_ALEN); -- spin_unlock_bh(&claim->backbone_gw->crc_lock); -- - /* don't need the reference from hash_find() anymore */ - batadv_claim_put(claim); - } -@@ -1219,6 +1261,7 @@ static void batadv_bla_purge_claims(struct batadv_priv *bat_priv, - struct batadv_hard_iface *primary_if, - int now) - { -+ struct batadv_bla_backbone_gw *backbone_gw; - struct batadv_bla_claim *claim; - struct hlist_head *head; - struct batadv_hashtable *hash; -@@ -1233,14 +1276,17 @@ static void batadv_bla_purge_claims(struct batadv_priv *bat_priv, - - rcu_read_lock(); - hlist_for_each_entry_rcu(claim, head, hash_entry) { -+ backbone_gw = batadv_bla_claim_get_backbone_gw(claim); - if (now) - goto purge_now; -- if (!batadv_compare_eth(claim->backbone_gw->orig, -+ -+ if (!batadv_compare_eth(backbone_gw->orig, - primary_if->net_dev->dev_addr)) -- continue; -+ goto skip; -+ - if (!batadv_has_timed_out(claim->lasttime, - BATADV_BLA_CLAIM_TIMEOUT)) -- continue; -+ goto skip; - - batadv_dbg(BATADV_DBG_BLA, bat_priv, - "bla_purge_claims(): %pM, vid %d, time out\n", -@@ -1248,8 +1294,10 @@ static void batadv_bla_purge_claims(struct batadv_priv *bat_priv, - - purge_now: - batadv_handle_unclaim(bat_priv, primary_if, -- claim->backbone_gw->orig, -+ backbone_gw->orig, - claim->addr, claim->vid); -+skip: -+ batadv_backbone_gw_put(backbone_gw); - } - rcu_read_unlock(); - } -@@ -1760,9 +1808,11 @@ batadv_bla_loopdetect_check(struct batadv_priv *bat_priv, struct sk_buff *skb, - bool batadv_bla_rx(struct batadv_priv *bat_priv, struct sk_buff *skb, - unsigned short vid, bool is_bcast) - { -+ struct batadv_bla_backbone_gw *backbone_gw; - struct ethhdr *ethhdr; - struct batadv_bla_claim search_claim, *claim = NULL; - struct batadv_hard_iface *primary_if; -+ bool own_claim; - bool ret; - - ethhdr = eth_hdr(skb); -@@ -1797,8 +1847,12 @@ bool batadv_bla_rx(struct batadv_priv *bat_priv, struct sk_buff *skb, - } - - /* if it is our own claim ... */ -- if (batadv_compare_eth(claim->backbone_gw->orig, -- primary_if->net_dev->dev_addr)) { -+ backbone_gw = batadv_bla_claim_get_backbone_gw(claim); -+ own_claim = batadv_compare_eth(backbone_gw->orig, -+ primary_if->net_dev->dev_addr); -+ batadv_backbone_gw_put(backbone_gw); -+ -+ if (own_claim) { - /* ... allow it in any case */ - claim->lasttime = jiffies; - goto allow; -@@ -1862,7 +1916,9 @@ bool batadv_bla_tx(struct batadv_priv *bat_priv, struct sk_buff *skb, - { - struct ethhdr *ethhdr; - struct batadv_bla_claim search_claim, *claim = NULL; -+ struct batadv_bla_backbone_gw *backbone_gw; - struct batadv_hard_iface *primary_if; -+ bool client_roamed; - bool ret = false; - - primary_if = batadv_primary_if_get_selected(bat_priv); -@@ -1892,8 +1948,12 @@ bool batadv_bla_tx(struct batadv_priv *bat_priv, struct sk_buff *skb, - goto allow; - - /* check if we are responsible. */ -- if (batadv_compare_eth(claim->backbone_gw->orig, -- primary_if->net_dev->dev_addr)) { -+ backbone_gw = batadv_bla_claim_get_backbone_gw(claim); -+ client_roamed = batadv_compare_eth(backbone_gw->orig, -+ primary_if->net_dev->dev_addr); -+ batadv_backbone_gw_put(backbone_gw); -+ -+ if (client_roamed) { - /* if yes, the client has roamed and we have - * to unclaim it. - */ -@@ -1941,6 +2001,7 @@ int batadv_bla_claim_table_seq_print_text(struct seq_file *seq, void *offset) - struct net_device *net_dev = (struct net_device *)seq->private; - struct batadv_priv *bat_priv = netdev_priv(net_dev); - struct batadv_hashtable *hash = bat_priv->bla.claim_hash; -+ struct batadv_bla_backbone_gw *backbone_gw; - struct batadv_bla_claim *claim; - struct batadv_hard_iface *primary_if; - struct hlist_head *head; -@@ -1965,17 +2026,21 @@ int batadv_bla_claim_table_seq_print_text(struct seq_file *seq, void *offset) - - rcu_read_lock(); - hlist_for_each_entry_rcu(claim, head, hash_entry) { -- is_own = batadv_compare_eth(claim->backbone_gw->orig, -+ backbone_gw = batadv_bla_claim_get_backbone_gw(claim); -+ -+ is_own = batadv_compare_eth(backbone_gw->orig, - primary_addr); - -- spin_lock_bh(&claim->backbone_gw->crc_lock); -- backbone_crc = claim->backbone_gw->crc; -- spin_unlock_bh(&claim->backbone_gw->crc_lock); -+ spin_lock_bh(&backbone_gw->crc_lock); -+ backbone_crc = backbone_gw->crc; -+ spin_unlock_bh(&backbone_gw->crc_lock); - seq_printf(seq, " * %pM on %5d by %pM [%c] (%#.4x)\n", - claim->addr, BATADV_PRINT_VID(claim->vid), -- claim->backbone_gw->orig, -+ backbone_gw->orig, - (is_own ? 'x' : ' '), - backbone_crc); -+ -+ batadv_backbone_gw_put(backbone_gw); - } - rcu_read_unlock(); - } -diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h -index ba846b0..0051222 100644 ---- a/net/batman-adv/types.h -+++ b/net/batman-adv/types.h -@@ -1042,6 +1042,7 @@ struct batadv_bla_backbone_gw { - * @addr: mac address of claimed non-mesh client - * @vid: vlan id this client was detected on - * @backbone_gw: pointer to backbone gw claiming this client -+ * @backbone_lock: lock protecting backbone_gw pointer - * @lasttime: last time we heard of claim (locals only) - * @hash_entry: hlist node for batadv_priv_bla::claim_hash - * @refcount: number of contexts the object is used -@@ -1051,6 +1052,7 @@ struct batadv_bla_claim { - u8 addr[ETH_ALEN]; - unsigned short vid; - struct batadv_bla_backbone_gw *backbone_gw; -+ spinlock_t backbone_lock; /* protects backbone_gw */ - unsigned long lasttime; - struct hlist_node hash_entry; - struct rcu_head rcu; diff --git a/batman-adv/patches/0006-batman-adv-Fix-reference-leak-in-batadv_find_router.patch b/batman-adv/patches/0006-batman-adv-Fix-reference-leak-in-batadv_find_router.patch deleted file mode 100644 index 1eeea6e..0000000 --- a/batman-adv/patches/0006-batman-adv-Fix-reference-leak-in-batadv_find_router.patch +++ /dev/null @@ -1,120 +0,0 @@ -From: Sven Eckelmann -Date: Thu, 30 Jun 2016 20:11:34 +0200 -Subject: [PATCH] batman-adv: Fix reference leak in batadv_find_router - -The replacement of last_bonding_candidate in batadv_orig_node has to be an -atomic operation. Otherwise it is possible that the reference counter of a -batadv_orig_ifinfo is reduced which was no longer the -last_bonding_candidate when the new candidate is added. This can either -lead to an invalid memory access or to reference leaks which make it -impossible to an interface which was added to batman-adv. - -Fixes: 797edd9e87ac ("batman-adv: add bonding again") -Signed-off-by: Sven Eckelmann -Acked-by: Simon Wunderlich -Signed-off-by: Marek Lindner - -Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/6ecc711374afd93ee0c2216b38ae52d3ce680c3f ---- - net/batman-adv/routing.c | 52 ++++++++++++++++++++++++++++++++++++------------ - net/batman-adv/types.h | 4 +++- - 2 files changed, 42 insertions(+), 14 deletions(-) - -diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c -index 6c2901a..bfac086 100644 ---- a/net/batman-adv/routing.c -+++ b/net/batman-adv/routing.c -@@ -456,6 +456,29 @@ static int batadv_check_unicast_packet(struct batadv_priv *bat_priv, - } - - /** -+ * batadv_last_bonding_replace - Replace last_bonding_candidate of orig_node -+ * @orig_node: originator node whose bonding candidates should be replaced -+ * @new_candidate: new bonding candidate or NULL -+ */ -+static void -+batadv_last_bonding_replace(struct batadv_orig_node *orig_node, -+ struct batadv_orig_ifinfo *new_candidate) -+{ -+ struct batadv_orig_ifinfo *old_candidate; -+ -+ spin_lock_bh(&orig_node->neigh_list_lock); -+ old_candidate = orig_node->last_bonding_candidate; -+ -+ if (new_candidate) -+ kref_get(&new_candidate->refcount); -+ orig_node->last_bonding_candidate = new_candidate; -+ spin_unlock_bh(&orig_node->neigh_list_lock); -+ -+ if (old_candidate) -+ batadv_orig_ifinfo_put(old_candidate); -+} -+ -+/** - * batadv_find_router - find a suitable router for this originator - * @bat_priv: the bat priv with all the soft interface information - * @orig_node: the destination node -@@ -562,10 +585,6 @@ next: - } - rcu_read_unlock(); - -- /* last_bonding_candidate is reset below, remove the old reference. */ -- if (orig_node->last_bonding_candidate) -- batadv_orig_ifinfo_put(orig_node->last_bonding_candidate); -- - /* After finding candidates, handle the three cases: - * 1) there is a next candidate, use that - * 2) there is no next candidate, use the first of the list -@@ -574,21 +593,28 @@ next: - if (next_candidate) { - batadv_neigh_node_put(router); - -- /* remove references to first candidate, we don't need it. */ -- if (first_candidate) { -- batadv_neigh_node_put(first_candidate_router); -- batadv_orig_ifinfo_put(first_candidate); -- } -+ kref_get(&next_candidate_router->refcount); - router = next_candidate_router; -- orig_node->last_bonding_candidate = next_candidate; -+ batadv_last_bonding_replace(orig_node, next_candidate); - } else if (first_candidate) { - batadv_neigh_node_put(router); - -- /* refcounting has already been done in the loop above. */ -+ kref_get(&first_candidate_router->refcount); - router = first_candidate_router; -- orig_node->last_bonding_candidate = first_candidate; -+ batadv_last_bonding_replace(orig_node, first_candidate); - } else { -- orig_node->last_bonding_candidate = NULL; -+ batadv_last_bonding_replace(orig_node, NULL); -+ } -+ -+ /* cleanup of candidates */ -+ if (first_candidate) { -+ batadv_neigh_node_put(first_candidate_router); -+ batadv_orig_ifinfo_put(first_candidate); -+ } -+ -+ if (next_candidate) { -+ batadv_neigh_node_put(next_candidate_router); -+ batadv_orig_ifinfo_put(next_candidate); - } - - return router; -diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h -index 0051222..74d865a 100644 ---- a/net/batman-adv/types.h -+++ b/net/batman-adv/types.h -@@ -330,7 +330,9 @@ struct batadv_orig_node { - DECLARE_BITMAP(bcast_bits, BATADV_TQ_LOCAL_WINDOW_SIZE); - u32 last_bcast_seqno; - struct hlist_head neigh_list; -- /* neigh_list_lock protects: neigh_list and router */ -+ /* neigh_list_lock protects: neigh_list, ifinfo_list, -+ * last_bonding_candidate and router -+ */ - spinlock_t neigh_list_lock; - struct hlist_node hash_entry; - struct batadv_priv *bat_priv; diff --git a/batman-adv/patches/0007-batman-adv-Free-last_bonding_candidate-on-release-of.patch b/batman-adv/patches/0007-batman-adv-Free-last_bonding_candidate-on-release-of.patch deleted file mode 100644 index 9e548da..0000000 --- a/batman-adv/patches/0007-batman-adv-Free-last_bonding_candidate-on-release-of.patch +++ /dev/null @@ -1,45 +0,0 @@ -From: Sven Eckelmann -Date: Thu, 30 Jun 2016 21:41:13 +0200 -Subject: [PATCH] batman-adv: Free last_bonding_candidate on release of orig_node - -The orig_ifinfo reference counter for last_bonding_candidate in -batadv_orig_node has to be reduced when an originator node is released. -Otherwise the orig_ifinfo is leaked and the reference counter the netdevice -is not reduced correctly. - -Fixes: 797edd9e87ac ("batman-adv: add bonding again") -Signed-off-by: Sven Eckelmann -Signed-off-by: Marek Lindner - -Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/20df5c53865a90095099f0af80536b8abfea303b ---- - net/batman-adv/originator.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c -index fe2fcda..ab8c4f9 100644 ---- a/net/batman-adv/originator.c -+++ b/net/batman-adv/originator.c -@@ -766,6 +766,7 @@ static void batadv_orig_node_release(struct kref *ref) - struct batadv_orig_node *orig_node; - struct batadv_orig_ifinfo *orig_ifinfo; - struct batadv_orig_node_vlan *vlan; -+ struct batadv_orig_ifinfo *last_candidate; - - orig_node = container_of(ref, struct batadv_orig_node, refcount); - -@@ -783,8 +784,14 @@ static void batadv_orig_node_release(struct kref *ref) - hlist_del_rcu(&orig_ifinfo->list); - batadv_orig_ifinfo_put(orig_ifinfo); - } -+ -+ last_candidate = orig_node->last_bonding_candidate; -+ orig_node->last_bonding_candidate = NULL; - spin_unlock_bh(&orig_node->neigh_list_lock); - -+ if (last_candidate) -+ batadv_orig_ifinfo_put(last_candidate); -+ - spin_lock_bh(&orig_node->vlan_list_lock); - hlist_for_each_entry_safe(vlan, node_tmp, &orig_node->vlan_list, list) { - hlist_del_rcu(&vlan->list); diff --git a/batman-adv/patches/0008-batman-adv-Fix-speedy-join-in-gateway-client-mode.patch b/batman-adv/patches/0008-batman-adv-Fix-speedy-join-in-gateway-client-mode.patch deleted file mode 100644 index e63b782..0000000 --- a/batman-adv/patches/0008-batman-adv-Fix-speedy-join-in-gateway-client-mode.patch +++ /dev/null @@ -1,35 +0,0 @@ -From: Sven Eckelmann -Date: Sun, 12 Jun 2016 10:43:19 +0200 -Subject: [PATCH] batman-adv: Fix speedy join in gateway client mode - -Speedy join only works when the received packet is either broadcast or an -4addr unicast packet. Thus packets converted from broadcast to unicast via -the gateway handling code have to be converted to 4addr packets to allow -the receiving gateway server to add the sender address as temporary entry -to the translation table. - -Not doing it will make the batman-adv gateway server drop the DHCP response -in many situations because it doesn't yet have the TT entry for the -destination of the DHCP response. - -Fixes: 9cbc67d9da47 ("batman-adv: change interface_rx to get orig node") -Signed-off-by: Sven Eckelmann ---- - net/batman-adv/send.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/net/batman-adv/send.c b/net/batman-adv/send.c -index f2f1256..0103976 100644 ---- a/net/batman-adv/send.c -+++ b/net/batman-adv/send.c -@@ -424,8 +424,8 @@ int batadv_send_skb_via_gw(struct batadv_priv *bat_priv, struct sk_buff *skb, - struct batadv_orig_node *orig_node; - - orig_node = batadv_gw_get_selected_orig(bat_priv); -- return batadv_send_skb_unicast(bat_priv, skb, BATADV_UNICAST, 0, -- orig_node, vid); -+ return batadv_send_skb_unicast(bat_priv, skb, BATADV_UNICAST_4ADDR, -+ BATADV_P_DATA, orig_node, vid); - } - - void batadv_schedule_bat_ogm(struct batadv_hard_iface *hard_iface) diff --git a/bird/Makefile b/bird/Makefile index be62460..e9c3ce0 100644 --- a/bird/Makefile +++ b/bird/Makefile @@ -7,12 +7,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=bird -PKG_VERSION:=1.6.0 +PKG_VERSION:=1.6.2 PKG_RELEASE:=1 PKG_SOURCE:=bird-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=ftp://bird.network.cz/pub/bird -PKG_MD5SUM:=4c92ec3548a2a120243879b6ef7046dd +PKG_MD5SUM:=36bc84db93ae7a2fe10194075331e1b9 PKG_BUILD_DEPENDS:=libncurses libreadline PKG_MAINTAINER:=Álvaro Fernández Rojas diff --git a/bird/patches/001-netlink-update-struct-msghdr.patch b/bird/patches/001-netlink-update-struct-msghdr.patch deleted file mode 100644 index 491e8f9..0000000 --- a/bird/patches/001-netlink-update-struct-msghdr.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 31e9e10144a6994773a04d94903fa3bdde6de91e Mon Sep 17 00:00:00 2001 -From: Stijn Tintel -Date: Tue, 10 May 2016 16:45:35 +0300 -Subject: [PATCH] netlink: update struct msghdr - -The netlink code assumes an order for the members of struct msghdr. -This breaks recvmsg and sendmsg with musl libc on mips64. Fix this by -using designated initializers instead. - -Signed-off-by: Stijn Tintel ---- - sysdep/linux/netlink.c | 14 ++++++++++++-- - 1 file changed, 12 insertions(+), 2 deletions(-) - -diff --git a/sysdep/linux/netlink.c b/sysdep/linux/netlink.c -index 1ffdff0..b42e7b6 100644 ---- a/sysdep/linux/netlink.c -+++ b/sysdep/linux/netlink.c -@@ -125,7 +125,12 @@ nl_get_reply(struct nl_sock *nl) - { - struct iovec iov = { nl->rx_buffer, NL_RX_SIZE }; - struct sockaddr_nl sa; -- struct msghdr m = { (struct sockaddr *) &sa, sizeof(sa), &iov, 1, NULL, 0, 0 }; -+ struct msghdr m = { -+ .msg_name = &sa, -+ .msg_namelen = sizeof(sa), -+ .msg_iov = &iov, -+ .msg_iovlen = 1, -+ }; - int x = recvmsg(nl->fd, &m, 0); - if (x < 0) - die("nl_get_reply: %m"); -@@ -1231,7 +1236,12 @@ nl_async_hook(sock *sk, int size UNUSED) - { - struct iovec iov = { nl_async_rx_buffer, NL_RX_SIZE }; - struct sockaddr_nl sa; -- struct msghdr m = { (struct sockaddr *) &sa, sizeof(sa), &iov, 1, NULL, 0, 0 }; -+ struct msghdr m = { -+ .msg_name = &sa, -+ .msg_namelen = sizeof(sa), -+ .msg_iov = &iov, -+ .msg_iovlen = 1, -+ }; - struct nlmsghdr *h; - int x; - uint len; --- -2.7.3 - diff --git a/miniupnpd/Makefile b/miniupnpd/Makefile index 97f0b6c..9a33bbe 100644 --- a/miniupnpd/Makefile +++ b/miniupnpd/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=miniupnpd PKG_VERSION:=2.0 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE_URL:=http://miniupnp.free.fr/files PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz diff --git a/miniupnpd/files/miniupnpd.hotplug b/miniupnpd/files/miniupnpd.hotplug index 65bc500..320437e 100644 --- a/miniupnpd/files/miniupnpd.hotplug +++ b/miniupnpd/files/miniupnpd.hotplug @@ -13,11 +13,9 @@ [ ! "$ACTION" = "ifup" ] && service_check /usr/sbin/miniupnpd && exit 0 -local iface -local ifname -local tmpconf="/var/etc/miniupnpd.conf" -local extiface=$(uci get upnpd.config.external_iface) -local extzone=$(uci get upnpd.config.external_zone) +tmpconf="/var/etc/miniupnpd.conf" +extiface=$(uci get upnpd.config.external_iface) +extzone=$(uci get upnpd.config.external_zone) . /lib/functions/network.sh diff --git a/miniupnpd/files/miniupnpd.init b/miniupnpd/files/miniupnpd.init index 79def5d..c7dc6a2 100644 --- a/miniupnpd/files/miniupnpd.init +++ b/miniupnpd/files/miniupnpd.init @@ -1,7 +1,7 @@ #!/bin/sh /etc/rc.common # Copyright (C) 2006-2014 OpenWrt.org -START=95 +START=94 STOP=15 SERVICE_USE_PID=1 diff --git a/oonf-dlep-proxy/Makefile b/oonf-dlep-proxy/Makefile index 8a952ef..2f36eaa 100644 --- a/oonf-dlep-proxy/Makefile +++ b/oonf-dlep-proxy/Makefile @@ -1,8 +1,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=oonf-dlep-proxy -PKG_VERSION:=0.12.2 -PKG_REV:=ea3e6e51f94b9b0642f84b44de35b6cab5f30b65 +PKG_VERSION:=0.13.0 +PKG_REV:=9f941b25e1ac806db9d41e9892a5cf361bfe98f5 PKG_RELEASE:=$(PKG_REV) PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 diff --git a/oonf-dlep-radio/Makefile b/oonf-dlep-radio/Makefile index 0e0f75e..ac1f19c 100644 --- a/oonf-dlep-radio/Makefile +++ b/oonf-dlep-radio/Makefile @@ -1,8 +1,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=oonf-dlep-radio -PKG_VERSION:=0.12.2 -PKG_REV:=ea3e6e51f94b9b0642f84b44de35b6cab5f30b65 +PKG_VERSION:=0.13.0 +PKG_REV:=9f941b25e1ac806db9d41e9892a5cf361bfe98f5 PKG_RELEASE:=$(PKG_REV) PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 diff --git a/oonf-olsrd2/Makefile b/oonf-olsrd2/Makefile index ccc1622..9b8e988 100644 --- a/oonf-olsrd2/Makefile +++ b/oonf-olsrd2/Makefile @@ -1,8 +1,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=oonf-olsrd2 -PKG_VERSION:=0.12.2 -PKG_REV:=ea3e6e51f94b9b0642f84b44de35b6cab5f30b65 +PKG_VERSION:=0.13.0 +PKG_REV:=9f941b25e1ac806db9d41e9892a5cf361bfe98f5 PKG_RELEASE:=$(PKG_REV) PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 diff --git a/quagga/Makefile b/quagga/Makefile index 67eedd6..f8963e0 100644 --- a/quagga/Makefile +++ b/quagga/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2006-2013 OpenWrt.org +# Copyright (C) 2006-2016 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -8,11 +8,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=quagga -PKG_VERSION:=0.99.22.4 -PKG_RELEASE:=2 -PKG_MD5SUM:=03ef24a448be47beba80efa2152f8a28 +PKG_VERSION:=1.1.0 +PKG_RELEASE:=1 +PKG_MD5SUM:=daa303871e07ea5856aae6fd79e89722 -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://download.savannah.gnu.org/releases/quagga/ PKG_CONFIG_DEPENDS:= \ CONFIG_IPV6 \ @@ -25,7 +25,6 @@ PKG_CONFIG_DEPENDS:= \ CONFIG_PACKAGE_quagga-ospf6d \ CONFIG_PACKAGE_quagga-ripd \ CONFIG_PACKAGE_quagga-ripngd \ - CONFIG_PACKAGE_quagga-babeld \ CONFIG_PACKAGE_quagga-vtysh PKG_BUILD_PARALLEL:=1 PKG_FIXUP:=autoreconf @@ -41,7 +40,7 @@ define Package/quagga/Default DEPENDS:=quagga TITLE:=The Quagga Software Routing Suite URL:=http://www.quagga.net - MAINTAINER:=Vasilis Tsiligiannis + MAINTAINER:=Vasilis Tsiligiannis endef define Package/quagga @@ -77,6 +76,7 @@ endef define Package/quagga-libospf $(call Package/quagga/Default) + DEPENDS+=+quagga-libzebra TITLE:=OSPF library endef @@ -94,13 +94,13 @@ endef define Package/quagga-ospfd $(call Package/quagga/Default) - DEPENDS+=+quagga-libospf +quagga-libzebra + DEPENDS+=+quagga-libospf TITLE:=OSPFv2 routing engine endef define Package/quagga-ospf6d $(call Package/quagga/Default) - DEPENDS+=+quagga-libospf +quagga-libzebra @IPV6 + DEPENDS+=+quagga-libospf @IPV6 TITLE:=OSPFv3 routing engine endef @@ -116,12 +116,6 @@ define Package/quagga-ripngd TITLE:=RIPNG routing engine endef -define Package/quagga-babeld - $(call Package/quagga/Default) - DEPENDS+=+quagga-libzebra @IPV6 - TITLE:=Babel routing engine -endef - define Package/quagga-vtysh $(call Package/quagga/Default) DEPENDS+=+quagga-libzebra +libreadline +libncurses @@ -156,10 +150,6 @@ define Package/quagga-ripngd/conffiles /etc/quagga/ripngd.conf endef -define Package/quagga-babeld/conffiles -/etc/quagga/babeld.conf -endef - ifneq ($(SDK),) CONFIG_PACKAGE_quagga-libzebra:=m CONFIG_PACKAGE_quagga-libospf:=m @@ -170,7 +160,6 @@ CONFIG_PACKAGE_quagga-isisd:=m CONFIG_PACKAGE_quagga-ospf6d:=m CONFIG_PACKAGE_quagga-ripd:=m CONFIG_PACKAGE_quagga-ripngd:=m -CONFIG_PACKAGE_quagga-babeld:=m CONFIG_PACKAGE_quagga-vtysh:=m endif @@ -181,7 +170,6 @@ CONFIGURE_ARGS+= \ --disable-static \ --enable-user=network \ --enable-group=network \ - --enable-pie=no \ --enable-multipath=8 \ --disable-ospfclient \ --disable-capabilities \ @@ -193,7 +181,6 @@ CONFIGURE_ARGS+= \ $(call autoconf_bool,CONFIG_PACKAGE_quagga-ospf6d,ospf6d) \ $(call autoconf_bool,CONFIG_PACKAGE_quagga-ripd,ripd) \ $(call autoconf_bool,CONFIG_PACKAGE_quagga-ripngd,ripngd) \ - $(call autoconf_bool,CONFIG_PACKAGE_quagga-babeld,babeld) \ $(call autoconf_bool,CONFIG_PACKAGE_quagga-vtysh,vtysh) \ MAKE_FLAGS += \ @@ -267,14 +254,6 @@ define Package/quagga-ripngd/install $(INSTALL_CONF) ./files/quagga.conf $(1)/etc/quagga/ripngd.conf endef -define Package/quagga-babeld/install - $(INSTALL_DIR) $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/babeld $(1)/usr/sbin/ - $(INSTALL_DIR) $(1)/etc/quagga - chmod 0750 $(1)/etc/quagga - $(INSTALL_CONF) ./files/quagga.conf $(1)/etc/quagga/babeld.conf -endef - define Package/quagga-vtysh/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/vtysh $(1)/usr/bin/ @@ -301,5 +280,4 @@ $(eval $(call BuildPackage,quagga-ospfd)) $(eval $(call BuildPackage,quagga-ospf6d)) $(eval $(call BuildPackage,quagga-ripd)) $(eval $(call BuildPackage,quagga-ripngd)) -$(eval $(call BuildPackage,quagga-babeld)) $(eval $(call BuildPackage,quagga-vtysh)) diff --git a/quagga/patches/110-vtysh-fix-build-against-readline-6.3.patch b/quagga/patches/110-vtysh-fix-build-against-readline-6.3.patch deleted file mode 100644 index e8c499e..0000000 --- a/quagga/patches/110-vtysh-fix-build-against-readline-6.3.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- a/vtysh/vtysh.c -+++ b/vtysh/vtysh.c -@@ -2211,9 +2211,9 @@ - vtysh_readline_init (void) - { - /* readline related settings. */ -- rl_bind_key ('?', (Function *) vtysh_rl_describe); -+ rl_bind_key ('?', (rl_command_func_t *) vtysh_rl_describe); - rl_completion_entry_function = vtysh_completion_entry_function; -- rl_attempted_completion_function = (CPPFunction *)new_completion; -+ rl_attempted_completion_function = (rl_completion_func_t *) new_completion; - /* do not append space after completion. It will be appended - * in new_completion() function explicitly. */ - rl_completion_append_character = '\0'; - diff --git a/quagga/patches/120-quagga_manet.patch b/quagga/patches/120-quagga_manet.patch deleted file mode 100644 index 2411bd0..0000000 --- a/quagga/patches/120-quagga_manet.patch +++ /dev/null @@ -1,243 +0,0 @@ ---- a/lib/log.c -+++ b/lib/log.c -@@ -925,13 +925,19 @@ proto_redistnum(int afi, const char *s) - return ZEBRA_ROUTE_STATIC; - else if (strncmp (s, "r", 1) == 0) - return ZEBRA_ROUTE_RIP; -- else if (strncmp (s, "o", 1) == 0) -+ else if (strncmp (s, "os", 2) == 0) - return ZEBRA_ROUTE_OSPF; - else if (strncmp (s, "i", 1) == 0) - return ZEBRA_ROUTE_ISIS; - else if (strncmp (s, "bg", 2) == 0) - return ZEBRA_ROUTE_BGP; -- else if (strncmp (s, "ba", 2) == 0) -+ else if (strncmp (s, "h", 1) == 0) -+ return ZEBRA_ROUTE_HSLS; -+ else if (strncmp (s, "ol", 2) == 0) -+ return ZEBRA_ROUTE_OLSR; -+ else if (strncmp (s, "bat", 3) == 0) -+ return ZEBRA_ROUTE_BATMAN; -+ else if (strncmp (s, "bab", 3) == 0) - return ZEBRA_ROUTE_BABEL; - } - if (afi == AFI_IP6) -@@ -944,13 +950,19 @@ proto_redistnum(int afi, const char *s) - return ZEBRA_ROUTE_STATIC; - else if (strncmp (s, "r", 1) == 0) - return ZEBRA_ROUTE_RIPNG; -- else if (strncmp (s, "o", 1) == 0) -+ else if (strncmp (s, "os", 2) == 0) - return ZEBRA_ROUTE_OSPF6; - else if (strncmp (s, "i", 1) == 0) - return ZEBRA_ROUTE_ISIS; - else if (strncmp (s, "bg", 2) == 0) - return ZEBRA_ROUTE_BGP; -- else if (strncmp (s, "ba", 2) == 0) -+ else if (strncmp (s, "h", 1) == 0) -+ return ZEBRA_ROUTE_HSLS; -+ else if (strncmp (s, "ol", 2) == 0) -+ return ZEBRA_ROUTE_OLSR; -+ else if (strncmp (s, "bat", 3) == 0) -+ return ZEBRA_ROUTE_BATMAN; -+ else if (strncmp (s, "bab", 3) == 0) - return ZEBRA_ROUTE_BABEL; - } - return -1; ---- a/lib/route_types.txt -+++ b/lib/route_types.txt -@@ -51,13 +51,9 @@ ZEBRA_ROUTE_OSPF, ospf, ospfd - ZEBRA_ROUTE_OSPF6, ospf6, ospf6d, 'O', 0, 1, "OSPFv6" - ZEBRA_ROUTE_ISIS, isis, isisd, 'I', 1, 1, "IS-IS" - ZEBRA_ROUTE_BGP, bgp, bgpd, 'B', 1, 1, "BGP" --# HSLS and OLSR both are AFI independent (so: 1, 1), however --# we want to disable for them for general Quagga distribution. --# This at least makes it trivial for users of these protocols --# to 'switch on' redist support (direct numeric entry remaining --# possible). --ZEBRA_ROUTE_HSLS, hsls, hslsd, 'H', 0, 0, "HSLS" --ZEBRA_ROUTE_OLSR, olsr, olsrd, 'o', 0, 0, "OLSR" -+ZEBRA_ROUTE_HSLS, hsls, hslsd, 'H', 1, 1, "HSLS" -+ZEBRA_ROUTE_OLSR, olsr, olsrd, 'o', 1, 1, "OLSR" -+ZEBRA_ROUTE_BATMAN, batman, batmand,'b', 1, 1, "BATMAN" - ZEBRA_ROUTE_BABEL, babel, babeld, 'A', 1, 1, "Babel" - - ## help strings -@@ -72,5 +68,6 @@ ZEBRA_ROUTE_OSPF6, "Open Shortest Path - ZEBRA_ROUTE_ISIS, "Intermediate System to Intermediate System (IS-IS)" - ZEBRA_ROUTE_BGP, "Border Gateway Protocol (BGP)" - ZEBRA_ROUTE_HSLS, "Hazy-Sighted Link State Protocol (HSLS)" --ZEBRA_ROUTE_OLSR, "Optimised Link State Routing (OLSR)" -+ZEBRA_ROUTE_OLSR, "Optimized Link State Routing (OLSR)" -+ZEBRA_ROUTE_BATMAN, "Better Approach to Mobile Ad-Hoc Networking (BATMAN)" - ZEBRA_ROUTE_BABEL, "Babel routing protocol (Babel)" ---- a/ripd/rip_zebra.c -+++ b/ripd/rip_zebra.c -@@ -206,9 +206,12 @@ static struct { - {ZEBRA_ROUTE_KERNEL, 1, "kernel"}, - {ZEBRA_ROUTE_CONNECT, 1, "connected"}, - {ZEBRA_ROUTE_STATIC, 1, "static"}, -- {ZEBRA_ROUTE_OSPF, 1, "ospf"}, -+ {ZEBRA_ROUTE_OSPF, 2, "ospf"}, - {ZEBRA_ROUTE_BGP, 2, "bgp"}, -- {ZEBRA_ROUTE_BABEL, 2, "babel"}, -+ {ZEBRA_ROUTE_HSLS, 1, "hsls"}, -+ {ZEBRA_ROUTE_OLSR, 2, "olsr"}, -+ {ZEBRA_ROUTE_BATMAN, 3, "batman"}, -+ {ZEBRA_ROUTE_BABEL, 3, "babel"}, - {0, 0, NULL} - }; - ---- a/ripngd/ripng_zebra.c -+++ b/ripngd/ripng_zebra.c -@@ -216,9 +216,12 @@ static struct { - {ZEBRA_ROUTE_KERNEL, 1, "kernel"}, - {ZEBRA_ROUTE_CONNECT, 1, "connected"}, - {ZEBRA_ROUTE_STATIC, 1, "static"}, -- {ZEBRA_ROUTE_OSPF6, 1, "ospf6"}, -+ {ZEBRA_ROUTE_OSPF6, 2, "ospf6"}, - {ZEBRA_ROUTE_BGP, 2, "bgp"}, -- {ZEBRA_ROUTE_BABEL, 2, "babel"}, -+ {ZEBRA_ROUTE_HSLS, 1, "hsls"}, -+ {ZEBRA_ROUTE_OLSR, 2, "olsr"}, -+ {ZEBRA_ROUTE_BATMAN, 3, "batman"}, -+ {ZEBRA_ROUTE_BABEL, 3, "babel"}, - {0, 0, NULL} - }; - ---- a/zebra/rt_netlink.c -+++ b/zebra/rt_netlink.c -@@ -1609,6 +1609,9 @@ netlink_route_multipath (int cmd, struct - addattr_l (&req.n, sizeof req, RTA_PREFSRC, - &nexthop->src.ipv4, bytelen); - -+ if (rib->type == ZEBRA_ROUTE_OLSR) -+ req.r.rtm_scope = RT_SCOPE_LINK; -+ - if (IS_ZEBRA_DEBUG_KERNEL) - zlog_debug("netlink_route_multipath() (single hop): " - "nexthop via if %u", nexthop->ifindex); ---- a/zebra/zebra_rib.c -+++ b/zebra/zebra_rib.c -@@ -68,6 +68,9 @@ static const struct - [ZEBRA_ROUTE_OSPF6] = {ZEBRA_ROUTE_OSPF6, 110}, - [ZEBRA_ROUTE_ISIS] = {ZEBRA_ROUTE_ISIS, 115}, - [ZEBRA_ROUTE_BGP] = {ZEBRA_ROUTE_BGP, 20 /* IBGP is 200. */}, -+ [ZEBRA_ROUTE_HSLS] = {ZEBRA_ROUTE_HSLS, 0}, -+ [ZEBRA_ROUTE_OLSR] = {ZEBRA_ROUTE_OLSR, 0}, -+ [ZEBRA_ROUTE_BATMAN] = {ZEBRA_ROUTE_BATMAN, 0}, - [ZEBRA_ROUTE_BABEL] = {ZEBRA_ROUTE_BABEL, 95}, - /* no entry/default: 150 */ - }; -@@ -456,6 +459,18 @@ nexthop_active_ipv4 (struct rib *rib, st - } - return 0; - } -+ else if (match->type == ZEBRA_ROUTE_OLSR) -+ { -+ for (newhop = match->nexthop; newhop; newhop = newhop->next) -+ if (CHECK_FLAG (newhop->flags, NEXTHOP_FLAG_FIB) -+ && newhop->type == NEXTHOP_TYPE_IFINDEX) -+ { -+ if (nexthop->type == NEXTHOP_TYPE_IPV4) -+ nexthop->ifindex = newhop->ifindex; -+ return 1; -+ } -+ return 0; -+ } - else - { - return 0; -@@ -560,6 +575,18 @@ nexthop_active_ipv6 (struct rib *rib, st - } - return 0; - } -+ else if (match->type == ZEBRA_ROUTE_OLSR) -+ { -+ for (newhop = match->nexthop; newhop; newhop = newhop->next) -+ if (CHECK_FLAG (newhop->flags, NEXTHOP_FLAG_FIB) -+ && newhop->type == NEXTHOP_TYPE_IFINDEX) -+ { -+ if (nexthop->type == NEXTHOP_TYPE_IPV6) -+ nexthop->ifindex = newhop->ifindex; -+ return 1; -+ } -+ return 0; -+ } - else - { - return 0; -@@ -1376,6 +1403,8 @@ static const u_char meta_queue_map[ZEBRA - [ZEBRA_ROUTE_ISIS] = 2, - [ZEBRA_ROUTE_BGP] = 3, - [ZEBRA_ROUTE_HSLS] = 4, -+ [ZEBRA_ROUTE_OLSR] = 4, -+ [ZEBRA_ROUTE_BATMAN] = 4, - [ZEBRA_ROUTE_BABEL] = 2, - }; - ---- a/zebra/zebra_snmp.c -+++ b/zebra/zebra_snmp.c -@@ -245,6 +245,12 @@ proto_trans(int type) - return 1; /* shouldn't happen */ - case ZEBRA_ROUTE_BGP: - return 14; /* bgp */ -+ case ZEBRA_ROUTE_HSLS: -+ return 1; /* other */ -+ case ZEBRA_ROUTE_OLSR: -+ return 1; /* other */ -+ case ZEBRA_ROUTE_BATMAN: -+ return 1; /* other */ - default: - return 1; /* other */ - } ---- a/zebra/zebra_vty.c -+++ b/zebra/zebra_vty.c -@@ -558,7 +558,10 @@ vty_show_ip_route_detail (struct vty *vt - || rib->type == ZEBRA_ROUTE_OSPF - || rib->type == ZEBRA_ROUTE_BABEL - || rib->type == ZEBRA_ROUTE_ISIS -- || rib->type == ZEBRA_ROUTE_BGP) -+ || rib->type == ZEBRA_ROUTE_BGP -+ || rib->type == ZEBRA_ROUTE_HSLS -+ || rib->type == ZEBRA_ROUTE_OLSR -+ || rib->type == ZEBRA_ROUTE_BATMAN) - { - time_t uptime; - struct tm *tm; -@@ -784,7 +787,10 @@ vty_show_ip_route (struct vty *vty, stru - || rib->type == ZEBRA_ROUTE_OSPF - || rib->type == ZEBRA_ROUTE_BABEL - || rib->type == ZEBRA_ROUTE_ISIS -- || rib->type == ZEBRA_ROUTE_BGP) -+ || rib->type == ZEBRA_ROUTE_BGP -+ || rib->type == ZEBRA_ROUTE_HSLS -+ || rib->type == ZEBRA_ROUTE_OLSR -+ || rib->type == ZEBRA_ROUTE_BATMAN) - { - time_t uptime; - struct tm *tm; -@@ -1577,7 +1583,10 @@ vty_show_ipv6_route_detail (struct vty * - || rib->type == ZEBRA_ROUTE_OSPF6 - || rib->type == ZEBRA_ROUTE_BABEL - || rib->type == ZEBRA_ROUTE_ISIS -- || rib->type == ZEBRA_ROUTE_BGP) -+ || rib->type == ZEBRA_ROUTE_BGP -+ || rib->type == ZEBRA_ROUTE_HSLS -+ || rib->type == ZEBRA_ROUTE_OLSR -+ || rib->type == ZEBRA_ROUTE_BATMAN) - { - time_t uptime; - struct tm *tm; -@@ -1757,7 +1766,10 @@ vty_show_ipv6_route (struct vty *vty, st - || rib->type == ZEBRA_ROUTE_OSPF6 - || rib->type == ZEBRA_ROUTE_BABEL - || rib->type == ZEBRA_ROUTE_ISIS -- || rib->type == ZEBRA_ROUTE_BGP) -+ || rib->type == ZEBRA_ROUTE_BGP -+ || rib->type == ZEBRA_ROUTE_HSLS -+ || rib->type == ZEBRA_ROUTE_OLSR -+ || rib->type == ZEBRA_ROUTE_BATMAN) - { - time_t uptime; - struct tm *tm; diff --git a/quagga/patches/140-holdtimer-set.patch b/quagga/patches/140-holdtimer-set.patch index b699775..6d1c1ea 100644 --- a/quagga/patches/140-holdtimer-set.patch +++ b/quagga/patches/140-holdtimer-set.patch @@ -1,6 +1,6 @@ --- a/bgpd/bgp_network.c +++ b/bgpd/bgp_network.c -@@ -193,8 +193,7 @@ bgp_accept (struct thread *thread) +@@ -257,8 +257,7 @@ bgp_accept (struct thread *thread) peer->fd = bgp_sock; peer->status = Active; peer->local_id = peer1->local_id; @@ -12,11 +12,11 @@ sockunion2str (&su, buf, SU_ADDRSTRLEN); --- a/bgpd/bgpd.h +++ b/bgpd/bgpd.h -@@ -732,6 +732,7 @@ struct bgp_nlri +@@ -752,6 +752,7 @@ struct bgp_nlri + /* BGP timers default value. */ - #define BGP_INIT_START_TIMER 5 - #define BGP_ERROR_START_TIMER 30 + #define BGP_INIT_START_TIMER 1 +#define BGP_LARGE_HOLDTIME 240 #define BGP_DEFAULT_HOLDTIME 180 #define BGP_DEFAULT_KEEPALIVE 60 - #define BGP_DEFAULT_ASORIGINATE 15 + #define BGP_DEFAULT_EBGP_ROUTEADV 30 diff --git a/quagga/patches/150-no-cross-fs-link.patch b/quagga/patches/150-no-cross-fs-link.patch index 32c1208..8445103 100644 --- a/quagga/patches/150-no-cross-fs-link.patch +++ b/quagga/patches/150-no-cross-fs-link.patch @@ -1,6 +1,6 @@ --- a/lib/command.c +++ b/lib/command.c -@@ -2527,6 +2527,13 @@ DEFUN (config_write_file, +@@ -3198,6 +3198,13 @@ DEFUN (config_write_file, VTY_NEWLINE); goto finished; } @@ -14,7 +14,7 @@ if (link (config_file, config_file_sav) != 0) { vty_out (vty, "Can't backup old configuration file %s.%s", config_file_sav, -@@ -2540,7 +2547,23 @@ DEFUN (config_write_file, +@@ -3211,7 +3218,23 @@ DEFUN (config_write_file, VTY_NEWLINE); goto finished; } diff --git a/quagga/patches/170-use-supported-pagers.patch b/quagga/patches/170-use-supported-pagers.patch index 15595a7..ad4c4db 100644 --- a/quagga/patches/170-use-supported-pagers.patch +++ b/quagga/patches/170-use-supported-pagers.patch @@ -1,6 +1,6 @@ --- a/vtysh/vtysh.c +++ b/vtysh/vtysh.c -@@ -268,7 +268,7 @@ vtysh_pager_init (void) +@@ -251,7 +251,7 @@ vtysh_pager_init (void) if (pager_defined) vtysh_pager_name = strdup (pager_defined); else @@ -9,7 +9,7 @@ } /* Command execution over the vty interface. */ -@@ -1884,7 +1884,7 @@ DEFUN (vtysh_terminal_length, +@@ -2047,7 +2047,7 @@ DEFUN (vtysh_terminal_length, { int lines; char *endptr = NULL; @@ -18,7 +18,7 @@ lines = strtol (argv[0], &endptr, 10); if (lines < 0 || lines > 512 || *endptr != '\0') -@@ -1901,7 +1901,7 @@ DEFUN (vtysh_terminal_length, +@@ -2064,7 +2064,7 @@ DEFUN (vtysh_terminal_length, if (lines != 0) {