Merge branch 'master' of https://github.com/openwrt-routing/packages
This commit is contained in:
commit
34a2618d2e
27 changed files with 164 additions and 1037 deletions
|
@ -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
|
||||
|
|
|
@ -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)" \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* Please avoid adding hacks here - instead add it to mac80211/backports.git */
|
||||
|
||||
#undef CONFIG_MODULE_STRIPPED
|
||||
|
||||
#include <linux/version.h> /* LINUX_VERSION_CODE */
|
||||
#include <linux/types.h>
|
||||
|
||||
|
@ -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 <linux/netlink.h>
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0)
|
||||
|
||||
#include_next <net/netlink.h>
|
||||
|
||||
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) */
|
||||
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
From: Sven Eckelmann <sven@narfation.org>
|
||||
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 <sven@narfation.org>
|
||||
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
|
||||
|
||||
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);
|
|
@ -1,49 +0,0 @@
|
|||
From: Sven Eckelmann <sven@narfation.org>
|
||||
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 <sven@narfation.org>
|
||||
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
|
||||
|
||||
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
|
|
@ -1,41 +0,0 @@
|
|||
From: Sven Eckelmann <sven@narfation.org>
|
||||
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 <sven@narfation.org>
|
||||
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
From: Sven Eckelmann <sven@narfation.org>
|
||||
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 <sven@narfation.org>
|
||||
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
|
||||
|
||||
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);
|
||||
|
|
@ -1,291 +0,0 @@
|
|||
From: Sven Eckelmann <sven@narfation.org>
|
||||
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 <sven@narfation.org>
|
||||
Acked-by: Simon Wunderlich <sw@simonwunderlich.de>
|
||||
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
|
||||
|
||||
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;
|
|
@ -1,120 +0,0 @@
|
|||
From: Sven Eckelmann <sven@narfation.org>
|
||||
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 <sven@narfation.org>
|
||||
Acked-by: Simon Wunderlich <sw@simonwunderlich.de>
|
||||
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
|
||||
|
||||
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;
|
|
@ -1,45 +0,0 @@
|
|||
From: Sven Eckelmann <sven@narfation.org>
|
||||
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 <sven@narfation.org>
|
||||
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
|
||||
|
||||
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);
|
|
@ -1,35 +0,0 @@
|
|||
From: Sven Eckelmann <sven@narfation.org>
|
||||
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 <sven@narfation.org>
|
||||
---
|
||||
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)
|
|
@ -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 <noltari@gmail.com>
|
||||
|
||||
|
|
|
@ -1,49 +0,0 @@
|
|||
From 31e9e10144a6994773a04d94903fa3bdde6de91e Mon Sep 17 00:00:00 2001
|
||||
From: Stijn Tintel <stijn@linux-ipv6.be>
|
||||
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 <stijn@linux-ipv6.be>
|
||||
---
|
||||
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
|
||||
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 <b_tsiligiannis@silverton.gr>
|
||||
MAINTAINER:=Vasilis Tsiligiannis <acinonyx@openwrt.gr>
|
||||
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))
|
||||
|
|
|
@ -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';
|
||||
|
|
@ -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;
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue