Lines Matching refs:br

38 static void br_multicast_start_querier(struct net_bridge *br,
138 struct net_bridge_mdb_entry *br_mdb_get(struct net_bridge *br, in br_mdb_get() argument
141 struct net_bridge_mdb_htable *mdb = rcu_dereference(br->mdb); in br_mdb_get()
144 if (br->multicast_disabled) in br_mdb_get()
228 struct net_bridge *br = mp->br; in br_multicast_group_expired() local
231 spin_lock(&br->multicast_lock); in br_multicast_group_expired()
232 if (!netif_running(br->dev) || timer_pending(&mp->timer)) in br_multicast_group_expired()
240 mdb = mlock_dereference(br->mdb, br); in br_multicast_group_expired()
248 spin_unlock(&br->multicast_lock); in br_multicast_group_expired()
251 static void br_multicast_del_pg(struct net_bridge *br, in br_multicast_del_pg() argument
259 mdb = mlock_dereference(br->mdb, br); in br_multicast_del_pg()
266 (p = mlock_dereference(*pp, br)) != NULL; in br_multicast_del_pg()
277 netif_running(br->dev)) in br_multicast_del_pg()
289 struct net_bridge *br = pg->port->br; in br_multicast_port_group_expired() local
291 spin_lock(&br->multicast_lock); in br_multicast_port_group_expired()
292 if (!netif_running(br->dev) || timer_pending(&pg->timer) || in br_multicast_port_group_expired()
296 br_multicast_del_pg(br, pg); in br_multicast_port_group_expired()
299 spin_unlock(&br->multicast_lock); in br_multicast_port_group_expired()
349 static struct sk_buff *br_ip4_multicast_alloc_query(struct net_bridge *br, in br_ip4_multicast_alloc_query() argument
357 skb = netdev_alloc_skb_ip_align(br->dev, sizeof(*eth) + sizeof(*iph) + in br_ip4_multicast_alloc_query()
367 ether_addr_copy(eth->h_source, br->dev->dev_addr); in br_ip4_multicast_alloc_query()
388 iph->saddr = br->multicast_query_use_ifaddr ? in br_ip4_multicast_alloc_query()
389 inet_select_addr(br->dev, 0, RT_SCOPE_LINK) : 0; in br_ip4_multicast_alloc_query()
401 ih->code = (group ? br->multicast_last_member_interval : in br_ip4_multicast_alloc_query()
402 br->multicast_query_response_interval) / in br_ip4_multicast_alloc_query()
416 static struct sk_buff *br_ip6_multicast_alloc_query(struct net_bridge *br, in br_ip6_multicast_alloc_query() argument
426 skb = netdev_alloc_skb_ip_align(br->dev, sizeof(*eth) + sizeof(*ip6h) + in br_ip6_multicast_alloc_query()
437 ether_addr_copy(eth->h_source, br->dev->dev_addr); in br_ip6_multicast_alloc_query()
450 if (ipv6_dev_get_saddr(dev_net(br->dev), br->dev, &ip6h->daddr, 0, in br_ip6_multicast_alloc_query()
474 br->multicast_query_response_interval : in br_ip6_multicast_alloc_query()
475 br->multicast_last_member_interval; in br_ip6_multicast_alloc_query()
498 static struct sk_buff *br_multicast_alloc_query(struct net_bridge *br, in br_multicast_alloc_query() argument
503 return br_ip4_multicast_alloc_query(br, addr->u.ip4); in br_multicast_alloc_query()
506 return br_ip6_multicast_alloc_query(br, &addr->u.ip6); in br_multicast_alloc_query()
513 struct net_bridge *br, struct net_bridge_port *port, in br_multicast_get_group() argument
523 mdb = rcu_dereference_protected(br->mdb, 1); in br_multicast_get_group()
533 if (unlikely(count > br->hash_elasticity && count)) { in br_multicast_get_group()
535 br_info(br, "Multicast hash table " in br_multicast_get_group()
537 port ? port->dev->name : br->dev->name); in br_multicast_get_group()
539 elasticity = br->hash_elasticity; in br_multicast_get_group()
544 if (unlikely(max > br->hash_max)) { in br_multicast_get_group()
545 br_warn(br, "Multicast hash table maximum of %d " in br_multicast_get_group()
547 br->hash_max, in br_multicast_get_group()
548 port ? port->dev->name : br->dev->name); in br_multicast_get_group()
551 br->multicast_disabled = 1; in br_multicast_get_group()
559 br_info(br, "Multicast hash table " in br_multicast_get_group()
561 port ? port->dev->name : br->dev->name); in br_multicast_get_group()
566 err = br_mdb_rehash(&br->mdb, max, elasticity); in br_multicast_get_group()
568 br_warn(br, "Cannot rehash multicast " in br_multicast_get_group()
570 port ? port->dev->name : br->dev->name, in br_multicast_get_group()
586 struct net_bridge_mdb_entry *br_multicast_new_group(struct net_bridge *br, in br_multicast_new_group() argument
594 mdb = rcu_dereference_protected(br->mdb, 1); in br_multicast_new_group()
596 err = br_mdb_rehash(&br->mdb, BR_HASH_SIZE, 0); in br_multicast_new_group()
603 mp = br_multicast_get_group(br, port, group, hash); in br_multicast_new_group()
610 mdb = rcu_dereference_protected(br->mdb, 1); in br_multicast_new_group()
622 mp->br = br; in br_multicast_new_group()
656 static int br_multicast_add_group(struct net_bridge *br, in br_multicast_add_group() argument
666 spin_lock(&br->multicast_lock); in br_multicast_add_group()
667 if (!netif_running(br->dev) || in br_multicast_add_group()
671 mp = br_multicast_new_group(br, port, group); in br_multicast_add_group()
678 mod_timer(&mp->timer, now + br->multicast_membership_interval); in br_multicast_add_group()
683 (p = mlock_dereference(*pp, br)) != NULL; in br_multicast_add_group()
695 br_mdb_notify(br->dev, port, group, RTM_NEWMDB); in br_multicast_add_group()
698 mod_timer(&p->timer, now + br->multicast_membership_interval); in br_multicast_add_group()
703 spin_unlock(&br->multicast_lock); in br_multicast_add_group()
707 static int br_ip4_multicast_add_group(struct net_bridge *br, in br_ip4_multicast_add_group() argument
721 return br_multicast_add_group(br, port, &br_group); in br_ip4_multicast_add_group()
725 static int br_ip6_multicast_add_group(struct net_bridge *br, in br_ip6_multicast_add_group() argument
739 return br_multicast_add_group(br, port, &br_group); in br_ip6_multicast_add_group()
746 struct net_bridge *br = port->br; in br_multicast_router_expired() local
748 spin_lock(&br->multicast_lock); in br_multicast_router_expired()
757 spin_unlock(&br->multicast_lock); in br_multicast_router_expired()
764 static void br_multicast_querier_expired(struct net_bridge *br, in br_multicast_querier_expired() argument
767 spin_lock(&br->multicast_lock); in br_multicast_querier_expired()
768 if (!netif_running(br->dev) || br->multicast_disabled) in br_multicast_querier_expired()
771 br_multicast_start_querier(br, query); in br_multicast_querier_expired()
774 spin_unlock(&br->multicast_lock); in br_multicast_querier_expired()
779 struct net_bridge *br = (void *)data; in br_ip4_multicast_querier_expired() local
781 br_multicast_querier_expired(br, &br->ip4_own_query); in br_ip4_multicast_querier_expired()
787 struct net_bridge *br = (void *)data; in br_ip6_multicast_querier_expired() local
789 br_multicast_querier_expired(br, &br->ip6_own_query); in br_ip6_multicast_querier_expired()
793 static void br_multicast_select_own_querier(struct net_bridge *br, in br_multicast_select_own_querier() argument
798 br->ip4_querier.addr.u.ip4 = ip_hdr(skb)->saddr; in br_multicast_select_own_querier()
801 br->ip6_querier.addr.u.ip6 = ipv6_hdr(skb)->saddr; in br_multicast_select_own_querier()
805 static void __br_multicast_send_query(struct net_bridge *br, in __br_multicast_send_query() argument
811 skb = br_multicast_alloc_query(br, ip); in __br_multicast_send_query()
821 br_multicast_select_own_querier(br, ip, skb); in __br_multicast_send_query()
826 static void br_multicast_send_query(struct net_bridge *br, in br_multicast_send_query() argument
834 if (!netif_running(br->dev) || br->multicast_disabled || in br_multicast_send_query()
835 !br->multicast_querier) in br_multicast_send_query()
841 (own_query == &br->ip4_own_query)) { in br_multicast_send_query()
842 other_query = &br->ip4_other_query; in br_multicast_send_query()
846 other_query = &br->ip6_other_query; in br_multicast_send_query()
854 __br_multicast_send_query(br, port, &br_group); in br_multicast_send_query()
857 time += own_query->startup_sent < br->multicast_startup_query_count ? in br_multicast_send_query()
858 br->multicast_startup_query_interval : in br_multicast_send_query()
859 br->multicast_query_interval; in br_multicast_send_query()
867 struct net_bridge *br = port->br; in br_multicast_port_query_expired() local
869 spin_lock(&br->multicast_lock); in br_multicast_port_query_expired()
874 if (query->startup_sent < br->multicast_startup_query_count) in br_multicast_port_query_expired()
877 br_multicast_send_query(port->br, port, query); in br_multicast_port_query_expired()
880 spin_unlock(&br->multicast_lock); in br_multicast_port_query_expired()
929 struct net_bridge *br = port->br; in br_multicast_enable_port() local
931 spin_lock(&br->multicast_lock); in br_multicast_enable_port()
932 if (br->multicast_disabled || !netif_running(br->dev)) in br_multicast_enable_port()
941 spin_unlock(&br->multicast_lock); in br_multicast_enable_port()
946 struct net_bridge *br = port->br; in br_multicast_disable_port() local
950 spin_lock(&br->multicast_lock); in br_multicast_disable_port()
952 br_multicast_del_pg(br, pg); in br_multicast_disable_port()
961 spin_unlock(&br->multicast_lock); in br_multicast_disable_port()
964 static int br_ip4_multicast_igmp3_report(struct net_bridge *br, in br_ip4_multicast_igmp3_report() argument
1012 err = br_ip4_multicast_add_group(br, port, group, vid); in br_ip4_multicast_igmp3_report()
1021 static int br_ip6_multicast_mld2_report(struct net_bridge *br, in br_ip6_multicast_mld2_report() argument
1073 err = br_ip6_multicast_add_group(br, port, &grec->grec_mca, in br_ip6_multicast_mld2_report()
1083 static bool br_ip4_multicast_select_querier(struct net_bridge *br, in br_ip4_multicast_select_querier() argument
1087 if (!timer_pending(&br->ip4_own_query.timer) && in br_ip4_multicast_select_querier()
1088 !timer_pending(&br->ip4_other_query.timer)) in br_ip4_multicast_select_querier()
1091 if (!br->ip4_querier.addr.u.ip4) in br_ip4_multicast_select_querier()
1094 if (ntohl(saddr) <= ntohl(br->ip4_querier.addr.u.ip4)) in br_ip4_multicast_select_querier()
1100 br->ip4_querier.addr.u.ip4 = saddr; in br_ip4_multicast_select_querier()
1103 rcu_assign_pointer(br->ip4_querier.port, port); in br_ip4_multicast_select_querier()
1109 static bool br_ip6_multicast_select_querier(struct net_bridge *br, in br_ip6_multicast_select_querier() argument
1113 if (!timer_pending(&br->ip6_own_query.timer) && in br_ip6_multicast_select_querier()
1114 !timer_pending(&br->ip6_other_query.timer)) in br_ip6_multicast_select_querier()
1117 if (ipv6_addr_cmp(saddr, &br->ip6_querier.addr.u.ip6) <= 0) in br_ip6_multicast_select_querier()
1123 br->ip6_querier.addr.u.ip6 = *saddr; in br_ip6_multicast_select_querier()
1126 rcu_assign_pointer(br->ip6_querier.port, port); in br_ip6_multicast_select_querier()
1132 static bool br_multicast_select_querier(struct net_bridge *br, in br_multicast_select_querier() argument
1138 return br_ip4_multicast_select_querier(br, port, saddr->u.ip4); in br_multicast_select_querier()
1141 return br_ip6_multicast_select_querier(br, port, &saddr->u.ip6); in br_multicast_select_querier()
1149 br_multicast_update_query_timer(struct net_bridge *br, in br_multicast_update_query_timer() argument
1156 mod_timer(&query->timer, jiffies + br->multicast_querier_interval); in br_multicast_update_query_timer()
1164 static void br_multicast_add_router(struct net_bridge *br, in br_multicast_add_router() argument
1173 hlist_for_each_entry(p, &br->router_list, rlist) { in br_multicast_add_router()
1182 hlist_add_head_rcu(&port->rlist, &br->router_list); in br_multicast_add_router()
1185 static void br_multicast_mark_router(struct net_bridge *br, in br_multicast_mark_router() argument
1191 if (br->multicast_router == 1) in br_multicast_mark_router()
1192 mod_timer(&br->multicast_router_timer, in br_multicast_mark_router()
1193 now + br->multicast_querier_interval); in br_multicast_mark_router()
1200 br_multicast_add_router(br, port); in br_multicast_mark_router()
1203 now + br->multicast_querier_interval); in br_multicast_mark_router()
1206 static void br_multicast_query_received(struct net_bridge *br, in br_multicast_query_received() argument
1212 if (!br_multicast_select_querier(br, port, saddr)) in br_multicast_query_received()
1215 br_multicast_update_query_timer(br, query, max_delay); in br_multicast_query_received()
1216 br_multicast_mark_router(br, port); in br_multicast_query_received()
1219 static int br_ip4_multicast_query(struct net_bridge *br, in br_ip4_multicast_query() argument
1236 spin_lock(&br->multicast_lock); in br_ip4_multicast_query()
1237 if (!netif_running(br->dev) || in br_ip4_multicast_query()
1276 br_multicast_query_received(br, port, &br->ip4_other_query, in br_ip4_multicast_query()
1281 mp = br_mdb_ip4_get(mlock_dereference(br->mdb, br), group, vid); in br_ip4_multicast_query()
1285 max_delay *= br->multicast_last_member_count; in br_ip4_multicast_query()
1294 (p = mlock_dereference(*pp, br)) != NULL; in br_ip4_multicast_query()
1303 spin_unlock(&br->multicast_lock); in br_ip4_multicast_query()
1308 static int br_ip6_multicast_query(struct net_bridge *br, in br_ip6_multicast_query() argument
1326 spin_lock(&br->multicast_lock); in br_ip6_multicast_query()
1327 if (!netif_running(br->dev) || in br_ip6_multicast_query()
1372 br_multicast_query_received(br, port, &br->ip6_other_query, in br_ip6_multicast_query()
1379 mp = br_mdb_ip6_get(mlock_dereference(br->mdb, br), group, vid); in br_ip6_multicast_query()
1383 max_delay *= br->multicast_last_member_count; in br_ip6_multicast_query()
1391 (p = mlock_dereference(*pp, br)) != NULL; in br_ip6_multicast_query()
1400 spin_unlock(&br->multicast_lock); in br_ip6_multicast_query()
1406 br_multicast_leave_group(struct net_bridge *br, in br_multicast_leave_group() argument
1418 spin_lock(&br->multicast_lock); in br_multicast_leave_group()
1419 if (!netif_running(br->dev) || in br_multicast_leave_group()
1424 mdb = mlock_dereference(br->mdb, br); in br_multicast_leave_group()
1429 if (br->multicast_querier) { in br_multicast_leave_group()
1430 __br_multicast_send_query(br, port, &mp->addr); in br_multicast_leave_group()
1432 time = jiffies + br->multicast_last_member_count * in br_multicast_leave_group()
1433 br->multicast_last_member_interval; in br_multicast_leave_group()
1437 for (p = mlock_dereference(mp->ports, br); in br_multicast_leave_group()
1439 p = mlock_dereference(p->next, br)) { in br_multicast_leave_group()
1458 (p = mlock_dereference(*pp, br)) != NULL; in br_multicast_leave_group()
1467 br_mdb_notify(br->dev, port, group, RTM_DELMDB); in br_multicast_leave_group()
1470 netif_running(br->dev)) in br_multicast_leave_group()
1477 time = now + br->multicast_last_member_count * in br_multicast_leave_group()
1478 br->multicast_last_member_interval; in br_multicast_leave_group()
1491 for (p = mlock_dereference(mp->ports, br); in br_multicast_leave_group()
1493 p = mlock_dereference(p->next, br)) { in br_multicast_leave_group()
1507 spin_unlock(&br->multicast_lock); in br_multicast_leave_group()
1510 static void br_ip4_multicast_leave_group(struct net_bridge *br, in br_ip4_multicast_leave_group() argument
1521 own_query = port ? &port->ip4_own_query : &br->ip4_own_query; in br_ip4_multicast_leave_group()
1527 br_multicast_leave_group(br, port, &br_group, &br->ip4_other_query, in br_ip4_multicast_leave_group()
1532 static void br_ip6_multicast_leave_group(struct net_bridge *br, in br_ip6_multicast_leave_group() argument
1543 own_query = port ? &port->ip6_own_query : &br->ip6_own_query; in br_ip6_multicast_leave_group()
1549 br_multicast_leave_group(br, port, &br_group, &br->ip6_other_query, in br_ip6_multicast_leave_group()
1554 static int br_multicast_ipv4_rcv(struct net_bridge *br, in br_multicast_ipv4_rcv() argument
1632 err = br_ip4_multicast_add_group(br, port, ih->group, vid); in br_multicast_ipv4_rcv()
1635 err = br_ip4_multicast_igmp3_report(br, port, skb2, vid); in br_multicast_ipv4_rcv()
1638 err = br_ip4_multicast_query(br, port, skb2, vid); in br_multicast_ipv4_rcv()
1641 br_ip4_multicast_leave_group(br, port, ih->group, vid); in br_multicast_ipv4_rcv()
1654 static int br_multicast_ipv6_rcv(struct net_bridge *br, in br_multicast_ipv6_rcv() argument
1768 err = br_ip6_multicast_add_group(br, port, &mld->mld_mca, vid); in br_multicast_ipv6_rcv()
1772 err = br_ip6_multicast_mld2_report(br, port, skb2, vid); in br_multicast_ipv6_rcv()
1775 err = br_ip6_multicast_query(br, port, skb2, vid); in br_multicast_ipv6_rcv()
1785 br_ip6_multicast_leave_group(br, port, &mld->mld_mca, vid); in br_multicast_ipv6_rcv()
1795 int br_multicast_rcv(struct net_bridge *br, struct net_bridge_port *port, in br_multicast_rcv() argument
1801 if (br->multicast_disabled) in br_multicast_rcv()
1806 return br_multicast_ipv4_rcv(br, port, skb, vid); in br_multicast_rcv()
1809 return br_multicast_ipv6_rcv(br, port, skb, vid); in br_multicast_rcv()
1816 static void br_multicast_query_expired(struct net_bridge *br, in br_multicast_query_expired() argument
1820 spin_lock(&br->multicast_lock); in br_multicast_query_expired()
1821 if (query->startup_sent < br->multicast_startup_query_count) in br_multicast_query_expired()
1825 br_multicast_send_query(br, NULL, query); in br_multicast_query_expired()
1826 spin_unlock(&br->multicast_lock); in br_multicast_query_expired()
1831 struct net_bridge *br = (void *)data; in br_ip4_multicast_query_expired() local
1833 br_multicast_query_expired(br, &br->ip4_own_query, &br->ip4_querier); in br_ip4_multicast_query_expired()
1839 struct net_bridge *br = (void *)data; in br_ip6_multicast_query_expired() local
1841 br_multicast_query_expired(br, &br->ip6_own_query, &br->ip6_querier); in br_ip6_multicast_query_expired()
1845 void br_multicast_init(struct net_bridge *br) in br_multicast_init() argument
1847 br->hash_elasticity = 4; in br_multicast_init()
1848 br->hash_max = 512; in br_multicast_init()
1850 br->multicast_router = 1; in br_multicast_init()
1851 br->multicast_querier = 0; in br_multicast_init()
1852 br->multicast_query_use_ifaddr = 0; in br_multicast_init()
1853 br->multicast_last_member_count = 2; in br_multicast_init()
1854 br->multicast_startup_query_count = 2; in br_multicast_init()
1856 br->multicast_last_member_interval = HZ; in br_multicast_init()
1857 br->multicast_query_response_interval = 10 * HZ; in br_multicast_init()
1858 br->multicast_startup_query_interval = 125 * HZ / 4; in br_multicast_init()
1859 br->multicast_query_interval = 125 * HZ; in br_multicast_init()
1860 br->multicast_querier_interval = 255 * HZ; in br_multicast_init()
1861 br->multicast_membership_interval = 260 * HZ; in br_multicast_init()
1863 br->ip4_other_query.delay_time = 0; in br_multicast_init()
1864 br->ip4_querier.port = NULL; in br_multicast_init()
1866 br->ip6_other_query.delay_time = 0; in br_multicast_init()
1867 br->ip6_querier.port = NULL; in br_multicast_init()
1870 spin_lock_init(&br->multicast_lock); in br_multicast_init()
1871 setup_timer(&br->multicast_router_timer, in br_multicast_init()
1873 setup_timer(&br->ip4_other_query.timer, in br_multicast_init()
1874 br_ip4_multicast_querier_expired, (unsigned long)br); in br_multicast_init()
1875 setup_timer(&br->ip4_own_query.timer, br_ip4_multicast_query_expired, in br_multicast_init()
1876 (unsigned long)br); in br_multicast_init()
1878 setup_timer(&br->ip6_other_query.timer, in br_multicast_init()
1879 br_ip6_multicast_querier_expired, (unsigned long)br); in br_multicast_init()
1880 setup_timer(&br->ip6_own_query.timer, br_ip6_multicast_query_expired, in br_multicast_init()
1881 (unsigned long)br); in br_multicast_init()
1885 static void __br_multicast_open(struct net_bridge *br, in __br_multicast_open() argument
1890 if (br->multicast_disabled) in __br_multicast_open()
1896 void br_multicast_open(struct net_bridge *br) in br_multicast_open() argument
1898 __br_multicast_open(br, &br->ip4_own_query); in br_multicast_open()
1900 __br_multicast_open(br, &br->ip6_own_query); in br_multicast_open()
1904 void br_multicast_stop(struct net_bridge *br) in br_multicast_stop() argument
1912 del_timer_sync(&br->multicast_router_timer); in br_multicast_stop()
1913 del_timer_sync(&br->ip4_other_query.timer); in br_multicast_stop()
1914 del_timer_sync(&br->ip4_own_query.timer); in br_multicast_stop()
1916 del_timer_sync(&br->ip6_other_query.timer); in br_multicast_stop()
1917 del_timer_sync(&br->ip6_own_query.timer); in br_multicast_stop()
1920 spin_lock_bh(&br->multicast_lock); in br_multicast_stop()
1921 mdb = mlock_dereference(br->mdb, br); in br_multicast_stop()
1925 br->mdb = NULL; in br_multicast_stop()
1937 spin_unlock_bh(&br->multicast_lock); in br_multicast_stop()
1939 spin_lock_bh(&br->multicast_lock); in br_multicast_stop()
1947 spin_unlock_bh(&br->multicast_lock); in br_multicast_stop()
1950 int br_multicast_set_router(struct net_bridge *br, unsigned long val) in br_multicast_set_router() argument
1954 spin_lock_bh(&br->multicast_lock); in br_multicast_set_router()
1955 if (!netif_running(br->dev)) in br_multicast_set_router()
1961 del_timer(&br->multicast_router_timer); in br_multicast_set_router()
1964 br->multicast_router = val; in br_multicast_set_router()
1974 spin_unlock_bh(&br->multicast_lock); in br_multicast_set_router()
1981 struct net_bridge *br = p->br; in br_multicast_set_port_router() local
1984 spin_lock(&br->multicast_lock); in br_multicast_set_port_router()
1985 if (!netif_running(br->dev) || p->state == BR_STATE_DISABLED) in br_multicast_set_port_router()
2006 br_multicast_add_router(br, p); in br_multicast_set_port_router()
2015 spin_unlock(&br->multicast_lock); in br_multicast_set_port_router()
2020 static void br_multicast_start_querier(struct net_bridge *br, in br_multicast_start_querier() argument
2025 __br_multicast_open(br, query); in br_multicast_start_querier()
2027 list_for_each_entry(port, &br->port_list, list) { in br_multicast_start_querier()
2032 if (query == &br->ip4_own_query) in br_multicast_start_querier()
2041 int br_multicast_toggle(struct net_bridge *br, unsigned long val) in br_multicast_toggle() argument
2046 spin_lock_bh(&br->multicast_lock); in br_multicast_toggle()
2047 if (br->multicast_disabled == !val) in br_multicast_toggle()
2050 br->multicast_disabled = !val; in br_multicast_toggle()
2051 if (br->multicast_disabled) in br_multicast_toggle()
2054 if (!netif_running(br->dev)) in br_multicast_toggle()
2057 mdb = mlock_dereference(br->mdb, br); in br_multicast_toggle()
2062 br->multicast_disabled = !!val; in br_multicast_toggle()
2066 err = br_mdb_rehash(&br->mdb, mdb->max, in br_multicast_toggle()
2067 br->hash_elasticity); in br_multicast_toggle()
2072 br_multicast_start_querier(br, &br->ip4_own_query); in br_multicast_toggle()
2074 br_multicast_start_querier(br, &br->ip6_own_query); in br_multicast_toggle()
2078 spin_unlock_bh(&br->multicast_lock); in br_multicast_toggle()
2083 int br_multicast_set_querier(struct net_bridge *br, unsigned long val) in br_multicast_set_querier() argument
2089 spin_lock_bh(&br->multicast_lock); in br_multicast_set_querier()
2090 if (br->multicast_querier == val) in br_multicast_set_querier()
2093 br->multicast_querier = val; in br_multicast_set_querier()
2097 max_delay = br->multicast_query_response_interval; in br_multicast_set_querier()
2099 if (!timer_pending(&br->ip4_other_query.timer)) in br_multicast_set_querier()
2100 br->ip4_other_query.delay_time = jiffies + max_delay; in br_multicast_set_querier()
2102 br_multicast_start_querier(br, &br->ip4_own_query); in br_multicast_set_querier()
2105 if (!timer_pending(&br->ip6_other_query.timer)) in br_multicast_set_querier()
2106 br->ip6_other_query.delay_time = jiffies + max_delay; in br_multicast_set_querier()
2108 br_multicast_start_querier(br, &br->ip6_own_query); in br_multicast_set_querier()
2112 spin_unlock_bh(&br->multicast_lock); in br_multicast_set_querier()
2117 int br_multicast_set_hash_max(struct net_bridge *br, unsigned long val) in br_multicast_set_hash_max() argument
2123 spin_lock_bh(&br->multicast_lock); in br_multicast_set_hash_max()
2124 if (!netif_running(br->dev)) in br_multicast_set_hash_max()
2131 mdb = mlock_dereference(br->mdb, br); in br_multicast_set_hash_max()
2137 old = br->hash_max; in br_multicast_set_hash_max()
2138 br->hash_max = val; in br_multicast_set_hash_max()
2144 br->hash_max = old; in br_multicast_set_hash_max()
2148 err = br_mdb_rehash(&br->mdb, br->hash_max, in br_multicast_set_hash_max()
2149 br->hash_elasticity); in br_multicast_set_hash_max()
2155 spin_unlock_bh(&br->multicast_lock); in br_multicast_set_hash_max()
2180 struct net_bridge *br; in br_multicast_list_adjacent() local
2191 if (!port || !port->br) in br_multicast_list_adjacent()
2194 br = port->br; in br_multicast_list_adjacent()
2196 list_for_each_entry_rcu(port, &br->port_list, list) { in br_multicast_list_adjacent()
2228 struct net_bridge *br; in br_multicast_has_querier_anywhere() local
2238 if (!port || !port->br) in br_multicast_has_querier_anywhere()
2241 br = port->br; in br_multicast_has_querier_anywhere()
2246 ret = br_multicast_querier_exists(br, &eth); in br_multicast_has_querier_anywhere()
2265 struct net_bridge *br; in br_multicast_has_querier_adjacent() local
2274 if (!port || !port->br) in br_multicast_has_querier_adjacent()
2277 br = port->br; in br_multicast_has_querier_adjacent()
2281 if (!timer_pending(&br->ip4_other_query.timer) || in br_multicast_has_querier_adjacent()
2282 rcu_dereference(br->ip4_querier.port) == port) in br_multicast_has_querier_adjacent()
2287 if (!timer_pending(&br->ip6_other_query.timer) || in br_multicast_has_querier_adjacent()
2288 rcu_dereference(br->ip6_querier.port) == port) in br_multicast_has_querier_adjacent()