mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-04 10:09:06 +00:00
Here are some batman-adv fixes:
- Fix gateway refcounting in BATMAN IV and V, by Sven Eckelmann (2 patches) - Fix debugfs paths when renaming interfaces, by Sven Eckelmann (2 patches) - Fix TT flag issues, by Linus Luessing (2 patches) -----BEGIN PGP SIGNATURE----- iQJKBAABCgA0FiEE1ilQI7G+y+fdhnrfoSvjmEKSnqEFAltOCLUWHHN3QHNpbW9u d3VuZGVybGljaC5kZQAKCRChK+OYQpKeoepaEACownlLt7HYluTol+tSrfg/og1d pS+exIjkVhRmmWzgNV27tpKGxG5N/kXKYBqGZN/f55EbT4TTZ7czD7j5rouQ9v3L ACFtALExU1DRpquC7iQ3M2LvATVYoX1eiUMbQ7+bjWBntxMFtqa8AoXREg5sIWj0 5VE10pnLpT2YJfndawWgGuyg7bPVm5l9GDgi5o5OFmCN7EpPxX+M5SRQ3uB06Wz8 6mZlE6IryRDncDPEwg279s+ESIP0e9tiVOOkY8POTYiEf6549ApO9QP3X5qFv1Eb UrNAxbaGQrH+WzKmH5euJudUYSucwjCCWI0Wv7EaOQ7Gm8T7tJJUyurauGm80FhD are/MgC/78QqVWY1YAUN+bv/ORzjtxTsvFOssTJCBN6j5NzoZA4pU3rLmDKki/6x MCDM1EZfhLIDPku1WML2KMYwLFDadZXdBOSee7QSk+bq11ktCCaG8EYul10La+V0 B5z/rDzzkK4eaCaGfZH76/pvkfaRsRugPnldTRok1KD8fL/lmYYLiuHwC+EzMBSd y/W2f3QblfiTe+B8DNnN4nNrTSyx7VP38bsphb1DiviMEpAUs96qurq3yrf8Xky2 tW0Nx8VcRhKbRfunXie+dsHSGVHR3b6jIwq8RomUtH8qdB1wcVaC4wLo00LbGVx9 hk+MMcMU06gcmLPQEA== =7JnI -----END PGP SIGNATURE----- Merge tag 'batadv-net-for-davem-20180717' of git://git.open-mesh.org/linux-merge Simon Wunderlich says: ==================== Here are some batman-adv fixes: - Fix gateway refcounting in BATMAN IV and V, by Sven Eckelmann (2 patches) - Fix debugfs paths when renaming interfaces, by Sven Eckelmann (2 patches) - Fix TT flag issues, by Linus Luessing (2 patches) ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
9640ccce30
@ -2732,7 +2732,7 @@ static int batadv_iv_gw_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
|
||||
{
|
||||
struct batadv_neigh_ifinfo *router_ifinfo = NULL;
|
||||
struct batadv_neigh_node *router;
|
||||
struct batadv_gw_node *curr_gw;
|
||||
struct batadv_gw_node *curr_gw = NULL;
|
||||
int ret = 0;
|
||||
void *hdr;
|
||||
|
||||
@ -2780,6 +2780,8 @@ static int batadv_iv_gw_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
|
||||
ret = 0;
|
||||
|
||||
out:
|
||||
if (curr_gw)
|
||||
batadv_gw_node_put(curr_gw);
|
||||
if (router_ifinfo)
|
||||
batadv_neigh_ifinfo_put(router_ifinfo);
|
||||
if (router)
|
||||
|
@ -927,7 +927,7 @@ static int batadv_v_gw_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
|
||||
{
|
||||
struct batadv_neigh_ifinfo *router_ifinfo = NULL;
|
||||
struct batadv_neigh_node *router;
|
||||
struct batadv_gw_node *curr_gw;
|
||||
struct batadv_gw_node *curr_gw = NULL;
|
||||
int ret = 0;
|
||||
void *hdr;
|
||||
|
||||
@ -995,6 +995,8 @@ static int batadv_v_gw_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
|
||||
ret = 0;
|
||||
|
||||
out:
|
||||
if (curr_gw)
|
||||
batadv_gw_node_put(curr_gw);
|
||||
if (router_ifinfo)
|
||||
batadv_neigh_ifinfo_put(router_ifinfo);
|
||||
if (router)
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "debugfs.h"
|
||||
#include "main.h"
|
||||
|
||||
#include <linux/dcache.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/errno.h>
|
||||
@ -343,6 +344,25 @@ out:
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/**
|
||||
* batadv_debugfs_rename_hardif() - Fix debugfs path for renamed hardif
|
||||
* @hard_iface: hard interface which was renamed
|
||||
*/
|
||||
void batadv_debugfs_rename_hardif(struct batadv_hard_iface *hard_iface)
|
||||
{
|
||||
const char *name = hard_iface->net_dev->name;
|
||||
struct dentry *dir;
|
||||
struct dentry *d;
|
||||
|
||||
dir = hard_iface->debug_dir;
|
||||
if (!dir)
|
||||
return;
|
||||
|
||||
d = debugfs_rename(dir->d_parent, dir, dir->d_parent, name);
|
||||
if (!d)
|
||||
pr_err("Can't rename debugfs dir to %s\n", name);
|
||||
}
|
||||
|
||||
/**
|
||||
* batadv_debugfs_del_hardif() - delete the base directory for a hard interface
|
||||
* in debugfs.
|
||||
@ -413,6 +433,26 @@ out:
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/**
|
||||
* batadv_debugfs_rename_meshif() - Fix debugfs path for renamed softif
|
||||
* @dev: net_device which was renamed
|
||||
*/
|
||||
void batadv_debugfs_rename_meshif(struct net_device *dev)
|
||||
{
|
||||
struct batadv_priv *bat_priv = netdev_priv(dev);
|
||||
const char *name = dev->name;
|
||||
struct dentry *dir;
|
||||
struct dentry *d;
|
||||
|
||||
dir = bat_priv->debug_dir;
|
||||
if (!dir)
|
||||
return;
|
||||
|
||||
d = debugfs_rename(dir->d_parent, dir, dir->d_parent, name);
|
||||
if (!d)
|
||||
pr_err("Can't rename debugfs dir to %s\n", name);
|
||||
}
|
||||
|
||||
/**
|
||||
* batadv_debugfs_del_meshif() - Remove interface dependent debugfs entries
|
||||
* @dev: netdev struct of the soft interface
|
||||
|
@ -30,8 +30,10 @@ struct net_device;
|
||||
void batadv_debugfs_init(void);
|
||||
void batadv_debugfs_destroy(void);
|
||||
int batadv_debugfs_add_meshif(struct net_device *dev);
|
||||
void batadv_debugfs_rename_meshif(struct net_device *dev);
|
||||
void batadv_debugfs_del_meshif(struct net_device *dev);
|
||||
int batadv_debugfs_add_hardif(struct batadv_hard_iface *hard_iface);
|
||||
void batadv_debugfs_rename_hardif(struct batadv_hard_iface *hard_iface);
|
||||
void batadv_debugfs_del_hardif(struct batadv_hard_iface *hard_iface);
|
||||
|
||||
#else
|
||||
@ -49,6 +51,10 @@ static inline int batadv_debugfs_add_meshif(struct net_device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void batadv_debugfs_rename_meshif(struct net_device *dev)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void batadv_debugfs_del_meshif(struct net_device *dev)
|
||||
{
|
||||
}
|
||||
@ -59,6 +65,11 @@ int batadv_debugfs_add_hardif(struct batadv_hard_iface *hard_iface)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline
|
||||
void batadv_debugfs_rename_hardif(struct batadv_hard_iface *hard_iface)
|
||||
{
|
||||
}
|
||||
|
||||
static inline
|
||||
void batadv_debugfs_del_hardif(struct batadv_hard_iface *hard_iface)
|
||||
{
|
||||
|
@ -989,6 +989,32 @@ void batadv_hardif_remove_interfaces(void)
|
||||
rtnl_unlock();
|
||||
}
|
||||
|
||||
/**
|
||||
* batadv_hard_if_event_softif() - Handle events for soft interfaces
|
||||
* @event: NETDEV_* event to handle
|
||||
* @net_dev: net_device which generated an event
|
||||
*
|
||||
* Return: NOTIFY_* result
|
||||
*/
|
||||
static int batadv_hard_if_event_softif(unsigned long event,
|
||||
struct net_device *net_dev)
|
||||
{
|
||||
struct batadv_priv *bat_priv;
|
||||
|
||||
switch (event) {
|
||||
case NETDEV_REGISTER:
|
||||
batadv_sysfs_add_meshif(net_dev);
|
||||
bat_priv = netdev_priv(net_dev);
|
||||
batadv_softif_create_vlan(bat_priv, BATADV_NO_FLAGS);
|
||||
break;
|
||||
case NETDEV_CHANGENAME:
|
||||
batadv_debugfs_rename_meshif(net_dev);
|
||||
break;
|
||||
}
|
||||
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
static int batadv_hard_if_event(struct notifier_block *this,
|
||||
unsigned long event, void *ptr)
|
||||
{
|
||||
@ -997,12 +1023,8 @@ static int batadv_hard_if_event(struct notifier_block *this,
|
||||
struct batadv_hard_iface *primary_if = NULL;
|
||||
struct batadv_priv *bat_priv;
|
||||
|
||||
if (batadv_softif_is_valid(net_dev) && event == NETDEV_REGISTER) {
|
||||
batadv_sysfs_add_meshif(net_dev);
|
||||
bat_priv = netdev_priv(net_dev);
|
||||
batadv_softif_create_vlan(bat_priv, BATADV_NO_FLAGS);
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
if (batadv_softif_is_valid(net_dev))
|
||||
return batadv_hard_if_event_softif(event, net_dev);
|
||||
|
||||
hard_iface = batadv_hardif_get_by_netdev(net_dev);
|
||||
if (!hard_iface && (event == NETDEV_REGISTER ||
|
||||
@ -1051,6 +1073,9 @@ static int batadv_hard_if_event(struct notifier_block *this,
|
||||
if (batadv_is_wifi_hardif(hard_iface))
|
||||
hard_iface->num_bcasts = BATADV_NUM_BCASTS_WIRELESS;
|
||||
break;
|
||||
case NETDEV_CHANGENAME:
|
||||
batadv_debugfs_rename_hardif(hard_iface);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -1705,7 +1705,9 @@ static bool batadv_tt_global_add(struct batadv_priv *bat_priv,
|
||||
ether_addr_copy(common->addr, tt_addr);
|
||||
common->vid = vid;
|
||||
|
||||
common->flags = flags;
|
||||
if (!is_multicast_ether_addr(common->addr))
|
||||
common->flags = flags & (~BATADV_TT_SYNC_MASK);
|
||||
|
||||
tt_global_entry->roam_at = 0;
|
||||
/* node must store current time in case of roaming. This is
|
||||
* needed to purge this entry out on timeout (if nobody claims
|
||||
@ -1768,7 +1770,8 @@ static bool batadv_tt_global_add(struct batadv_priv *bat_priv,
|
||||
* TT_CLIENT_TEMP, therefore they have to be copied in the
|
||||
* client entry
|
||||
*/
|
||||
common->flags |= flags & (~BATADV_TT_SYNC_MASK);
|
||||
if (!is_multicast_ether_addr(common->addr))
|
||||
common->flags |= flags & (~BATADV_TT_SYNC_MASK);
|
||||
|
||||
/* If there is the BATADV_TT_CLIENT_ROAM flag set, there is only
|
||||
* one originator left in the list and we previously received a
|
||||
|
Loading…
x
Reference in New Issue
Block a user