Skip to content

Commit d902eee

Browse files
herbertxdavem330
authored andcommitted
bridge: Add multicast count/interval sysfs entries
This patch allows the user to the IGMP parameters related to the snooping function of the bridge. This includes various time values and retransmission limits. Signed-off-by: Herbert Xu <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent b195167 commit d902eee

File tree

1 file changed

+203
-0
lines changed

1 file changed

+203
-0
lines changed

net/bridge/br_sysfs_br.c

Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,201 @@ static ssize_t store_hash_max(struct device *d, struct device_attribute *attr,
415415
}
416416
static DEVICE_ATTR(hash_max, S_IRUGO | S_IWUSR, show_hash_max,
417417
store_hash_max);
418+
419+
static ssize_t show_multicast_last_member_count(struct device *d,
420+
struct device_attribute *attr,
421+
char *buf)
422+
{
423+
struct net_bridge *br = to_bridge(d);
424+
return sprintf(buf, "%u\n", br->multicast_last_member_count);
425+
}
426+
427+
static int set_last_member_count(struct net_bridge *br, unsigned long val)
428+
{
429+
br->multicast_last_member_count = val;
430+
return 0;
431+
}
432+
433+
static ssize_t store_multicast_last_member_count(struct device *d,
434+
struct device_attribute *attr,
435+
const char *buf, size_t len)
436+
{
437+
return store_bridge_parm(d, buf, len, set_last_member_count);
438+
}
439+
static DEVICE_ATTR(multicast_last_member_count, S_IRUGO | S_IWUSR,
440+
show_multicast_last_member_count,
441+
store_multicast_last_member_count);
442+
443+
static ssize_t show_multicast_startup_query_count(
444+
struct device *d, struct device_attribute *attr, char *buf)
445+
{
446+
struct net_bridge *br = to_bridge(d);
447+
return sprintf(buf, "%u\n", br->multicast_startup_query_count);
448+
}
449+
450+
static int set_startup_query_count(struct net_bridge *br, unsigned long val)
451+
{
452+
br->multicast_startup_query_count = val;
453+
return 0;
454+
}
455+
456+
static ssize_t store_multicast_startup_query_count(
457+
struct device *d, struct device_attribute *attr, const char *buf,
458+
size_t len)
459+
{
460+
return store_bridge_parm(d, buf, len, set_startup_query_count);
461+
}
462+
static DEVICE_ATTR(multicast_startup_query_count, S_IRUGO | S_IWUSR,
463+
show_multicast_startup_query_count,
464+
store_multicast_startup_query_count);
465+
466+
static ssize_t show_multicast_last_member_interval(
467+
struct device *d, struct device_attribute *attr, char *buf)
468+
{
469+
struct net_bridge *br = to_bridge(d);
470+
return sprintf(buf, "%lu\n",
471+
jiffies_to_clock_t(br->multicast_last_member_interval));
472+
}
473+
474+
static int set_last_member_interval(struct net_bridge *br, unsigned long val)
475+
{
476+
br->multicast_last_member_interval = clock_t_to_jiffies(val);
477+
return 0;
478+
}
479+
480+
static ssize_t store_multicast_last_member_interval(
481+
struct device *d, struct device_attribute *attr, const char *buf,
482+
size_t len)
483+
{
484+
return store_bridge_parm(d, buf, len, set_last_member_interval);
485+
}
486+
static DEVICE_ATTR(multicast_last_member_interval, S_IRUGO | S_IWUSR,
487+
show_multicast_last_member_interval,
488+
store_multicast_last_member_interval);
489+
490+
static ssize_t show_multicast_membership_interval(
491+
struct device *d, struct device_attribute *attr, char *buf)
492+
{
493+
struct net_bridge *br = to_bridge(d);
494+
return sprintf(buf, "%lu\n",
495+
jiffies_to_clock_t(br->multicast_membership_interval));
496+
}
497+
498+
static int set_membership_interval(struct net_bridge *br, unsigned long val)
499+
{
500+
br->multicast_membership_interval = clock_t_to_jiffies(val);
501+
return 0;
502+
}
503+
504+
static ssize_t store_multicast_membership_interval(
505+
struct device *d, struct device_attribute *attr, const char *buf,
506+
size_t len)
507+
{
508+
return store_bridge_parm(d, buf, len, set_membership_interval);
509+
}
510+
static DEVICE_ATTR(multicast_membership_interval, S_IRUGO | S_IWUSR,
511+
show_multicast_membership_interval,
512+
store_multicast_membership_interval);
513+
514+
static ssize_t show_multicast_querier_interval(struct device *d,
515+
struct device_attribute *attr,
516+
char *buf)
517+
{
518+
struct net_bridge *br = to_bridge(d);
519+
return sprintf(buf, "%lu\n",
520+
jiffies_to_clock_t(br->multicast_querier_interval));
521+
}
522+
523+
static int set_querier_interval(struct net_bridge *br, unsigned long val)
524+
{
525+
br->multicast_querier_interval = clock_t_to_jiffies(val);
526+
return 0;
527+
}
528+
529+
static ssize_t store_multicast_querier_interval(struct device *d,
530+
struct device_attribute *attr,
531+
const char *buf, size_t len)
532+
{
533+
return store_bridge_parm(d, buf, len, set_querier_interval);
534+
}
535+
static DEVICE_ATTR(multicast_querier_interval, S_IRUGO | S_IWUSR,
536+
show_multicast_querier_interval,
537+
store_multicast_querier_interval);
538+
539+
static ssize_t show_multicast_query_interval(struct device *d,
540+
struct device_attribute *attr,
541+
char *buf)
542+
{
543+
struct net_bridge *br = to_bridge(d);
544+
return sprintf(buf, "%lu\n",
545+
jiffies_to_clock_t(br->multicast_query_interval));
546+
}
547+
548+
static int set_query_interval(struct net_bridge *br, unsigned long val)
549+
{
550+
br->multicast_query_interval = clock_t_to_jiffies(val);
551+
return 0;
552+
}
553+
554+
static ssize_t store_multicast_query_interval(struct device *d,
555+
struct device_attribute *attr,
556+
const char *buf, size_t len)
557+
{
558+
return store_bridge_parm(d, buf, len, set_query_interval);
559+
}
560+
static DEVICE_ATTR(multicast_query_interval, S_IRUGO | S_IWUSR,
561+
show_multicast_query_interval,
562+
store_multicast_query_interval);
563+
564+
static ssize_t show_multicast_query_response_interval(
565+
struct device *d, struct device_attribute *attr, char *buf)
566+
{
567+
struct net_bridge *br = to_bridge(d);
568+
return sprintf(
569+
buf, "%lu\n",
570+
jiffies_to_clock_t(br->multicast_query_response_interval));
571+
}
572+
573+
static int set_query_response_interval(struct net_bridge *br, unsigned long val)
574+
{
575+
br->multicast_query_response_interval = clock_t_to_jiffies(val);
576+
return 0;
577+
}
578+
579+
static ssize_t store_multicast_query_response_interval(
580+
struct device *d, struct device_attribute *attr, const char *buf,
581+
size_t len)
582+
{
583+
return store_bridge_parm(d, buf, len, set_query_response_interval);
584+
}
585+
static DEVICE_ATTR(multicast_query_response_interval, S_IRUGO | S_IWUSR,
586+
show_multicast_query_response_interval,
587+
store_multicast_query_response_interval);
588+
589+
static ssize_t show_multicast_startup_query_interval(
590+
struct device *d, struct device_attribute *attr, char *buf)
591+
{
592+
struct net_bridge *br = to_bridge(d);
593+
return sprintf(
594+
buf, "%lu\n",
595+
jiffies_to_clock_t(br->multicast_startup_query_interval));
596+
}
597+
598+
static int set_startup_query_interval(struct net_bridge *br, unsigned long val)
599+
{
600+
br->multicast_startup_query_interval = clock_t_to_jiffies(val);
601+
return 0;
602+
}
603+
604+
static ssize_t store_multicast_startup_query_interval(
605+
struct device *d, struct device_attribute *attr, const char *buf,
606+
size_t len)
607+
{
608+
return store_bridge_parm(d, buf, len, set_startup_query_interval);
609+
}
610+
static DEVICE_ATTR(multicast_startup_query_interval, S_IRUGO | S_IWUSR,
611+
show_multicast_startup_query_interval,
612+
store_multicast_startup_query_interval);
418613
#endif
419614

420615
static struct attribute *bridge_attrs[] = {
@@ -441,6 +636,14 @@ static struct attribute *bridge_attrs[] = {
441636
&dev_attr_multicast_snooping.attr,
442637
&dev_attr_hash_elasticity.attr,
443638
&dev_attr_hash_max.attr,
639+
&dev_attr_multicast_last_member_count.attr,
640+
&dev_attr_multicast_startup_query_count.attr,
641+
&dev_attr_multicast_last_member_interval.attr,
642+
&dev_attr_multicast_membership_interval.attr,
643+
&dev_attr_multicast_querier_interval.attr,
644+
&dev_attr_multicast_query_interval.attr,
645+
&dev_attr_multicast_query_response_interval.attr,
646+
&dev_attr_multicast_startup_query_interval.attr,
444647
#endif
445648
NULL
446649
};

0 commit comments

Comments
 (0)