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

Commit 9d853f62 authored by Linus Lüssing's avatar Linus Lüssing Committed by Antonio Quartulli
Browse files

batman-adv: Adding hard_iface specific sysfs wrapper macros for UINT



This allows us to easily add a sysfs parameter for an unsigned int
later, which is not for a batman mesh interface (e.g. bat0), but for a
common interface instead. It allows reading and writing an atomic_t in
hard_iface (instead of bat_priv compared to the mesh variant).

Developed by Linus during a 6 months trainee study period in Ascom
(Switzerland) AG.

Signed-off-by: default avatarLinus Luessing <linus.luessing@web.de>
Signed-off-by: default avatarMarek Lindner <lindner_marek@yahoo.de>
parent f245c38b
Loading
Loading
Loading
Loading
+43 −0
Original line number Diff line number Diff line
@@ -117,6 +117,49 @@ ssize_t show_##_name(struct kobject *kobj, \
	static BAT_ATTR(_name, _mode, show_##_name, store_##_name)


#define BAT_ATTR_HIF_STORE_UINT(_name, _min, _max, _post_func)		\
ssize_t store_##_name(struct kobject *kobj, struct attribute *attr,	\
		      char *buff, size_t count)				\
{									\
	struct net_device *net_dev = kobj_to_netdev(kobj);		\
	struct hard_iface *hard_iface = hardif_get_by_netdev(net_dev);	\
	ssize_t length;							\
									\
	if (!hard_iface)						\
		return 0;						\
									\
	length = __store_uint_attr(buff, count, _min, _max, _post_func,	\
				   attr, &hard_iface->_name, net_dev);	\
									\
	hardif_free_ref(hard_iface);					\
	return length;							\
}

#define BAT_ATTR_HIF_SHOW_UINT(_name)					\
ssize_t show_##_name(struct kobject *kobj,				\
		     struct attribute *attr, char *buff)		\
{									\
	struct net_device *net_dev = kobj_to_netdev(kobj);		\
	struct hard_iface *hard_iface = hardif_get_by_netdev(net_dev);	\
	ssize_t length;							\
									\
	if (!hard_iface)						\
		return 0;						\
									\
	length = sprintf(buff, "%i\n", atomic_read(&hard_iface->_name));\
									\
	hardif_free_ref(hard_iface);					\
	return length;							\
}

/* Use this, if you are going to set [name] in hard_iface to an
 * unsigned integer value*/
#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_SHOW_UINT(_name)				\
	static BAT_ATTR(_name, _mode, show_##_name, store_##_name)


static int store_bool_attr(char *buff, size_t count,
			   struct net_device *net_dev,
			   const char *attr_name, atomic_t *attr)