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

Commit cd753732 authored by stephen hemminger's avatar stephen hemminger Committed by David S. Miller
Browse files

bridge: add template for bridge port flags



Provide macro to build sysfs data structures and functions
for accessing flag bits.  If flag bits change do netlink
notification.

Signed-off-by: default avatarStephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 25c71c75
Loading
Loading
Loading
Loading
+23 −15
Original line number Diff line number Diff line
@@ -34,6 +34,28 @@ const struct brport_attribute brport_attr_##_name = { \
	.store	= _store,					\
};

#define BRPORT_ATTR_FLAG(_name, _mask)				\
static ssize_t show_##_name(struct net_bridge_port *p, char *buf) \
{								\
	return sprintf(buf, "%d\n", !!(p->flags & _mask));	\
}								\
static int store_##_name(struct net_bridge_port *p, unsigned long v) \
{								\
	unsigned long flags = p->flags;				\
	if (v)							\
		flags |= _mask;					\
	else							\
		flags &= ~_mask;				\
	if (flags != p->flags) {				\
		p->flags = flags;				\
		br_ifinfo_notify(RTM_NEWLINK, p);		\
	}							\
	return 0;						\
}								\
static BRPORT_ATTR(_name, S_IRUGO | S_IWUSR,			\
		   show_##_name, store_##_name)


static ssize_t show_path_cost(struct net_bridge_port *p, char *buf)
{
	return sprintf(buf, "%d\n", p->path_cost);
@@ -133,21 +155,7 @@ static int store_flush(struct net_bridge_port *p, unsigned long v)
}
static BRPORT_ATTR(flush, S_IWUSR, NULL, store_flush);

static ssize_t show_hairpin_mode(struct net_bridge_port *p, char *buf)
{
	int hairpin_mode = (p->flags & BR_HAIRPIN_MODE) ? 1 : 0;
	return sprintf(buf, "%d\n", hairpin_mode);
}
static int store_hairpin_mode(struct net_bridge_port *p, unsigned long v)
{
	if (v)
		p->flags |= BR_HAIRPIN_MODE;
	else
		p->flags &= ~BR_HAIRPIN_MODE;
	return 0;
}
static BRPORT_ATTR(hairpin_mode, S_IRUGO | S_IWUSR,
		   show_hairpin_mode, store_hairpin_mode);
BRPORT_ATTR_FLAG(hairpin_mode, BR_HAIRPIN_MODE);

#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
static ssize_t show_multicast_router(struct net_bridge_port *p, char *buf)