Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0ff9b86f authored by Sven Eckelmann's avatar Sven Eckelmann Committed by Antonio Quartulli
Browse files

batman-adv: Prefix bat_sysfs local static functions with batadv_



All non-static symbols of batman-adv were prefixed with batadv_ to avoid
collisions with other symbols of the kernel. Other symbols of batman-adv
should use the same prefix to keep the naming scheme consistent.

Signed-off-by: default avatarSven Eckelmann <sven@narfation.org>
parent fe8bc396
Loading
Loading
Loading
Loading
+138 −117
Original line number Original line Diff line number Diff line
@@ -26,15 +26,15 @@
#include "gateway_client.h"
#include "gateway_client.h"
#include "vis.h"
#include "vis.h"


static struct net_device *kobj_to_netdev(struct kobject *obj)
static struct net_device *batadv_kobj_to_netdev(struct kobject *obj)
{
{
	struct device *dev = container_of(obj->parent, struct device, kobj);
	struct device *dev = container_of(obj->parent, struct device, kobj);
	return to_net_dev(dev);
	return to_net_dev(dev);
}
}


static struct bat_priv *kobj_to_batpriv(struct kobject *obj)
static struct bat_priv *batadv_kobj_to_batpriv(struct kobject *obj)
{
{
	struct net_device *net_dev = kobj_to_netdev(obj);
	struct net_device *net_dev = batadv_kobj_to_netdev(obj);
	return netdev_priv(net_dev);
	return netdev_priv(net_dev);
}
}


@@ -42,19 +42,19 @@ static struct bat_priv *kobj_to_batpriv(struct kobject *obj)
#define UEV_ACTION_VAR	"BATACTION="
#define UEV_ACTION_VAR	"BATACTION="
#define UEV_DATA_VAR	"BATDATA="
#define UEV_DATA_VAR	"BATDATA="


static char *uev_action_str[] = {
static char *batadv_uev_action_str[] = {
	"add",
	"add",
	"del",
	"del",
	"change"
	"change"
};
};


static char *uev_type_str[] = {
static char *batadv_uev_type_str[] = {
	"gw"
	"gw"
};
};


/* Use this, if you have customized show and store functions */
/* Use this, if you have customized show and store functions */
#define BAT_ATTR(_name, _mode, _show, _store)	\
#define BAT_ATTR(_name, _mode, _show, _store)	\
struct bat_attribute bat_attr_##_name = {	\
struct bat_attribute batadv_attr_##_name = {	\
	.attr = {.name = __stringify(_name),	\
	.attr = {.name = __stringify(_name),	\
		 .mode = _mode },		\
		 .mode = _mode },		\
	.show   = _show,			\
	.show   = _show,			\
@@ -62,20 +62,21 @@ struct bat_attribute bat_attr_##_name = { \
};
};


#define BAT_ATTR_SIF_STORE_BOOL(_name, _post_func)			\
#define BAT_ATTR_SIF_STORE_BOOL(_name, _post_func)			\
ssize_t store_##_name(struct kobject *kobj, struct attribute *attr,	\
ssize_t batadv_store_##_name(struct kobject *kobj,			\
		      char *buff, size_t count)				\
			     struct attribute *attr, char *buff,	\
			     size_t count)				\
{									\
{									\
	struct net_device *net_dev = kobj_to_netdev(kobj);		\
	struct net_device *net_dev = batadv_kobj_to_netdev(kobj);	\
	struct bat_priv *bat_priv = netdev_priv(net_dev);		\
	struct bat_priv *bat_priv = netdev_priv(net_dev);		\
	return __store_bool_attr(buff, count, _post_func, attr,		\
	return __batadv_store_bool_attr(buff, count, _post_func, attr,	\
					&bat_priv->_name, net_dev);	\
					&bat_priv->_name, net_dev);	\
}
}


#define BAT_ATTR_SIF_SHOW_BOOL(_name)					\
#define BAT_ATTR_SIF_SHOW_BOOL(_name)					\
ssize_t show_##_name(struct kobject *kobj,				\
ssize_t batadv_show_##_name(struct kobject *kobj,			\
			    struct attribute *attr, char *buff)		\
			    struct attribute *attr, char *buff)		\
{									\
{									\
	struct bat_priv *bat_priv = kobj_to_batpriv(kobj);		\
	struct bat_priv *bat_priv = batadv_kobj_to_batpriv(kobj);	\
	return sprintf(buff, "%s\n",					\
	return sprintf(buff, "%s\n",					\
		       atomic_read(&bat_priv->_name) == 0 ?		\
		       atomic_read(&bat_priv->_name) == 0 ?		\
		       "disabled" : "enabled");				\
		       "disabled" : "enabled");				\
@@ -87,24 +88,27 @@ ssize_t show_##_name(struct kobject *kobj, \
#define BAT_ATTR_SIF_BOOL(_name, _mode, _post_func)			\
#define BAT_ATTR_SIF_BOOL(_name, _mode, _post_func)			\
	static BAT_ATTR_SIF_STORE_BOOL(_name, _post_func)		\
	static BAT_ATTR_SIF_STORE_BOOL(_name, _post_func)		\
	static BAT_ATTR_SIF_SHOW_BOOL(_name)				\
	static BAT_ATTR_SIF_SHOW_BOOL(_name)				\
	static BAT_ATTR(_name, _mode, show_##_name, store_##_name)
	static BAT_ATTR(_name, _mode, batadv_show_##_name,		\
			batadv_store_##_name)




#define BAT_ATTR_SIF_STORE_UINT(_name, _min, _max, _post_func)		\
#define BAT_ATTR_SIF_STORE_UINT(_name, _min, _max, _post_func)		\
ssize_t store_##_name(struct kobject *kobj, struct attribute *attr,	\
ssize_t batadv_store_##_name(struct kobject *kobj,			\
		      char *buff, size_t count)				\
			     struct attribute *attr, char *buff,	\
			     size_t count)				\
{									\
{									\
	struct net_device *net_dev = kobj_to_netdev(kobj);		\
	struct net_device *net_dev = batadv_kobj_to_netdev(kobj);	\
	struct bat_priv *bat_priv = netdev_priv(net_dev);		\
	struct bat_priv *bat_priv = netdev_priv(net_dev);		\
	return __store_uint_attr(buff, count, _min, _max, _post_func,	\
	return __batadv_store_uint_attr(buff, count, _min, _max,	\
				 attr, &bat_priv->_name, net_dev);	\
					_post_func, attr,		\
					&bat_priv->_name, net_dev);	\
}
}


#define BAT_ATTR_SIF_SHOW_UINT(_name)					\
#define BAT_ATTR_SIF_SHOW_UINT(_name)					\
ssize_t show_##_name(struct kobject *kobj,				\
ssize_t batadv_show_##_name(struct kobject *kobj,			\
			    struct attribute *attr, char *buff)		\
			    struct attribute *attr, char *buff)		\
{									\
{									\
	struct bat_priv *bat_priv = kobj_to_batpriv(kobj);		\
	struct bat_priv *bat_priv = batadv_kobj_to_batpriv(kobj);	\
	return sprintf(buff, "%i\n", atomic_read(&bat_priv->_name));	\
	return sprintf(buff, "%i\n", atomic_read(&bat_priv->_name));	\
}									\
}									\


@@ -114,14 +118,16 @@ ssize_t show_##_name(struct kobject *kobj, \
#define BAT_ATTR_SIF_UINT(_name, _mode, _min, _max, _post_func)		\
#define BAT_ATTR_SIF_UINT(_name, _mode, _min, _max, _post_func)		\
	static BAT_ATTR_SIF_STORE_UINT(_name, _min, _max, _post_func)	\
	static BAT_ATTR_SIF_STORE_UINT(_name, _min, _max, _post_func)	\
	static BAT_ATTR_SIF_SHOW_UINT(_name)				\
	static BAT_ATTR_SIF_SHOW_UINT(_name)				\
	static BAT_ATTR(_name, _mode, show_##_name, store_##_name)
	static BAT_ATTR(_name, _mode, batadv_show_##_name,		\
			batadv_store_##_name)




#define BAT_ATTR_HIF_STORE_UINT(_name, _min, _max, _post_func)		\
#define BAT_ATTR_HIF_STORE_UINT(_name, _min, _max, _post_func)		\
ssize_t store_##_name(struct kobject *kobj, struct attribute *attr,	\
ssize_t batadv_store_##_name(struct kobject *kobj,			\
		      char *buff, size_t count)				\
			     struct attribute *attr, char *buff,	\
			     size_t count)				\
{									\
{									\
	struct net_device *net_dev = kobj_to_netdev(kobj);		\
	struct net_device *net_dev = batadv_kobj_to_netdev(kobj);	\
	struct hard_iface *hard_iface;					\
	struct hard_iface *hard_iface;					\
	ssize_t length;							\
	ssize_t length;							\
									\
									\
@@ -129,18 +135,19 @@ ssize_t store_##_name(struct kobject *kobj, struct attribute *attr, \
	if (!hard_iface)						\
	if (!hard_iface)						\
		return 0;						\
		return 0;						\
									\
									\
	length = __store_uint_attr(buff, count, _min, _max, _post_func,	\
	length = __batadv_store_uint_attr(buff, count, _min, _max,	\
				   attr, &hard_iface->_name, net_dev);	\
					  _post_func, attr,		\
					  &hard_iface->_name, net_dev);	\
									\
									\
	batadv_hardif_free_ref(hard_iface);				\
	batadv_hardif_free_ref(hard_iface);				\
	return length;							\
	return length;							\
}
}


#define BAT_ATTR_HIF_SHOW_UINT(_name)					\
#define BAT_ATTR_HIF_SHOW_UINT(_name)					\
ssize_t show_##_name(struct kobject *kobj,				\
ssize_t batadv_show_##_name(struct kobject *kobj,			\
			    struct attribute *attr, char *buff)		\
			    struct attribute *attr, char *buff)		\
{									\
{									\
	struct net_device *net_dev = kobj_to_netdev(kobj);		\
	struct net_device *net_dev = batadv_kobj_to_netdev(kobj);	\
	struct hard_iface *hard_iface;					\
	struct hard_iface *hard_iface;					\
	ssize_t length;							\
	ssize_t length;							\
									\
									\
@@ -160,10 +167,11 @@ ssize_t show_##_name(struct kobject *kobj, \
#define BAT_ATTR_HIF_UINT(_name, _mode, _min, _max, _post_func)		\
#define BAT_ATTR_HIF_UINT(_name, _mode, _min, _max, _post_func)		\
	static BAT_ATTR_HIF_STORE_UINT(_name, _min, _max, _post_func)	\
	static BAT_ATTR_HIF_STORE_UINT(_name, _min, _max, _post_func)	\
	static BAT_ATTR_HIF_SHOW_UINT(_name)				\
	static BAT_ATTR_HIF_SHOW_UINT(_name)				\
	static BAT_ATTR(_name, _mode, show_##_name, store_##_name)
	static BAT_ATTR(_name, _mode, batadv_show_##_name,		\
			batadv_store_##_name)




static int store_bool_attr(char *buff, size_t count,
static int batadv_store_bool_attr(char *buff, size_t count,
				  struct net_device *net_dev,
				  struct net_device *net_dev,
				  const char *attr_name, atomic_t *attr)
				  const char *attr_name, atomic_t *attr)
{
{
@@ -200,23 +208,27 @@ static int store_bool_attr(char *buff, size_t count,
	return count;
	return count;
}
}


static inline ssize_t __store_bool_attr(char *buff, size_t count,
static inline ssize_t
__batadv_store_bool_attr(char *buff, size_t count,
			 void (*post_func)(struct net_device *),
			 void (*post_func)(struct net_device *),
			 struct attribute *attr,
			 struct attribute *attr,
			 atomic_t *attr_store, struct net_device *net_dev)
			 atomic_t *attr_store, struct net_device *net_dev)
{
{
	int ret;
	int ret;


	ret = store_bool_attr(buff, count, net_dev, attr->name, attr_store);
	ret = batadv_store_bool_attr(buff, count, net_dev, attr->name,
				     attr_store);
	if (post_func && ret)
	if (post_func && ret)
		post_func(net_dev);
		post_func(net_dev);


	return ret;
	return ret;
}
}


static int store_uint_attr(const char *buff, size_t count,
static int batadv_store_uint_attr(const char *buff, size_t count,
			   struct net_device *net_dev, const char *attr_name,
				  struct net_device *net_dev,
			   unsigned int min, unsigned int max, atomic_t *attr)
				  const char *attr_name,
				  unsigned int min, unsigned int max,
				  atomic_t *attr)
{
{
	unsigned long uint_val;
	unsigned long uint_val;
	int ret;
	int ret;
@@ -251,7 +263,8 @@ static int store_uint_attr(const char *buff, size_t count,
	return count;
	return count;
}
}


static inline ssize_t __store_uint_attr(const char *buff, size_t count,
static inline ssize_t
__batadv_store_uint_attr(const char *buff, size_t count,
			 int min, int max,
			 int min, int max,
			 void (*post_func)(struct net_device *),
			 void (*post_func)(struct net_device *),
			 const struct attribute *attr,
			 const struct attribute *attr,
@@ -259,18 +272,18 @@ static inline ssize_t __store_uint_attr(const char *buff, size_t count,
{
{
	int ret;
	int ret;


	ret = store_uint_attr(buff, count, net_dev, attr->name,
	ret = batadv_store_uint_attr(buff, count, net_dev, attr->name, min, max,
			      min, max, attr_store);
				     attr_store);
	if (post_func && ret)
	if (post_func && ret)
		post_func(net_dev);
		post_func(net_dev);


	return ret;
	return ret;
}
}


static ssize_t show_vis_mode(struct kobject *kobj, struct attribute *attr,
static ssize_t batadv_show_vis_mode(struct kobject *kobj,
			     char *buff)
				    struct attribute *attr, char *buff)
{
{
	struct bat_priv *bat_priv = kobj_to_batpriv(kobj);
	struct bat_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
	int vis_mode = atomic_read(&bat_priv->vis_mode);
	int vis_mode = atomic_read(&bat_priv->vis_mode);


	return sprintf(buff, "%s\n",
	return sprintf(buff, "%s\n",
@@ -278,10 +291,11 @@ static ssize_t show_vis_mode(struct kobject *kobj, struct attribute *attr,
							"client" : "server");
							"client" : "server");
}
}


static ssize_t store_vis_mode(struct kobject *kobj, struct attribute *attr,
static ssize_t batadv_store_vis_mode(struct kobject *kobj,
			      char *buff, size_t count)
				     struct attribute *attr, char *buff,
				     size_t count)
{
{
	struct net_device *net_dev = kobj_to_netdev(kobj);
	struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
	struct bat_priv *bat_priv = netdev_priv(net_dev);
	struct bat_priv *bat_priv = netdev_priv(net_dev);
	unsigned long val;
	unsigned long val;
	int ret, vis_mode_tmp = -1;
	int ret, vis_mode_tmp = -1;
@@ -319,23 +333,23 @@ static ssize_t store_vis_mode(struct kobject *kobj, struct attribute *attr,
	return count;
	return count;
}
}


static ssize_t show_bat_algo(struct kobject *kobj, struct attribute *attr,
static ssize_t batadv_show_bat_algo(struct kobject *kobj,
			    char *buff)
				    struct attribute *attr, char *buff)
{
{
	struct bat_priv *bat_priv = kobj_to_batpriv(kobj);
	struct bat_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
	return sprintf(buff, "%s\n", bat_priv->bat_algo_ops->name);
	return sprintf(buff, "%s\n", bat_priv->bat_algo_ops->name);
}
}


static void post_gw_deselect(struct net_device *net_dev)
static void batadv_post_gw_deselect(struct net_device *net_dev)
{
{
	struct bat_priv *bat_priv = netdev_priv(net_dev);
	struct bat_priv *bat_priv = netdev_priv(net_dev);
	batadv_gw_deselect(bat_priv);
	batadv_gw_deselect(bat_priv);
}
}


static ssize_t show_gw_mode(struct kobject *kobj, struct attribute *attr,
static ssize_t batadv_show_gw_mode(struct kobject *kobj, struct attribute *attr,
				   char *buff)
				   char *buff)
{
{
	struct bat_priv *bat_priv = kobj_to_batpriv(kobj);
	struct bat_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
	int bytes_written;
	int bytes_written;


	switch (atomic_read(&bat_priv->gw_mode)) {
	switch (atomic_read(&bat_priv->gw_mode)) {
@@ -353,10 +367,11 @@ static ssize_t show_gw_mode(struct kobject *kobj, struct attribute *attr,
	return bytes_written;
	return bytes_written;
}
}


static ssize_t store_gw_mode(struct kobject *kobj, struct attribute *attr,
static ssize_t batadv_store_gw_mode(struct kobject *kobj,
			     char *buff, size_t count)
				    struct attribute *attr, char *buff,
				    size_t count)
{
{
	struct net_device *net_dev = kobj_to_netdev(kobj);
	struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
	struct bat_priv *bat_priv = netdev_priv(net_dev);
	struct bat_priv *bat_priv = netdev_priv(net_dev);
	char *curr_gw_mode_str;
	char *curr_gw_mode_str;
	int gw_mode_tmp = -1;
	int gw_mode_tmp = -1;
@@ -405,10 +420,10 @@ static ssize_t store_gw_mode(struct kobject *kobj, struct attribute *attr,
	return count;
	return count;
}
}


static ssize_t show_gw_bwidth(struct kobject *kobj, struct attribute *attr,
static ssize_t batadv_show_gw_bwidth(struct kobject *kobj,
			      char *buff)
				     struct attribute *attr, char *buff)
{
{
	struct bat_priv *bat_priv = kobj_to_batpriv(kobj);
	struct bat_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
	int down, up;
	int down, up;
	int gw_bandwidth = atomic_read(&bat_priv->gw_bandwidth);
	int gw_bandwidth = atomic_read(&bat_priv->gw_bandwidth);


@@ -420,10 +435,11 @@ static ssize_t show_gw_bwidth(struct kobject *kobj, struct attribute *attr,
		       (up > 2048 ? "MBit" : "KBit"));
		       (up > 2048 ? "MBit" : "KBit"));
}
}


static ssize_t store_gw_bwidth(struct kobject *kobj, struct attribute *attr,
static ssize_t batadv_store_gw_bwidth(struct kobject *kobj,
			       char *buff, size_t count)
				      struct attribute *attr, char *buff,
				      size_t count)
{
{
	struct net_device *net_dev = kobj_to_netdev(kobj);
	struct net_device *net_dev = batadv_kobj_to_netdev(kobj);


	if (buff[count - 1] == '\n')
	if (buff[count - 1] == '\n')
		buff[count - 1] = '\0';
		buff[count - 1] = '\0';
@@ -438,36 +454,38 @@ BAT_ATTR_SIF_BOOL(bridge_loop_avoidance, S_IRUGO | S_IWUSR, NULL);
#endif
#endif
BAT_ATTR_SIF_BOOL(fragmentation, S_IRUGO | S_IWUSR, batadv_update_min_mtu);
BAT_ATTR_SIF_BOOL(fragmentation, S_IRUGO | S_IWUSR, batadv_update_min_mtu);
BAT_ATTR_SIF_BOOL(ap_isolation, S_IRUGO | S_IWUSR, NULL);
BAT_ATTR_SIF_BOOL(ap_isolation, S_IRUGO | S_IWUSR, NULL);
static BAT_ATTR(vis_mode, S_IRUGO | S_IWUSR, show_vis_mode, store_vis_mode);
static BAT_ATTR(vis_mode, S_IRUGO | S_IWUSR, batadv_show_vis_mode,
static BAT_ATTR(routing_algo, S_IRUGO, show_bat_algo, NULL);
		batadv_store_vis_mode);
static BAT_ATTR(gw_mode, S_IRUGO | S_IWUSR, show_gw_mode, store_gw_mode);
static BAT_ATTR(routing_algo, S_IRUGO, batadv_show_bat_algo, NULL);
static BAT_ATTR(gw_mode, S_IRUGO | S_IWUSR, batadv_show_gw_mode,
		batadv_store_gw_mode);
BAT_ATTR_SIF_UINT(orig_interval, S_IRUGO | S_IWUSR, 2 * JITTER, INT_MAX, NULL);
BAT_ATTR_SIF_UINT(orig_interval, S_IRUGO | S_IWUSR, 2 * JITTER, INT_MAX, NULL);
BAT_ATTR_SIF_UINT(hop_penalty, S_IRUGO | S_IWUSR, 0, TQ_MAX_VALUE, NULL);
BAT_ATTR_SIF_UINT(hop_penalty, S_IRUGO | S_IWUSR, 0, TQ_MAX_VALUE, NULL);
BAT_ATTR_SIF_UINT(gw_sel_class, S_IRUGO | S_IWUSR, 1, TQ_MAX_VALUE,
BAT_ATTR_SIF_UINT(gw_sel_class, S_IRUGO | S_IWUSR, 1, TQ_MAX_VALUE,
		  post_gw_deselect);
		  batadv_post_gw_deselect);
static BAT_ATTR(gw_bandwidth, S_IRUGO | S_IWUSR, show_gw_bwidth,
static BAT_ATTR(gw_bandwidth, S_IRUGO | S_IWUSR, batadv_show_gw_bwidth,
		store_gw_bwidth);
		batadv_store_gw_bwidth);
#ifdef CONFIG_BATMAN_ADV_DEBUG
#ifdef CONFIG_BATMAN_ADV_DEBUG
BAT_ATTR_SIF_UINT(log_level, S_IRUGO | S_IWUSR, 0, DBG_ALL, NULL);
BAT_ATTR_SIF_UINT(log_level, S_IRUGO | S_IWUSR, 0, DBG_ALL, NULL);
#endif
#endif


static struct bat_attribute *mesh_attrs[] = {
static struct bat_attribute *batadv_mesh_attrs[] = {
	&bat_attr_aggregated_ogms,
	&batadv_attr_aggregated_ogms,
	&bat_attr_bonding,
	&batadv_attr_bonding,
#ifdef CONFIG_BATMAN_ADV_BLA
#ifdef CONFIG_BATMAN_ADV_BLA
	&bat_attr_bridge_loop_avoidance,
	&batadv_attr_bridge_loop_avoidance,
#endif
#endif
	&bat_attr_fragmentation,
	&batadv_attr_fragmentation,
	&bat_attr_ap_isolation,
	&batadv_attr_ap_isolation,
	&bat_attr_vis_mode,
	&batadv_attr_vis_mode,
	&bat_attr_routing_algo,
	&batadv_attr_routing_algo,
	&bat_attr_gw_mode,
	&batadv_attr_gw_mode,
	&bat_attr_orig_interval,
	&batadv_attr_orig_interval,
	&bat_attr_hop_penalty,
	&batadv_attr_hop_penalty,
	&bat_attr_gw_sel_class,
	&batadv_attr_gw_sel_class,
	&bat_attr_gw_bandwidth,
	&batadv_attr_gw_bandwidth,
#ifdef CONFIG_BATMAN_ADV_DEBUG
#ifdef CONFIG_BATMAN_ADV_DEBUG
	&bat_attr_log_level,
	&batadv_attr_log_level,
#endif
#endif
	NULL,
	NULL,
};
};
@@ -487,7 +505,7 @@ int batadv_sysfs_add_meshif(struct net_device *dev)
		goto out;
		goto out;
	}
	}


	for (bat_attr = mesh_attrs; *bat_attr; ++bat_attr) {
	for (bat_attr = batadv_mesh_attrs; *bat_attr; ++bat_attr) {
		err = sysfs_create_file(bat_priv->mesh_obj,
		err = sysfs_create_file(bat_priv->mesh_obj,
					&((*bat_attr)->attr));
					&((*bat_attr)->attr));
		if (err) {
		if (err) {
@@ -501,7 +519,7 @@ int batadv_sysfs_add_meshif(struct net_device *dev)
	return 0;
	return 0;


rem_attr:
rem_attr:
	for (bat_attr = mesh_attrs; *bat_attr; ++bat_attr)
	for (bat_attr = batadv_mesh_attrs; *bat_attr; ++bat_attr)
		sysfs_remove_file(bat_priv->mesh_obj, &((*bat_attr)->attr));
		sysfs_remove_file(bat_priv->mesh_obj, &((*bat_attr)->attr));


	kobject_put(bat_priv->mesh_obj);
	kobject_put(bat_priv->mesh_obj);
@@ -515,17 +533,17 @@ void batadv_sysfs_del_meshif(struct net_device *dev)
	struct bat_priv *bat_priv = netdev_priv(dev);
	struct bat_priv *bat_priv = netdev_priv(dev);
	struct bat_attribute **bat_attr;
	struct bat_attribute **bat_attr;


	for (bat_attr = mesh_attrs; *bat_attr; ++bat_attr)
	for (bat_attr = batadv_mesh_attrs; *bat_attr; ++bat_attr)
		sysfs_remove_file(bat_priv->mesh_obj, &((*bat_attr)->attr));
		sysfs_remove_file(bat_priv->mesh_obj, &((*bat_attr)->attr));


	kobject_put(bat_priv->mesh_obj);
	kobject_put(bat_priv->mesh_obj);
	bat_priv->mesh_obj = NULL;
	bat_priv->mesh_obj = NULL;
}
}


static ssize_t show_mesh_iface(struct kobject *kobj, struct attribute *attr,
static ssize_t batadv_show_mesh_iface(struct kobject *kobj,
			       char *buff)
				      struct attribute *attr, char *buff)
{
{
	struct net_device *net_dev = kobj_to_netdev(kobj);
	struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
	struct hard_iface *hard_iface = batadv_hardif_get_by_netdev(net_dev);
	struct hard_iface *hard_iface = batadv_hardif_get_by_netdev(net_dev);
	ssize_t length;
	ssize_t length;


@@ -540,10 +558,11 @@ static ssize_t show_mesh_iface(struct kobject *kobj, struct attribute *attr,
	return length;
	return length;
}
}


static ssize_t store_mesh_iface(struct kobject *kobj, struct attribute *attr,
static ssize_t batadv_store_mesh_iface(struct kobject *kobj,
				char *buff, size_t count)
				       struct attribute *attr, char *buff,
				       size_t count)
{
{
	struct net_device *net_dev = kobj_to_netdev(kobj);
	struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
	struct hard_iface *hard_iface = batadv_hardif_get_by_netdev(net_dev);
	struct hard_iface *hard_iface = batadv_hardif_get_by_netdev(net_dev);
	int status_tmp = -1;
	int status_tmp = -1;
	int ret = count;
	int ret = count;
@@ -596,10 +615,10 @@ static ssize_t store_mesh_iface(struct kobject *kobj, struct attribute *attr,
	return ret;
	return ret;
}
}


static ssize_t show_iface_status(struct kobject *kobj, struct attribute *attr,
static ssize_t batadv_show_iface_status(struct kobject *kobj,
				 char *buff)
					struct attribute *attr, char *buff)
{
{
	struct net_device *net_dev = kobj_to_netdev(kobj);
	struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
	struct hard_iface *hard_iface = batadv_hardif_get_by_netdev(net_dev);
	struct hard_iface *hard_iface = batadv_hardif_get_by_netdev(net_dev);
	ssize_t length;
	ssize_t length;


@@ -631,12 +650,12 @@ static ssize_t show_iface_status(struct kobject *kobj, struct attribute *attr,
}
}


static BAT_ATTR(mesh_iface, S_IRUGO | S_IWUSR,
static BAT_ATTR(mesh_iface, S_IRUGO | S_IWUSR,
		show_mesh_iface, store_mesh_iface);
		batadv_show_mesh_iface, batadv_store_mesh_iface);
static BAT_ATTR(iface_status, S_IRUGO, show_iface_status, NULL);
static BAT_ATTR(iface_status, S_IRUGO, batadv_show_iface_status, NULL);


static struct bat_attribute *batman_attrs[] = {
static struct bat_attribute *batadv_batman_attrs[] = {
	&bat_attr_mesh_iface,
	&batadv_attr_mesh_iface,
	&bat_attr_iface_status,
	&batadv_attr_iface_status,
	NULL,
	NULL,
};
};


@@ -655,7 +674,7 @@ int batadv_sysfs_add_hardif(struct kobject **hardif_obj, struct net_device *dev)
		goto out;
		goto out;
	}
	}


	for (bat_attr = batman_attrs; *bat_attr; ++bat_attr) {
	for (bat_attr = batadv_batman_attrs; *bat_attr; ++bat_attr) {
		err = sysfs_create_file(*hardif_obj, &((*bat_attr)->attr));
		err = sysfs_create_file(*hardif_obj, &((*bat_attr)->attr));
		if (err) {
		if (err) {
			bat_err(dev, "Can't add sysfs file: %s/%s/%s\n",
			bat_err(dev, "Can't add sysfs file: %s/%s/%s\n",
@@ -668,7 +687,7 @@ int batadv_sysfs_add_hardif(struct kobject **hardif_obj, struct net_device *dev)
	return 0;
	return 0;


rem_attr:
rem_attr:
	for (bat_attr = batman_attrs; *bat_attr; ++bat_attr)
	for (bat_attr = batadv_batman_attrs; *bat_attr; ++bat_attr)
		sysfs_remove_file(*hardif_obj, &((*bat_attr)->attr));
		sysfs_remove_file(*hardif_obj, &((*bat_attr)->attr));
out:
out:
	return -ENOMEM;
	return -ENOMEM;
@@ -695,20 +714,21 @@ int batadv_throw_uevent(struct bat_priv *bat_priv, enum uev_type type,
	bat_kobj = &primary_if->soft_iface->dev.kobj;
	bat_kobj = &primary_if->soft_iface->dev.kobj;


	uevent_env[0] = kmalloc(strlen(UEV_TYPE_VAR) +
	uevent_env[0] = kmalloc(strlen(UEV_TYPE_VAR) +
				strlen(uev_type_str[type]) + 1,
				strlen(batadv_uev_type_str[type]) + 1,
				GFP_ATOMIC);
				GFP_ATOMIC);
	if (!uevent_env[0])
	if (!uevent_env[0])
		goto out;
		goto out;


	sprintf(uevent_env[0], "%s%s", UEV_TYPE_VAR, uev_type_str[type]);
	sprintf(uevent_env[0], "%s%s", UEV_TYPE_VAR, batadv_uev_type_str[type]);


	uevent_env[1] = kmalloc(strlen(UEV_ACTION_VAR) +
	uevent_env[1] = kmalloc(strlen(UEV_ACTION_VAR) +
				strlen(uev_action_str[action]) + 1,
				strlen(batadv_uev_action_str[action]) + 1,
				GFP_ATOMIC);
				GFP_ATOMIC);
	if (!uevent_env[1])
	if (!uevent_env[1])
		goto out;
		goto out;


	sprintf(uevent_env[1], "%s%s", UEV_ACTION_VAR, uev_action_str[action]);
	sprintf(uevent_env[1], "%s%s", UEV_ACTION_VAR,
		batadv_uev_action_str[action]);


	/* If the event is DEL, ignore the data field */
	/* If the event is DEL, ignore the data field */
	if (action != UEV_DEL) {
	if (action != UEV_DEL) {
@@ -732,7 +752,8 @@ int batadv_throw_uevent(struct bat_priv *bat_priv, enum uev_type type,
	if (ret)
	if (ret)
		batadv_dbg(DBG_BATMAN, bat_priv,
		batadv_dbg(DBG_BATMAN, bat_priv,
			   "Impossible to send uevent for (%s,%s,%s) event (err: %d)\n",
			   "Impossible to send uevent for (%s,%s,%s) event (err: %d)\n",
			   uev_type_str[type], uev_action_str[action],
			   batadv_uev_type_str[type],
			   batadv_uev_action_str[action],
			   (action == UEV_DEL ? "NULL" : data), ret);
			   (action == UEV_DEL ? "NULL" : data), ret);
	return ret;
	return ret;
}
}