Included fixes:
- fix the behaviour of batman-adv in case of virtual interface MAC change event - fix symmetric link check in neighbour selection -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) iEYEABECAAYFAlBffHkACgkQpGgxIkP9cweh4gCfRow8tAL8CnrzFV7cAyTXrZ3K sGkAoIOVe1hbuv4kfAh3eLz1kbd28y5n =1xhN -----END PGP SIGNATURE----- Merge tag 'batman-adv-fix-for-davem' of git://git.open-mesh.org/linux-merge Included fixes: - fix the behaviour of batman-adv in case of virtual interface MAC change event - fix symmetric link check in neighbour selection Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
78cc88c408
|
@ -642,7 +642,8 @@ batadv_iv_ogm_orig_update(struct batadv_priv *bat_priv,
|
|||
struct batadv_neigh_node *router = NULL;
|
||||
struct batadv_orig_node *orig_node_tmp;
|
||||
struct hlist_node *node;
|
||||
uint8_t bcast_own_sum_orig, bcast_own_sum_neigh;
|
||||
int if_num;
|
||||
uint8_t sum_orig, sum_neigh;
|
||||
uint8_t *neigh_addr;
|
||||
|
||||
batadv_dbg(BATADV_DBG_BATMAN, bat_priv,
|
||||
|
@ -727,17 +728,17 @@ batadv_iv_ogm_orig_update(struct batadv_priv *bat_priv,
|
|||
if (router && (neigh_node->tq_avg == router->tq_avg)) {
|
||||
orig_node_tmp = router->orig_node;
|
||||
spin_lock_bh(&orig_node_tmp->ogm_cnt_lock);
|
||||
bcast_own_sum_orig =
|
||||
orig_node_tmp->bcast_own_sum[if_incoming->if_num];
|
||||
if_num = router->if_incoming->if_num;
|
||||
sum_orig = orig_node_tmp->bcast_own_sum[if_num];
|
||||
spin_unlock_bh(&orig_node_tmp->ogm_cnt_lock);
|
||||
|
||||
orig_node_tmp = neigh_node->orig_node;
|
||||
spin_lock_bh(&orig_node_tmp->ogm_cnt_lock);
|
||||
bcast_own_sum_neigh =
|
||||
orig_node_tmp->bcast_own_sum[if_incoming->if_num];
|
||||
if_num = neigh_node->if_incoming->if_num;
|
||||
sum_neigh = orig_node_tmp->bcast_own_sum[if_num];
|
||||
spin_unlock_bh(&orig_node_tmp->ogm_cnt_lock);
|
||||
|
||||
if (bcast_own_sum_orig >= bcast_own_sum_neigh)
|
||||
if (sum_orig >= sum_neigh)
|
||||
goto update_tt;
|
||||
}
|
||||
|
||||
|
|
|
@ -100,18 +100,21 @@ static int batadv_interface_set_mac_addr(struct net_device *dev, void *p)
|
|||
{
|
||||
struct batadv_priv *bat_priv = netdev_priv(dev);
|
||||
struct sockaddr *addr = p;
|
||||
uint8_t old_addr[ETH_ALEN];
|
||||
|
||||
if (!is_valid_ether_addr(addr->sa_data))
|
||||
return -EADDRNOTAVAIL;
|
||||
|
||||
memcpy(old_addr, dev->dev_addr, ETH_ALEN);
|
||||
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
|
||||
|
||||
/* only modify transtable if it has been initialized before */
|
||||
if (atomic_read(&bat_priv->mesh_state) == BATADV_MESH_ACTIVE) {
|
||||
batadv_tt_local_remove(bat_priv, dev->dev_addr,
|
||||
batadv_tt_local_remove(bat_priv, old_addr,
|
||||
"mac address changed", false);
|
||||
batadv_tt_local_add(dev, addr->sa_data, BATADV_NULL_IFINDEX);
|
||||
}
|
||||
|
||||
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
|
||||
dev->addr_assign_type &= ~NET_ADDR_RANDOM;
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue