aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/bridge/br_mdb.c4
-rw-r--r--net/bridge/br_multicast.c169
-rw-r--r--net/bridge/br_private.h22
3 files changed, 100 insertions, 95 deletions
diff --git a/net/bridge/br_mdb.c b/net/bridge/br_mdb.c
index b7b1914dfa25..5df05269d17a 100644
--- a/net/bridge/br_mdb.c
+++ b/net/bridge/br_mdb.c
@@ -418,13 +418,13 @@ static int __br_mdb_del(struct net_bridge *br, struct br_mdb_entry *entry)
418 418
419 ip.proto = entry->addr.proto; 419 ip.proto = entry->addr.proto;
420 if (ip.proto == htons(ETH_P_IP)) { 420 if (ip.proto == htons(ETH_P_IP)) {
421 if (timer_pending(&br->ip4_querier.timer)) 421 if (timer_pending(&br->ip4_other_query.timer))
422 return -EBUSY; 422 return -EBUSY;
423 423
424 ip.u.ip4 = entry->addr.u.ip4; 424 ip.u.ip4 = entry->addr.u.ip4;
425#if IS_ENABLED(CONFIG_IPV6) 425#if IS_ENABLED(CONFIG_IPV6)
426 } else { 426 } else {
427 if (timer_pending(&br->ip6_querier.timer)) 427 if (timer_pending(&br->ip6_other_query.timer))
428 return -EBUSY; 428 return -EBUSY;
429 429
430 ip.u.ip6 = entry->addr.u.ip6; 430 ip.u.ip6 = entry->addr.u.ip6;
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index 7b757b5dc773..5ccac62b4005 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -35,7 +35,7 @@
35#include "br_private.h" 35#include "br_private.h"
36 36
37static void br_multicast_start_querier(struct net_bridge *br, 37static void br_multicast_start_querier(struct net_bridge *br,
38 struct bridge_mcast_query *query); 38 struct bridge_mcast_own_query *query);
39unsigned int br_mdb_rehash_seq; 39unsigned int br_mdb_rehash_seq;
40 40
41static inline int br_ip_equal(const struct br_ip *a, const struct br_ip *b) 41static inline int br_ip_equal(const struct br_ip *a, const struct br_ip *b)
@@ -761,7 +761,7 @@ static void br_multicast_local_router_expired(unsigned long data)
761} 761}
762 762
763static void br_multicast_querier_expired(struct net_bridge *br, 763static void br_multicast_querier_expired(struct net_bridge *br,
764 struct bridge_mcast_query *query) 764 struct bridge_mcast_own_query *query)
765{ 765{
766 spin_lock(&br->multicast_lock); 766 spin_lock(&br->multicast_lock);
767 if (!netif_running(br->dev) || br->multicast_disabled) 767 if (!netif_running(br->dev) || br->multicast_disabled)
@@ -777,7 +777,7 @@ static void br_ip4_multicast_querier_expired(unsigned long data)
777{ 777{
778 struct net_bridge *br = (void *)data; 778 struct net_bridge *br = (void *)data;
779 779
780 br_multicast_querier_expired(br, &br->ip4_query); 780 br_multicast_querier_expired(br, &br->ip4_own_query);
781} 781}
782 782
783#if IS_ENABLED(CONFIG_IPV6) 783#if IS_ENABLED(CONFIG_IPV6)
@@ -785,7 +785,7 @@ static void br_ip6_multicast_querier_expired(unsigned long data)
785{ 785{
786 struct net_bridge *br = (void *)data; 786 struct net_bridge *br = (void *)data;
787 787
788 br_multicast_querier_expired(br, &br->ip6_query); 788 br_multicast_querier_expired(br, &br->ip6_own_query);
789} 789}
790#endif 790#endif
791 791
@@ -810,11 +810,11 @@ static void __br_multicast_send_query(struct net_bridge *br,
810 810
811static void br_multicast_send_query(struct net_bridge *br, 811static void br_multicast_send_query(struct net_bridge *br,
812 struct net_bridge_port *port, 812 struct net_bridge_port *port,
813 struct bridge_mcast_query *query) 813 struct bridge_mcast_own_query *own_query)
814{ 814{
815 unsigned long time; 815 unsigned long time;
816 struct br_ip br_group; 816 struct br_ip br_group;
817 struct bridge_mcast_querier *querier = NULL; 817 struct bridge_mcast_other_query *other_query = NULL;
818 818
819 if (!netif_running(br->dev) || br->multicast_disabled || 819 if (!netif_running(br->dev) || br->multicast_disabled ||
820 !br->multicast_querier) 820 !br->multicast_querier)
@@ -822,31 +822,32 @@ static void br_multicast_send_query(struct net_bridge *br,
822 822
823 memset(&br_group.u, 0, sizeof(br_group.u)); 823 memset(&br_group.u, 0, sizeof(br_group.u));
824 824
825 if (port ? (query == &port->ip4_query) : 825 if (port ? (own_query == &port->ip4_own_query) :
826 (query == &br->ip4_query)) { 826 (own_query == &br->ip4_own_query)) {
827 querier = &br->ip4_querier; 827 other_query = &br->ip4_other_query;
828 br_group.proto = htons(ETH_P_IP); 828 br_group.proto = htons(ETH_P_IP);
829#if IS_ENABLED(CONFIG_IPV6) 829#if IS_ENABLED(CONFIG_IPV6)
830 } else { 830 } else {
831 querier = &br->ip6_querier; 831 other_query = &br->ip6_other_query;
832 br_group.proto = htons(ETH_P_IPV6); 832 br_group.proto = htons(ETH_P_IPV6);
833#endif 833#endif
834 } 834 }
835 835
836 if (!querier || timer_pending(&querier->timer)) 836 if (!other_query || timer_pending(&other_query->timer))
837 return; 837 return;
838 838
839 __br_multicast_send_query(br, port, &br_group); 839 __br_multicast_send_query(br, port, &br_group);
840 840
841 time = jiffies; 841 time = jiffies;
842 time += query->startup_sent < br->multicast_startup_query_count ? 842 time += own_query->startup_sent < br->multicast_startup_query_count ?
843 br->multicast_startup_query_interval : 843 br->multicast_startup_query_interval :
844 br->multicast_query_interval; 844 br->multicast_query_interval;
845 mod_timer(&query->timer, time); 845 mod_timer(&own_query->timer, time);
846} 846}
847 847
848static void br_multicast_port_query_expired(struct net_bridge_port *port, 848static void
849 struct bridge_mcast_query *query) 849br_multicast_port_query_expired(struct net_bridge_port *port,
850 struct bridge_mcast_own_query *query)
850{ 851{
851 struct net_bridge *br = port->br; 852 struct net_bridge *br = port->br;
852 853
@@ -868,7 +869,7 @@ static void br_ip4_multicast_port_query_expired(unsigned long data)
868{ 869{
869 struct net_bridge_port *port = (void *)data; 870 struct net_bridge_port *port = (void *)data;
870 871
871 br_multicast_port_query_expired(port, &port->ip4_query); 872 br_multicast_port_query_expired(port, &port->ip4_own_query);
872} 873}
873 874
874#if IS_ENABLED(CONFIG_IPV6) 875#if IS_ENABLED(CONFIG_IPV6)
@@ -876,7 +877,7 @@ static void br_ip6_multicast_port_query_expired(unsigned long data)
876{ 877{
877 struct net_bridge_port *port = (void *)data; 878 struct net_bridge_port *port = (void *)data;
878 879
879 br_multicast_port_query_expired(port, &port->ip6_query); 880 br_multicast_port_query_expired(port, &port->ip6_own_query);
880} 881}
881#endif 882#endif
882 883
@@ -886,11 +887,11 @@ void br_multicast_add_port(struct net_bridge_port *port)
886 887
887 setup_timer(&port->multicast_router_timer, br_multicast_router_expired, 888 setup_timer(&port->multicast_router_timer, br_multicast_router_expired,
888 (unsigned long)port); 889 (unsigned long)port);
889 setup_timer(&port->ip4_query.timer, br_ip4_multicast_port_query_expired, 890 setup_timer(&port->ip4_own_query.timer,
890 (unsigned long)port); 891 br_ip4_multicast_port_query_expired, (unsigned long)port);
891#if IS_ENABLED(CONFIG_IPV6) 892#if IS_ENABLED(CONFIG_IPV6)
892 setup_timer(&port->ip6_query.timer, br_ip6_multicast_port_query_expired, 893 setup_timer(&port->ip6_own_query.timer,
893 (unsigned long)port); 894 br_ip6_multicast_port_query_expired, (unsigned long)port);
894#endif 895#endif
895} 896}
896 897
@@ -899,7 +900,7 @@ void br_multicast_del_port(struct net_bridge_port *port)
899 del_timer_sync(&port->multicast_router_timer); 900 del_timer_sync(&port->multicast_router_timer);
900} 901}
901 902
902static void br_multicast_enable(struct bridge_mcast_query *query) 903static void br_multicast_enable(struct bridge_mcast_own_query *query)
903{ 904{
904 query->startup_sent = 0; 905 query->startup_sent = 0;
905 906
@@ -916,9 +917,9 @@ void br_multicast_enable_port(struct net_bridge_port *port)
916 if (br->multicast_disabled || !netif_running(br->dev)) 917 if (br->multicast_disabled || !netif_running(br->dev))
917 goto out; 918 goto out;
918 919
919 br_multicast_enable(&port->ip4_query); 920 br_multicast_enable(&port->ip4_own_query);
920#if IS_ENABLED(CONFIG_IPV6) 921#if IS_ENABLED(CONFIG_IPV6)
921 br_multicast_enable(&port->ip6_query); 922 br_multicast_enable(&port->ip6_own_query);
922#endif 923#endif
923 924
924out: 925out:
@@ -938,9 +939,9 @@ void br_multicast_disable_port(struct net_bridge_port *port)
938 if (!hlist_unhashed(&port->rlist)) 939 if (!hlist_unhashed(&port->rlist))
939 hlist_del_init_rcu(&port->rlist); 940 hlist_del_init_rcu(&port->rlist);
940 del_timer(&port->multicast_router_timer); 941 del_timer(&port->multicast_router_timer);
941 del_timer(&port->ip4_query.timer); 942 del_timer(&port->ip4_own_query.timer);
942#if IS_ENABLED(CONFIG_IPV6) 943#if IS_ENABLED(CONFIG_IPV6)
943 del_timer(&port->ip6_query.timer); 944 del_timer(&port->ip6_own_query.timer);
944#endif 945#endif
945 spin_unlock(&br->multicast_lock); 946 spin_unlock(&br->multicast_lock);
946} 947}
@@ -1065,14 +1066,14 @@ static int br_ip6_multicast_mld2_report(struct net_bridge *br,
1065#endif 1066#endif
1066 1067
1067static void 1068static void
1068br_multicast_update_querier_timer(struct net_bridge *br, 1069br_multicast_update_query_timer(struct net_bridge *br,
1069 struct bridge_mcast_querier *querier, 1070 struct bridge_mcast_other_query *query,
1070 unsigned long max_delay) 1071 unsigned long max_delay)
1071{ 1072{
1072 if (!timer_pending(&querier->timer)) 1073 if (!timer_pending(&query->timer))
1073 querier->delay_time = jiffies + max_delay; 1074 query->delay_time = jiffies + max_delay;
1074 1075
1075 mod_timer(&querier->timer, jiffies + br->multicast_querier_interval); 1076 mod_timer(&query->timer, jiffies + br->multicast_querier_interval);
1076} 1077}
1077 1078
1078/* 1079/*
@@ -1125,14 +1126,14 @@ timer:
1125 1126
1126static void br_multicast_query_received(struct net_bridge *br, 1127static void br_multicast_query_received(struct net_bridge *br,
1127 struct net_bridge_port *port, 1128 struct net_bridge_port *port,
1128 struct bridge_mcast_querier *querier, 1129 struct bridge_mcast_other_query *query,
1129 int saddr, 1130 int saddr,
1130 bool is_general_query, 1131 bool is_general_query,
1131 unsigned long max_delay) 1132 unsigned long max_delay)
1132{ 1133{
1133 if (saddr && is_general_query) 1134 if (saddr && is_general_query)
1134 br_multicast_update_querier_timer(br, querier, max_delay); 1135 br_multicast_update_query_timer(br, query, max_delay);
1135 else if (timer_pending(&querier->timer)) 1136 else if (timer_pending(&query->timer))
1136 return; 1137 return;
1137 1138
1138 br_multicast_mark_router(br, port); 1139 br_multicast_mark_router(br, port);
@@ -1190,8 +1191,8 @@ static int br_ip4_multicast_query(struct net_bridge *br,
1190 goto out; 1191 goto out;
1191 } 1192 }
1192 1193
1193 br_multicast_query_received(br, port, &br->ip4_querier, !!iph->saddr, 1194 br_multicast_query_received(br, port, &br->ip4_other_query,
1194 !group, max_delay); 1195 !!iph->saddr, !group, max_delay);
1195 1196
1196 if (!group) 1197 if (!group)
1197 goto out; 1198 goto out;
@@ -1282,7 +1283,7 @@ static int br_ip6_multicast_query(struct net_bridge *br,
1282 goto out; 1283 goto out;
1283 } 1284 }
1284 1285
1285 br_multicast_query_received(br, port, &br->ip6_querier, 1286 br_multicast_query_received(br, port, &br->ip6_other_query,
1286 !ipv6_addr_any(&ip6h->saddr), 1287 !ipv6_addr_any(&ip6h->saddr),
1287 is_general_query, max_delay); 1288 is_general_query, max_delay);
1288 1289
@@ -1315,11 +1316,12 @@ out:
1315} 1316}
1316#endif 1317#endif
1317 1318
1318static void br_multicast_leave_group(struct net_bridge *br, 1319static void
1319 struct net_bridge_port *port, 1320br_multicast_leave_group(struct net_bridge *br,
1320 struct br_ip *group, 1321 struct net_bridge_port *port,
1321 struct bridge_mcast_querier *querier, 1322 struct br_ip *group,
1322 struct bridge_mcast_query *query) 1323 struct bridge_mcast_other_query *other_query,
1324 struct bridge_mcast_own_query *own_query)
1323{ 1325{
1324 struct net_bridge_mdb_htable *mdb; 1326 struct net_bridge_mdb_htable *mdb;
1325 struct net_bridge_mdb_entry *mp; 1327 struct net_bridge_mdb_entry *mp;
@@ -1330,7 +1332,7 @@ static void br_multicast_leave_group(struct net_bridge *br,
1330 spin_lock(&br->multicast_lock); 1332 spin_lock(&br->multicast_lock);
1331 if (!netif_running(br->dev) || 1333 if (!netif_running(br->dev) ||
1332 (port && port->state == BR_STATE_DISABLED) || 1334 (port && port->state == BR_STATE_DISABLED) ||
1333 timer_pending(&querier->timer)) 1335 timer_pending(&other_query->timer))
1334 goto out; 1336 goto out;
1335 1337
1336 mdb = mlock_dereference(br->mdb, br); 1338 mdb = mlock_dereference(br->mdb, br);
@@ -1344,7 +1346,7 @@ static void br_multicast_leave_group(struct net_bridge *br,
1344 time = jiffies + br->multicast_last_member_count * 1346 time = jiffies + br->multicast_last_member_count *
1345 br->multicast_last_member_interval; 1347 br->multicast_last_member_interval;
1346 1348
1347 mod_timer(&query->timer, time); 1349 mod_timer(&own_query->timer, time);
1348 1350
1349 for (p = mlock_dereference(mp->ports, br); 1351 for (p = mlock_dereference(mp->ports, br);
1350 p != NULL; 1352 p != NULL;
@@ -1425,17 +1427,19 @@ static void br_ip4_multicast_leave_group(struct net_bridge *br,
1425 __u16 vid) 1427 __u16 vid)
1426{ 1428{
1427 struct br_ip br_group; 1429 struct br_ip br_group;
1428 struct bridge_mcast_query *query = port ? &port->ip4_query : 1430 struct bridge_mcast_own_query *own_query;
1429 &br->ip4_query;
1430 1431
1431 if (ipv4_is_local_multicast(group)) 1432 if (ipv4_is_local_multicast(group))
1432 return; 1433 return;
1433 1434
1435 own_query = port ? &port->ip4_own_query : &br->ip4_own_query;
1436
1434 br_group.u.ip4 = group; 1437 br_group.u.ip4 = group;
1435 br_group.proto = htons(ETH_P_IP); 1438 br_group.proto = htons(ETH_P_IP);
1436 br_group.vid = vid; 1439 br_group.vid = vid;
1437 1440
1438 br_multicast_leave_group(br, port, &br_group, &br->ip4_querier, query); 1441 br_multicast_leave_group(br, port, &br_group, &br->ip4_other_query,
1442 own_query);
1439} 1443}
1440 1444
1441#if IS_ENABLED(CONFIG_IPV6) 1445#if IS_ENABLED(CONFIG_IPV6)
@@ -1445,18 +1449,19 @@ static void br_ip6_multicast_leave_group(struct net_bridge *br,
1445 __u16 vid) 1449 __u16 vid)
1446{ 1450{
1447 struct br_ip br_group; 1451 struct br_ip br_group;
1448 struct bridge_mcast_query *query = port ? &port->ip6_query : 1452 struct bridge_mcast_own_query *own_query;
1449 &br->ip6_query;
1450
1451 1453
1452 if (ipv6_addr_is_ll_all_nodes(group)) 1454 if (ipv6_addr_is_ll_all_nodes(group))
1453 return; 1455 return;
1454 1456
1457 own_query = port ? &port->ip6_own_query : &br->ip6_own_query;
1458
1455 br_group.u.ip6 = *group; 1459 br_group.u.ip6 = *group;
1456 br_group.proto = htons(ETH_P_IPV6); 1460 br_group.proto = htons(ETH_P_IPV6);
1457 br_group.vid = vid; 1461 br_group.vid = vid;
1458 1462
1459 br_multicast_leave_group(br, port, &br_group, &br->ip6_querier, query); 1463 br_multicast_leave_group(br, port, &br_group, &br->ip6_other_query,
1464 own_query);
1460} 1465}
1461#endif 1466#endif
1462 1467
@@ -1723,7 +1728,7 @@ int br_multicast_rcv(struct net_bridge *br, struct net_bridge_port *port,
1723} 1728}
1724 1729
1725static void br_multicast_query_expired(struct net_bridge *br, 1730static void br_multicast_query_expired(struct net_bridge *br,
1726 struct bridge_mcast_query *query) 1731 struct bridge_mcast_own_query *query)
1727{ 1732{
1728 spin_lock(&br->multicast_lock); 1733 spin_lock(&br->multicast_lock);
1729 if (query->startup_sent < br->multicast_startup_query_count) 1734 if (query->startup_sent < br->multicast_startup_query_count)
@@ -1737,7 +1742,7 @@ static void br_ip4_multicast_query_expired(unsigned long data)
1737{ 1742{
1738 struct net_bridge *br = (void *)data; 1743 struct net_bridge *br = (void *)data;
1739 1744
1740 br_multicast_query_expired(br, &br->ip4_query); 1745 br_multicast_query_expired(br, &br->ip4_own_query);
1741} 1746}
1742 1747
1743#if IS_ENABLED(CONFIG_IPV6) 1748#if IS_ENABLED(CONFIG_IPV6)
@@ -1745,7 +1750,7 @@ static void br_ip6_multicast_query_expired(unsigned long data)
1745{ 1750{
1746 struct net_bridge *br = (void *)data; 1751 struct net_bridge *br = (void *)data;
1747 1752
1748 br_multicast_query_expired(br, &br->ip6_query); 1753 br_multicast_query_expired(br, &br->ip6_own_query);
1749} 1754}
1750#endif 1755#endif
1751 1756
@@ -1767,28 +1772,28 @@ void br_multicast_init(struct net_bridge *br)
1767 br->multicast_querier_interval = 255 * HZ; 1772 br->multicast_querier_interval = 255 * HZ;
1768 br->multicast_membership_interval = 260 * HZ; 1773 br->multicast_membership_interval = 260 * HZ;
1769 1774
1770 br->ip4_querier.delay_time = 0; 1775 br->ip4_other_query.delay_time = 0;
1771#if IS_ENABLED(CONFIG_IPV6) 1776#if IS_ENABLED(CONFIG_IPV6)
1772 br->ip6_querier.delay_time = 0; 1777 br->ip6_other_query.delay_time = 0;
1773#endif 1778#endif
1774 1779
1775 spin_lock_init(&br->multicast_lock); 1780 spin_lock_init(&br->multicast_lock);
1776 setup_timer(&br->multicast_router_timer, 1781 setup_timer(&br->multicast_router_timer,
1777 br_multicast_local_router_expired, 0); 1782 br_multicast_local_router_expired, 0);
1778 setup_timer(&br->ip4_querier.timer, br_ip4_multicast_querier_expired, 1783 setup_timer(&br->ip4_other_query.timer,
1779 (unsigned long)br); 1784 br_ip4_multicast_querier_expired, (unsigned long)br);
1780 setup_timer(&br->ip4_query.timer, br_ip4_multicast_query_expired, 1785 setup_timer(&br->ip4_own_query.timer, br_ip4_multicast_query_expired,
1781 (unsigned long)br); 1786 (unsigned long)br);
1782#if IS_ENABLED(CONFIG_IPV6) 1787#if IS_ENABLED(CONFIG_IPV6)
1783 setup_timer(&br->ip6_querier.timer, br_ip6_multicast_querier_expired, 1788 setup_timer(&br->ip6_other_query.timer,
1784 (unsigned long)br); 1789 br_ip6_multicast_querier_expired, (unsigned long)br);
1785 setup_timer(&br->ip6_query.timer, br_ip6_multicast_query_expired, 1790 setup_timer(&br->ip6_own_query.timer, br_ip6_multicast_query_expired,
1786 (unsigned long)br); 1791 (unsigned long)br);
1787#endif 1792#endif
1788} 1793}
1789 1794
1790static void __br_multicast_open(struct net_bridge *br, 1795static void __br_multicast_open(struct net_bridge *br,
1791 struct bridge_mcast_query *query) 1796 struct bridge_mcast_own_query *query)
1792{ 1797{
1793 query->startup_sent = 0; 1798 query->startup_sent = 0;
1794 1799
@@ -1800,9 +1805,9 @@ static void __br_multicast_open(struct net_bridge *br,
1800 1805
1801void br_multicast_open(struct net_bridge *br) 1806void br_multicast_open(struct net_bridge *br)
1802{ 1807{
1803 __br_multicast_open(br, &br->ip4_query); 1808 __br_multicast_open(br, &br->ip4_own_query);
1804#if IS_ENABLED(CONFIG_IPV6) 1809#if IS_ENABLED(CONFIG_IPV6)
1805 __br_multicast_open(br, &br->ip6_query); 1810 __br_multicast_open(br, &br->ip6_own_query);
1806#endif 1811#endif
1807} 1812}
1808 1813
@@ -1815,11 +1820,11 @@ void br_multicast_stop(struct net_bridge *br)
1815 int i; 1820 int i;
1816 1821
1817 del_timer_sync(&br->multicast_router_timer); 1822 del_timer_sync(&br->multicast_router_timer);
1818 del_timer_sync(&br->ip4_querier.timer); 1823 del_timer_sync(&br->ip4_other_query.timer);
1819 del_timer_sync(&br->ip4_query.timer); 1824 del_timer_sync(&br->ip4_own_query.timer);
1820#if IS_ENABLED(CONFIG_IPV6) 1825#if IS_ENABLED(CONFIG_IPV6)
1821 del_timer_sync(&br->ip6_querier.timer); 1826 del_timer_sync(&br->ip6_other_query.timer);
1822 del_timer_sync(&br->ip6_query.timer); 1827 del_timer_sync(&br->ip6_own_query.timer);
1823#endif 1828#endif
1824 1829
1825 spin_lock_bh(&br->multicast_lock); 1830 spin_lock_bh(&br->multicast_lock);
@@ -1923,7 +1928,7 @@ unlock:
1923} 1928}
1924 1929
1925static void br_multicast_start_querier(struct net_bridge *br, 1930static void br_multicast_start_querier(struct net_bridge *br,
1926 struct bridge_mcast_query *query) 1931 struct bridge_mcast_own_query *query)
1927{ 1932{
1928 struct net_bridge_port *port; 1933 struct net_bridge_port *port;
1929 1934
@@ -1934,11 +1939,11 @@ static void br_multicast_start_querier(struct net_bridge *br,
1934 port->state == BR_STATE_BLOCKING) 1939 port->state == BR_STATE_BLOCKING)
1935 continue; 1940 continue;
1936 1941
1937 if (query == &br->ip4_query) 1942 if (query == &br->ip4_own_query)
1938 br_multicast_enable(&port->ip4_query); 1943 br_multicast_enable(&port->ip4_own_query);
1939#if IS_ENABLED(CONFIG_IPV6) 1944#if IS_ENABLED(CONFIG_IPV6)
1940 else 1945 else
1941 br_multicast_enable(&port->ip6_query); 1946 br_multicast_enable(&port->ip6_own_query);
1942#endif 1947#endif
1943 } 1948 }
1944} 1949}
@@ -1974,9 +1979,9 @@ rollback:
1974 goto rollback; 1979 goto rollback;
1975 } 1980 }
1976 1981
1977 br_multicast_start_querier(br, &br->ip4_query); 1982 br_multicast_start_querier(br, &br->ip4_own_query);
1978#if IS_ENABLED(CONFIG_IPV6) 1983#if IS_ENABLED(CONFIG_IPV6)
1979 br_multicast_start_querier(br, &br->ip6_query); 1984 br_multicast_start_querier(br, &br->ip6_own_query);
1980#endif 1985#endif
1981 1986
1982unlock: 1987unlock:
@@ -2001,16 +2006,16 @@ int br_multicast_set_querier(struct net_bridge *br, unsigned long val)
2001 2006
2002 max_delay = br->multicast_query_response_interval; 2007 max_delay = br->multicast_query_response_interval;
2003 2008
2004 if (!timer_pending(&br->ip4_querier.timer)) 2009 if (!timer_pending(&br->ip4_other_query.timer))
2005 br->ip4_querier.delay_time = jiffies + max_delay; 2010 br->ip4_other_query.delay_time = jiffies + max_delay;
2006 2011
2007 br_multicast_start_querier(br, &br->ip4_query); 2012 br_multicast_start_querier(br, &br->ip4_own_query);
2008 2013
2009#if IS_ENABLED(CONFIG_IPV6) 2014#if IS_ENABLED(CONFIG_IPV6)
2010 if (!timer_pending(&br->ip6_querier.timer)) 2015 if (!timer_pending(&br->ip6_other_query.timer))
2011 br->ip6_querier.delay_time = jiffies + max_delay; 2016 br->ip6_other_query.delay_time = jiffies + max_delay;
2012 2017
2013 br_multicast_start_querier(br, &br->ip6_query); 2018 br_multicast_start_querier(br, &br->ip6_own_query);
2014#endif 2019#endif
2015 2020
2016unlock: 2021unlock:
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index bc17210d4c52..2469aeeda1ec 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -68,13 +68,13 @@ struct br_ip
68 68
69#ifdef CONFIG_BRIDGE_IGMP_SNOOPING 69#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
70/* our own querier */ 70/* our own querier */
71struct bridge_mcast_query { 71struct bridge_mcast_own_query {
72 struct timer_list timer; 72 struct timer_list timer;
73 u32 startup_sent; 73 u32 startup_sent;
74}; 74};
75 75
76/* other querier */ 76/* other querier */
77struct bridge_mcast_querier { 77struct bridge_mcast_other_query {
78 struct timer_list timer; 78 struct timer_list timer;
79 unsigned long delay_time; 79 unsigned long delay_time;
80}; 80};
@@ -178,9 +178,9 @@ struct net_bridge_port
178#define BR_PROMISC 0x00000080 178#define BR_PROMISC 0x00000080
179 179
180#ifdef CONFIG_BRIDGE_IGMP_SNOOPING 180#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
181 struct bridge_mcast_query ip4_query; 181 struct bridge_mcast_own_query ip4_own_query;
182#if IS_ENABLED(CONFIG_IPV6) 182#if IS_ENABLED(CONFIG_IPV6)
183 struct bridge_mcast_query ip6_query; 183 struct bridge_mcast_own_query ip6_own_query;
184#endif /* IS_ENABLED(CONFIG_IPV6) */ 184#endif /* IS_ENABLED(CONFIG_IPV6) */
185 unsigned char multicast_router; 185 unsigned char multicast_router;
186 struct timer_list multicast_router_timer; 186 struct timer_list multicast_router_timer;
@@ -282,11 +282,11 @@ struct net_bridge
282 struct hlist_head router_list; 282 struct hlist_head router_list;
283 283
284 struct timer_list multicast_router_timer; 284 struct timer_list multicast_router_timer;
285 struct bridge_mcast_querier ip4_querier; 285 struct bridge_mcast_other_query ip4_other_query;
286 struct bridge_mcast_query ip4_query; 286 struct bridge_mcast_own_query ip4_own_query;
287#if IS_ENABLED(CONFIG_IPV6) 287#if IS_ENABLED(CONFIG_IPV6)
288 struct bridge_mcast_querier ip6_querier; 288 struct bridge_mcast_other_query ip6_other_query;
289 struct bridge_mcast_query ip6_query; 289 struct bridge_mcast_own_query ip6_own_query;
290#endif /* IS_ENABLED(CONFIG_IPV6) */ 290#endif /* IS_ENABLED(CONFIG_IPV6) */
291#endif 291#endif
292 292
@@ -493,7 +493,7 @@ static inline bool br_multicast_is_router(struct net_bridge *br)
493 493
494static inline bool 494static inline bool
495__br_multicast_querier_exists(struct net_bridge *br, 495__br_multicast_querier_exists(struct net_bridge *br,
496 struct bridge_mcast_querier *querier) 496 struct bridge_mcast_other_query *querier)
497{ 497{
498 return time_is_before_jiffies(querier->delay_time) && 498 return time_is_before_jiffies(querier->delay_time) &&
499 (br->multicast_querier || timer_pending(&querier->timer)); 499 (br->multicast_querier || timer_pending(&querier->timer));
@@ -504,10 +504,10 @@ static inline bool br_multicast_querier_exists(struct net_bridge *br,
504{ 504{
505 switch (eth->h_proto) { 505 switch (eth->h_proto) {
506 case (htons(ETH_P_IP)): 506 case (htons(ETH_P_IP)):
507 return __br_multicast_querier_exists(br, &br->ip4_querier); 507 return __br_multicast_querier_exists(br, &br->ip4_other_query);
508#if IS_ENABLED(CONFIG_IPV6) 508#if IS_ENABLED(CONFIG_IPV6)
509 case (htons(ETH_P_IPV6)): 509 case (htons(ETH_P_IPV6)):
510 return __br_multicast_querier_exists(br, &br->ip6_querier); 510 return __br_multicast_querier_exists(br, &br->ip6_other_query);
511#endif 511#endif
512 default: 512 default:
513 return false; 513 return false;