@@ -947,7 +947,8 @@ void br_multicast_disable_port(struct net_bridge_port *port)
947
947
948
948
static int br_ip4_multicast_igmp3_report (struct net_bridge * br ,
949
949
struct net_bridge_port * port ,
950
- struct sk_buff * skb )
950
+ struct sk_buff * skb ,
951
+ u16 vid )
951
952
{
952
953
struct igmpv3_report * ih ;
953
954
struct igmpv3_grec * grec ;
@@ -957,12 +958,10 @@ static int br_ip4_multicast_igmp3_report(struct net_bridge *br,
957
958
int type ;
958
959
int err = 0 ;
959
960
__be32 group ;
960
- u16 vid = 0 ;
961
961
962
962
if (!pskb_may_pull (skb , sizeof (* ih )))
963
963
return - EINVAL ;
964
964
965
- br_vlan_get_tag (skb , & vid );
966
965
ih = igmpv3_report_hdr (skb );
967
966
num = ntohs (ih -> ngrec );
968
967
len = sizeof (* ih );
@@ -1005,20 +1004,19 @@ static int br_ip4_multicast_igmp3_report(struct net_bridge *br,
1005
1004
#if IS_ENABLED (CONFIG_IPV6 )
1006
1005
static int br_ip6_multicast_mld2_report (struct net_bridge * br ,
1007
1006
struct net_bridge_port * port ,
1008
- struct sk_buff * skb )
1007
+ struct sk_buff * skb ,
1008
+ u16 vid )
1009
1009
{
1010
1010
struct icmp6hdr * icmp6h ;
1011
1011
struct mld2_grec * grec ;
1012
1012
int i ;
1013
1013
int len ;
1014
1014
int num ;
1015
1015
int err = 0 ;
1016
- u16 vid = 0 ;
1017
1016
1018
1017
if (!pskb_may_pull (skb , sizeof (* icmp6h )))
1019
1018
return - EINVAL ;
1020
1019
1021
- br_vlan_get_tag (skb , & vid );
1022
1020
icmp6h = icmp6_hdr (skb );
1023
1021
num = ntohs (icmp6h -> icmp6_dataun .un_data16 [1 ]);
1024
1022
len = sizeof (* icmp6h );
@@ -1141,7 +1139,8 @@ static void br_multicast_query_received(struct net_bridge *br,
1141
1139
1142
1140
static int br_ip4_multicast_query (struct net_bridge * br ,
1143
1141
struct net_bridge_port * port ,
1144
- struct sk_buff * skb )
1142
+ struct sk_buff * skb ,
1143
+ u16 vid )
1145
1144
{
1146
1145
const struct iphdr * iph = ip_hdr (skb );
1147
1146
struct igmphdr * ih = igmp_hdr (skb );
@@ -1153,7 +1152,6 @@ static int br_ip4_multicast_query(struct net_bridge *br,
1153
1152
unsigned long now = jiffies ;
1154
1153
__be32 group ;
1155
1154
int err = 0 ;
1156
- u16 vid = 0 ;
1157
1155
1158
1156
spin_lock (& br -> multicast_lock );
1159
1157
if (!netif_running (br -> dev ) ||
@@ -1189,7 +1187,6 @@ static int br_ip4_multicast_query(struct net_bridge *br,
1189
1187
if (!group )
1190
1188
goto out ;
1191
1189
1192
- br_vlan_get_tag (skb , & vid );
1193
1190
mp = br_mdb_ip4_get (mlock_dereference (br -> mdb , br ), group , vid );
1194
1191
if (!mp )
1195
1192
goto out ;
@@ -1219,7 +1216,8 @@ static int br_ip4_multicast_query(struct net_bridge *br,
1219
1216
#if IS_ENABLED (CONFIG_IPV6 )
1220
1217
static int br_ip6_multicast_query (struct net_bridge * br ,
1221
1218
struct net_bridge_port * port ,
1222
- struct sk_buff * skb )
1219
+ struct sk_buff * skb ,
1220
+ u16 vid )
1223
1221
{
1224
1222
const struct ipv6hdr * ip6h = ipv6_hdr (skb );
1225
1223
struct mld_msg * mld ;
@@ -1231,7 +1229,6 @@ static int br_ip6_multicast_query(struct net_bridge *br,
1231
1229
unsigned long now = jiffies ;
1232
1230
const struct in6_addr * group = NULL ;
1233
1231
int err = 0 ;
1234
- u16 vid = 0 ;
1235
1232
1236
1233
spin_lock (& br -> multicast_lock );
1237
1234
if (!netif_running (br -> dev ) ||
@@ -1265,7 +1262,6 @@ static int br_ip6_multicast_query(struct net_bridge *br,
1265
1262
if (!group )
1266
1263
goto out ;
1267
1264
1268
- br_vlan_get_tag (skb , & vid );
1269
1265
mp = br_mdb_ip6_get (mlock_dereference (br -> mdb , br ), group , vid );
1270
1266
if (!mp )
1271
1267
goto out ;
@@ -1439,15 +1435,15 @@ static void br_ip6_multicast_leave_group(struct net_bridge *br,
1439
1435
1440
1436
static int br_multicast_ipv4_rcv (struct net_bridge * br ,
1441
1437
struct net_bridge_port * port ,
1442
- struct sk_buff * skb )
1438
+ struct sk_buff * skb ,
1439
+ u16 vid )
1443
1440
{
1444
1441
struct sk_buff * skb2 = skb ;
1445
1442
const struct iphdr * iph ;
1446
1443
struct igmphdr * ih ;
1447
1444
unsigned int len ;
1448
1445
unsigned int offset ;
1449
1446
int err ;
1450
- u16 vid = 0 ;
1451
1447
1452
1448
/* We treat OOM as packet loss for now. */
1453
1449
if (!pskb_may_pull (skb , sizeof (* iph )))
@@ -1508,7 +1504,6 @@ static int br_multicast_ipv4_rcv(struct net_bridge *br,
1508
1504
1509
1505
err = 0 ;
1510
1506
1511
- br_vlan_get_tag (skb2 , & vid );
1512
1507
BR_INPUT_SKB_CB (skb )-> igmp = 1 ;
1513
1508
ih = igmp_hdr (skb2 );
1514
1509
@@ -1519,10 +1514,10 @@ static int br_multicast_ipv4_rcv(struct net_bridge *br,
1519
1514
err = br_ip4_multicast_add_group (br , port , ih -> group , vid );
1520
1515
break ;
1521
1516
case IGMPV3_HOST_MEMBERSHIP_REPORT :
1522
- err = br_ip4_multicast_igmp3_report (br , port , skb2 );
1517
+ err = br_ip4_multicast_igmp3_report (br , port , skb2 , vid );
1523
1518
break ;
1524
1519
case IGMP_HOST_MEMBERSHIP_QUERY :
1525
- err = br_ip4_multicast_query (br , port , skb2 );
1520
+ err = br_ip4_multicast_query (br , port , skb2 , vid );
1526
1521
break ;
1527
1522
case IGMP_HOST_LEAVE_MESSAGE :
1528
1523
br_ip4_multicast_leave_group (br , port , ih -> group , vid );
@@ -1540,7 +1535,8 @@ static int br_multicast_ipv4_rcv(struct net_bridge *br,
1540
1535
#if IS_ENABLED (CONFIG_IPV6 )
1541
1536
static int br_multicast_ipv6_rcv (struct net_bridge * br ,
1542
1537
struct net_bridge_port * port ,
1543
- struct sk_buff * skb )
1538
+ struct sk_buff * skb ,
1539
+ u16 vid )
1544
1540
{
1545
1541
struct sk_buff * skb2 ;
1546
1542
const struct ipv6hdr * ip6h ;
@@ -1550,7 +1546,6 @@ static int br_multicast_ipv6_rcv(struct net_bridge *br,
1550
1546
unsigned int len ;
1551
1547
int offset ;
1552
1548
int err ;
1553
- u16 vid = 0 ;
1554
1549
1555
1550
if (!pskb_may_pull (skb , sizeof (* ip6h )))
1556
1551
return - EINVAL ;
@@ -1640,7 +1635,6 @@ static int br_multicast_ipv6_rcv(struct net_bridge *br,
1640
1635
1641
1636
err = 0 ;
1642
1637
1643
- br_vlan_get_tag (skb , & vid );
1644
1638
BR_INPUT_SKB_CB (skb )-> igmp = 1 ;
1645
1639
1646
1640
switch (icmp6_type ) {
@@ -1657,10 +1651,10 @@ static int br_multicast_ipv6_rcv(struct net_bridge *br,
1657
1651
break ;
1658
1652
}
1659
1653
case ICMPV6_MLD2_REPORT :
1660
- err = br_ip6_multicast_mld2_report (br , port , skb2 );
1654
+ err = br_ip6_multicast_mld2_report (br , port , skb2 , vid );
1661
1655
break ;
1662
1656
case ICMPV6_MGM_QUERY :
1663
- err = br_ip6_multicast_query (br , port , skb2 );
1657
+ err = br_ip6_multicast_query (br , port , skb2 , vid );
1664
1658
break ;
1665
1659
case ICMPV6_MGM_REDUCTION :
1666
1660
{
@@ -1681,7 +1675,7 @@ static int br_multicast_ipv6_rcv(struct net_bridge *br,
1681
1675
#endif
1682
1676
1683
1677
int br_multicast_rcv (struct net_bridge * br , struct net_bridge_port * port ,
1684
- struct sk_buff * skb )
1678
+ struct sk_buff * skb , u16 vid )
1685
1679
{
1686
1680
BR_INPUT_SKB_CB (skb )-> igmp = 0 ;
1687
1681
BR_INPUT_SKB_CB (skb )-> mrouters_only = 0 ;
@@ -1691,10 +1685,10 @@ int br_multicast_rcv(struct net_bridge *br, struct net_bridge_port *port,
1691
1685
1692
1686
switch (skb -> protocol ) {
1693
1687
case htons (ETH_P_IP ):
1694
- return br_multicast_ipv4_rcv (br , port , skb );
1688
+ return br_multicast_ipv4_rcv (br , port , skb , vid );
1695
1689
#if IS_ENABLED (CONFIG_IPV6 )
1696
1690
case htons (ETH_P_IPV6 ):
1697
- return br_multicast_ipv6_rcv (br , port , skb );
1691
+ return br_multicast_ipv6_rcv (br , port , skb , vid );
1698
1692
#endif
1699
1693
}
1700
1694
0 commit comments