linux/net/bridge/br_multicast.c
<<
">Search ">u .div id file_contents"l
3 31./a>.spaa class="comment">/*./spaalu3 32./a>.spaa class="comment"> * Bridge multicast support../spaalu3 33./a>.spaa class="comment"> *./spaalu3 34./a>.spaa class="comment"> * Copyright (c) 2010 Herbert Xu <herbert@gondor.apaaa.org.au>./spaalu3 35./a>.spaa class="comment"> *./spaalu3 36./a>.spaa class="comment"> * This program is free software; you caa redistribute it and/or modify it./spaalu3 37./a>.spaa class="comment"> * under the terms of the GNU General Public License as published by the Free./spaalu3 38./a>.spaa class="comment"> * Software Foundan va; either vers12"
2 of the License, or (at your ion va)./spaalu3 39./a>.spaa class="comment"> * any later vers12"../spaalu3 .spaa class="comment"> *./spaalu3 11./a>.spaa class="comment"> */./spaalu3 12./a>u3 13./a>#include <linux/err.h./a>>u3 14./a>#include <linux/if_ether.h./a>>u3 15./a>#include <linux/igmp.h./a>>u3 16./a>#include <linux/jhash.h./a>>u3 17./a>#include <linux/kernel.h./a>>u3 18./a>#include <linux/log2.h./a>>u3 19./a>#include <linux/netdevice.h./a>>u3 20./a>#include <linux/netfilter_bridge.h./a>>u3 21./a>#include <linux/random.h./a>>u3 22./a>#include <linux/rculist.h./a>>u3 23./a>#include <linux/skbuff.h./a>>u3 24./a>#include <linux/slab.h./a>>u3 25./a>#include <linux/timer.h./a>>u3 26./a>#include <net/ip.h./a>>u3 27./a>#if3.a href="+code=IS_ENABLED" class="sref">IS_ENABLED./a>(.a href="+code=CONFIG_IPV6" class="sref">CONFIG_IPV6./a>)u3 28./a>#include <net/ipv6.h./a>>u3 29./a>#include <net/mld.h./a>>u3 30./a>#include <net/addrconf.h./a>>u3 31./a>#include <net/ip6_checksum.h./a>>u3 32./a>#endifu3 33./a>u3 34./a>#include "br_private.h./a>"u3 35./a>u3 36./a>#define3.a href="+code=mlock_dereference" class="sref">mlock_dereference./a>(.a href="+code=X" class="sref">X./a>,3.a href="+code=br" class="sref">br./a>) \u3 37./a>        .a href="+code=rcu_dereference_protected" class="sref">rcu_dereference_protected./a>(.a href="+code=X" class="sref">X./a>,3.a href="+code=lockdep_is_held" class="sref">lockdep_is_held./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>))u3 38./a>u3 39./a>static void3.a href="+code=br_multicast_start_querier" class="sref">br_multicast_start_querier./a>(struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>);u3 40./a>u3 41./a>#if3.a href="+code=IS_ENABLED" class="sref">IS_ENABLED./a>(.a href="+code=CONFIG_IPV6" class="sref">CONFIG_IPV6./a>)u3 42./a>static .a href="+code=inline" class="sref">inline./a> int3.a href="+code=ipv6_is_transient_multicast" class="sref">ipv6_is_transient_multicast./a>(const struct3.a href="+code=in6_addr" class="sref">in6_addr./a> *.a href="+code=addr" class="sref">addr./a>)u3 43./a>{u3 44./a>        if3(.a href="+code=ipv6_addr_is_multicast" class="sref">ipv6_addr_is_multicast./a>(.a href="+code=addr" class="sref">addr./a>) &&3.a href="+code=IPV6_ADDR_MC_FLAG_TRANSIENT" class="sref">IPV6_ADDR_MC_FLAG_TRANSIENT./a>(.a href="+code=addr" class="sref">addr./a>))u3 45./a>                return 1;u3 46./a>        return 0;u3 47./a>}u3 48./a>#endifu3 49./a>u3 50./a>static .a href="+code=inline" class="sref">inline./a> int3.a href="+code=br_ip_equal" class="sref">br_ip_equal./a>(const struct3.a href="+code=br_ip" class="sref">br_ip./a> *.a href="+code=a" class="sref">a./a>,3const struct3.a href="+code=br_ip" class="sref">br_ip./a> *.a href="+code=b" class="sref">b./a>)u3 51./a>{u3 52./a>        if3(.a href="+code=a" class="sref">a./a>->.a href="+code=proto" class="sref">proto./a> !=3.a href="+code=b" class="sref">b./a>->.a href="+code=proto" class="sref">proto./a>)u3 53./a>                return 0;u3 54./a>        switch3(.a href="+code=a" class="sref">a./a>->.a href="+code=proto" class="sref">proto./a>) {u3 55./a>        case3.a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IP" class="sref">ETH_P_IP./a>):u3 56./a>                return .a href="+code=a" class="sref">a./a>->.a href="+code=u" class="sref">u./a>..a href="+code=ip4" class="sref">ip4./a> ==3.a href="+code=b" class="sref">b./a>->.a href="+code=u" class="sref">u./a>..a href="+code=ip4" class="sref">ip4./a>;u3 57./a>#if3.a href="+code=IS_ENABLED" class="sref">IS_ENABLED./a>(.a href="+code=CONFIG_IPV6" class="sref">CONFIG_IPV6./a>)u3 58./a>        case3.a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IPV6" class="sref">ETH_P_IPV6./a>):u3 59./a>                return .a href="+code=ipv6_addr_equal" class="sref">ipv6_addr_equal./a>(&.a href="+code=a" class="sref">a./a>->.a href="+code=u" class="sref">u./a>..a href="+code=ip6" class="sref">ip6./a>,3&.a href="+code=b" class="sref">b./a>->.a href="+code=u" class="sref">u./a>..a href="+code=ip6" class="sref">ip6./a>);u3 60./a>#endifu3 61./a>        }u3 62./a>        return 0;u3 63./a>}u3 64./a>u3 65./a>static .a href="+code=inline" class="sref">inline./a> int3.a href="+code=__br_ip4_hash" class="sref">__br_ip4_hash./a>(struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=mdb" class="sref">mdb./a>,3.a href="+code=__be32" class="sref">__be32./a> .a href="+code=ip" class="sref">ip./a>)u3 66./a>{u3 67./a>        return .a href="+code=jhash_1word" class="sref">jhash_1word./a>(.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=secret" class="sref">secret./a>,3(.a href="+code=__force" class="sref">__force./a> .a href="+code=u32" class="sref">u32./a>).a href="+code=ip" class="sref">ip./a>)3&3(.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=max" class="sref">max./a> - 1);u3 68./a>}u3 69./a>u3 70./a>#if3.a href="+code=IS_ENABLED" class="sref">IS_ENABLED./a>(.a href="+code=CONFIG_IPV6" class="sref">CONFIG_IPV6./a>)u3 71./a>static .a href="+code=inline" class="sref">inline./a> int3.a href="+code=__br_ip6_hash" class="sref">__br_ip6_hash./a>(struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=mdb" class="sref">mdb./a>,u3 72./a>                                const struct3.a href="+code=in6_addr" class="sref">in6_addr./a> *.a href="+code=ip" class="sref">ip./a>)u3 73./a>{u3 74./a>        return .a href="+code=jhash2" class="sref">jhash2./a>((.a href="+code=__force" class="sref">__force./a> .a href="+code=u32" class="sref">u32./a> *).a href="+code=ip" class="sref">ip./a>->.a href="+code=s6_addr32" class="sref">s6_addr32./a>,34,3.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=secret" class="sref">secret./a>)3&3(.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=max" class="sref">max./a> - 1);u3 75./a>}u3 76./a>#endifu3 77./a>u3 78./a>static .a href="+code=inline" class="sref">inline./a> int3.a href="+code=br_ip_hash" class="sref">br_ip_hash./a>(struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=mdb" class="sref">mdb./a>,u3 79./a>                             struct3.a href="+code=br_ip" class="sref">br_ip./a> *.a href="+code=ip" class="sref">ip./a>)u3 80./a>{u3 81./a>        switch3(.a href="+code=ip" class="sref">ip./a>->.a href="+code=proto" class="sref">proto./a>) {u3 82./a>        case3.a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IP" class="sref">ETH_P_IP./a>):u3 83./a>                return .a href="+code=__br_ip4_hash" class="sref">__br_ip4_hash./a>(.a href="+code=mdb" class="sref">mdb./a>,3.a href="+code=ip" class="sref">ip./a>->.a href="+code=u" class="sref">u./a>..a href="+code=ip4" class="sref">ip4./a>);u3 84./a>#if3.a href="+code=IS_ENABLED" class="sref">IS_ENABLED./a>(.a href="+code=CONFIG_IPV6" class="sref">CONFIG_IPV6./a>)u3 85./a>        case3.a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IPV6" class="sref">ETH_P_IPV6./a>):u3 86./a>                return .a href="+code=__br_ip6_hash" class="sref">__br_ip6_hash./a>(.a href="+code=mdb" class="sref">mdb./a>,3&.a href="+code=ip" class="sref">ip./a>->.a href="+code=u" class="sref">u./a>..a href="+code=ip6" class="sref">ip6./a>);u3 87./a>#endifu3 88./a>        }u3 89./a>        return 0;u3 90./a>}u3 91./a>u3 92./a>static struct3.a href="+code=net_bridge_mdb_entry" class="sref">net_bridge_mdb_entry./a> *.a href="+code=__br_mdb_ip_get" class="sref">__br_mdb_ip_get./a>(u3 93./a>        struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=mdb" class="sref">mdb./a>,3struct3.a href="+code=br_ip" class="sref">br_ip./a> *.a href="+code=dst" class="sref">dst./a>,3int3.a href="+code=hash" class="sref">hash./a>)u3 94./a>{u3 95./a>        struct3.a href="+code=net_bridge_mdb_entry" class="sref">net_bridge_mdb_entry./a> *.a href="+code=mp" class="sref">mp./a>;u3 96./a>        struct3.a href="+code=hlist_node" class="sref">hlist_node./a> *.a href="+code=p" class="sref">p./a>;u3 97./a>u3 98./a>        .a href="+code=hlist_for_each_entry_rcu" class="sref">hlist_for_each_entry_rcu./a>(.a href="+code=mp" class="sref">mp./a>,3.a href="+code=p" class="sref">p./a>,3&.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=mhash" class="sref">mhash./a>[.a href="+code=hash" class="sref">hash./a>],3.a href="+code=hlist" class="sref">hlist./a>[.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=ver" class="sref">ver./a>]) {u3 99./a>                if3(.a href="+code=br_ip_equal" class="sref">br_ip_equal./a>(&.a href="+code=mp" class="sref">mp./a>->.a href="+code=addr" class="sref">addr./a>,3.a href="+code=dst" class="sref">dst./a>))u3100./a>                        return .a href="+code=mp" class="sref">mp./a>;u3101./a>        }u3102./a>u3103./a>        return .a href="+code=NULL" class="sref">NULL./a>;u3104./a>}u3105./a>u3106./a>static struct3.a href="+code=net_bridge_mdb_entry" class="sref">net_bridge_mdb_entry./a> *.a href="+code=br_mdb_ip_get" class="sref">br_mdb_ip_get./a>(u3107./a>        struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=mdb" class="sref">mdb./a>,3struct3.a href="+code=br_ip" class="sref">br_ip./a> *.a href="+code=dst" class="sref">dst./a>)u3108./a>{u3109./a>        if3(!.a href="+code=mdb" class="sref">mdb./a>)u3110./a>                return .a href="+code=NULL" class="sref">NULL./a>;u3111./a>u3112./a>        return .a href="+code=__br_mdb_ip_get" class="sref">__br_mdb_ip_get./a>(.a href="+code=mdb" class="sref">mdb./a>,3.a href="+code=dst" class="sref">dst./a>,3.a href="+code=br_ip_hash" class="sref">br_ip_hash./a>(.a href="+code=mdb" class="sref">mdb./a>,3.a href="+code=dst" class="sref">dst./a>));u3113./a>}u3114./a>u3115./a>static struct3.a href="+code=net_bridge_mdb_entry" class="sref">net_bridge_mdb_entry./a> *.a href="+code=br_mdb_ip4_get" class="sref">br_mdb_ip4_get./a>(u3116./a>        struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=mdb" class="sref">mdb./a>,3.a href="+code=__be32" class="sref">__be32./a> .a href="+code=dst" class="sref">dst./a>)u3117./a>{u3118./a>        struct3.a href="+code=br_ip" class="sref">br_ip./a> .a href="+code=br_dst" class="sref">br_dst./a>;u3119./a>u3120./a>        .a href="+code=br_dst" class="sref">br_dst./a>..a href="+code=u" class="sref">u./a>..a href="+code=ip4" class="sref">ip4./a> = .a href="+code=dst" class="sref">dst./a>;u3121./a>        .a href="+code=br_dst" class="sref">br_dst./a>..a href="+code=proto" class="sref">proto./a> = .a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IP" class="sref">ETH_P_IP./a>);u3122./a>u3123./a>        return .a href="+code=br_mdb_ip_get" class="sref">br_mdb_ip_get./a>(.a href="+code=mdb" class="sref">mdb./a>,3&.a href="+code=br_dst" class="sref">br_dst./a>);u3124./a>}u3125./a>u3126./a>#if3.a href="+code=IS_ENABLED" class="sref">IS_ENABLED./a>(.a href="+code=CONFIG_IPV6" class="sref">CONFIG_IPV6./a>)u3127./a>static struct3.a href="+code=net_bridge_mdb_entry" class="sref">net_bridge_mdb_entry./a> *.a href="+code=br_mdb_ip6_get" class="sref">br_mdb_ip6_get./a>(u3128./a>        struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=mdb" class="sref">mdb./a>,3const struct3.a href="+code=in6_addr" class="sref">in6_addr./a> *.a href="+code=dst" class="sref">dst./a>)u3129./a>{u3130./a>        struct3.a href="+code=br_ip" class="sref">br_ip./a> .a href="+code=br_dst" class="sref">br_dst./a>;u3131./a>u3132./a>        .a href="+code=br_dst" class="sref">br_dst./a>..a href="+code=u" class="sref">u./a>..a href="+code=ip6" class="sref">ip6./a> = *.a href="+code=dst" class="sref">dst./a>;u3133./a>        .a href="+code=br_dst" class="sref">br_dst./a>..a href="+code=proto" class="sref">proto./a> = .a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IPV6" class="sref">ETH_P_IPV6./a>);u3134./a>u3135./a>        return .a href="+code=br_mdb_ip_get" class="sref">br_mdb_ip_get./a>(.a href="+code=mdb" class="sref">mdb./a>,3&.a href="+code=br_dst" class="sref">br_dst./a>);u3136./a>}u3137./a>#endifu3138./a>u3139./a>struct3.a href="+code=net_bridge_mdb_entry" class="sref">net_bridge_mdb_entry./a> *.a href="+code=br_mdb_get" class="sref">br_mdb_get./a>(struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u3140./a>                                        struct3.a href="+code=sk_buff" class="sref">sk_buff./a> *.a href="+code=skb" class="sref">skb./a>)u3141./a>{u3142./a>        struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=mdb" class="sref">mdb./a> = .a href="+code=rcu_dereference" class="sref">rcu_dereference./a>(.a href="+code=br" class="sref">br./a>->.a href="+code=mdb" class="sref">mdb./a>);u3143./a>        struct3.a href="+code=br_ip" class="sref">br_ip./a> .a href="+code=ip" class="sref">ip./a>;u3144./a>u3145./a>        if3(.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_disabled" class="sref">multicast_disabled./a>)u3146./a>                return .a href="+code=NULL" class="sref">NULL./a>;u3147./a>u3148./a>        if3(.a href="+code=BR_INPUT_SKB_CB" class="sref">BR_INPUT_SKB_CB./a>(.a href="+code=skb" class="sref">skb./a>)->.a href="+code=igmp" class="sref">igmp./a>)u3149./a>                return .a href="+code=NULL" class="sref">NULL./a>;u3150./a>u3151./a>        .a href="+code=ip" class="sref">ip./a>..a href="+code=proto" class="sref">proto./a> = .a href="+code=skb" class="sref">skb./a>->.a href="+code=protocol" class="sref">protocol./a>;u3152./a>u3153./a>        switch3(.a href="+code=skb" class="sref">skb./a>->.a href="+code=protocol" class="sref">protocol./a>) {u3154./a>        case3.a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IP" class="sref">ETH_P_IP./a>):u3155./a>                .a href="+code=ip" class="sref">ip./a>..a href="+code=u" class="sref">u./a>..a href="+code=ip4" class="sref">ip4./a> = .a href="+code=ip_hdr" class="sref">ip_hdr./a>(.a href="+code=skb" class="sref">skb./a>)->.a href="+code=daddr" class="sref">daddr./a>;u3156./a>                break;u3157./a>#if3.a href="+code=IS_ENABLED" class="sref">IS_ENABLED./a>(.a href="+code=CONFIG_IPV6" class="sref">CONFIG_IPV6./a>)u3158./a>        case3.a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IPV6" class="sref">ETH_P_IPV6./a>):u3159./a>                .a href="+code=ip" class="sref">ip./a>..a href="+code=u" class="sref">u./a>..a href="+code=ip6" class="sref">ip6./a> = .a href="+code=ipv6_hdr" class="sref">ipv6_hdr./a>(.a href="+code=skb" class="sref">skb./a>)->.a href="+code=daddr" class="sref">daddr./a>;u3160./a>                break;u3161./a>#endifu3162./a>        default:u3163./a>                return .a href="+code=NULL" class="sref">NULL./a>;u3164./a>        }u3165./a>u3166./a>        return .a href="+code=br_mdb_ip_get" class="sref">br_mdb_ip_get./a>(.a href="+code=mdb" class="sref">mdb./a>,3&.a href="+code=ip" class="sref">ip./a>);u3167./a>}u3168./a>u3169./a>static void3.a href="+code=br_mdb_free" class="sref">br_mdb_free./a>(struct3.a href="+code=rcu_head" class="sref">rcu_head./a> *.a href="+code=head" class="sref">head./a>)u3170./a>{u3171./a>        struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=mdb" class="sref">mdb./a> =u3172./a>                .a href="+code=container_of" class="sref">container_of./a>(.a href="+code=head" class="sref">head./a>,3struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a>,3.a href="+code=rcu" class="sref">rcu./a>);u3173./a>        struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=old" class="sref">old./a> = .a href="+code=mdb" class="sref">mdb./a>->.a href="+code=old" class="sref">old./a>;u3174./a>u3175./a>        .a href="+code=mdb" class="sref">mdb./a>->.a href="+code=old" class="sref">old./a> = .a href="+code=NULL" class="sref">NULL./a>;u3176./a>        .a href="+code=kfree" class="sref">kfree./a>(.a href="+code=old" class="sref">old./a>->.a href="+code=mhash" class="sref">mhash./a>);u3177./a>        .a href="+code=kfree" class="sref">kfree./a>(.a href="+code=old" class="sref">old./a>);u3178./a>}u3179./a>u3180./a>static int3.a href="+code=br_mdb_copy" class="sref">br_mdb_copy./a>(struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=new" class="sref">new./a>,u3181./a>                       struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=old" class="sref">old./a>,u3182./a>                       int3.a href="+code=elasticity" class="sref">elasticity./a>)u3183./a>{u3184./a>        struct3.a href="+code=net_bridge_mdb_entry" class="sref">net_bridge_mdb_entry./a> *.a href="+code=mp" class="sref">mp./a>;u3185./a>        struct3.a href="+code=hlist_node" class="sref">hlist_node./a> *.a href="+code=p" class="sref">p./a>;u3186./a>        int3.a href="+code=maxlen" class="sref">maxlen./a>;u3187./a>        int3.a href="+code=len" class="sref">len./a>;u3188./a>        int3.a href="+code=i" class="sref">i./a>;u3189./a>u3190./a>        for (.a href="+code=i" class="sref">i./a> = 0;3.a href="+code=i" class="sref">i./a> <3.a href="+code=old" class="sref">old./a>->.a href="+code=max" class="sref">max./a>;3.a href="+code=i" class="sref">i./a>++)u3191./a>                .a href="+code=hlist_for_each_entry" class="sref">hlist_for_each_entry./a>(.a href="+code=mp" class="sref">mp./a>,3.a href="+code=p" class="sref">p./a>,3&.a href="+code=old" class="sref">old./a>->.a href="+code=mhash" class="sref">mhash./a>[.a href="+code=i" class="sref">i./a>],3.a href="+code=hlist" class="sref">hlist./a>[.a href="+code=old" class="sref">old./a>->.a href="+code=ver" class="sref">ver./a>])u3192./a>                        .a href="+code=hlist_add_head" class="sref">hlist_add_head./a>(&.a href="+code=mp" class="sref">mp./a>->.a href="+code=hlist" class="sref">hlist./a>[.a href="+code=new" class="sref">new./a>->.a href="+code=ver" class="sref">ver./a>],u3193./a>                                       &.a href="+code=new" class="sref">new./a>->.a href="+code=mhash" class="sref">mhash./a>[.a href="+code=br_ip_hash" class="sref">br_ip_hash./a>(.a href="+code=new" class="sref">new./a>,3&.a href="+code=mp" class="sref">mp./a>->.a href="+code=addr" class="sref">addr./a>)]);u3194./a>u3195./a>        if3(!.a href="+code=elasticity" class="sref">elasticity./a>)u3196./a>                return 0;u3197./a>u3198./a>        .a href="+code=maxlen" class="sref">maxlen./a> = 0;u3199./a>        for (.a href="+code=i" class="sref">i./a> = 0;3.a href="+code=i" class="sref">i./a> <3.a href="+code=new" class="sref">new./a>->.a href="+code=max" class="sref">max./a>;3.a href="+code=i" class="sref">i./a>++) {u3200./a>                .a href="+code=len" class="sref">len./a> = 0;u3201./a>                .a href="+code=hlist_for_each_entry" class="sref">hlist_for_each_entry./a>(.a href="+code=mp" class="sref">mp./a>,3.a href="+code=p" class="sref">p./a>,3&.a href="+code=new" class="sref">new./a>->.a href="+code=mhash" class="sref">mhash./a>[.a href="+code=i" class="sref">i./a>],3.a href="+code=hlist" class="sref">hlist./a>[.a href="+code=new" class="sref">new./a>->.a href="+code=ver" class="sref">ver./a>])u3202./a>                        .a href="+code=len" class="sref">len./a>++;u3203./a>                if3(.a href="+code=len" class="sref">len./a> > .a href="+code=maxlen" class="sref">maxlen./a>)u3204./a>                        .a href="+code=maxlen" class="sref">maxlen./a> = .a href="+code=len" class="sref">len./a>;u3205./a>        }u3206./a>u3207./a>        return .a href="+code=maxlen" class="sref">maxlen./a> > .a href="+code=elasticity" class="sref">elasticity./a> ? -.a href="+code=EINVAL" class="sref">EINVAL./a> : 0;u3208./a>}u3209./a>u3210./a>static void3.a href="+code=br_multicast_free_pg" class="sref">br_multicast_free_pg./a>(struct3.a href="+code=rcu_head" class="sref">rcu_head./a> *.a href="+code=head" class="sref">head./a>)u3211./a>{u3212./a>        struct3.a href="+code=net_bridge_port_group" class="sref">net_bridge_port_group./a> *.a href="+code=p" class="sref">p./a> =u3213./a>                .a href="+code=container_of" class="sref">container_of./a>(.a href="+code=head" class="sref">head./a>,3struct3.a href="+code=net_bridge_port_group" class="sref">net_bridge_port_group./a>,3.a href="+code=rcu" class="sref">rcu./a>);u3214./a>u3215./a>        .a href="+code=kfree" class="sref">kfree./a>(.a href="+code=p" class="sref">p./a>);u3216./a>}u3217./a>u3218./a>static void3.a href="+code=br_multicast_free_group" class="sref">br_multicast_free_group./a>(struct3.a href="+code=rcu_head" class="sref">rcu_head./a> *.a href="+code=head" class="sref">head./a>)u3219./a>{u3220./a>        struct3.a href="+code=net_bridge_mdb_entry" class="sref">net_bridge_mdb_entry./a> *.a href="+code=mp" class="sref">mp./a> =u3221./a>                .a href="+code=container_of" class="sref">container_of./a>(.a href="+code=head" class="sref">head./a>,3struct3.a href="+code=net_bridge_mdb_entry" class="sref">net_bridge_mdb_entry./a>,3.a href="+code=rcu" class="sref">rcu./a>);u3222./a>u3223./a>        .a href="+code=kfree" class="sref">kfree./a>(.a href="+code=mp" class="sref">mp./a>);u3224./a>}u3225./a>u3226./a>static void3.a href="+code=br_multicast_group_expired" class="sref">br_multicast_group_expired./a>(unsigned long .a href="+code=data" class="sref">data./a>)u3227./a>{u3228./a>        struct3.a href="+code=net_bridge_mdb_entry" class="sref">net_bridge_mdb_entry./a> *.a href="+code=mp" class="sref">mp./a> = (void3*).a href="+code=data" class="sref">data./a>;u3229./a>        struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a> = .a href="+code=mp" class="sref">mp./a>->.a href="+code=br" class="sref">br./a>;u3230./a>        struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=mdb" class="sref">mdb./a>;u3231./a>u3232./a>        .a href="+code=spin_lock" class="sref">spin_lock./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>);u3233./a>        if3(!.a href="+code=netif_running" class="sref">netif_running./a>(.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>) || .a href="+code=timer_pending" class="sref">timer_pending./a>(&.a href="+code=mp" class="sref">mp./a>->.a href="+code=timer" class="sref">timer./a>))u3234./a>                goto3.a href="+code=out" class="sref">out./a>;u3235./a>u3236./a>        .a href="+code=mp" class="sref">mp./a>->.a href="+code=mglist" class="sref">mglist./a> = .a href="+code=false" class="sref">false./a>;u3237./a>u3238./a>        if3(.a href="+code=mp" class="sref">mp./a>->.a href="+code=ports" class="sref">ports./a>)u3239./a>                goto3.a href="+code=out" class="sref">out./a>;u3240./a>u3241./a>        .a href="+code=mdb" class="sref">mdb./a> = .a href="+code=mlock_dereference" class="sref">mlock_dereference./a>(.a href="+code=br" class="sref">br./a>->.a href="+code=mdb" class="sref">mdb./a>,3.a href="+code=br" class="sref">br./a>);u3242./a>u3243./a>        .a href="+code=hlist_del_rcu" class="sref">hlist_del_rcu./a>(&.a href="+code=mp" class="sref">mp./a>->.a href="+code=hlist" class="sref">hlist./a>[.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=ver" class="sref">ver./a>]);u3244./a>        .a href="+code=mdb" class="sref">mdb./a>->.a href="+code=size" class="sref">size./a>--;u3245./a>u3246./a>        .a href="+code=call_rcu_bh" class="sref">call_rcu_bh./a>(&.a href="+code=mp" class="sref">mp./a>->.a href="+code=rcu" class="sref">rcu./a>,3.a href="+code=br_multicast_free_group" class="sref">br_multicast_free_group./a>);u3247./a>u3248./a>.a href="+code=out" class="sref">out./a>:u3249./a>        .a href="+code=spin_unlock" class="sref">spin_unlock./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>);u3250./a>}u3251./a>u3252./a>static void3.a href="+code=br_multicast_del_pg" class="sref">br_multicast_del_pg./a>(struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u3253./a>                                struct3.a href="+code=net_bridge_port_group" class="sref">net_bridge_port_group./a> *.a href="+code=pg" class="sref">pg./a>)u3254./a>{u3255./a>        struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=mdb" class="sref">mdb./a>;u3256./a>        struct3.a href="+code=net_bridge_mdb_entry" class="sref">net_bridge_mdb_entry./a> *.a href="+code=mp" class="sref">mp./a>;u3257./a>        struct3.a href="+code=net_bridge_port_group" class="sref">net_bridge_port_group./a> *.a href="+code=p" class="sref">p./a>;u3258./a>        struct3.a href="+code=net_bridge_port_group" class="sref">net_bridge_port_group./a> .a href="+code=__rcu" class="sref">__rcu./a> **.a href="+code=pp" class="sref">pp./a>;u3259./a>u3260./a>        .a href="+code=mdb" class="sref">mdb./a> = .a href="+code=mlock_dereference" class="sref">mlock_dereference./a>(.a href="+code=br" class="sref">br./a>->.a href="+code=mdb" class="sref">mdb./a>,3.a href="+code=br" class="sref">br./a>);u3261./a>u3262./a>        .a href="+code=mp" class="sref">mp./a> = .a href="+code=br_mdb_ip_get" class="sref">br_mdb_ip_get./a>(.a href="+code=mdb" class="sref">mdb./a>,3&.a href="+code=pg" class="sref">pg./a>->.a href="+code=addr" class="sref">addr./a>);u3263./a>        if3(.a href="+code=WARN_ON" class="sref">WARN_ON./a>(!.a href="+code=mp" class="sref">mp./a>))u3264./a>                return;u3265./a>u3266./a>        for (.a href="+code=pp" class="sref">pp./a> = &.a href="+code=mp" class="sref">mp./a>->.a href="+code=ports" class="sref">ports./a>;u3267./a>             (.a href="+code=p" class="sref">p./a> = .a href="+code=mlock_dereference" class="sref">mlock_dereference./a>(*.a href="+code=pp" class="sref">pp./a>,3.a href="+code=br" class="sref">br./a>)) != .a href="+code=NULL" class="sref">NULL./a>;u3268./a>             .a href="+code=pp" class="sref">pp./a> = &.a href="+code=p" class="sref">p./a>->.a href="+code=next" class="sref">next./a>) {u3269./a>                if3(.a href="+code=p" class="sref">p./a> != .a href="+code=pg" class="sref">pg./a>)u3270./a>                        continue;u3271./a>u3272./a>                .a href="+code=rcu_assign_pointer" class="sref">rcu_assign_pointer./a>(*.a href="+code=pp" class="sref">pp./a>,3.a href="+code=p" class="sref">p./a>->.a href="+code=next" class="sref">next./a>);u3273./a>                .a href="+code=hlist_del_init" class="sref">hlist_del_init./a>(&.a href="+code=p" class="sref">p./a>->.a href="+code=mglist" class="sref">mglist./a>);u3274./a>                .a href="+code=del_timer" class="sref">del_timer./a>(&.a href="+code=p" class="sref">p./a>->.a href="+code=timer" class="sref">timer./a>);u3275./a>                .a href="+code=call_rcu_bh" class="sref">call_rcu_bh./a>(&.a href="+code=p" class="sref">p./a>->.a href="+code=rcu" class="sref">rcu./a>,3.a href="+code=br_multicast_free_pg" class="sref">br_multicast_free_pg./a>);u3276./a>u3277./a>                if3(!.a href="+code=mp" class="sref">mp./a>->.a href="+code=ports" class="sref">ports./a> && !.a href="+code=mp" class="sref">mp./a>->.a href="+code=mglist" class="sref">mglist./a> &&u3278./a>                    .a href="+code=netif_running" class="sref">netif_running./a>(.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>))u3279./a>                        .a href="+code=mod_timer" class="sref">mod_timer./a>(&.a href="+code=mp" class="sref">mp./a>->.a href="+code=timer" class="sref">timer./a>,3.a href="+code=jiffies" class="sref">jiffies./a>);u3280./a>u3281./a>                return;u3282./a>        }u3283./a>u3284./a>        .a href="+code=WARN_ON" class="sref">WARN_ON./a>(1);u3285./a>}u3286./a>u3287./a>static void3.a href="+code=br_multicast_port_group_expired" class="sref">br_multicast_port_group_expired./a>(unsigned long .a href="+code=data" class="sref">data./a>)u3288./a>{u3289./a>        struct3.a href="+code=net_bridge_port_group" class="sref">net_bridge_port_group./a> *.a href="+code=pg" class="sref">pg./a> = (void3*).a href="+code=data" class="sref">data./a>;u3290./a>        struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a> = .a href="+code=pg" class="sref">pg./a>->.a href="+code=port" class="sref">port./a>->.a href="+code=br" class="sref">br./a>;u3291./a>u3292./a>        .a href="+code=spin_lock" class="sref">spin_lock./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>);u3293./a>        if3(!.a href="+code=netif_running" class="sref">netif_running./a>(.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>) || .a href="+code=timer_pending" class="sref">timer_pending./a>(&.a href="+code=pg" class="sref">pg./a>->.a href="+code=timer" class="sref">timer./a>) ||u3294./a>            .a href="+code=hlist_unhashed" class="sref">hlist_unhashed./a>(&.a href="+code=pg" class="sref">pg./a>->.a href="+code=mglist" class="sref">mglist./a>))u3295./a>                goto3.a href="+code=out" class="sref">out./a>;u3296./a>u3297./a>        .a href="+code=br_multicast_del_pg" class="sref">br_multicast_del_pg./a>(.a href="+code=br" class="sref">br./a>,3.a href="+code=pg" class="sref">pg./a>);u3298./a>u3299./a>.a href="+code=out" class="sref">out./a>:u3300./a>        .a href="+code=spin_unlock" class="sref">spin_unlock./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>);u3301./a>}u3302./a>u3303./a>static int3.a href="+code=br_mdb_rehash" class="sref">br_mdb_rehash./a>(struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> .a href="+code=__rcu" class="sref">__rcu./a> **.a href="+code=mdbp" class="sref">mdbp./a>,3int3.a href="+code=max" class="sref">max./a>,u3304./a>                         int3.a href="+code=elasticity" class="sref">elasticity./a>)u3305./a>{u3306./a>        struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=old" class="sref">old./a> = .a href="+code=rcu_dereference_protected" class="sref">rcu_dereference_protected./a>(*.a href="+code=mdbp" class="sref">mdbp./a>,31);u3307./a>        struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=mdb" class="sref">mdb./a>;u3308./a>        int3.a href="+code=err" class="sref">err./a>;u3309./a>u3310./a>        .a href="+code=mdb" class="sref">mdb./a> = .a href="+code=kmalloc" class="sref">kmalloc./a>(sizeof(*.a href="+code=mdb" class="sref">mdb./a>),3.a href="+code=GFP_ATOMIC" class="sref">GFP_ATOMIC./a>);u3311./a>        if3(!.a href="+code=mdb" class="sref">mdb./a>)u3312./a>                return -.a href="+code=ENOMEM" class="sref">ENOMEM./a>;u3313./a>u3314./a>        .a href="+code=mdb" class="sref">mdb./a>->.a href="+code=max" class="sref">max./a> = .a href="+code=max" class="sref">max./a>;u3315./a>        .a href="+code=mdb" class="sref">mdb./a>->.a href="+code=old" class="sref">old./a> = .a href="+code=old" class="sref">old./a>;u3316./a>u3317./a>        .a href="+code=mdb" class="sref">mdb./a>->.a href="+code=mhash" class="sref">mhash./a> = .a href="+code=kzalloc" class="sref">kzalloc./a>(.a href="+code=max" class="sref">max./a> * sizeof(*.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=mhash" class="sref">mhash./a>),3.a href="+code=GFP_ATOMIC" class="sref">GFP_ATOMIC./a>);u3318./a>        if3(!.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=mhash" class="sref">mhash./a>) {u3319./a>                .a href="+code=kfree" class="sref">kfree./a>(.a href="+code=mdb" class="sref">mdb./a>);u3320./a>                return -.a href="+code=ENOMEM" class="sref">ENOMEM./a>;u3321./a>        }u3322./a>u3323./a>        .a href="+code=mdb" class="sref">mdb./a>->.a href="+code=size" class="sref">size./a> = .a href="+code=old" class="sref">old./a> ?3.a href="+code=old" class="sref">old./a>->.a href="+code=size" class="sref">size./a> : 0;u3324./a>        .a href="+code=mdb" class="sref">mdb./a>->.a href="+code=ver" class="sref">ver./a> = .a href="+code=old" class="sref">old./a> ?3.a href="+code=old" class="sref">old./a>->.a href="+code=ver" class="sref">ver./a> ^ 1 : 0;u3325./a>u3326./a>        if3(!.a href="+code=old" class="sref">old./a> || .a href="+code=elasticity" class="sref">elasticity./a>)u3327./a>                .a href="+code=get_random_bytes" class="sref">get_random_bytes./a>(&.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=secret" class="sref">secret./a>,3sizeof(.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=secret" class="sref">secret./a>));u3328./a>        elseu3329./a>                .a href="+code=mdb" class="sref">mdb./a>->.a href="+code=secret" class="sref">secret./a> = .a href="+code=old" class="sref">old./a>->.a href="+code=secret" class="sref">secret./a>;u3330./a>u3331./a>        if3(!.a href="+code=old" class="sref">old./a>)u3332./a>                goto3.a href="+code=out" class="sref">out./a>;u3333./a>u3334./a>        .a href="+code=err" class="sref">err./a> = .a href="+code=br_mdb_copy" class="sref">br_mdb_copy./a>(.a href="+code=mdb" class="sref">mdb./a>,3.a href="+code=old" class="sref">old./a>, .a href="+code=elasticity" class="sref">elasticity./a>);u3335./a>        if3(.a href="+code=err" class="sref">err./a>) {u3336./a>                .a href="+code=kfree" class="sref">kfree./a>(.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=mhash" class="sref">mhash./a>);u3337./a>                .a href="+code=kfree" class="sref">kfree./a>(.a href="+code=mdb" class="sref">mdb./a>);u3338./a>                return .a href="+code=err" class="sref">err./a>;u3339./a>        }u3340./a>u3341./a>        .a href="+code=call_rcu_bh" class="sref">call_rcu_bh./a>(&.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=rcu" class="sref">rcu./a>,3.a href="+code=br_mdb_free" class="sref">br_mdb_free./a>);u3342./a>u3343./a>.a href="+code=out" class="sref">out./a>:u3344./a>        .a href="+code=rcu_assign_pointer" class="sref">rcu_assign_pointer./a>(*.a href="+code=mdbp" class="sref">mdbp./a>,3.a href="+code=mdb" class="sref">mdb./a>);u3345./a>u3346./a>        return 0;u3347./a>}u3348./a>u3349./a>static struct3.a href="+code=sk_buff" class="sref">sk_buff./a> *.a href="+code=br_ip4_multicast_alloc_query" class="sref">br_ip4_multicast_alloc_query./a>(struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u3350./a>                                                    .a href="+code=__be32" class="sref">__be32./a> .a href="+code=group" class="sref">group./a>)u3351./a>{u3352./a>        struct3.a href="+code=sk_buff" class="sref">sk_buff./a> *.a href="+code=skb" class="sref">skb./a>;u3353./a>        struct3.a href="+code=igmphdr" class="sref">igmphdr./a> *.a href="+code=ih" class="sref">ih./a>;u3354./a>        struct3.a href="+code=ethhdr" class="sref">ethhdr./a> *.a href="+code=eth" class="sref">eth./a>;u3355./a>        struct3.a href="+code=iphdr" class="sref">iphdr./a> *.a href="+code=iph" class="sref">iph./a>;u3356./a>u3357./a>        .a href="+code=skb" class="sref">skb./a> = .a href="+code=netdev_alloc_skb_ip_align" class="sref">netdev_alloc_skb_ip_align./a>(.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>, sizeof(*.a href="+code=eth" class="sref">eth./a>) + sizeof(*.a href="+code=iph" class="sref">iph./a>) +u3358./a>                                                 sizeof(*.a href="+code=ih" class="sref">ih./a>) + 4);u3359./a>        if3(!.a href="+code=skb" class="sref">skb./a>)u3360./a>                goto3.a href="+code=out" class="sref">out./a>;u3361./a>u3362./a>        .a href="+code=skb" class="sref">skb./a>->.a href="+code=protocol" class="sref">protocol./a> = .a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IP" class="sref">ETH_P_IP./a>);u3363./a>u3364./a>        .a href="+code=skb_reset_mac_header" class="sref">skb_reset_mac_header./a>(.a href="+code=skb" class="sref">skb./a>);u3365./a>        .a href="+code=eth" class="sref">eth./a> = .a href="+code=eth_hdr" class="sref">eth_hdr./a>(.a href="+code=skb" class="sref">skb./a>);u3366./a>u3367./a>        .a href="+code=memcpy" class="sref">memcpy./a>(.a href="+code=eth" class="sref">eth./a>->.a href="+code=h_source" class="sref">h_source./a>,3.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>->.a href="+code=dev_addr" class="sref">dev_addr./a>,36);u3368./a>        .a href="+code=eth" class="sref">eth./a>->.a href="+code=h_dest" class="sref">h_dest./a>[0] = 1;u3369./a>        .a href="+code=eth" class="sref">eth./a>->.a href="+code=h_dest" class="sref">h_dest./a>[1] = 0;u3370./a>        .a href="+code=eth" class="sref">eth./a>->.a href="+code=h_dest" class="sref">h_dest./a>[2] = 0x5e;u3371./a>        .a href="+code=eth" class="sref">eth./a>->.a href="+code=h_dest" class="sref">h_dest./a>[3] = 0;u3372./a>        .a href="+code=eth" class="sref">eth./a>->.a href="+code=h_dest" class="sref">h_dest./a>[4] = 0;u3373./a>        .a href="+code=eth" class="sref">eth./a>->.a href="+code=h_dest" class="sref">h_dest./a>[5] = 1;u3374./a>        .a href="+code=eth" class="sref">eth./a>->.a href="+code=h_proto" class="sref">h_proto./a> = .a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IP" class="sref">ETH_P_IP./a>);u3375./a>        .a href="+code=skb_put" class="sref">skb_put./a>(.a href="+code=skb" class="sref">skb./a>, sizeof(*.a href="+code=eth" class="sref">eth./a>));u3376./a>u3377./a>        .a href="+code=skb_set_network_header" class="sref">skb_set_network_header./a>(.a href="+code=skb" class="sref">skb./a>, .a href="+code=skb" class="sref">skb./a>->.a href="+code=len" class="sref">len./a>);u3378./a>        .a href="+code=iph" class="sref">iph./a> = .a href="+code=ip_hdr" class="sref">ip_hdr./a>(.a href="+code=skb" class="sref">skb./a>);u3379./a>u3380./a>        .a href="+code=iph" class="sref">iph./a>->.a href="+code=version" class="sref">version./a> = 4;u3381./a>        .a href="+code=iph" class="sref">iph./a>->.a href="+code=ihl" class="sref">ihl./a> = 6;u3382./a>        .a href="+code=iph" class="sref">iph./a>->.a href="+code=tos" class="sref">tos./a> = 0xc0;u3383./a>        .a href="+code=iph" class="sref">iph./a>->.a href="+code=tot_len" class="sref">tot_len./a> = .a href="+code=htons" class="sref">htons./a>(sizeof(*.a href="+code=iph" class="sref">iph./a>) + sizeof(*.a href="+code=ih" class="sref">ih./a>) + 4);u3384./a>        .a href="+code=iph" class="sref">iph./a>->.a href="+code=id" class="sref">id./a> = 0;u3385./a>        .a href="+code=iph" class="sref">iph./a>->.a href="+code=frag_off" class="sref">frag_off./a> = .a href="+code=htons" class="sref">htons./a>(.a href="+code=IP_DF" class="sref">IP_DF./a>);u3386./a>        .a href="+code=iph" class="sref">iph./a>->.a href="+code=ttl" class="sref">ttl./a> = 1;u3387./a>        .a href="+code=iph" class="sref">iph./a>->.a href="+code=protocol" class="sref">protocol./a> = .a href="+code=IPPROTO_IGMP" class="sref">IPPROTO_IGMP./a>;u3388./a>        .a href="+code=iph" class="sref">iph./a>->.a href="+code=saddr" class="sref">saddr./a> = 0;u3389./a>        .a href="+code=iph" class="sref">iph./a>->.a href="+code=daddr" class="sref">daddr./a> = .a href="+code=htonl" class="sref">htonl./a>(.a href="+code=INADDR_ALLHOSTS_GROUP" class="sref">INADDR_ALLHOSTS_GROUP./a>);u3390./a>        ((.a href="+code=u8" class="sref">u8./a> *)&.a href="+code=iph" class="sref">iph./a>[1])[0] = .a href="+code=IPOPT_RA" class="sref">IPOPT_RA./a>;u3391./a>        ((.a href="+code=u8" class="sref">u8./a> *)&.a href="+code=iph" class="sref">iph./a>[1])[1] = 4;u3392./a>        ((.a href="+code=u8" class="sref">u8./a> *)&.a href="+code=iph" class="sref">iph./a>[1])[2] = 0;u3393./a>        ((.a href="+code=u8" class="sref">u8./a> *)&.a href="+code=iph" class="sref">iph./a>[1])[3] = 0;u3394./a>        .a href="+code=ip_send_check" class="sref">ip_send_check./a>(.a href="+code=iph" class="sref">iph./a>);u3395./a>        .a href="+code=skb_put" class="sref">skb_put./a>(.a href="+code=skb" class="sref">skb./a>, 24);u3396./a>u3397./a>        .a href="+code=skb_set_transport_header" class="sref">skb_set_transport_header./a>(.a href="+code=skb" class="sref">skb./a>, .a href="+code=skb" class="sref">skb./a>->.a href="+code=len" class="sref">len./a>);u3398./a>        .a href="+code=ih" class="sref">ih./a> = .a href="+code=igmp_hdr" class="sref">igmp_hdr./a>(.a href="+code=skb" class="sref">skb./a>);u3399./a>        .a href="+code=ih" class="sref">ih./a>->.a href="+code=type" class="sref">type./a> = .a href="+code=IGMP_HOST_MEMBERSHIP_QUERY" class="sref">IGMP_HOST_MEMBERSHIP_QUERY./a>;u3400./a>        .a href="+code=ih" class="sref">ih./a>->.a href="+code=code" class="sref">code./a> = (.a href="+code=group" class="sref">group./a> ?3.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_last_member_interval" class="sref">multicast_last_member_interval./a> :u3401./a>                            .a href="+code=br" class="sref">br./a>->.a href="+code=multicast_query_response_interval" class="sref">multicast_query_response_interval./a>) /u3402./a>                   (.a href="+code=HZ" class="sref">HZ./a> / .a href="+code=IGMP_TIMER_SCALE" class="sref">IGMP_TIMER_SCALE./a>);u3403./a>        .a href="+code=ih" class="sref">ih./a>->.a href="+code=group" class="sref">group./a> = .a href="+code=group" class="sref">group./a>;u3404./a>        .a href="+code=ih" class="sref">ih./a>->.a href="+code=csum" class="sref">csum./a> = 0;u3405./a>        .a href="+code=ih" class="sref">ih./a>->.a href="+code=csum" class="sref">csum./a> = .a href="+code=ip_compute_csum" class="sref">ip_compute_csum./a>((void3*).a href="+code=ih" class="sref">ih./a>, sizeof(struct3.a href="+code=igmphdr" class="sref">igmphdr./a>));u3406./a>        .a href="+code=skb_put" class="sref">skb_put./a>(.a href="+code=skb" class="sref">skb./a>, sizeof(*.a href="+code=ih" class="sref">ih./a>));u3407./a>u3408./a>        .a href="+code=__skb_pull" class="sref">__skb_pull./a>(.a href="+code=skb" class="sref">skb./a>, sizeof(*.a href="+code=eth" class="sref">eth./a>));u3409./a>u3410./a>.a href="+code=out" class="sref">out./a>:u3411./a>        return .a href="+code=skb" class="sref">skb./a>;u3412./a>}u3413./a>u3414./a>#if .a href="+code=IS_ENABLED" class="sref">IS_ENABLED./a>(.a href="+code=CONFIG_IPV6" class="sref">CONFIG_IPV6./a>)u3415./a>static struct3.a href="+code=sk_buff" class="sref">sk_buff./a> *.a href="+code=br_ip6_multicast_alloc_query" class="sref">br_ip6_multicast_alloc_query./a>(struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u3416./a>                                                    const struct3.a href="+code=in6_addr" class="sref">in6_addr./a> *.a href="+code=group" class="sref">group./a>)u3417./a>{u3418./a>        struct3.a href="+code=sk_buff" class="sref">sk_buff./a> *.a href="+code=skb" class="sref">skb./a>;u3419./a>        struct3.a href="+code=ipv6hdr" class="sref">ipv6hdr./a> *.a href="+code=ip6h" class="sref">ip6h./a>;u3420./a>        struct3.a href="+code=mld_msg" class="sref">mld_msg./a> *.a href="+code=mldq" class="sref">mldq./a>;u3421./a>        struct3.a href="+code=ethhdr" class="sref">ethhdr./a> *.a href="+code=eth" class="sref">eth./a>;u3422./a>        .a href="+code=u8" class="sref">u8./a> *.a href="+code=hopopt" class="sref">hopopt./a>;u3423./a>        unsigned long .a href="+code=interval" class="sref">interval./a>;u3424./a>u3425./a>        .a href="+code=skb" class="sref">skb./a> = .a href="+code=netdev_alloc_skb_ip_align" class="sref">netdev_alloc_skb_ip_align./a>(.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>, sizeof(*.a href="+code=eth" class="sref">eth./a>) + sizeof(*.a href="+code=ip6h" class="sref">ip6h./a>) +u3426./a>                                                 8 + sizeof(*.a href="+code=mldq" class="sref">mldq./a>));u3427./a>        if3(!.a href="+code=skb" class="sref">skb./a>)u3428./a>                goto3.a href="+code=out" class="sref">out./a>;u3429./a>u3430./a>        .a href="+code=skb" class="sref">skb./a>->.a href="+code=protocol" class="sref">protocol./a> = .a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IPV6" class="sref">ETH_P_IPV6./a>);u3431./a>u3432./a>        /* Ethernet header */u3433./a>        .a href="+code=skb_reset_mac_header" class="sref">skb_reset_mac_header./a>(.a href="+code=skb" class="sref">skb./a>);u3434./a>        .a href="+code=eth" class="sref">eth./a> = .a href="+code=eth_hdr" class="sref">eth_hdr./a>(.a href="+code=skb" class="sref">skb./a>);u3435./a>u3436./a>        .a href="+code=memcpy" class="sref">memcpy./a>(.a href="+code=eth" class="sref">eth./a>->.a href="+code=h_source" class="sref">h_source./a>,3.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>->.a href="+code=dev_addr" class="sref">dev_addr./a>,36);u3437./a>        .a href="+code=eth" class="sref">eth./a>->.a href="+code=h_proto" class="sref">h_proto./a> = .a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IPV6" class="sref">ETH_P_IPV6./a>);u3438./a>        .a href="+code=skb_put" class="sref">skb_put./a>(.a href="+code=skb" class="sref">skb./a>, sizeof(*.a href="+code=eth" class="sref">eth./a>));u3439./a>u3440./a>        /* IPv6 header + HbH option */u3441./a>        .a href="+code=skb_set_network_header" class="sref">skb_set_network_header./a>(.a href="+code=skb" class="sref">skb./a>, .a href="+code=skb" class="sref">skb./a>->.a href="+code=len" class="sref">len./a>);u3442./a>        .a href="+code=ip6h" class="sref">ip6h./a> = .a href="+code=ipv6_hdr" class="sref">ipv6_hdr./a>(.a href="+code=skb" class="sref">skb./a>);u3443./a>u3444./a>        *(.a href="+code=__force" class="sref">__force./a> .a href="+code=__be32" class="sref">__be32./a> *).a href="+code=ip6h" class="sref">ip6h./a> = .a href="+code=htonl" class="sref">htonl./a>(0x60000000);u3445./a>        .a href="+code=ip6h" class="sref">ip6h./a>->.a href="+code=payload_len" class="sref">payload_len./a> = .a href="+code=htons" class="sref">htons./a>(8 + sizeof(*.a href="+code=mldq" class="sref">mldq./a>));u3446./a>        .a href="+code=ip6h" class="sref">ip6h./a>->.a href="+code=nexthdr" class="sref">nexthdr./a> = .a href="+code=IPPROTO_HOPOPTS" class="sref">IPPROTO_HOPOPTS./a>;u3447./a>        .a href="+code=ip6h" class="sref">ip6h./a>->.a href="+code=hop_limit" class="sref">hop_limit./a> = 1;u3448./a>        .a href="+code=ipv6_addr_set" class="sref">ipv6_addr_set./a>(&.a href="+code=ip6h" class="sref">ip6h./a>->.a href="+code=daddr" class="sref">daddr./a>, .a href="+code=htonl" class="sref">htonl./a>(0xff020000), 0, 0, .a href="+code=htonl" class="sref">htonl./a>(1));u3449./a>        if3(.a href="+code=ipv6_dev_get_saddr" class="sref">ipv6_dev_get_saddr./a>(.a href="+code=dev_net" class="sref">dev_net./a>(.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>),3.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>, &.a href="+code=ip6h" class="sref">ip6h./a>->.a href="+code=daddr" class="sref">daddr./a>, 0,u3450./a>                               &.a href="+code=ip6h" class="sref">ip6h./a>->.a href="+code=saddr" class="sref">saddr./a>)) {u3451./a>                .a href="+code=kfree_skb" class="sref">kfree_skb./a>(.a href="+code=skb" class="sref">skb./a>);u3452./a>                return .a href="+code=NULL" class="sref">NULL./a>;u3453./a>        }u3454./a>        .a href="+code=ipv6_eth_mc_map" class="sref">ipv6_eth_mc_map./a>(&.a href="+code=ip6h" class="sref">ip6h./a>->.a href="+code=daddr" class="sref">daddr./a>, .a href="+code=eth" class="sref">eth./a>->.a href="+code=h_dest" class="sref">h_dest./a>);u3455./a>u3456./a>        .a href="+code=hopopt" class="sref">hopopt./a> = (.a href="+code=u8" class="sref">u8./a> *)(.a href="+code=ip6h" class="sref">ip6h./a> +31);u3457./a>        .a href="+code=hopopt" class="sref">hopopt./a>[0] = .a href="+code=IPPROTO_ICMPV6" class="sref">IPPROTO_ICMPV6./a>;             .span class="comment">/* next hdr */u3458./a>        .a href="+code=hopopt" class="sref">hopopt./a>[1] = 0;                          .span class="comment">/* length of HbH */u3459./a>        .a href="+code=hopopt" class="sref">hopopt./a>[2] = .a href="+code=IPV6_TLV_ROUTERALERT" class="sref">IPV6_TLV_ROUTERALERT./a>;       .span class="comment">/* Router Alert */u3460./a>        .a href="+code=hopopt" class="sref">hopopt./a>[3] = 2;                          .span class="comment">/* Length of RA Option */u3461./a>        .a href="+code=hopopt" class="sref">hopopt./a>[4] = 0;                          .span class="comment">/* Type = 0x0000 (MLD) */u3462./a>        .a href="+code=hopopt" class="sref">hopopt./a>[5] = 0;u3463./a>        .a href="+code=hopopt" class="sref">hopopt./a>[6] = .a href="+code=IPV6_TLV_PAD1" class="sref">IPV6_TLV_PAD1./a>;              .span class="comment">/* Pad1 */u3464./a>        .a href="+code=hopopt" class="sref">hopopt./a>[7] = .a href="+code=IPV6_TLV_PAD1" class="sref">IPV6_TLV_PAD1./a>;              .span class="comment">/* Pad1 */u3465./a>u3466./a>        .a href="+code=skb_put" class="sref">skb_put./a>(.a href="+code=skb" class="sref">skb./a>, sizeof(*.a href="+code=ip6h" class="sref">ip6h./a>) + 8);u3467./a>u3468./a>        .span class="comment">/* ICMPv6 */u3469./a>        .a href="+code=skb_set_transport_header" class="sref">skb_set_transport_header./a>(.a href="+code=skb" class="sref">skb./a>, .a href="+code=skb" class="sref">skb./a>->.a href="+code=len" class="sref">len./a>);u3470./a>        .a href="+code=mldq" class="sref">mldq./a> = (struct3.a href="+code=mld_msg" class="sref">mld_msg./a> *) .a href="+code=icmp6_hdr" class="sref">icmp6_hdr./a>(.a href="+code=skb" class="sref">skb./a>);u3471./a>u3472./a>        .a href="+code=interval" class="sref">interval./a> = .a href="+code=ipv6_addr_any" class="sref">ipv6_addr_any./a>(.a href="+code=group" class="sref">group./a>) ?3.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_last_member_interval" class="sref">multicast_last_member_interval./a> :u3473./a>                                          .a href="+code=br" class="sref">br./a>->.a href="+code=multicast_query_response_interval" class="sref">multicast_query_response_interval./a>;u3474./a>u3475./a>        .a href="+code=mldq" class="sref">mldq./a>->.a href="+code=mld_type" class="sref">mld_type./a> = .a href="+code=ICMPV6_MGM_QUERY" class="sref">ICMPV6_MGM_QUERY./a>;u3476./a>        .a href="+code=mldq" class="sref">mldq./a>->.a href="+code=mld_code" class="sref">mld_code./a> = 0;u3477./a>        .a href="+code=mldq" class="sref">mldq./a>->.a href="+code=mld_cksum" class="sref">mld_cksum./a> = 0;u3478./a>        .a href="+code=mldq" class="sref">mldq./a>->.a href="+code=mld_maxdelay" class="sref">mld_maxdelay./a> = .a href="+code=htons" class="sref">htons./a>((.a href="+code=u16" class="sref">u16./a>).a href="+code=jiffies_to_msecs" class="sref">jiffies_to_msecs./a>(.a href="+code=interval" class="sref">interval./a>));u3479./a>        .a href="+code=mldq" class="sref">mldq./a>->.a href="+code=mld_reserved" class="sref">mld_reserved./a> = 0;u3480./a>        .a href="+code=mldq" class="sref">mldq./a>->.a href="+code=mld_mca" class="sref">mld_mca./a> = *.a href="+code=group" class="sref">group./a>;u3481./a>u3482./a>        .span class="comment">/* checksum */u3483./a>        .a href="+code=mldq" class="sref">mldq./a>->.a href="+code=mld_cksum" class="sref">mld_cksum./a> = .a href="+code=csum_ipv6_magic" class="sref">csum_ipv6_magic./a>(&.a href="+code=ip6h" class="sref">ip6h./a>->.a href="+code=saddr" class="sref">saddr./a>, &.a href="+code=ip6h" class="sref">ip6h./a>->.a href="+code=daddr" class="sref">daddr./a>,u3484./a>                                          sizeof(*.a href="+code=mldq" class="sref">mldq./a>), .a href="+code=IPPROTO_ICMPV6" class="sref">IPPROTO_ICMPV6./a>,u3485./a>                                          .a href="+code=csum_partial" class="sref">csum_partial./a>(.a href="+code=mldq" class="sref">mldq./a>,u3486./a>                                                       sizeof(*.a href="+code=mldq" class="sref">mldq./a>), 0));u3487./a>        .a href="+code=skb_put" class="sref">skb_put./a>(.a href="+code=skb" class="sref">skb./a>, sizeof(*.a href="+code=mldq" class="sref">mldq./a>));u3488./a>u3489./a>        .a href="+code=__skb_pull" class="sref">__skb_pull./a>(.a href="+code=skb" class="sref">skb./a>, sizeof(*.a href="+code=eth" class="sref">eth./a>));u3490./a>u3491./a>.a href="+code=out" class="sref">out./a>:u3492./a>        return .a href="+code=skb" class="sref">skb./a>;u3493./a>}u3494./a>#endifu3495./a>u3496./a>static struct3.a href="+code=sk_buff" class="sref">sk_buff./a> *.a href="+code=br_multicast_alloc_query" class="sref">br_multicast_alloc_query./a>(struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u3497./a>                                                struct3.a href="+code=br_ip" class="sref">br_ip./a> *.a href="+code=addr" class="sref">addr./a>)u3498./a>{u3499./a>        switch (.a href="+code=addr" class="sref">addr./a>->.a href="+code=proto" class="sref">proto./a>) {u3500./a>        case .a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IP" class="sref">ETH_P_IP./a>):u3501./a>                return .a href="+code=br_ip4_multicast_alloc_query" class="sref">br_ip4_multicast_alloc_query./a>(.a href="+code=br" class="sref">br./a>, .a href="+code=addr" class="sref">addr./a>->.a href="+code=u" class="sref">u./a>..a href="+code=ip4" class="sref">ip4./a>);u3502./a>#if .a href="+code=IS_ENABLED" class="sref">IS_ENABLED./a>(.a href="+code=CONFIG_IPV6" class="sref">CONFIG_IPV6./a>)u3503./a>        case .a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IPV6" class="sref">ETH_P_IPV6./a>):u3504./a>                return .a href="+code=br_ip6_multicast_alloc_query" class="sref">br_ip6_multicast_alloc_query./a>(.a href="+code=br" class="sref">br./a>, &.a href="+code=addr" class="sref">addr./a>->.a href="+code=u" class="sref">u./a>..a href="+code=ip6" class="sref">ip6./a>);u3505./a>#endifu3506./a>        }u3507./a>        return .a href="+code=NULL" class="sref">NULL./a>;u3508./a>}u3509./a>u3510./a>static struct3.a href="+code=net_bridge_mdb_entry" class="sref">net_bridge_mdb_entry./a> *.a href="+code=br_multicast_get_group" class="sref">br_multicast_get_group./a>(u3511./a>        struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>, struct3.a href="+code=net_bridge_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u3512./a>        struct3.a href="+code=br_ip" class="sref">br_ip./a> *.a href="+code=group" class="sref">group./a>, int3.a href="+code=hash" class="sref">hash./a>)u3513./a>{u3514./a>        struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=mdb" class="sref">mdb./a>;u3515./a>        struct3.a href="+code=net_bridge_mdb_entry" class="sref">net_bridge_mdb_entry./a> *.a href="+code=mp" class="sref">mp./a>;u3516./a>        struct3.a href="+code=hlist_node" class="sref">hlist_node./a> *.a href="+code=p" class="sref">p./a>;u3517./a>        unsigned int3.a href="+code=count" class="sref">count./a> = 0;u3518./a>        unsigned int3.a href="+code=max" class="sref">max./a>;u3519./a>        int3.a href="+code=elasticity" class="sref">elasticity./a>;u3520./a>        int3.a href="+code=err" class="sref">err./a>;u3521./a>u3522./a>        .a href="+code=mdb" class="sref">mdb./a> = .a href="+code=rcu_dereference_protected" class="sref">rcu_dereference_protected./a>(.a href="+code=br" class="sref">br./a>->.a href="+code=mdb" class="sref">mdb./a>,31);u3523./a>        .a href="+code=hlist_for_each_entry" class="sref">hlist_for_each_entry./a>(.a href="+code=mp" class="sref">mp./a>, .a href="+code=p" class="sref">p./a>, &.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=mhash" class="sref">mhash./a>[.a href="+code=hash" class="sref">hash./a>], .a href="+code=hlist" class="sref">hlist./a>[.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=ver" class="sref">ver./a>]) {u3524./a>                .a href="+code=count" class="sref">count./a>++;u3525./a>                if3(.a href="+code=unlikely" class="sref">unlikely./a>(.a href="+code=br_ip_equal" class="sref">br_ip_equal./a>(.a href="+code=group" class="sref">group./a>, &.a href="+code=mp" class="sref">mp./a>->.a href="+code=addr" class="sref">addr./a>)))u3526./a>                        return .a href="+code=mp" class="sref">mp./a>;u3527./a>        }u3528./a>u3529./a>        .a href="+code=elasticity" class="sref">elasticity./a> = 0;u3530./a>        .a href="+code=max" class="sref">max./a> = .a href="+code=mdb" class="sref">mdb./a>->.a href="+code=max" class="sref">max./a>;u3531./a>u3532./a>        if3(.a href="+code=unlikely" class="sref">unlikely./a>(.a href="+code=count" class="sref">count./a> > .a href="+code=br" class="sref">br./a>->.a href="+code=hash_elasticity" class="sref">hash_elasticity./a> && .a href="+code=count" class="sref">count./a>)) {u3533./a>                if3(.a href="+code=net_ratelimit" class="sref">net_ratelimit./a>())u3534./a>                        .a href="+code=br_info" class="sref">br_info./a>(.a href="+code=br" class="sref">br./a>, .span class="string">"Multicast hash table "u3535./a>                                .span class="string">"chain limit reached: %s\n",u3536./a>                                .a href="+code=port" class="sref">port./a> ?3.a href="+code=port" class="sref">port./a>->.a href="+code=dev" class="sref">dev./a>->.a href="+code=nam
" class="sref">nam
./a> :3.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>->.a href="+code=nam
" class="sref">nam
./a>);u3537./a>u3538./a>                .a href="+code=elasticity" class="sref">elasticity./a> = .a href="+code=br" class="sref">br./a>->.a href="+code=hash_elasticity" class="sref">hash_elasticity./a>;u3539./a>        }u3540./a>u3541./a>        if3(.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=size" class="sref">size./a> >= .a href="+code=max" class="sref">max./a>) {u3542./a>                .a href="+code=max" class="sref">max./a> *= 2;u3543./a>                if3(.a href="+code=unlikely" class="sref">unlikely./a>(.a href="+code=max" class="sref">max./a> > .a href="+code=br" class="sref">br./a>->.a href="+code=hash_max" class="sref">hash_max./a>)) {u3544./a>                        .a href="+code=br_warn" class="sref">br_warn./a>(.a href="+code=br" class="sref">br./a>, .span class="string">"Multicast hash table maximum of %d "u3545./a>                                .span class="string">"reached, disabling snooping: %s\n",u3546./a>                                .a href="+code=br" class="sref">br./a>->.a href="+code=hash_max" class="sref">hash_max./a>,u3547./a>                                .a href="+code=port" class="sref">port./a> ?3.a href="+code=port" class="sref">port./a>->.a href="+code=dev" class="sref">dev./a>->.a href="+code=nam
" class="sref">nam
./a> :3.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>->.a href="+code=nam
" class="sref">nam
./a>);u3548./a>                        .a href="+code=err" class="sref">err./a> = -.a href="+code=E2BIG" class="sref">E2BIG./a>;u3549./a>.a href="+code=disabl
" class="sref">disabl
./a>:u3550./a>                        .a href="+code=br" class="sref">br./a>->.a href="+code=multicast_disabl
d" class="sref">multicast_disabl
d./a> = 1;u3551./a>                        goto3.a href="+code=err" class="sref">err./a>;u3552./a>                }u3553./a>        }u3554./a>u3555./a>        if3(.a href="+code=max" class="sref">max./a> > .a href="+code=mdb" class="sref">mdb./a>->.a href="+code=max" class="sref">max./a> || .a href="+code=elasticity" class="sref">elasticity./a>) {u3556./a>                if3(.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=old" class="sref">old./a>) {u3557./a>                        if3(.a href="+code=net_ratelimit" class="sref">net_ratelimit./a>())u3558./a>                                .a href="+code=br_info" class="sref">br_info./a>(.a href="+code=br" class="sref">br./a>, .span class="string">"Multicast hash table "u3559./a>                                        .span class="string">"on fire: %s\n",u3560./a>                                        .a href="+code=port" class="sref">port./a> ?3.a href="+code=port" class="sref">port./a>->.a href="+code=dev" class="sref">dev./a>->.a href="+code=nam
" class="sref">nam
./a> :3.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>->.a href="+code=nam
" class="sref">nam
./a>);u3561./a>                        .a href="+code=err" class="sref">err./a> = -.a href="+code=EEXIST" class="sref">EEXIST./a>;u3562./a>                        goto3.a href="+code=err" class="sref">err./a>;u3563./a>                }u3564./a>u3565./a>                .a href="+code=err" class="sref">err./a> = .a href="+code=br_mdb_rehash" class="sref">br_mdb_rehash./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=mdb" class="sref">mdb./a>,3.a href="+code=max" class="sref">max./a>, .a href="+code=elasticity" class="sref">elasticity./a>);u3566./a>                if3(.a href="+code=err" class="sref">err./a>) {u3567./a>                        .a href="+code=br_warn" class="sref">br_warn./a>(.a href="+code=br" class="sref">br./a>, .span class="string">"Cannot rehash multicast "u3568./a>                                .span class="string">"hash table, disabling snooping: %s, %d, %d\n",u3569./a>                                .a href="+code=port" class="sref">port./a> ?3.a href="+code=port" class="sref">port./a>->.a href="+code=dev" class="sref">dev./a>->.a href="+code=nam
" class="sref">nam
./a> :3.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>->.a href="+code=nam
" class="sref">nam
./a>,u3570./a>                                .a href="+code=mdb" class="sref">mdb./a>->.a href="+code=size" class="sref">size./a>, .a href="+code=err" class="sref">err./a>);u3571./a>                        goto3.a href="+code=disabl
" class="sref">disabl
./a>;u3572./a>                }u3573./a>u3574./a>                .a href="+code=err" class="sref">err./a> = -.a href="+code=EAGAIN" class="sref">EAGAIN./a>;u3575./a>                goto3.a href="+code=err" class="sref">err./a>;u3576./a>        }u3577./a>u3578./a>        return .a href="+code=NULL" class="sref">NULL./a>;u3579./a>u3580./a>.a href="+code=err" class="sref">err./a>:u3581./a>        .a href="+code=mp" class="sref">mp./a> = .a href="+code=ERR_PTR" class="sref">ERR_PTR./a>(.a href="+code=err" class="sref">err./a>);u3582./a>        return .a href="+code=mp" class="sref">mp./a>;u3583./a>}u3584./a>u3585./a>static struct3.a href="+code=net_bridge_mdb_entry" class="sref">net_bridge_mdb_entry./a> *.a href="+code=br_multicast_new_group" class="sref">br_multicast_new_group./a>(u3586./a>        struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>, struct3.a href="+code=net_bridge_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u3587./a>        struct3.a href="+code=br_ip" class="sref">br_ip./a> *.a href="+code=group" class="sref">group./a>)u3588./a>{u3589./a>        struct3.a href="+code=net_bridge_mdb_htable" class="sref">net_bridge_mdb_htable./a> *.a href="+code=mdb" class="sref">mdb./a>;u3590./a>        struct3.a href="+code=net_bridge_mdb_entry" class="sref">net_bridge_mdb_entry./a> *.a href="+code=mp" class="sref">mp./a>;u3591./a>        int3.a href="+code=hash" class="sref">hash./a>;u3592./a>        int3.a href="+code=err" class="sref">err./a>;u3593./a>u3594./a>        .a href="+code=mdb" class="sref">mdb./a> = .a href="+code=rcu_dereference_protected" class="sref">rcu_dereference_protected./a>(.a href="+code=br" class="sref">br./a>->.a href="+code=mdb" class="sref">mdb./a>,31);u3595./a>        if3(!.a href="+code=mdb" class="sref">mdb./a>) {u3596./a>                .a href="+code=err" class="sref">err./a> = .a href="+code=br_mdb_rehash" class="sref">br_mdb_rehash./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=mdb" class="sref">mdb./a>,3.a href="+code=BR_HASH_SIZE" class="sref">BR_HASH_SIZE./a>,30);u3597./a>                if3(.a href="+code=err" class="sref">err./a>)u3598./a>                        return .a href="+code=ERR_PTR" class="sref">ERR_PTR./a>(.a href="+code=err" class="sref">err./a>);u3599./a>                goto3.a href="+code=rehash" class="sref">rehash./a>;u3600./a>        }u3601./a>u3602./a>        .a href="+code=hash" class="sref">hash./a> = .a href="+code=br_ip_hash" class="sref">br_ip_hash./a>(.a href="+code=mdb" class="sref">mdb./a>,3.a href="+code=group" class="sref">group./a>);u3603./a>        .a href="+code=mp" class="sref">mp./a> = .a href="+code=br_multicast_get_group" class="sref">br_multicast_get_group./a>(.a href="+code=br" class="sref">br./a>, .a href="+code=port" class="sref">port./a>,3.a href="+code=group" class="sref">group./a>, .a href="+code=hash" class="sref">hash./a>);u3604./a>        switch (.a href="+code=PTR_ERR" class="sref">PTR_ERR./a>(.a href="+code=mp" class="sref">mp./a>)) {u3605./a>        case 0:u3606./a>                break;u3607./a>u3608./a>        case -.a href="+code=EAGAIN" class="sref">EAGAIN./a>:u3609./a>.a href="+code=rehash" class="sref">rehash./a>:u3610./a>                .a href="+code=mdb" class="sref">mdb./a> = .a href="+code=rcu_dereference_protected" class="sref">rcu_dereference_protected./a>(.a href="+code=br" class="sref">br./a>->.a href="+code=mdb" class="sref">mdb./a>,31);u3611./a>                .a href="+code=hash" class="sref">hash./a> = .a href="+code=br_ip_hash" class="sref">br_ip_hash./a>(.a href="+code=mdb" class="sref">mdb./a>,3.a href="+code=group" class="sref">group./a>);u3612./a>                break;u3613./a>u3614./a>        default:u3615./a>                goto3.a href="+code=out" class="sref">out./a>;u3616./a>        }u3617./a>u3618./a>        .a href="+code=mp" class="sref">mp./a> = .a href="+code=kzalloc" class="sref">kzalloc./a>(sizeof(*.a href="+code=mp" class="sref">mp./a>),3.a href="+code=GFP_ATOMIC" class="sref">GFP_ATOMIC./a>);u3619./a>        if3(.a href="+code=unlikely" class="sref">unlikely./a>(!.a href="+code=mp" class="sref">mp./a>))u3620./a>                return .a href="+code=ERR_PTR" class="sref">ERR_PTR./a>(-.a href="+code=ENOMEM" class="sref">ENOMEM./a>);u3621./a>u3622./a>        .a href="+code=mp" class="sref">mp./a>->.a href="+code=br" class="sref">br./a> = .a href="+code=br" class="sref">br./a>;u3623./a>        .a href="+code=mp" class="sref">mp./a>->.a href="+code=addr" class="sref">addr./a> = *.a href="+code=group" class="sref">group./a>;u3624./a>        .a href="+code=setup_timer" class="sref">setup_timer./a>(&.a href="+code=mp" class="sref">mp./a>->.a href="+code=timer" class="sref">timer./a>,3.a href="+code=br_multicast_group_expired" class="sref">br_multicast_group_expired./a>,u3625./a>                    (unsigned long).a href="+code=mp" class="sref">mp./a>);u3626./a>u3627./a>        .a href="+code=hlist_add_head_rcu" class="sref">hlist_add_head_rcu./a>(&.a href="+code=mp" class="sref">mp./a>->.a href="+code=hlist" class="sref">hlist./a>[.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=ver" class="sref">ver./a>], &.a href="+code=mdb" class="sref">mdb./a>->.a href="+code=mhash" class="sref">mhash./a>[.a href="+code=hash" class="sref">hash./a>]);u3628./a>        .a href="+code=mdb" class="sref">mdb./a>->.a href="+code=size" class="sref">size./a>++;u3629./a>u3630./a>.a href="+code=out" class="sref">out./a>:u3631./a>        return .a href="+code=mp" class="sref">mp./a>;u3632./a>}u3633./a>u3634./a>static int3.a href="+code=br_multicast_add_group" class="sref">br_multicast_add_group./a>(struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u3635./a>                                  struct3.a href="+code=net_bridge_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u3636./a>                                  struct3.a href="+code=br_ip" class="sref">br_ip./a> *.a href="+code=group" class="sref">group./a>)u3637./a>{u3638./a>        struct3.a href="+code=net_bridge_mdb_entry" class="sref">net_bridge_mdb_entry./a> *.a href="+code=mp" class="sref">mp./a>;u3639./a>        struct3.a href="+code=net_bridge_port_group" class="sref">net_bridge_port_group./a> *.a href="+code=p" class="sref">p./a>;u3640./a>        struct3.a href="+code=net_bridge_port_group" class="sref">net_bridge_port_group./a> .a href="+code=__rcu" class="sref">__rcu./a> **.a href="+code=pp" class="sref">pp./a>;u3641./a>        unsigned long3.a href="+code=now" class="sref">now./a> = .a href="+code=jiffies" class="sref">jiffies./a>;u3642./a>        int3.a href="+code=err" class="sref">err./a>;u3643./a>u3644./a>        .a href="+code=spin_lock" class="sref">spin_lock./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>);u3645./a>        if3(!.a href="+code=netif_running" class="sref">netif_running./a>(.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>) ||u3646./a>            (.a href="+code=port" class="sref">port./a> && .a href="+code=port" class="sref">port./a>->.a href="+code=state" class="sref">state./a> == .a href="+code=BR_STATE_DISABLED" class="sref">BR_STATE_DISABLED./a>))u3647./a>                goto3.a href="+code=out" class="sref">out./a>;u3648./a>u3649./a>        .a href="+code=mp" class="sref">mp./a> = .a href="+code=br_multicast_new_group" class="sref">br_multicast_new_group./a>(.a href="+code=br" class="sref">br./a>, .a href="+code=port" class="sref">port./a>,3.a href="+code=group" class="sref">group./a>);u3650./a>        .a href="+code=err" class="sref">err./a> = .a href="+code=PTR_ERR" class="sref">PTR_ERR./a>(.a href="+code=mp" class="sref">mp./a>);u3651./a>        if3(.a href="+code=IS_ERR" class="sref">IS_ERR./a>(.a href="+code=mp" class="sref">mp./a>))u3652./a>                goto3.a href="+code=err" class="sref">err./a>;u3653./a>u3654./a>        if3(!.a href="+code=port" class="sref">port./a>) {u3655./a>                .a href="+code=mp" class="sref">mp./a>->.a href="+code=mglist" class="sref">mglist./a> = .a href="+code=true" class="sref">true./a>;u3656./a>                .a href="+code=mod_timer" class="sref">mod_timer./a>(&.a href="+code=mp" class="sref">mp./a>->.a href="+code=timer" class="sref">timer./a>,3.a href="+code=now" class="sref">now./a> + .a href="+code=br" class="sref">br./a>->.a href="+code=multicast_membership_interval" class="sref">multicast_membership_interval./a>);u3657./a>                goto3.a href="+code=out" class="sref">out./a>;u3658./a>        }u3659./a>u3660./a>        for (.a href="+code=pp" class="sref">pp./a> = &.a href="+code=mp" class="sref">mp./a>->.a href="+code=ports" class="sref">ports./a>;u3661./a>             (.a href="+code=p" class="sref">p./a> = .a href="+code=mlock_dereference" class="sref">mlock_dereference./a>(*.a href="+code=pp" class="sref">pp./a>,3.a href="+code=br" class="sref">br./a>)) != .a href="+code=NULL" class="sref">NULL./a>;u3662./a>             .a href="+code=pp" class="sref">pp./a> = &.a href="+code=p" class="sref">p./a>->.a href="+code=next" class="sref">next./a>) {u3663./a>                if3(.a href="+code=p" class="sref">p./a>->.a href="+code=port" class="sref">port./a> == .a href="+code=port" class="sref">port./a>)u3664./a>                        goto3.a href="+code=found" class="sref">found./a>;u3665./a>                if3((unsigned long).a href="+code=p" class="sref">p./a>->.a href="+code=port" class="sref">port./a> < (unsigned long).a href="+code=port" class="sref">port./a>)u3666./a>                        break;u3667./a>        }u3668./a>u3669./a>        .a href="+code=p" class="sref">p./a> = .a href="+code=kzalloc" class="sref">kzalloc./a>(sizeof(*.a href="+code=p" class="sref">p./a>),3.a href="+code=GFP_ATOMIC" class="sref">GFP_ATOMIC./a>);u3670./a>        .a href="+code=err" class="sref">err./a> = -.a href="+code=ENOMEM" class="sref">ENOMEM./a>;u3671./a>        if3(.a href="+code=unlikely" class="sref">unlikely./a>(!.a href="+code=p" class="sref">p./a>))u3672./a>                goto3.a href="+code=err" class="sref">err./a>;u3673./a>u3674./a>        .a href="+code=p" class="sref">p./a>->.a href="+code=addr" class="sref">addr./a> = *.a href="+code=group" class="sref">group./a>;u3675./a>        .a href="+code=p" class="sref">p./a>->.a href="+code=port" class="sref">port./a> = .a href="+code=port" class="sref">port./a>;u3676./a>        .a href="+code=p" class="sref">p./a>->.a href="+code=next" class="sref">next./a> = *.a href="+code=pp" class="sref">pp./a>;u3677./a>        .a href="+code=hlist_add_head" class="sref">hlist_add_head./a>(&.a href="+code=p" class="sref">p./a>->.a href="+code=mglist" class="sref">mglist./a>, &.a href="+code=port" class="sref">port./a>->.a href="+code=mglist" class="sref">mglist./a>);u3678./a>        .a href="+code=setup_timer" class="sref">setup_timer./a>(&.a href="+code=p" class="sref">p./a>->.a href="+code=timer" class="sref">timer./a>,3.a href="+code=br_multicast_port_group_expired" class="sref">br_multicast_port_group_expired./a>,u3679./a>                    (unsigned long).a href="+code=p" class="sref">p./a>);u3680./a>u3681./a>        .a href="+code=rcu_assign_pointer" class="sref">rcu_assign_pointer./a>(*.a href="+code=pp" class="sref">pp./a>,3.a href="+code=p" class="sref">p./a>);u3682./a>u3683./a>.a href="+code=found" class="sref">found./a>:u3684./a>        .a href="+code=mod_timer" class="sref">mod_timer./a>(&.a href="+code=p" class="sref">p./a>->.a href="+code=timer" class="sref">timer./a>,3.a href="+code=now" class="sref">now./a> + .a href="+code=br" class="sref">br./a>->.a href="+code=multicast_membership_interval" class="sref">multicast_membership_interval./a>);u3685./a>.a href="+code=out" class="sref">out./a>:u3686./a>        .a href="+code=err" class="sref">err./a> = 0;u3687./a>u3688./a>.a href="+code=err" class="sref">err./a>:u3689./a>        .a href="+code=spin_unlock" class="sref">spin_unlock./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>);u3690./a>        return .a href="+code=err" class="sref">err./a>;u3691./a>}u3692./a>u3693./a>static int3.a href="+code=br_ip4_multicast_add_group" class="sref">br_ip4_multicast_add_group./a>(struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u3694./a>                                      struct3.a href="+code=net_bridge_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u3695./a>                                      .a href="+code=__be32" class="sref">__be32./a> .a href="+code=group" class="sref">group./a>)u3696./a>{u3697./a>        struct3.a href="+code=br_ip" class="sref">br_ip./a> .a href="+code=br_group" class="sref">br_group./a>;u3698./a>u3699./a>        if3(.a href="+code=ipv4_is_local_multicast" class="sref">ipv4_is_local_multicast./a>(.a href="+code=group" class="sref">group./a>))u3700./a>                return 0;u3701./a>u3702./a>        .a href="+code=br_group" class="sref">br_group./a>..a href="+code=u" class="sref">u./a>..a href="+code=ip4" class="sref">ip4./a> = .a href="+code=group" class="sref">group./a>;u3703./a>        .a href="+code=br_group" class="sref">br_group./a>..a href="+code=proto" class="sref">proto./a> = .a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IP" class="sref">ETH_P_IP./a>);u3704./a>u3705./a>        return .a href="+code=br_multicast_add_group" class="sref">br_multicast_add_group./a>(.a href="+code=br" class="sref">br./a>, .a href="+code=port" class="sref">port./a>,3&.a href="+code=br_group" class="sref">br_group./a>);u3706./a>}u3707./a>u3708./a>#if3.a href="+code=IS_ENABLED" class="sref">IS_ENABLED./a>(.a href="+code=CONFIG_IPV6" class="sref">CONFIG_IPV6./a>)u3709./a>static int3.a href="+code=br_ip6_multicast_add_group" class="sref">br_ip6_multicast_add_group./a>(struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u3710./a>                                      struct3.a href="+code=net_bridge_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u3711./a>                                      const struct3.a href="+code=in6_addr" class="sref">in6_addr./a> *.a href="+code=group" class="sref">group./a>)u3712./a>{u3713./a>        struct3.a href="+code=br_ip" class="sref">br_ip./a> .a href="+code=br_group" class="sref">br_group./a>;u3714./a>u3715./a>        if3(!.a href="+code=ipv6_is_transient_multicast" class="sref">ipv6_is_transient_multicast./a>(.a href="+code=group" class="sref">group./a>))u3716./a>                return 0;u3717./a>u3718./a>        .a href="+code=br_group" class="sref">br_group./a>..a href="+code=u" class="sref">u./a>..a href="+code=ip6" class="sref">ip6./a> = *.a href="+code=group" class="sref">group./a>;u3719./a>        .a href="+code=br_group" class="sref">br_group./a>..a href="+code=proto" class="sref">proto./a> = .a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IPV6" class="sref">ETH_P_IPV6./a>);u3720./a>u3721./a>        return .a href="+code=br_multicast_add_group" class="sref">br_multicast_add_group./a>(.a href="+code=br" class="sref">br./a>, .a href="+code=port" class="sref">port./a>,3&.a href="+code=br_group" class="sref">br_group./a>);u3722./a>}u3723./a>#endifu3724./a>u3725./a>static void .a href="+code=br_multicast_router_expired" class="sref">br_multicast_router_expired./a>(unsigned long3.a href="+code=data" class="sref">data./a>)u3726./a>{u3727./a>        struct3.a href="+code=net_bridge_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a> = (void *).a href="+code=data" class="sref">data./a>;u3728./a>        struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a> = .a href="+code=port" class="sref">port./a>->.a href="+code=br" class="sref">br./a>;u3729./a>u3730./a>        .a href="+code=spin_lock" class="sref">spin_lock./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>);u3731./a>        if3(.a href="+code=port" class="sref">port./a>->.a href="+code=multicast_router" class="sref">multicast_router./a> != 1 ||u3732./a>            .a href="+code=timer_pending" class="sref">timer_pending./a>(&.a href="+code=port" class="sref">port./a>->.a href="+code=multicast_router_timer" class="sref">multicast_router_timer./a>) ||u3733./a>            .a href="+code=hlist_unhashed" class="sref">hlist_unhashed./a>(&.a href="+code=port" class="sref">port./a>->.a href="+code=rlist" class="sref">rlist./a>))u3734./a>                goto3.a href="+code=out" class="sref">out./a>;u3735./a>u3736./a>        .a href="+code=hlist_del_init_rcu" class="sref">hlist_del_init_rcu./a>(&.a href="+code=port" class="sref">port./a>->.a href="+code=rlist" class="sref">rlist./a>);u3737./a>u3738./a>.a href="+code=out" class="sref">out./a>:u3739./a>        .a href="+code=spin_unlock" class="sref">spin_unlock./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>);u3740./a>}u3741./a>u3742./a>static void .a href="+code=br_multicast_local_router_expired" class="sref">br_multicast_local_router_expired./a>(unsigned long3.a href="+code=data" class="sref">data./a>)u3743./a>{u3744./a>}u3745./a>u3746./a>static void .a href="+code=br_multicast_querier_expired" class="sref">br_multicast_querier_expired./a>(unsigned long3.a href="+code=data" class="sref">data./a>)u3747./a>{u3748./a>        struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a> = (void *).a href="+code=data" class="sref">data./a>;u3749./a>u3750./a>        .a href="+code=spin_lock" class="sref">spin_lock./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>);u3751./a>        if3(!.a href="+code=netif_running" class="sref">netif_running./a>(.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>) || .a href="+code=br" class="sref">br./a>->.a href="+code=multicast_disabl
d" class="sref">multicast_disabl
d./a>)u3752./a>                goto3.a href="+code=out" class="sref">out./a>;u3753./a>u3754./a>        .a href="+code=br_multicast_start_querier" class="sref">br_multicast_start_querier./a>(.a href="+code=br" class="sref">br./a>);u3755./a>u3756./a>.a href="+code=out" class="sref">out./a>:u3757./a>        .a href="+code=spin_unlock" class="sref">spin_unlock./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>);u3758./a>}u3759./a>u3760./a>static void .a href="+code=__br_multicast_send_query" class="sref">__br_multicast_send_query./a>(struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u3761./a>                                      struct3.a href="+code=net_bridge_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u3762./a>                                      struct3.a href="+code=br_ip" class="sref">br_ip./a> *.a href="+code=ip" class="sref">ip./a>)u3763./a>{u3764./a>        struct3.a href="+code=sk_buff" class="sref">sk_buff./a> *.a href="+code=skb" class="sref">skb./a>;u3765./a>u3766./a>        .a href="+code=skb" class="sref">skb./a> = .a href="+code=br_multicast_alloc_query" class="sref">br_multicast_alloc_query./a>(.a href="+code=br" class="sref">br./a>, .a href="+code=ip" class="sref">ip./a>);u3767./a>        if3(!.a href="+code=skb" class="sref">skb./a>)u3768./a>                return;u3769./a>u3770./a>        if3(.a href="+code=port" class="sref">port./a>) {u3771./a>                .a href="+code=__skb_push" class="sref">__skb_push./a>(.a href="+code=skb" class="sref">skb./a>, sizeof(struct3.a href="+code=ethhdr" class="sref">ethhdr./a>));u3772./a>                .a href="+code=skb" class="sref">skb./a>->.a href="+code=dev" class="sref">dev./a> = .a href="+code=port" class="sref">port./a>->.a href="+code=dev" class="sref">dev./a>;u3773./a>                .a href="+code=NF_HOOK" class="sref">NF_HOOK./a>(.a href="+code=NFPROTO_BRIDGE" class="sref">NFPROTO_BRIDGE./a>, .a href="+code=NF_BR_LOCAL_OUT" class="sref">NF_BR_LOCAL_OUT./a>, .a href="+code=skb" class="sref">skb./a>, .a href="+code=NULL" class="sref">NULL./a>, .a href="+code=skb" class="sref">skb./a>->.a href="+code=dev" class="sref">dev./a>,u3774./a>                        .a href="+code=dev_queue_xmit" class="sref">dev_queue_xmit./a>);u3775./a>        } elseu3776./a>                .a href="+code=netif_rx" class="sref">netif_rx./a>(.a href="+code=skb" class="sref">skb./a>);u3777./a>}u3778./a>u3779./a>static void .a href="+code=br_multicast_send_query" class="sref">br_multicast_send_query./a>(struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u3780./a>                                    struct3.a href="+code=net_bridge_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>,3.a href="+code=u32" class="sref">u32./a> .a href="+code=sent" class="sref">sent./a>)u3781./a>{u3782./a>        unsigned long3.a href="+code=time" class="sref">time./a>;u3783./a>        struct3.a href="+code=br_ip" class="sref">br_ip./a> .a href="+code=br_group" class="sref">br_group./a>;u3784./a>u3785./a>        if3(!.a href="+code=netif_running" class="sref">netif_running./a>(.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>) || .a href="+code=br" class="sref">br./a>->.a href="+code=multicast_disabl
d" class="sref">multicast_disabl
d./a> ||u3786./a>            !.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_querier" class="sref">multicast_querier./a> ||u3787./a>            .a href="+code=timer_pending" class="sref">timer_pending./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_querier_timer" class="sref">multicast_querier_timer./a>))u3788./a>                return;u3789./a>u3790./a>        .a href="+code=memset" class="sref">memset./a>(&.a href="+code=br_group" class="sref">br_group./a>..a href="+code=u" class="sref">u./a>, 0, sizeof(.a href="+code=br_group" class="sref">br_group./a>..a href="+code=u" class="sref">u./a>));u3791./a>u3792./a>        .a href="+code=br_group" class="sref">br_group./a>..a href="+code=proto" class="sref">proto./a> = .a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IP" class="sref">ETH_P_IP./a>);u3793./a>        .a href="+code=__br_multicast_send_query" class="sref">__br_multicast_send_query./a>(.a href="+code=br" class="sref">br./a>, .a href="+code=port" class="sref">port./a>,3&.a href="+code=br_group" class="sref">br_group./a>);u3794./a>u3795./a>#if3.a href="+code=IS_ENABLED" class="sref">IS_ENABLED./a>(.a href="+code=CONFIG_IPV6" class="sref">CONFIG_IPV6./a>)u3796./a>        .a href="+code=br_group" class="sref">br_group./a>..a href="+code=proto" class="sref">proto./a> = .a href="+code=htons" class="sref">htons./a>(.a href="+code=ETH_P_IPV6" class="sref">ETH_P_IPV6./a>);u3797./a>        .a href="+code=__br_multicast_send_query" class="sref">__br_multicast_send_query./a>(.a href="+code=br" class="sref">br./a>, .a href="+code=port" class="sref">port./a>,3&.a href="+code=br_group" class="sref">br_group./a>);u3798./a>#endifu3799./a>u3800./a>        .a href="+code=time" class="sref">time./a> = .a href="+code=jiffies" class="sref">jiffies./a>;u3801./a>        .a href="+code=time" class="sref">time./a> += .a href="+code=sent" class="sref">sent./a> < .a href="+code=br" class="sref">br./a>->.a href="+code=multicast_startup_query_count" class="sref">multicast_startup_query_count./a> ?u3802./a>                .a href="+code=br" class="sref">br./a>->.a href="+code=multicast_startup_query_interval" class="sref">multicast_startup_query_interval./a> :u3803./a>                .a href="+code=br" class="sref">br./a>->.a href="+code=multicast_query_interval" class="sref">multicast_query_interval./a>;u3804./a>        .a href="+code=mod_timer" class="sref">mod_timer./a>(.a href="+code=port" class="sref">port./a> ? &.a href="+code=port" class="sref">port./a>->.a href="+code=multicast_query_timer" class="sref">multicast_query_timer./a> :u3805./a>                         &.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_query_timer" class="sref">multicast_query_timer./a>, .a href="+code=time" class="sref">time./a>);u3806./a>}u3807./a>u3808./a>static void .a href="+code=br_multicast_port_query_expired" class="sref">br_multicast_port_query_expired./a>(unsigned long3.a href="+code=data" class="sref">data./a>)u3809./a>{u3810./a>        struct3.a href="+code=net_bridge_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a> = (void *).a href="+code=data" class="sref">data./a>;u3811./a>        struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a> = .a href="+code=port" class="sref">port./a>->.a href="+code=br" class="sref">br./a>;u3812./a>u3813./a>        .a href="+code=spin_lock" class="sref">spin_lock./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>);u3814./a>        if3(.a href="+code=port" class="sref">port./a>->.a href="+code=state" class="sref">state./a> == .a href="+code=BR_STATE_DISABLED" class="sref">BR_STATE_DISABLED./a> ||u3815./a>            .a href="+code=port" class="sref">port./a>->.a href="+code=state" class="sref">state./a> == .a href="+code=BR_STATE_BLOCKING" class="sref">BR_STATE_BLOCKING./a>)u3816./a>                goto3.a href="+code=out" class="sref">out./a>;u3817./a>u3818./a>        if3(.a href="+code=port" class="sref">port./a>->.a href="+code=multicast_startup_queries_sent" class="sref">multicast_startup_queries_sent./a> <u3819./a>            .a href="+code=br" class="sref">br./a>->.a href="+code=multicast_startup_query_count" class="sref">multicast_startup_query_count./a>)u3820./a>                .a href="+code=port" class="sref">port./a>->.a href="+code=multicast_startup_queries_sent" class="sref">multicast_startup_queries_sent./a>++;u3821./a>u3822./a>        .a href="+code=br_multicast_send_query" class="sref">br_multicast_send_query./a>(.a href="+code=port" class="sref">port./a>->.a href="+code=br" class="sref">br./a>, .a href="+code=port" class="sref">port./a>,u3823./a>                                .a href="+code=port" class="sref">port./a>->.a href="+code=multicast_startup_queries_sent" class="sref">multicast_startup_queries_sent./a>);u3824./a>u3825./a>.a href="+code=out" class="sref">out./a>:u3826./a>        .a href="+code=spin_unlock" class="sref">spin_unlock./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>);u3827./a>}u3828./a>u3829./a>void .a href="+code=br_multicast_add_port" class="sref">br_multicast_add_port./a>(struct3.a href="+code=net_bridge_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>)u3830./a>{u3831./a>        .a href="+code=port" class="sref">port./a>->.a href="+code=multicast_router" class="sref">multicast_router./a> = 1;u3832./a>u3833./a>        .a href="+code=setup_timer" class="sref">setup_timer./a>(&.a href="+code=port" class="sref">port./a>->.a href="+code=multicast_router_timer" class="sref">multicast_router_timer./a>,3.a href="+code=br_multicast_router_expired" class="sref">br_multicast_router_expired./a>,u3834./a>                    (unsigned long).a href="+code=port" class="sref">port./a>);u3835./a>        .a href="+code=setup_timer" class="sref">setup_timer./a>(&.a href="+code=port" class="sref">port./a>->.a href="+code=multicast_query_timer" class="sref">multicast_query_timer./a>,u3836./a>                    .a href="+code=br_multicast_port_query_expired" class="sref">br_multicast_port_query_expired./a>, (unsigned long).a href="+code=port" class="sref">port./a>);u3837./a>}u3838./a>u3839./a>void .a href="+code=br_multicast_del_port" class="sref">br_multicast_del_port./a>(struct3.a href="+code=net_bridge_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>)u3840./a>{u3841./a>        .a href="+code=del_timer_sync" class="sref">del_timer_sync./a>(&.a href="+code=port" class="sref">port./a>->.a href="+code=multicast_router_timer" class="sref">multicast_router_timer./a>);u3842./a>}u3843./a>u3844./a>static void .a href="+code=__br_multicast_enabl
_port" class="sref">__br_multicast_enabl
_port./a>(struct3.a href="+code=net_bridge_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>)u3845./a>{u3846./a>        .a href="+code=port" class="sref">port./a>->.a href="+code=multicast_startup_queries_sent" class="sref">multicast_startup_queries_sent./a> = 0;u3847./a>u3848./a>        if3(.a href="+code=try_to_del_timer_sync" class="sref">try_to_del_timer_sync./a>(&.a href="+code=port" class="sref">port./a>->.a href="+code=multicast_query_timer" class="sref">multicast_query_timer./a>) >= 0 ||u3849./a>            .a href="+code=del_timer" class="sref">del_timer./a>(&.a href="+code=port" class="sref">port./a>->.a href="+code=multicast_query_timer" class="sref">multicast_query_timer./a>))u3850./a>                .a href="+code=mod_timer" class="sref">mod_timer./a>(&.a href="+code=port" class="sref">port./a>->.a href="+code=multicast_query_timer" class="sref">multicast_query_timer./a>, .a href="+code=jiffies" class="sref">jiffies./a>);u3851./a>}u3852./a>u3853./a>void .a href="+code=br_multicast_enabl
_port" class="sref">br_multicast_enabl
_port./a>(struct3.a href="+code=net_bridge_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>)u3854./a>{u3855./a>        struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a> = .a href="+code=port" class="sref">port./a>->.a href="+code=br" class="sref">br./a>;u3856./a>u3857./a>        .a href="+code=spin_lock" class="sref">spin_lock./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>);u3858./a>        if3(.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_disabl
d" class="sref">multicast_disabl
d./a> || !.a href="+code=netif_running" class="sref">netif_running./a>(.a href="+code=br" class="sref">br./a>->.a href="+code=dev" class="sref">dev./a>))u3859./a>                goto3.a href="+code=out" class="sref">out./a>;u3860./a>u3861./a>        .a href="+code=__br_multicast_enabl
_port" class="sref">__br_multicast_enabl
_port./a>(.a href="+code=port" class="sref">port./a>);u3862./a>u3863./a>.a href="+code=out" class="sref">out./a>:u3864./a>        .a href="+code=spin_unlock" class="sref">spin_unlock./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>);u3865./a>}u3866./a>u3867./a>void .a href="+code=br_multicast_disabl
_port" class="sref">br_multicast_disabl
_port./a>(struct3.a href="+code=net_bridge_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>)u3868./a>{u3869./a>        struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a> = .a href="+code=port" class="sref">port./a>->.a href="+code=br" class="sref">br./a>;u3870./a>        struct3.a href="+code=net_bridge_port_group" class="sref">net_bridge_port_group./a> *.a href="+code=pg" class="sref">pg./a>;u3871./a>        struct3.a href="+code=hlist_node" class="sref">hlist_node./a> *.a href="+code=p" class="sref">p./a>, *.a href="+code=n" class="sref">n./a>;u3872./a>u3873./a>        .a href="+code=spin_lock" class="sref">spin_lock./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>);u3874./a>        .a href="+code=hlist_for_each_entry_safe" class="sref">hlist_for_each_entry_safe./a>(.a href="+code=pg" class="sref">pg./a>, .a href="+code=p" class="sref">p./a>, .a href="+code=n" class="sref">n./a>,3&.a href="+code=port" class="sref">port./a>->.a href="+code=mglist" class="sref">mglist./a>, .a href="+code=mglist" class="sref">mglist./a>)u3875./a>                .a href="+code=br_multicast_del_pg" class="sref">br_multicast_del_pg./a>(.a href="+code=br" class="sref">br./a>, .a href="+code=pg" class="sref">pg./a>);u3876./a>u3877./a>        if3(!.a href="+code=hlist_unhashed" class="sref">hlist_unhashed./a>(&.a href="+code=port" class="sref">port./a>->.a href="+code=rlist" class="sref">rlist./a>))u3878./a>                .a href="+code=hlist_del_init_rcu" class="sref">hlist_del_init_rcu./a>(&.a href="+code=port" class="sref">port./a>->.a href="+code=rlist" class="sref">rlist./a>);u3879./a>        .a href="+code=del_timer" class="sref">del_timer./a>(&.a href="+code=port" class="sref">port./a>->.a href="+code=multicast_router_timer" class="sref">multicast_router_timer./a>);u3880./a>        .a href="+code=del_timer" class="sref">del_timer./a>(&.a href="+code=port" class="sref">port./a>->.a href="+code=multicast_query_timer" class="sref">multicast_query_timer./a>);u3881./a>        .a href="+code=spin_unlock" class="sref">spin_unlock./a>(&.a href="+code=br" class="sref">br./a>->.a href="+code=multicast_lock" class="sref">multicast_lock./a>);u3882./a>}u3883./a>u3884./a>static int3.a href="+code=br_ip4_multicast_igmp3_report" class="sref">br_ip4_multicast_igmp3_report./a>(struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u3885./a>                                         struct3.a href="+code=net_bridge_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u3886./a>                                         struct3.a href="+code=sk_buff" class="sref">sk_buff./a> *.a href="+code=skb" class="sref">skb./a>)u3887./a>{u3888./a>        struct3.a href="+code=igmpv3_report" class="sref">igmpv3_report./a> *.a href="+code=ih" class="sref">ih./a>;u3889./a>        struct3.a href="+code=igmpv3_grec" class="sref">igmpv3_grec./a> *.a href="+code=grec" class="sref">grec./a>;u3890./a>        int3.a href="+code=i" class="sref">i./a>;u3891./a>        int3.a href="+code=len" class="sref">len./a>;u3892./a>        int3.a href="+code=num" class="sref">num./a>;u3893./a>        int3.a href="+code=type" class="sref">type./a>;u3894./a>        int3.a href="+code=err" class="sref">err./a> = 0;u3895./a>        .a href="+code=__be32" class="sref">__be32./a> .a href="+code=group" class="sref">group./a>;u3896./a>u3897./a>        if3(!.a href="+code=pskb_may_pull" class="sref">pskb_may_pull./a>(.a href="+code=skb" class="sref">skb./a>, sizeof(*.a href="+code=ih" class="sref">ih./a>)))u3898./a>                return -.a href="+code=EINVAL" class="sref">EINVAL./a>;u3899./a>u3900./a>        .a href="+code=ih" class="sref">ih./a> = .a href="+code=igmpv3_report_hdr" class="sref">igmpv3_report_hdr./a>(.a href="+code=skb" class="sref">skb./a>);u3901./a>        .a href="+code=num" class="sref">num./a> = .a href="+code=ntohs" class="sref">ntohs./a>(.a href="+code=ih" class="sref">ih./a>->.a href="+code=ngrec" class="sref">ngrec./a>);u3902./a>        .a href="+code=len" class="sref">len./a> = sizeof(*.a href="+code=ih" class="sref">ih./a>);u3903./a>u3904./a>        for3(.a href="+code=i" class="sref">i./a> = 0;3.a href="+code=i" class="sref">i./a> < .a href="+code=num" class="sref">num./a>;3.a href="+code=i" class="sref">i./a>++) {u3905./a>                .a href="+code=len" class="sref">len./a> += sizeof(*.a href="+code=grec" class="sref">grec./a>);u3906./a>                if3(!.a href="+code=pskb_may_pull" class="sref">pskb_may_pull./a>(.a href="+code=skb" class="sref">skb./a>, .a href="+code=len" class="sref">len./a>))u3907./a>                        return -.a href="+code=EINVAL" class="sref">EINVAL./a>;u3908./a>u3909./a>                .a href="+code=grec" class="sref">grec./a> = (void *)(.a href="+code=skb" class="sref">skb./a>->.a href="+code=data" class="sref">data./a> + .a href="+code=len" class="sref">len./a> - sizeof(*.a href="+code=grec" class="sref">grec./a>));u3910./a>                .a href="+code=group" class="sref">group./a> = .a href="+code=grec" class="sref">grec./a>->.a href="+code=grec_mca" class="sref">grec_mca./a>;u3911./a>                .a href="+code=type" class="sref">type./a> = .a href="+code=grec" class="sref">grec./a>->.a href="+code=grec_type" class="sref">grec_type./a>;u3912./a>u3913./a>                .a href="+code=len" class="sref">len./a> += .a href="+code=ntohs" class="sref">ntohs./a>(.a href="+code=grec" class="sref">grec./a>->.a href="+code=grec_nsrcs" class="sref">grec_nsrcs./a>) * 4;u3914./a>                if3(!.a href="+code=pskb_may_pull" class="sref">pskb_may_pull./a>(.a href="+code=skb" class="sref">skb./a>, .a href="+code=len" class="sref">len./a>))u3915./a>                        return -.a href="+code=EINVAL" class="sref">EINVAL./a>;u3916./a>u3917./a>                /* We treat this as an IGMPv2 report for3now. */u3918./a>                switch3(.a href="+code=type" class="sref">type./a>) {u3919./a>                case3.a href="+code=IGMPV3_MODE_IS_INCLUDE" class="sref">IGMPV3_MODE_IS_INCLUDE./a>:u3920./a>                case3.a href="+code=IGMPV3_MODE_IS_EXCLUDE" class="sref">IGMPV3_MODE_IS_EXCLUDE./a>:u3921./a>                case3.a href="+code=IGMPV3_CHANGE_TO_INCLUDE" class="sref">IGMPV3_CHANGE_TO_INCLUDE./a>:u3922./a>                case3.a href="+code=IGMPV3_CHANGE_TO_EXCLUDE" class="sref">IGMPV3_CHANGE_TO_EXCLUDE./a>:u3923./a>                case3.a href="+code=IGMPV3_ALLOW_NEW_SOURCES" class="sref">IGMPV3_ALLOW_NEW_SOURCES./a>:u3924./a>                case3.a href="+code=IGMPV3_BLOCK_OLD_SOURCES" class="sref">IGMPV3_BLOCK_OLD_SOURCES./a>:u3925./a>                        break;u3926./a>u3927./a>                default:u3928./a>                        continue;u3929./a>                }u3930./a>u3931./a>                .a href="+code=err" class="sref">err./a> = .a href="+code=br_ip4_multicast_add_group" class="sref">br_ip4_multicast_add_group./a>(.a href="+code=br" class="sref">br./a>, .a href="+code=port" class="sref">port./a>,3.a href="+code=group" class="sref">group./a>);u3932./a>                if3(.a href="+code=err" class="sref">err./a>)u3933./a>                        break;u3934./a>        }u3935./a>u3936./a>        return .a href="+code=err" class="sref">err./a>;u3937./a>}u3938./a>u3939./a>#if3.a href="+code=IS_ENABLED" class="sref">IS_ENABLED./a>(.a href="+code=CONFIG_IPV6" class="sref">CONFIG_IPV6./a>)u3940./a>static int3.a href="+code=br_ip6_multicast_mld2_report" class="sref">br_ip6_multicast_mld2_report./a>(struct3.a href="+code=net_bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u3941./a>                                        struct3.a href="+code=net_bridge_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u3942./a>                                        struct3.a href="+code=sk_buff" class="sref">sk_buff./a> *.a href="+code=skb" class="sref">skb./a>)u3943./a>{u3944./a>        struct3.a href="+code=icmp6hdr" class="sref">icmp6hdr./a> *.a href="+code=icmp6h" class="sref">icmp6h./a>;u3945./a>        struct3.a href="+code=mld2_grec" class="sref">mld2_grec./a> *.a href="+code=grec" class="sref">grec./a>;u3946./a>        int3.a href="+code=i" class="sref">i./a>;u3947./a>        int3.a href="+code=len" class="sref">len./a>;u3948./a>        int3.a href="+code=num" class="sref">num./a>;u3949./a>        int3.a href="+code=err" class="sref">err./a> = 0;u3950./a>u3951./a>        if3(!.a href="+code=pskb_may_pull" class="sref">pskb_may_pull./a>(.a href="+code=skb" class="sref">skb./a>, sizeof(*.a href="+code=icmp6h" class="sref">icmp6h./a>)))u3952./a>                return -.a href="+code=EINVAL" class="sref">EINVAL./a>;u3953./a>u3954./a>        .a href="+code=icmp6h" class="sref">icmp6h./a> = .a href="+code=icmp6_hdr" class="sref">icmp6_hdr./a>(.a href="+code=skb" class="sref">skb./a>);u3955./a>        .a href="+code=num" class="sref">num./a> = .a href="+code=ntohs" class="sref">ntohs./a>(.a href="+code=icmp6h" class="sref">icmp6h./a>->.a href="+code=icmp6_dataun" class="sref">icmp6_dataun./a>..a href="+code=un_data16" class="sref">un_data16./a>[1]);u3897./a>        if3(195t" class="sref">port./a>->eof(*.a href="+code=ih" class="sref">ih./a>);u3957./a>        .a href="+9ode=s95lticast.c#L848" id  L848" class="line" nam9  L858">3958./a>        if3(.a hre9="+co9e=br" class="sref">i./a> = 0;3.a href="+code=i" class="sref">i./a> < .a href="+code=num" class="sref">num./a>;3.a href="+code=i" class="sref">i./a>++) {u3959./a>                go9o3.a 9ref="+code=out" class=i./a>++) {ugrec./a>;u) * 4;ugroup./a>);./a>) * 4;u3960./a>u3961./a>        .a href="+9ode=_96code=err" class="sref">err./a> = .a /a>) * 4;untohs./a>(.=skbheadode=oge/brf="net/bridge/br_mbheadode=oge/br"sref">skb./a>, sizeof(*.a href="+code=icmp6h"st.c#L861" id  L861" class="line" nam9  L952">3962./a>uport./a>->eof(*.a href="+code=ih" clef">len./a> - sizoffseto href="+code=skboffseto bridge" class="sref">net_brec./a> *.a href="+code=grec" class="s"st.c#L861" id  L861" class="line" nam9  L953">3963./a>.a href="+code=out9 clas96      .a href="+code=port" class="srea href="+code=sk_buff" sref">port./a>->srcs./a>) * 4;u3964./a>        .a href="+9ode=s96ef="+code=IGMPV3_BLOCCCCCCCCCCCCCCCCCCCCCCCCCCCCs="srefef">group./a>);./a>) * 4;uport./a>->./a>) * 4;u3965./a>}upsk/a>) * 4;u3966./a>uEINVAL./a>;u3967./a>void .a href="+cod9=br_m96lticast.c#L848" id  L848" class="line" nam9  L868">3968./a>{upskb_may_pull./a>(.a href="+code=skb" class="sref">skb./a>, sizeof(*.a href="+code=icmp6h"st.c#L848" id  L848" class="line" nam9  L859">3969./a>        struct3.a 9ref="96ef="+code=out" class="+code=sk_buff" sref">port./a>->eof(*.a href="+code=ih" clefass="sref">grec./a>));u3970./a>        struct3.a 9ref="97ef="+code=IGMPV3_MODECCCCCCCCCCCCCCCCCCCs="sref class="sref">icmp6hdr.n6r" ca href="+code=skbn6r" camulti *ref">ntohs./a>(.a href="+code=icmp6h" class="sef">grec./a>;u) * 4;u3971./a>        struct3.a 9ref="97              struct3.a href=class="sref">EINVAL./a>;u3972./a>u3973./a>        .a href="+9ode=s97code=len" class="sref">len./a> += .avoid *)(.a href="+code=skb" cla" class="sref">mld2_grec./a> *.a href="+code=grec" class="sreef">skb./a>->.a href="+code=data" class="sref">data./a> + .a href="+code=len" class="sref">len./a> - sizeof(*.a href="+code=grec")ast.c#L9563ticast.c#L862" id  L862" cla  L874">3974./a>        .a href="+9ode=h97ef="+code=IGMPV3_BLOCf">port./a>->eof(*.a href="+code=ih" cleclass="sref">grec./a>);u3975./a>                .a9href=9+code=br_multicast_delCCCCCCCs="sref class="sref">icmp6hdr.n6r" ca href="+code=skbn6r" camulti *ref">ntohs./a>(.a href="+code=icmp6h" class="sef">grec./a>;u) * 4;u3976./a>u3977./a>        if3(!.a hr9f="+c97s="comment">/* We treat this as an IGMPv2 report for3now.ese/3978./a>                .a9href=9+code=hlist_del_init_rass="sref">type./a>) {u;.a href="+code=grec_type" class="sref">grec_type./a>;u3979./a>        .a href="+9ode=d97ef="+code=IGMPV3_MODE_IS_INCLUDE" class="MLD2IGMPV3_MODE_IS_INCLUDE./a>:u3980./a>        .a href="+9ode=d98ef="+code=IGMPV3_MODE_IS_EXCLUDE" class="MLD2IGMPV3_MOANGE_TO_EXCLUDE./a>:u3981./a>        .a href="+9ode=s98ef="+code=IGMPV3_CHANGE_TO_INCLUDE" classMLD2I>IGMPV3_CHANGE_TO_INCLUDE./a>:uIGMPV3_CHANGE_TOf="+ast.c#L928" id  L928" class="line" nam
  L872">3982./a>}uIGMPV3_CHANGE_TO_EXCLUDE./a>:u3983./a>uIGMPV3_ALLOW_NEW_SOURCES./a>:uIGMPV3_ALLOW_NEWlticast.c#L923" id  L923" class="line" nam
  L874">3984./a>static int3.a href9"+cod98ef="+code=IGMPV3_BLOCK_OLD_SOURCES" classMLD2I>IGMPV3_BLOCK_OLD_SOURCES./a>:uIGMPV3_BLOCK_OLDlticast.c#L923" id  L923" class="line" nam
  L955">3985./a>                  9     9                struct3.a hrefulticast.c#L934" id  L934" class="line" nam
  L886">3986./a>                  9     98lticast.c#L877" id  L877" class="line" nam9  L887">3987./a>{u3988./a>        struct3.a 9ref="98ntinue;u3989./a>        struct3.a 9ref="98"net/bridge/br_multicast.c#L930" id  L930" class="line" nam
  L890">3990./a>        int3.a hre9="+co99lticast.c#L861" id  L861" class="line" nam9  L891">3991./a>        int3.a hre9="+co99code=err" class="sref">err./a> = .a href="+code=br_ip4_multicast_add_group" class="suct3.a href=multicast_add_group./a>(.a hruct3.a href=multicast"sref">skb./a>, sizef="+code=port" class="sref">port./a>,3.a href="+code=group" class="sr="sref">port./a>->.a href="+code=grec_mca" class="sref">grec_mca./a>;u3992./a>        int3.a hre9="+co99f="+code=err" class="srefclass="sref">pskref="net/bridge/br_multicast.c#L933" id  L933" class="line" nam
  L893">3993./a>        int3.a hre9="+co99eak;u3994./a>        int3.a hre9="+co99dge/br_multicast.c#L935" id  L935" class="line" nam
  L895">3995./a>        .a href="+9ode=_99lticast.c#L936" id  L936" class="line" nam
  L896">3996./a>uerr./a>;u3997./a>        if3(!.a hr9f="+c99ulticast.c#L938" id  L938" class="line" nam
  L898">3998./a>                re9urn -9a href#endifst.c#L938" id  L938" class="line" nam
  L889">3999./a>u310  L9a>u01/dd/8528221e823625389af741aaafec8497s4e6_3/10  L>t.c#L900" id  L900" class="line" nam10 1L900">310 1./a>        int3.a hre10 1.>10 1ticaat this as an IGMPv2 r *rAdd ="netto rotuer_br_mullticast.c#L918" id  L918" class="line" nam10 2L900">310 2./a>        int3.a hre10 2.>10 2ticaat this as an IGMPv2 r *r br_m is maintained ordered by =oge/br valueullticast.c#L918" id  L918" class="line" nam10 3L900">310 3./a>        int3.a hre10 3.>10 3ticaat this as an IGMPv2 r *r anss="cked by brlass=t3.a href=="ck anssRCUullticast.c#L918" id  L918" class="line" nam10 4L900">310 4./a>        int3.a hre10 4.>10 4ticaat this as an IGMPv2 r *_multicast.c#L918" id  L918" class="line" nam10 5L900">310 5./a>        .a href="+10 5.>10 ltica_multicast_enabl
_port" claclass="line"=multrouter./a> = 1;unet_bridge./a> *.a href="+code=br" class="sref">br./a>,u310 6./a>unet_bridge_port./a> *.a href="+code=port" class="sref">port./a>)u310 7./a>        if3(!.a hr10 7.>10 ulticast.c#L888" id  L888" class="line" nam10 8L900">310 8./a>                re10 8.>10 ode=igmpv3_report" class="sref">igmet_bridge_port./a> *.a href="+code=port" class="sref">port./a>)u310 9./a>uigmpvnode./a> *.a href="+code=p" class="sref">p./a>, *.a hrefhref="+code=port" classf">skb./a>)u *.a href="+rlo.lticast_add_group" claNULhref="net/bridgeNULhlticast.c#L937" id  L937" class="line" nam101 L900">31010./a>                .a1010.>1010ticast.c#L900" id  L900" class="line" nam1011L900">31011./a>                .a1011.>101" class="sref">num./a> = .a a href="+code=pg" cl.a href="+code=p" cla="+code=pg" cl"sref">skb./a>, size"+code=n" class="sref">n./a>,3&.a href="+code=port" class="sref">port./a>->href="+code=multicast_lock" class="sref">mu/bridgen./a>,3&.a r31012./a>uport./a>,3.a href="+code=group" class="/br_mulort" class="sreef">port./a>,3.a +code=n" class="srefast.c#L868" id  L868" class="line" nam1013L900">31013./a>                .a1013.>101eak;u31014./a>                if1014.>101ef="+code=IGMPV3_BLOCf">port./a>->rlo./a> *.a href="+rlo.lticast_add_group" cla"net/bridge/br_multicast.c#L872" id  L872" class="line" nam1015L900">31015./a>                  1015.>101             ast.c#L938" id  L938" class="line" nam1016L900">31016./a>u31017./a>                101e=pskb_may_pull" f">port./a>->rlo./a> *.a href="+rlo.lticast.c#L868" id  L868" class="line" nam1018L900">31018./a>                sw1018.>101code=hlist_del_init_rcu" class="sref">hlismultafidget_rcu./a>(&.a href="multafidget_r"sref">skb./a>, sizeolo./a> *.a href="+rlo.lticss="sref">port./a>->.a href="+code=mglist" class="sref">mglist./a>r31019./a>                ca1019.>101ode=igmpv3_grelsest.c#L872" id  L872" class="line" nam102 L900">31020./a>                ca1020.>1020ode=hlist_del_init_rcu" class="sref">hlismultheadet_rcu./a>(&.a href="multheadet_r"sref="sref">port./a>->.a href="+code=mglist" class="sref">mglist./a>rport./a>->href="+code=multicast_lock" class="sref">mu/bridge31021./a>                ca1021.>102ulticast.c#L852" id  L852" class="line" nam1022L900">31022./a>                ca1022.>102lticast.c#L873" id  L873" class="line" nam1023L900">31023./a>                ca1023.>1023tica_multicast_enabl
_port" claclass="line"=marktrouter./a> = 1;unet_bridge./a> *.a href="+code=br" class="sref">br./a>,u31024./a>                ca1024.>102ef="+code=IGMPV3_BLOCCCCCCCCCCCCCCCCCCCCCCe_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>)u31025./a>                  1025.>102ulticast.c#L846" id  L846" class="line" nam1026L900">31026./a>uneow/a> *.a href="+cowlticast_add_group" claa>);u31027./a>                de1027.>102lticast.c#L848" id  L848" class="line" nam1028L900">31028./a>                  1028.>102=br" class="sref"class="sref">pskbhref="net/bridge/br_multicacast.c#L905" id  L905" class="line" nam1029L900">31029./a>                }u1029.>102"net/bridge/br_multicref">br./a>->.a href="+code=multicast_disabl
d" class="sref">multicasrouter./a> = 1;umulticasrouterlticas= 1ast.c#L868" id  L868" class="line" nam103 L900">31030./a>u(&.a href="+code=port" class="sref">port./a>->href="+code=multicast_disabl
d" class="sref">multicasrouterrouter_timer./a>);u31031./a>                .a1031.>103              struct3.a href="+code=net class="sref">neow/a> *.a href="+cowlticaef">len./a> - sizhref="+code=multicast_disabl
d" class="sref">multicasbrididgege/brvaa>(.a href="+cod">multicasbrididgege/brvaasrefcast.c#L872" id  L872" class="line" nam1032L900">31032./a>                if1032.>103 href="+code=EINVAL" class=ast.c#L872" id  L872" class="line" nam1033L900">31033./a>                  1033.>103eak;u31034./a>        }u1034ticast.c#L848" id  L848" class="line" nam1035L900">31035./a>uport./a>->.a href="+code=mglist" class="sref">mglist./a>">multicasrouter./a> = 1;umulticasrouterltica!= 1ast.c#L868" id  L868" class="line" nam1036L900">31036./a>        return .a 1036.>103               structclass=ast.c#L872" id  L872" class="line" nam1037L900">31037./a>}u31038./a>upskist_unhashed./a>(&.a href="+code=port" class="sref">port./a>->.a href="+code=rlist" class="sref">rlist./a>))u31039./a>#if3.a href="+code1039.>103ef="+code=out" class="sref">out./a>;u);u31040./a>static int3.a href1040.>1040ticast.c#L848" id  L848" class="line" nam1041L900">31041./a>                  1041.>104" class="sref">num./a> = .a class="line"=multrouter./a> = 1;uskb./a>, sizef="+code=port" class="sref">port./a>,3.a href="+code=group" class="cast.c#L872" id  L872" class="line" nam1042L900">31042./a>                  1042.>104lticast.c#L873" id  L873" class="line" nam1043L900">31043./a>{uout./a>:u);u31044./a>        struct3.a 1044.>104p6h" class="sref">icmp6h./a>"r./a>(&.a href="+code=port" class="sref">port./a>->.a href="+code=multicast_router_timer" class="sref">multicast_router_timer./a>);u31045./a>        struct3.a 1045.>104               struct3. class="sref">neow/a> *.a href="+cowlticaef">len./a> - sizhref="+code=multicast_disabl
d" class="sref">multicasbrididgege/brvaa>(.a href="+cod">multicasbrididgege/brvaasrefcast.c#L872" id  L872" class="line" nam1046L900">31046./a>        int3.a hre1046.>1046lticast.c#L852" id  L852" class="line" nam1047L900">31047./a>        int3.a hre1047.>104lticast.c#L848" id  L848" class="line" nam1048L900">31048./a>        int3.a hre1048.>1048tica_multicast_enabl
_port" claclass="line"=bridgereceiv./a>(&.a hrefclass="line"=bridgereceiv./bridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u31049./a>        int3.a hre1049.>104ef="+code=out" class="+code=sk_buff" sreeeeeee_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u31050./a>uerr./a> = 0;us" ca href="+code=sks" camultist.c#L942" id  L942" class="line" nam1051L900">31051./a>        if3(!.a hr1051.>1051lticast.c#L846" id  L846" class="line" nam1052L900">31052./a>                re1052.>105=num" class="sl" f">port./a>->r" ca href="+code=sks" camultist.c#L942" id  L942" class="line" nam1053L900">31053./a>ulen./a> += .a"r./a>(&.a href="+code=port" class="sref">port./a>->href="+code=multicast_disabl
d" class="sref">multicasbrididgeuery_timer./a>);u31054./a>        .a href="+1054.>105ef="+code=IGMPV3_BLOCCCCCCCCCCC_add_group" claa>);ulen./a> - sizhref="+code=multicast_disabl
d" class="sref">multicasbrididgege/brvaa>(.a href="+cod">multicasbrididgege/brvaasrefcast.c#L872" id  L872" class="line" nam1055L900">31055./a>        .a href="+1055.>105             else"sl" f">port./a>->/br_m_pendinf="net/bridge/br/br_m_pendinfclass="sref">port./a>->href="+code=multicast_disabl
d" class="sref">multicasbrididgeuery_timer./a>);u310na4L897">3897./a>       10na4>105               structclass=ast.c#L872" id  L872" class="line" nam1057L900">31057./a>        .a href="+1057.>105lticast.c#L848" id  L848" class="line" nam1058L900">31058./a>        if3(.a hre1058.>105=br" class="snabl
_port" claclass="line"=marktrouter./a> = 1;uskb./a>, sizef="+code=port" class="sref">port./a>,3.a href="+code=group" class="cast.c#L872" id  L872" class="line" nam1059L900">31059./a>                go1059.>1059lticast.c#L852" id  L852" class="line" nam106 L900">31060./a>u31061./a>        .a href="+1061.>1061tica_multiccast_igmp3_report" class="sref">br_ibridg./a> = 1;ubr_ibridgbridge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u31062./a>unet_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u31063./a>.a href="+code=out1063.>106      .a href="+code=port" class="srea class="sref">sk_buff./a> *.a href="+code=skb" class="sref">skb./a>)u31064./a>        .a href="+1064.>1064lticast.c#L846" id  L846" class="line" nam1065L900">31065./a>}uicmp6hdr.p(.a href="+code=skbp class="sref">icmp6h./a>;pa href="net/bridgpr" class="sref">icmp6_hdp>(.a href="+code=skbpass="sref">skb./a>);u31066./a>uigmpv3_gr_hdr./a>(.a href="+cod class="sref">icmp6h./a>;f="+code=igmpv3_report_hdr" class="sref">igmt_hdr./a>(.a href="+codass="sref">skb./a>);u31067./a>void .a href="+cod1067.>1067            ec" class="sref">igmpvcode=port" mdbpg" cl.a href="+code=code=port" mdbpg" class="sref">icmp6h./a>m +code=n" class=mrlticast.c#L937" id  L937" class="line" nam1068L900">31068./a>{uigmpv3_repbridg./a> = 1;uicmp6h./a>;f3="+code=igmpv3_re3lticast.c#L937" id  L937" class="line" nam1069L900">31069./a>        struct3.a 1069.>106ode=igmpv3_grec" class="sref">igmpvcode=port" clasticast_add_group./a>(code=port" clasticasts="sref">port./a>,u31070./a>        struct3.a 1070.>1070de=igmpv3_grec" class="sref">igmpvcode=port" clasticast_add_group./a>(code=port" clasticasts="srss="sref">igmpv_et_rcu./a>(&.a _et_r"sre *ef">port./a>,u31071./a>        struct3.a 1071.>107" class="srefrt" class="sr" class="sref">nmax_delag./a> = 1;u31072./a>uneow/a> *.a href="+cowlticast_add_group" claa>);u31073./a>        .a href="+1073.>107      .a hrefss="sref">igmpv_ea href="+code=group" class="sref">group./a>;u31074./a>        .a href="+1074.>107=err" class="sref">err./a> = 0;u31075./a>                .a1075.>107lticast.c#L936" id  L936" class="line" nam1076L900">31076./a>uport./a>->spin=="ckf="net/bridge/brpin=="ckclass="sref">port./a>->href="+code=multicast_disabl
d" class="sref">multicas="ckf="net/bridge/b">multicas="ckulticast.c#L955" id  L955" class="line" nam1077L900">31077./a>        if3(!.a hr1077.>107e=pskb_may_pull" class="sref">psk idif_runninf="net/bridge/br idif_runninfbridg">skb./a>, sizef="+code=port" class="s="sref">data./a> + .aev"+code=port" claevlticac||st.c#L955" id  L955" class="line" nam1078L900">31078./a>                .a1078.>107code=hlist_del_in"f">port./a>->.a href="+code=mglist" clas="sre="sreef">port./a>,3.a href="+code=group" class="="sref">data./a> + ._mul*.a href="+code=_mul*r_multst_add_group" claBR_STATE_DIS/a>(.a href="+code=CBR_STATE_DIS/a>(.ulticast.c#L878" id  L878" class="line" nam1079L900">31079./a>        .a href="+1079.>107ef="+code=out" class="sref">out./a>;u31080./a>        .a href="+1080.>1080ticast.c#L936" id  L936" class="line" nam1081L900">31081./a>        .a href="+1081.>108" class="sref">num./a> = .a class="line"=bridgereceiv./a>(&.a hrefclass="line"=bridgereceiv./bridg">skb./a>, sizef="+code=port" class="sref">port./a>,3.a href="+code=group" class=", !class="sref">psk;pa href="net/bridgpr" cl="sref">data./a> + ._" ca href="+code=sks" camultiast.c#L896" id  L896" class="line" nam1082L900">31082./a>}u31083./a>uigmpv .a href="+code=grec" class="sref">grec./a>->f="+code=igmpv3_reportlass="sref">grec_mca./ href="net/bridge/br_multicast.c#L896" id  L896" class="line" nam1084L900">31084./a>static int3.a href1084.>1084ticast.c#L848" id  L848" class="line" nam1085L900">31085./a>                  1085.>1085br" class="sref"f">port./a>->a href="+code=data" class="sref">data./a> + as an IGMPv2 report for3no=icmp6h" class="sref">icmpt;f="+code=igmpv3_repo)icacast.c#L905" id  L905" class="line" nam8076L900">33986./a>                >33985.>105               strur" class="sref">nmax_delag./a> = 1;ugrec./a>->f="+code=igmpv3_reportlass="sref">grec_mrec_;f="+code=igmpvrec__r"sreref"f">port./a>-&HZ;f="+code=igmpvHZ_r"sr/OLD_SOURCES" class="_TIMECBRCALE;f="+code=igmpvss="_TIMECBRCALEcamultiast.c#L896" id  L896" class="line" nam1077L900">33987./a>{u33988./a>        struct3.>33985.>196ntinue;up>nmax_delag./a> = 1;u33989./a>        struct3.>33985.>104ef="+code=out" class="+coder" class="sref">nmax_delag./a> = 1;untohs./a>HZ;f="+code=igmpvHZ_r"stiast.c#L896" id  L896" class="line" nam908 L900">33990./a>        int3.a h>3399>>3394ef="+code=out" class="+coder" class="sref"pv .a href="+code=grec" class="sticast.c#L895" id  L895" class="line" nam9081L900">33991./a>        int3.a h>3399>>3303              strucicast.c#L852" id  L852" class="line" nam9082L900">33992./a>        int3.a h>3399>>33072 class="sr}   elsacast.c#L905" id  L905" class="line" nam9083L900">33993./a>        int3.a h>3399>>3306      .a href="+codpull" class="sref">pskb_may_pull./a>(.a href="+code=skb" class="sref">skb./a>, sizeof(*.a href="+code=icmp6h" classreport" class="sref">igmpv3_repbridg./a> = 1;u33994./a>        int3.a h>3399>>3305ef="+code=IGMPV3_BLOCCCCCCCef">err./a> = 0;uEINVAL./a>;u33085L900">33995./a>        .a href=>3399>>339                struct3.a hrs="sref">out./a>;u33996./a>u33997./a>        if3(!.a >3399>>3305lticast.c#L848" id  L848" class="line" nam9078L900">33998./a>                >3399>>3301code=hlist_del_init_rcu" class="sra>;f3="+code=igmpv3_re3ltrt_hdr" class="sref">i3_repbrigmt_hdr./a>(.a href="+c3_repbrigmt_s="sref">skb./a>);u33999./a>ubr./a>->.a>;f3="+code=igmpv3_re3ltrtlass="sref">grec_msk/a>) * 4;u110  L9a>uout./a>;u110 1./a>        int3.a hr110 1.110 1ticast.c#L896" id  L896" class="line" na112 1L900">11992./a>        int3.a h>110 2.1006              strucr" class="sref">nmax_delag./a> = 1;ugrec./a>->f3="+code=igmpv3_re3ltrtlass="sref">grec_mrec_;f="+code=igmpvrec__r"sr?cast.c#L896" id  L896" class="line" na113 1L900">11993./a>        int3.a h>110 3.1006      .a href="+code=port" clasLD_SOURCES" class="ef="RC;f="+code=igmpvss="ef="RCs="sref">skb./a>);ugrec_mrec_;f="+code=igmpvrec__r"s)reref"f">port./a>-&HZ;f="+code=igmpvHZ_r"sr/OLD_SOURCES" class="_TIMECBRCALE;f="+code=igmpvss="_TIMECBRCALEcamul : 1icast.c#L896" id  L896" class="line" na114 1L900">11994./a>        int3.a h>110 4.1099dge/br_multicast.c#L935" id  L935" class="line" n.105 1L900">11995./a>        .a href=>110 5.1007lticast.c#L936" id  L936" class="line" na110 6L900">110 6./a>up);u11997./a>        if3(!.a >110 7.1098a href="net/bridge/s="sref">out./a>;u11998./a>                >110 8.10multicast.c#L939" id  L939" class="line" n.109 6L900">11999./a>uicmp6h./a>m +code=n" class=mrlticast_add_group" clas" mdlassgeast_mld2_report./a>" mdlassgeas="sref">skb./a>);uskb./a>, sizef="+code=port" class="s="sref">data./a> +" m;f="+code=igmpvmdbass="sref">port./a>,3zef="+code=port" class=)="sref">group./a>);u11010./a>                .11010.110            pull" class="sref">pa>m +code=n" class=mrlttcast.c#L936" id  L936" class="line" na11011L900">11011./a>                .11011.1103              strucs="sref">out./a>;u11012./a>u11013./a>                .11013.1108      .a hrefss="sref">igm>nmax_delag./a> = 1;umulticaline"ember_counouef="+code=grouef">multicaline"ember_counouelticast.c#L896" id  L896" class="line" na114 1L900">11014./a>                i11014.11084ticast.c#L848" id  L848" class="line" na11015L900">11015./a>                 11015.11085br" class="sref"f">port./a>-&a>m +code=n" class=mrlt_disabl
d" class="sreg)u11016./a>uport./a>->/br_m_pendinf="net/bridge/br/br_m_pendinfclass="sref">port./a>-&a>m +code=n" class=mrlt_disabl
d" class="sr houter_timer./a>);u11017./a>                <11017.1198a href="net/bridbl
d" class="sr houultafier_timer./a>);uskb./a>);um +code=n" class=mrlt_disabl
d" class="sr houter_timer./a>);uun_daexpir;uport./a>,3>neow/a> *.a href="+cowlticaef">len./a> - s>nmax_delag./a> = 1;u11018./a>                s11018.1101code=hlist_del_ibl
d" class="sr rigtoax_ddge/br_syn.a href="+code=g rigtoax_ddge/br_syn.nfclass="sref">port./a>-&a>m +code=n" class=mrlt_disabl
d" class="sr houter_timer./a>);u11019./a>                c11019.119ref="+code=out" class=i./a>++) {u(&.a href="+code=port" class="sref">port./a>-&a>m +code=n" class=mrlt_disabl
d" class="sr houter_timer./a>);uport./a>,3>neow/a> *.a href="+cowlticaef">len./a> - s>nmax_delag./a> = 1;u11020./a>                c11020.12080ticast.c#L936" id  L936" class="line" na11021L900">11021./a>                c11021.1203           "sref">i./a> = 0;3.aport./a>-&a>m +code=n" class=mrlt_disabl
d" class="sref="nref="+code=group" cr_multiast.c#L872" id  L872" class="line" na11022L900">11022./a>                c11022.1206              stref">skb./a>, size"+code=n" class="sricast_add_group" cmas="_ordefrdenc_;f="+code=igmpvmas="_ordefrdenc_nfbri *ef">port./a>,uport./a>,3zef="+code=port" class=))ica!ref">port./a>,3laNULhref="net/bridgeNULhlticast.c#L937" id  L937" class="line" na11023L900">11023./a>                c11023.1206      .a href="+">i./a> = 0;3.aport./a>-&ze"+code=n" class="srrtlass="sref">grec_msexrt./a> *.a href="+x_multicacast.c#L905" id  L905" class="line" na11024L900">11024./a>                c11024.1102ef="+code=IGMPV3_BLe"sl" f">port./a>->/br_m_pendinf="net/bridge/br/br_m_pendinfclass="sref">port./a>-&ze"+code=n" class="srrtlass="sref">grec_m houter_timer./a>);u11025./a>                 11025.129                struct3.bl
d" class="sr houultafier_timer./a>);uskb./a>);ugrec_m houter_timer./a>);uun_daexpir;uport./a>,3>neow/a> *.a href="+cowlticaef">len./a> - s>nmax_delag./a> = 1;u11026./a>uport./a>-&ze"+code=n" class="srrtlass="sref">grec_m houter_timer./a>);u11027./a>                d11027.1298a href="net/bridge/ut" class=i./a>++) {u(&.a href="+code=port" class="sref">port./a>-&ze"+code=n" class="srrtlass="sref">grec_m houter_timer./a>);uport./a>,3>neow/a> *.a href="+cowlticaef">len./a> - s>nmax_delag./a> = 1;u11028./a>                 11028.1102=br" class=icast.c#L935" id  L935" class="line" n.11029L900">11029./a>                }11029.129ulticast.c#L900" id  L900" class="line" na1103 L900">11030./a>uout./a>;u11031./a>                .11031.1308" class="sref">num./a> = ./brpiunn=="ckf="net/bridge/brpiunn=="" class="sref">port./a>->href="+code=multicast_disabl
d" class="sref">multicas="ckf="net/bridge/b">multicas="ckulticast.c#L955" id  L955" class="line" na11032L900">11032./a>                i11032.1103 href="+codass="sref">err./a>;u11033./a>                 11033.1103eakicast.c#L935" id  L935" class="line" n.11034L900">11034./a>        }u11035./a>u(.a href="+codesS_ENIS/a>s="sref">skb./a>);u11036./a>        return .a11036.1103   ca_multiccast_igmp3_report" clahruct3.a hre_ibridg./a> = 1;unet_bridge./a> *.a href="+code=br" class="sref">br./a>,u11037./a>}unet_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u11038./a>u *.a href="+code=skb" class="sref">skb./a>)u11039./a>#if3.a href="+cod11039.1103ef=acast.c#L905" id  L905" class="line" na1104 L900">11040./a>static int3.a hre11040.140              const" class="sref">icmp6hdrv6p>(.a href="+code=skv6p>(ss="sref">skb./a>)uicmp6_hv6dp>(.a href="+code=skv6dp>(s="sref">skb./a>);u11041./a>                 11041.1104" class="srla" class="sref">mld2_gre_msinf="net/bridge/gre_msiss="sref">skb./a>)umld2_gre_msinf="net/bridge/gre_msiss="srsreef">port./a>,3icmp6dp>(.a href="+code=scmp6dp>(s="sref">skb./a>);u11042./a>                 11042.1424" class="srla" class="sref">mld2_pvcode=port" mdbpg" cl.a href="+code=code=port" mdbpg" class="sref">icmp6h./a>m +code=n" class=mrlticast.c#L937" id  L937" class="line" na11043L900">11043./a>{umld2_gre2e_ibridg./a> = 1;uskb./a>)u = 1;u11044./a>        struct3.a11044.1104p6h" class=grec" class="sref">igmpvcode=port" clasticast_add_group./a>(code=port" clasticasts="sref">port./a>,u11045./a>        struct3.a11045.1104           grec" class="sref">igmpvcode=port" clasticast_add_group./a>(code=port" clasticasts="srss="sref">igmpv_et_rcu./a>(&.a _et_r"sre *ef">port./a>,u11046./a>        int3.a hr11046.1402             rt" class="sr" class="sref">nmax_delag./a> = 1;u11047./a>        int3.a hr11047.1472             rt" class="sr" class="sref">neow/a> *.a href="+cowlticast_add_group" claa>);u11048./a>        int3.a hr11048.148              const" class="sref">icmp6hdr.n6r" ca href="+code=skbn6r" camu"sref">port./a>,upv .a href="+code=grec" class="sref">grec./a>-&laNULhref="net/bridgeNULhlticast.c#L937" id  L937" class="line" na11049L900">11049./a>        int3.a hr11049.1104ef="+code=o="sref">err./a> = 0;u11050./a>u11051./a>        if3(!.a h11051.1508" class="sref">num./a> = ./brpin=="ckf="net/bridge/brpin=="ckclass="sref">port./a>->href="+code=multicast_disabl
d" class="sref">multicas="ckf="net/bridge/b">multicas="ckulticast.c#L955" id  L955" class="line" na11052L900">11052./a>                r11052.1105=num" class="sl" class="sref">psk idif_runninf="net/bridge/br idif_runninfbridg">skb./a>, sizef="+code=port" class="s="sref">data./a> + .aev"+code=port" claevlticac||st.c#L955" id  L955" class="line" na11053L900">11053./a>uport./a>->.a href="+code=mglist" clas="sre="sreef">port./a>,3.a href="+code=group" class="="sref">data./a> + ._mul*.a href="+code=_mul*r_multst_add_group" claBR_STATE_DIS/a>(.a href="+code=CBR_STATE_DIS/a>(.ulticast.c#L878" id  L878" class="line" na11054L900">11054./a>        .a href="11054.1105ef="+code=IGMPV3_BLs="sref">out./a>;u11055./a>        .a href="11055.1507lticast.c#L936" id  L936" class="line" na11056L900">110na4L897">3897./a>      110na41507t" class="sref">port./a>-&a class="line"=bridgereceiv./a>(&.a hrefclass="line"=bridgereceiv./bridg">skb./a>, sizef="+code=port" class="sref">port./a>,3.a href="+code=group" class=",ss="sref">icmp6_hv6d6r" _anidg./a> = 1;uport./a>-&lah;pa href="net/brid6gpr" cl="sref">data./a> + ._" ca href="+code=sks" camulticast.c#L955" id  L955" class="line" na11047L900">11057./a>        .a href="11057.1105lticast.c#L848" id  L848" class="line" na11058L900">11058./a>        if3(.a hr11058.1503=br" class="sreef">skb./a>);udata./a> + as an IGMPv2 report for3no=icmp6h" class="sref">icmgrenf="net/bridge/grepr" )icacast.c#L905" id  L905" class="line" na11059L900">11059./a>                g11059.1502"net/bridge/br_multicre" class="sref">pskb_may_pull./a>(.a href="+code=skb" class="sref">skb./a>, sizeof(*.a href="+code=icmp6h" classclass="sref">icmgrenf="net/bridge/grepr" )iicacast.c#L905" id  L905" class="line" na1106 L900">11060./a>uEINVAL./a>;u11061L900">11061./a>        .a href="11061.1603              struct3.a hres="sref">out./a>;u11062./a>u11063./a>.a href="+code=ou11063.1106      .a href="+codef">skb./a>)umld2_gre_msinf="net/bridge/gre_msiss="srsreef">port./a>,3icmp6dp>(.a href="+code=scmp6dp>(s="sref">skb./a>);u11064./a>        .a href="11064.1601ef="+code=IGMPV3_BLOCf">port./a>-&>nmax_delag./a> = 1;ugrec./a>-&msecsgtoalaa>);uskb./a>);u) * 4;uskb./a>);u11065./a>}uport./a>-&anmax_delag./a> = 1;u11066./a>uport./a>,upv .a href="+code=grec" class="sss="sref">port./a>-&arenf="net/bridge/grepr" _disabl
d" class="srere_mcaag./a> = 1;u11067./a>void .a href="+co11067.11067          }   else"sl" f">port./a>-&a href="net/bridge/br_mulss="sref">data./a> + as an IGMPv2 report for3n"/br_m" classclass="sref">icmgre2qdg./a> = 1;u11068./a>{upskb_may_pull./a>(.a href="+code=skb" class="sref">skb./a>, sizeof(*.a href="+code=icmp6h" classclass="sref">icmgre2qdg./a> = 1;u11069./a>        struct3.a11069.1604ef="+code=out" class="+coder" class="sref";uEINVAL./a>;u1107 L900">11070./a>        struct3.a11070.1794ef="+code=out" class="+codes="sref">out./a>;u11071./a>        struct3.a11071.1703              strucicast.c#L852" id  L852" class="line" na11072L900">11072./a>uicmgre2qdg./a> = 1;umld2_gre2e_ibridg./a> = 1;uport./a>,3icmp6dp>(.a href="+code=scmp6dp>(s="sref">skb./a>);u11073./a>        .a href="11073.1706      .a href="+codpull" class="sref">pgre2qdg./a> = 1;u11074./a>        .a href="11074.1701ef="+code=IGMPV3_BLct3.a hrref">port./a>,upv .a href="+code=grec" class="sss="sref">port./a>-&are2qdg./a> = 1;u11075./a>                .11075.179                struOCf">port./a>-&>nmax_delag./a> = 1;ugrec./a>-&mre2qdg./a> = 1;ugrec./a>-&MLDV2="RC;f="+code=igmpvMLDV2="RCs="sref">skb./a>);u = 1;u11076./a>u11077./a>        if3(!.a h11077.1705lticast.c#L848" id  L848" class="line" na11078L900">11078./a>                .11078.1703=br" class="sref"class="sref">p);u11079./a>        .a href="11079.1107ef="+code=out" class="sref">out./a>;u11080./a>        .a href="11080.11080ticast.c#L936" id  L936" class="line" na11081L900">11081./a>        .a href="11081.1108" class="sref">num./a> = .a>m +code=n" class=mrlticast_add_group" clas" mdla6sgeast_mld2_report./a>" mdla6sgeas="sref">skb./a>);uskb./a>, sizef="+code=port" class="s="sref">data./a> +" m;f="+code=igmpvmdbass="sref">port./a>,3zef="+code=port" class=)="sref">group./a>);u11082./a>}upa>m +code=n" class=mrlttcast.c#L936" id  L936" class="line" na11083L900">11083./a>uout./a>;u11084./a>static int3.a hre11084.11084ticast.c#L848" id  L848" class="line" na11085L900">11085./a>                 11085.11085br" class=OCf">port./a>-&>nmax_delag./a> = 1;umulticaline"ember_counouef="+code=grouef">multicaline"ember_counouelticast.c#L896" id  L896" class="line" na18076L900">13986./a>                >13985.180            pull class="sref">pa>m +code=n" class=mrlt_disabl
d" class="sreg)u13987./a>{uport./a>->/br_m_pendinf="net/bridge/br/br_m_pendinfclass="sref">port./a>-&a>m +code=n" class=mrlt_disabl
d" class="sr houter_timer./a>);u13988./a>        struct3.>13985.1196ntinue;uskb./a>);um +code=n" class=mrlt_disabl
d" class="sr houter_timer./a>);uun_daexpir;uport./a>,3>neow/a> *.a href="+cowlticaef">len./a> - s>nmax_delag./a> = 1;u13989./a>        struct3.>13985.1104ef="+code=out" cbl
d" class="sr rigtoax_ddge/br_syn.a href="+code=g rigtoax_ddge/br_syn.nfclass="sref">port./a>-&a>m +code=n" class=mrlt_disabl
d" class="sr houter_timer./a>);u13990./a>        int3.a h>1399>>1394ef="+code=out" clasref">port./a>-&aa"r./a>(&.a href="+code=port" class="sref">port./a>-&a>m +code=n" class=mrlt_disabl
d" class="sr houter_timer./a>);uport./a>,3>neow/a> *.a href="+cowlticaef">len./a> - s>nmax_delag./a> = 1;u13991./a>        int3.a h>1399>>190 1ticast.c#L896" id  L896" class="line" na19082L900">13992./a>        int3.a h>1399>>13072 class="sr"sref">i./a> = 0;3.aport./a>-&a>m +code=n" class=mrlt_disabl
d" class="sref="nref="+code=group" cr_multiast.c#L872" id  L872" class="line" na19083L900">13993./a>        int3.a h>1399>>1306      .a href="+ref">skb./a>, size"+code=n" class="sricast_add_group" cmas="_ordefrdenc_;f="+code=igmpvmas="_ordefrdenc_nfbri *ef">port./a>,uport./a>,3zef="+code=port" class=))ica!ref">port./a>,3laNULhref="net/bridgeNULhlticast.c#L937" id  L937" class="line" na19074L900">13994./a>        int3.a h>1399>>1305ef="+code=IGMPV3">i./a> = 0;3.aport./a>-&ze"+code=n" class="srrtlass="sref">grec_msexrt./a> *.a href="+x_multicacast.c#L905" id  L905" class="line" na13085L900">13995./a>        .a href=>1399>>139                strue"sl" f">port./a>->/br_m_pendinf="net/bridge/br/br_m_pendinfclass="sref">port./a>-&ze"+code=n" class="srrtlass="sref">grec_m houter_timer./a>);u13996./a>uskb./a>);ugrec_m houter_timer./a>);uun_daexpir;uport./a>,3>neow/a> *.a href="+cowlticaef">len./a> - s>nmax_delag./a> = 1;u13997./a>        if3(!.a >1399>>1998a href="net/bridge/ut" bl
d" class="sr rigtoax_ddge/br_syn.a href="+code=g rigtoax_ddge/br_syn.nfclass="sref">port./a>-&ze"+code=n" class="srrtlass="sref">grec_m houter_timer./a>);u13998./a>                >1399>>1301code=hlist_del_initut" clasref">port./a>-&aa"r./a>(&.a href="+code=port" class="sref">port./a>-&ze"+code=n" class="srrtlass="sref">grec_m houter_timer./a>);uport./a>,3>neow/a> *.a href="+cowlticaef">len./a> - s>nmax_delag./a> = 1;u13999./a>u210  L9a>u210 1./a>        int3.a hr210 1.210 1tief">out./a>;u21992./a>        int3.a h>210 2.2006           ef">skb./a>);uport./a>->href="+code=multicast_disabl
d" class="sref">multicas="ckf="net/bridge/b">multicas="ckulticast.c#L955" id  L955" class="line" na213 1L900">21993./a>        int3.a h>210 3.2006      .a hrass="sref">err./a>;u21994./a>        int3.a h>210 4.2099dgeicast.c#L852" id  L852" class="line" na215 1L900">21995./a>        .a href=>210 5.2007lti#_penfcast.c#L852" id  L852" class="line" na216 1L900">21996./a>u21997./a>        if3(!.a >210 7.2098a hca_multvoidsref">port./a>-&a class="lineleaveasticast_add_group./aa class="lineleaveastica" cladge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u21998./a>                >210 8.2098ntinue;unet_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u21999./a>uport./a>,u);u21010./a>                .21010.210    acast.c#L905" id  L905" class="line" na21011L900">21011./a>                .21011.2104" class="srla" class="sref">mld2_e=code=port" mdhtabl> *.a href="+code=br" clast" mdhtabl>sts="sref">port./a>,u" m;f="+code=igmpvmdbass=icast.c#L937" id  L937" class="line" n.21012L900">21012./a>umld2_pvcode=port" mdbpg" cl.a href="+code=code=port" mdbpg" class="sref">icmp6h./a>m +code=n" class=mrlticast.c#L937" id  L937" class="line" na21013L900">21013./a>                .21013.2134" class="srla" class="sref">mld2_pvcode=port" clasticast_add_group./a>(code=port" clasticasts="sref">port./a>,u21014./a>                i21014.2105ef="+code=I  rt" class="sr" class="sref">neow/a> *.a href="+cowlticast.c#L937" id  L937" class="line" na215 1L900">21015./a>                 21015.21085br" class=  rt" class="sr" class="sref");u21016./a>u21017./a>                <21017.2198a href="netef">skb./a>);uport./a>->href="+code=multicast_disabl
d" class="sref">multicas="ckf="net/bridge/b">multicas="ckulticast.c#L955" id  L955" class="line" na21018L900">21018./a>                s21018.2103=br" class="sref"class="sref">psk idif_runninf="net/bridge/br idif_runninfbridg">skb./a>, sizef="+code=port" class="s="sref">data./a> + .aev"+code=port" claevlticac||st.c#L955" id  L955" class="line" na21019L900">21019./a>                c21019.219ref="+code=out" in"f">port./a>->.a href="+code=mglist" clas="sre="sreef">port./a>,3.a href="+code=group" class="="sref">data./a> + ._mul*.a href="+code=_mul*r_multst_add_group" claBR_STATE_DIS/a>(.a href="+code=CBR_STATE_DIS/a>(.ultcac||st.c#L955" id  L955" class="line" na2102 L900">21020./a>                c21020.2294ef="+code=out" " f">port./a>->/br_m_pendinf="net/bridge/br/br_m_pendinfclass="sref">port./a>->href="+code=multicast_disabl
d" class="sref">multic_ibribr_./a>(&.a href="+cf">multic_ibribr_./a>(ass=))||st.c#L955" id  L955" class="line" na21011L900">21021./a>                c21021.2203              strucs="sref">out./a>;u21022./a>                c21022.2208lticast.c#L873" id  L873" class="line" na21023L900">21023./a>                c21023.2208      .a hrefss="sref">igm> m;f="+code=igmpvmdbass=icast_add_group" cmas="_ordefrdenc_;f="+code=igmpvmas="_ordefrdenc_nfbriref">port./a>->href="+code=multicast_disabl
d" class="sre m;f="+code=igmpvmdbass="sref">port./a>,3zef="+code=port" class=)icast.c#L896" id  L896" class="line" na214 1L900">21024./a>                c21024.2102ef="+code=I"sref">icmp6h./a>m +code=n" class=mrlticast_add_group" clas" mdlasgeast_mld2_report./a>" mdlasgeas="sref">skb./a>);uport./a>,3);u21025./a>                 21025.22085br" class="sre" class="sref">pa>m +code=n" class=mrlttcast.c#L936" id  L936" class="line" na21026L900">21026./a>uout./a>;u21027./a>                d21027.2205lticast.c#L848" id  L848" class="line" na21018L900">21028./a>                 21028.2102=br" class=ref">port./a>,3>neow/a> *.a href="+cowlticast_add_group" claa>);u21029./a>                }21029.220 ode=igmpv3_"sref">icmp6h./);uneow/a> *.a href="+cowlticaef">len./a> - slahref="+code=multicast_disabl
d" class="sref">multicaline"ember_counouef="+code=grouef">multicaline"ember_counouelt *iast.c#L872" id  L872" class="line" na2103 L900">21030./a>ulen./a> - slahref="+code=multicast_disabl
d" class="sref">multicaline"ember_interva./a>(.a href="+cef">multicaline"ember_interva._multiast.c#L872" id  L872" class="line" na21031L900">21031./a>                .21031.230 1ticast.c#L896" id  L896" class="line" na21032L900">21032./a>                i21032.2103 href="+codt/ll" class="sref">psa href="+code=group" classicacast.c#L905" id  L905" class="line" na21023L900">21033./a>                 21033.2306      .a href="+codpullref">port./a>-&a>m +code=n" class=mrlt_disabl
d" class="sreg)u21034./a>        }uport./a>->/br_m_pendinf="net/bridge/br/br_m_pendinfclass="sref">port./a>-&a>m +code=n" class=mrlt_disabl
d" class="sr houter_timer./a>);u21035./a>uskb./a>);um +code=n" class=mrlt_disabl
d" class="sr houter_timer./a>);uun_daexpir;uport./a>,3);u21036./a>        return .a21036.230                struct3.abl
d" class="sr rigtoax_ddge/br_syn.a href="+code=g rigtoax_ddge/br_syn.nfclass="sref">port./a>-&a>m +code=n" class=mrlt_disabl
d" class="sr houter_timer./a>);u21037./a>}uport./a>-&aa"r./a>(&.a href="+code=port" class="sref">port./a>-&a>m +code=n" class=mrlt_disabl
d" class="sr houter_timer./a>);uport./a>,3);u21038./a>u21039./a>#if3.a href="+cod21039.239ulticast.c#L900" id  L900" class="line" na2104 L900">21040./a>static int3.a hre21040.2494ef="+code=out" class="sref">out./a>;u21041./a>                 21041.2104" class="sricast.c#L852" id  L852" class="line" na21032L900">21042./a>                 21042.2408lticast.c#L873" id  L873" class="line" na21043L900">21043./a>{ui./a> = 0;3.aport./a>-&a>m +code=n" class=mrlt_disabl
d" class="sref="nref="+code=group" cr_mul"sref">port./a>,3zef="+code=port" class=)icast.c#L896" id  L896" class="line" na21034L900">21044./a>        struct3.a21044.2405ef="+code=IGMPV3">i./a> = 0;3.aport./a>,3laNULhref="net/bridgeNULhlticast.c#L937" id  L937" class="line" na21045L900">21045./a>        struct3.a21045.249                s">i./a> = 0;3.aport./a>-&ze"+code=n" class="srrtlass="sref">grec_msexrt./a> *.a href="+x_mult"sref">port./a>,3zef="+code=port" class=))iacast.c#L905" id  L905" class="line" na21046L900">21046./a>        int3.a hr21046.240                strupullref">port./a>-&ze"+code=n" class="srrtlass="sref">grec_mgt;.a href="+code=mglist" clca!ref">port./a>,3sa href="+code=group" classicast.c#L905" id  L905" class="line" na21017L900">21047./a>        int3.a hr21047.2498a href="net/bridge/ut" clascontinueicast.c#L937" id  L937" class="line" na21018L900">21048./a>        int3.a hr21048.24multicast.c#L939" id  L939" class="line" n.21049L900">21049./a>        int3.a hr21049.2402"net/bridge/br_multicre" class="sref">ph)u(&.a hrh)uport./a>-&ze"+code=n" class="srrtlass="sref">grec_meg)u21050./a>uport./a>->/br_m_pendinf="net/bridge/br/br_m_pendinfclass="sref">port./a>-&ze"+code=n" class="srrtlass="sref">grec_m houter_timer./a>);u21051./a>        if3(!.a h21051.2503              struct3.a bl
d" class="sr houultafier_timer./a>);uskb./a>);ugrec_m houter_timer./a>);uun_daexpir;uport./a>,3);u21052./a>                r21052.2105=num" class   struct3.a bl
d" class="sr rigtoax_ddge/br_syn.a href="+code=g rigtoax_ddge/br_syn.nfclass="sref">port./a>-&ze"+code=n" class="srrtlass="sref">grec_m houter_timer./a>);u21053./a>u(&.a href="+code=port" class="sref">port./a>-&ze"+code=n" class="srrtlass="sref">grec_m houter_timer./a>);uport./a>,3);u21054./a>        .a href="21054.2105ef="+code=IGMPV3_BLicast.c#L852" id  L852" class="line" na21055L900">21055./a>        .a href="21055.2507lticast.c#L936" id  L936" class="line" na21056L900">210na4L897">3897./a>      210na4250                strubreakscast.c#L848" id  L848" class="line" na21017L900">21057./a>        .a href="21057.25067          }cast.c#L848" id  L848" class="line" na21018L900">21058./a>        if3(.a hr21058.25multicast.c#L939" id  L939" class="line" n.21059L900">21059./a>                g21059.2502"neef">out./a>;u21060./a>udata./a> + brpiunn=="ckf="net/bridge/brpiunn=="" class="sref">port./a>->href="+code=multicast_disabl
d" class="sref">multicas="ckf="net/bridge/b">multicas="ckulticast.c#L955" id  L955" class="line" na21061L900">21061./a>        .a href="21061.2603   }cast.c#L848" id  L848" class="line" na21062L900">21062./a>u21063./a>.a href="+code=ou21063.2106   ca_multvoidsref">port./a>-&a classlass="lineleaveasticast_add_group./aa classlass="lineleaveastica" cladge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u21064./a>        .a href="21064.2601ef="+code=IGMPV3_BLLLLLLLLLLLLLLLLLLLLLLLLLLk_e_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u21065./a>}uport./a>,u__be1032./a>   bridge__be10     ref">port./a>,3);u21066./a>u21067./a>void .a href="+co21067.21067          k_e_port" class="sref"hrclast_add_group./aa ciasts="t" class="sref"hrcsticast_add_group./aa cge/br_mulicast.c#L955" id  L955" class="line" na21018L900">21068./a>{u21069./a>        struct3.a21069.2604ef="+code=opullref">port./a>-&ipv4_iscas=alclass="linst_add_group./aipv4_iscas=alclass="lins="sref">skb./a>);u<);u21070./a>        struct3.a21070.2794ef="+code=out" clasass="sicast.c#L955" id  L955" class="line" na21071L900">21071./a>        struct3.a21071.270 1ticast.c#L896" id  L896" class="line" na21072L900">21072./a>uun_daust_add_group./au_mulass="sref">un_dalasst_add_group./aip4brlticast_add_group" c);u21073./a>        .a href="21073.2708      .a hrefss="sref">igmhrcsticast_add_group./aa cge/br_mulass="sref">un_daprotoref="net/bridge/rotobrlticast_add_group" chtonuskb./a>);u21074./a>        .a href="21074.27084ticast.c#L848" id  L848" class="line" na21065L900">21075./a>                .21075.27085br" class=OCf">port./a>-&a class="lineleaveasticast_add_group./aa class="lineleaveastica" claf">br./a>,uport./a>,3.a href="+code=group" class="ss="sref">port./a>->csticast_add_group./aa cge/br_multicast.c#L955" id  L955" class="line" na21056L900">21076./a>u21077./a>        if3(!.a h21077.2705lticast.c#L848" id  L848" class="line" na21078L900">21078./a>                .21078.2703=br#e"sLD_SOURCES" clasS_ENIS/a>(.a href="+codesS_ENIS/a>s="sref">skb./a>);u21079./a>        .a href="21079.2107ef=ca_multvoidsref">port./a>-&a cla6slass="lineleaveasticast_add_group./aa cla6slass="lineleaveastica" cladge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u21080./a>        .a href="21080.2894ef="+code=out" class="+codeLLLLLLLLLLLLLLLLLk_e_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u21081./a>        .a href="21081.2803              struct3.a hreeeeeeeeeeeeeeeeee  const" class="sref">icmp6hdr.n6r" ca href="+code=skbn6r" camu"sref">port./a>,upv .a href="+code=grec" classtcast.c#L936" id  L936" class="line" na21072L900">21082./a>}u21083./a>umld2_hrclast_add_group./aa ciasts="t" class="sref"hrcsticast_add_group./aa cge/br_mulicast.c#L955" id  L955" class="line" na21074L900">21084./a>static int3.a hre21084.21084ticast.c#L848" id  L848" class="line" na21085L900">21085./a>                 21085.28085br" class="sre" class="sref">phhv6disctransientclass="linst_add_group./aipv6disctransientclass="lins="sref">skb./a>);u<);u23986./a>                >23985.280                struass="sicast.c#L955" id  L955" class="line" na21077L900">23987./a>{u23988./a>        struct3.>23985.2802=br" class=ref">port./a>,3hrcsticast_add_group./aa cge/br_mulass="sref">un_daust_add_group./au_mulass="sref">un_dala6(.a href="+codela6brlticasref">port./a>,upv .a href="+code=grec" classicast.c#L955" id  L955" class="line" na21079L900">23989./a>        struct3.>23985.280 ode=igmpv3_"sref">icmp6h./hrcsticast_add_group./aa cge/br_mulass="sref">un_daprotoref="net/bridge/rotobrlticast_add_group" chtonuskb./a>);u23990./a>        int3.a h>2399>>29080ticast.c#L936" id  L936" class="line" na29081L900">23991./a>        int3.a h>2399>>2908" class="sref">num./a> = .a class="lineleaveasticast_add_group./aa class="lineleaveastica" claf">br./a>,uport./a>,3.a href="+code=group" class="ss="sref">port./a>->csticast_add_group./aa cge/br_multicast.c#L955" id  L955" class="line" na29082L900">23992./a>        int3.a h>2399>>23072 c}cast.c#L848" id  L848" class="line" na29083L900">23993./a>        int3.a h>2399>>2306   #_penfcast.c#L852" id  L852" class="line" na29074L900">23994./a>        int3.a h>2399>>29084ticast.c#L848" id  L848" class="line" na23085L900">23995./a>        .a href=>2399>>239    ca_multiccast_igmp3_report" class="lineipv4_rcaev"+code=port" " class="lineipv4_rca" cladge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u23996./a>unet_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u23997./a>        if3(!.a >2399>>2998a href="net/bridge/ut" LLLLLLLLLLLLLk_e_port" class="sref"./a> *.a href="+code=skb" class="sref">skb./a>)u23998./a>                >2399>>2301codacast.c#L905" id  L905" class="line" na29079L900">23999./a>u *.a href="+code=skb" class="sref">skb./a>)u   bridge hr0brlticast_add_group" c href="net/bridge/br_multicast.c#L955" id  L955" class="line" na310  L900">310  L9a>uicmp6hdrp>(.a href="+code=skp>(ss="sref">skb./a>)u31991./a>        int3.a h>310 1.3004" class="srla" class="sref">mld2_igmrp>(.a href="+code=sgmrp>(ss="sref">skb./a>)u31992./a>        int3.a h>310 2.3006             rt" claiccast_igmp3_report as an IGMPv2 report for3icast.c#L955" id  L955" class="line" na313  L900">31993./a>        int3.a h>310 3.3006      .a hr  rt" claiccast_igmp3_reportoffseast_mld2_report.offseafor3icast.c#L955" id  L955" class="line" na314  L900">31994./a>        int3.a h>310 4.3001ef="+code=I="sref">err./a> = 0;u31995./a>        .a href=>310 5.3007lticast.c#L936" id  L936" class="line" na316 1L900">31996./a>u/* We treat OOM as packet lossr"srenow. */31997./a>        if3(!.a >310 7.3098a href="nett/ll" class="sref">pskb_may_pull./a>(.a href="+code=skb" class="sref">skb./a>, sizeof(*.a href="+code=icmp6h" classclass="sref">icmla;pa href="net/bridhmult)ttcast.c#L942" id  L942" class="line" na318 6L900">31998./a>                >310 8.3098ntinue;uEINVAL./a>;u309 6L900">31999./a>u31010./a>                .31010.3194ef="+code=oref">data./a> +la;pa href="net/bridhmulticast_add_group" cipdp>(.a href="+code=spdp>(s="sref">skb./a>);u31011./a>                .31011.310 1ticast.c#L896" id  L896" class="line" na31012L900">31012./a>uport./a>-&ip;pa href="net/bridhmult_disabl
d" class="srih./a>(.a href="+cih.4" cl< 5 ||oref">data./a> +la;pa href="net/bridhmult_disabl
d" class="srversios an IGMPv2 repoversios4" cl!= 4tcast.c#L942" id  L942" class="line" na31013L900">31013./a>                .31013.3105code=len" class  stass="sr="sref">EINVAL./a>;u314 1L900">31014./a>                i31014.31084ticast.c#L848" id  L848" class="line" na315 1L900">31015./a>                 31015.31085br" class="sre" class="sref">pskb_may_pull./a>(.a href="+code=skb" class="sref">skb./a>, sizeof(*.a href="+code=icmp6hst_add_group" cipdp>( as an IGMPv2 repoipdp>( ass="sref">skb./a>);u31016./a>uEINVAL./a>;u317 1L900">31017./a>                <31017.3105lticast.c#L848" id  L848" class="line" na31018L900">31018./a>                s31018.3102=br" class=ref">port./a>,3la;pa href="net/bridhmulticast_add_group" cipdp>(.a href="+code=spdp>(s="sref">skb./a>);u31019./a>                c31019.319ulticast.c#L900" id  L900" class="line" na3102 L900">31020./a>                c31020.3294ef="+code=opullref">port./a>-&unlikel cl.a href="+codunlikel s="sref">skb./a>);uport./a>-&u8cl.a href="+codu02=br"r)eef">port./a>,3ia;pa href="net/bridhmult6hst_add_group" cip;pa href="net/bridhmult_disabl
d" class="srih./a>(.a href="+cih.4" ctttcast.c#L942" id  L942" class="line" na31011L900">31021./a>                c31021.3203              strucass="sr="sref">EINVAL./a>;u31022L900">31022./a>                c31022.3208lticast.c#L873" id  L873" class="line" na31023L900">31023./a>                c31023.3208      .a hrpullref">port./a>-&ip;pa href="net/bridhmult_disabl
d" class="sr/rotoco./a>(.a href="+corotoco.4" cl!= LD_SOURCES" clasPPROTO_IGMP31024./a>                c31024.3201ef="+code=IGMPV3_BLpulllref">port./a>-&ip;pa href="net/bridhmult_disabl
d" class="srd6r" ca href="+code=d6r" camu"re="sreef">port./a>,3IGMP_LOCAL_GROUP_MASK31025./a>                 31025.329                struuuuuuuuuLD_SOURCES" claBR_INPUT_SKB_CBskb./a>);u31026./a>u31027./a>                d31027.32067          }cast.c#L848" id  L848" class="line" na31018L900">31028./a>                 31028.32multicast.c#L939" id  L939" class="line" n.31029L900">31029./a>                }31029.320 ode=igmpv3_"sref">icmp6h./ as an IGMPv2 report for3ncast_add_group" c>toh>) * 4;uskb./a>);u31030./a>uport./a>-&a href="net/bridge/br_mulss="sref">data./a> + as an IGMPv2 report for3n"lt; ref">data./a> + as an IGMPv2 report for3n||oref">data./a> + as an IGMPv2 report for3n"lt; ref">data./a> +ipdp>( as an IGMPv2 repoipdp>( ass="sref">skb./a>);u31031./a>                .31031.3303              strucass="sr="sref">EINVAL./a>;u31032L900">31032./a>                i31032.3308lticast.c#L873" id  L873" class="line" na31023L900">31033./a>                 31033.3308      .a hrpullref">port./a>-&a href="net/bridge/br_mulss="sref">data./a> + as an IGMPv2 report for3n"/broref">data./a> + as an IGMPv2 report for3tiacast.c#L905" id  L905" class="line" na31034L900">31034./a>        }uskb./a>)u   bridge hr0brlticast_add_group" c hr_clon> *.a href="+cod hr_clon>s="sref">skb./a>, sizeof(*.a href="+code=icmp6hst_add_group" cGFP_ATOMIC;f="+code=igmpvGFP_ATOMIC_multicast.c#L955" id  L955" class="line" na31025L900">31035./a>up hr032./a>   bridge hr0brlttcast.c#L955" id  L955" class="line" na31026L900">31036./a>        return .a31036.330                struct3.arucass="sr="sref">EINVAL./aNOMEM href="net/bridgNOMEMmulticast.c#L953" id  L953" class="line" n>317 1L900">31037./a>}u31038./a>uerr./a> = 0;uskb./a>, sizeo032./a>   bridge hr0brlt6hst_add_group" c as an IGMPv2 report for3ticast.c#L953" id  L953" class="line" n>31029L900">31039./a>#if3.a href="+cod31039.3302"net/bridge/br_multicreef">err./a> = 0;u31040./a>static int3.a hre31040.3494ef="+code=out" classssssssss="sref">out./a>;u31041L900">31041./a>                 31041.3104" class="sricast.c#L852" id  L852" class="line" na31032L900">31042./a>                 31042.3408lticast.c#L873" id  L873" class="line" na31043L900">31043./a>{uigm as an IGMPv2 report for3n-cast_add_group" cipdp>( as an IGMPv2 repoipdp>( ass="sref">skb./a>);ubr./5Enfclass="s  .a hrefss="sref">igm a5Lx625ridhmu7r" class="line" na3104 L900">318k_s="sref">igm a5Lx625r L900">318k_s="srer3n-cast_add_group" cipdp>( as an IGMPv2 repoipd);uigm as an IGMPv2 report for3n-cast_add_group" cipdp>( as an IGMPv2 repoipdp>( ass="sref">skb./a>);u21075./a__ L90    31015.31085br" __ L90    _group" code=strim_rcsum.a href="+code=ode=strim_rcsums="sref">ss="sref">igm a5Lx625ridhmu7r" cdp>( ass="sref">skb./a>);uph">mldheadport./a>-&ze"+cod L90remu7ef">ph">mldheadpor3n-cast_add_group" cipdp>( as an IGMPv2 repoipdp>( ass="sref">skb./a>);u317 1L900">31037./a>}u31018./af="net/bri31038.3398ntinue;u>                .31031.3303              strucass="sr="sref">EINVAL./a>;u31015./a>                 31015.31085br" class="sre" class="sref">pskb_may_pum.a href="+code=ode=strim_b" class="sref">skb./a>,d2_igmrp>(.a href="+cobridhmult_disabl
d" class="srih./a>(.a hre" c)las="s3e="scast.c#L848" id  L8483 clas3="line" na2105 L900">21040./a>static int3.a hre21040.2494ef="+code=out" class="sref">out./a>;u31011./a>               >);u31033./a>      m.a href="+code=ode=striet/bridhmult6hst_add_p_addm402"net/bridge/br_p_addm40 report for3n"/broref">data./a> + as an IGMPv2ul)r"/br_m3t)iacast.c#L905" id  L9053 clas3="line" na2105 ane./a>static int3.CHECKSUM_COMPLETE2"net/bridge/brCHECKSUM_COMPLETElineg21059.2502"neef">out./a>;u29L900">31015./a>    _add_fol02"net/bridge/br_add_fol0lass="sref">pskb_may_pum.a href="+code=ode=striet/bridhmult6hst_add;u31025./a>10na4L897">3897./a>      210na4250          3="21055.2537lticast.c#L936" id  L9363 clas3="line" na21056L900">21L900">31996./a>uu/* We treat OOM as packet lossr"sr     strub3eakscast.c#L848" id  L8483 clas3="line" na2101 ane./a>static int3.CHECKSUM_NONE2"net/bridge/brCHECKSUM_NONElineg21059.2502"neef">out./a>;u31038./a>uu31029L900">31039./a>#if3.a hrefidge heckadd_/a>plea>,3.a href="+codedge heckadd_/a>plea>r3n-cast_add_group" cipdp>( as an IGMPv2 repoipdidhmult_disabl
d" class="srih./a>(.a hrede=group"o3elttiast.c#L928" id  L9283 clas36"line" na3104 L900">31040./a>static int3.a hre310a hre21040.2494ef="+code=out" class="sref">out./a>;u31041L900">31041./a>                 31041.3"21061.2603   }cast.c#L848" id  L8483 clas3="line" na21062L900">21062./a>u31043./af="net/bri31038.3398ntinue;u>u314 1L900">31014./a>               bridge/br_3ulticast.c#L942" id  L9423 clas36"line" na21065L900">21075./a  31025.329                struuuuuuuuuLD_SOURCES" claBR_INPUT_SKB_CBskb cla2"net/bridge/br_gc21024.21ss="srerouters_onl cl.a href="+coderouter/bridge/br3multcast.c#L942" id  L9423 clas36"line" na2104s="line" na3104,d2_igmrp>(.a href="+co102=br" class=ref">gc2ort./a>,3la;pa href=gc2ort.r3n-cast_add_group" cipdp>( as an IGMPv2 repoipdp>( ass="sref">skb./a>);u317 1L900">31037./a>}u31033./a>   ,d2_igmrp>(.a href="+coref="toh>s="sref">skbyp>,3.a href="+codbyp> report for3n"/broref">data./a> + as an IGMPv2br21068.263ulticast.c#L939" id  L9393 clas3="line" n.2105 ane./a>static int3." ctiHOST_MEMBERSHIP_REPORTCAL_GROUP_MASK4" ctiHOST_MEMBERSHIP_REPORTlineg21059.2502"neef">out./a>;ustatic int3." ctV2iHOST_MEMBERSHIP_REPORTCAL_GROUP_MASK4" ctV2iHOST_MEMBERSHIP_REPORTlineg21059.2502"neef">out./a>;u3                 31025.329                struuuuuuuuuLD_SOURCES" claBR_INPUT_SKB_CBskb./a>);u31043./af="net/bri31038.3398ntinue;u3L900">31043./abport./a>-&a clasadd06   ca_multvoidsref">port./a>-&a clasadd06   cRCES" claBR_INPUT_SKd_group./aa class="lineleaveastica" claf">br./a>,u31033./a>   ,d2_igmrp>(.a href="+coref="toh>s="sref">sk>skb./a>);uport./a>,3);u310na4L897">3897./a>      210na4250          3rETH_P_IPc3ulticast.c#L955" id  L9553 clas374line" na2107 ane./a>static int3." ctV3iHOST_MEMBERSHIP_REPORTCAL_GROUP_MASK4" ctV3iHOST_MEMBERSHIP_REPORTlineg21059.2502"neef">out./a>;u33L900">31043./af="net/bri31038.3398ntinue;u3L900">31043./abport./a>-&a clas=gc23_re">br./a>,ubrRCES" claBR_INPUT_SKd_group./aa class="lineleaveastica" claf">br./a>,u31033./a>   cipdp>( as an IGMPv2 repoipdp>( ass="sref">skb./a>);u210na4L897">3897./a>      210na4250          3i21076.2103t" }cast.c#L848" id  L8483 clas37"line" na2101 ane./a>static int3." ctiHOST_MEMBERSHIP_QUERYCAL_GROUP_MASK4" ctiHOST_MEMBERSHIP_QUERYlineg21059.2502"neef">out./a>;u31038./a>ubport./a>-&a classs="ef="net/bridge/bbport./a>-&a classs="eRCES" claBR_INPUT_SKd_group./aa class="lineleaveastica" claf">br./a>,u31033./a>   cipdp>( as an IGMPv2 repoipdp>( ass="sref">skb./a>);u31029L900">310na4L897">3897./a>      210na4250          3bridge/br_3ulticast.c#L941" id  L9413 clas38"line" na2107 ane./a>static int3." ctiHOST_LEAVE_MESSAGE2"net/bridge/br" ctiHOST_LEAVE_MESSAGElineg21059.2502"neef">out./a>;u2bport./a>-&a clas63.2106   ca_multvoidsref">port./a>-&a classlass="lineleave claBR_INPUT_SKd_group./aa class="lineleaveastica" claf">br./a>,u31033./a>   ,d2_igmrp>(.a href="+coref="toh>s="sref">sk>skb./a>);uport./a>,3);u3897./a>      210na4250          3bbridge/br3=nuacast.c#L905" id  L9053 clas3="line" na21081L900">31041./a>                 31041.3/aa cge/br3mulicast.c#L955" id  L9553 clas3="line" na21074L900">21084./a>static int3.a 3re21084.21384ticast.c#L848" id  L8483 clas3="linec int3.a hre310a hre21040.2494ef="+code=g21059.2502"neef">out./a>;u(.a hre__ L90  sd_group" code=strim_rcsum.a href="+code=ode=strim_rcsums="sref">ss="sref">igm a5Lx625ridhmu7r" cdp>( ass="sref">skb./a>);uout./a>;u#if3.a hrefidg *.a href="+code=skb" class="sref">skb./a>)u31029L900">3ROUP_MASK *.a href=kfree_refr3n-cast_add_group" cipdp>( as an IGMPv2 repoipdp>( ass="sref">skb./a>);uuskb./a>);u21061./a>        .a href3aa cge/br_3ulticast.c#L955" id  L9553 clas39"line" na21062L900">21062./a>u21078./a>                .21078.2703=br#e"sLD_SOURCES" clasS_ENIS/a>(.a href="+codesS_ENIS/a>s="sref">skb./a>);u23995./a>        .a href=>2699>>239    ca_multiccast_igmp3_repo6t" class="lineipv4_rcaev"+code=port" " class="lineipv4_rca" cladge" class="sref">net_bridge./a> *.a href="+code=br" class="sref">br./a>,u21065./a>}u2399>>2305               struref=LLLLLLLLLLLLLk_e_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u23996./a>u *.a href="+code=skb" class="sref">skb./a>)udata./a> + as an IGMPv2bridge/br_3ulticast.c#L943" id  L9433 clas39"line" na3101sL900">23999./a>u *.a href="+code=skp>( ass="sref">skb./a>);u310  L9a>utoh>) * 4;6="+code=sgmrp>(ss="sref">skb./a>)u31010./anecsum.a href="+code=spd_port" class="sicmp6_byp>,3.a href="+codicmp6_byp>"+code=sgmrp>(ss="sref">skb./a>)u23991./anecsum.a href="+code=spd_port" class="sde=nrt./a>,3la;pa hrefde=nrt."+code=sgmrp>(ss="sref">skb./a>)u(ss="sref">skb./a>)u31993./a>        int3.a h>310 2.3006             rt" claiccast_igmp3_report as an IGM4ort.offsea4or3icast.c#L955" id  L9554 clas4="line" na314  L900">31994./a>   .a h>310 3.3006      .a hr  rt" claiccast_igmp3_reportoffseast_mld2_re4net/bridge4br_icast.c#L955" id  L9554 clas405line" na314  L900">31994./a>   f="net/bri31038.3398ntinup>( ass="sref">skb./a>);uskb./a>);u31997./a>        if3(!.a >310 7.3098a href="nett/ll" class="sref">pskb_may_pull./a>(.a href="+code=skb" class="sref">skb./a>, 6roup" c>toh>) * 4;6="+cobridhmult_disabl
d" class="srih./a>(.a hr4et/bridhmu4t)ttcast.c#L942" id  L9424 clas4="line" na318 6L900">31998./a>                >310 8.3098ntinue;uEINVAL./a>;u309 6L900">31999./a>u31010./a> 6roup" c>toh>) * 4;6="+co102=br" class=ref">po6trt./a>,3la;pa href="v6net/bridhmulticast_add_group" cipdp>(.a href="+code=spdp>(s="sref">skb./a>);u31011./a>              4 .31011.314 1ticast.c#L896" id  L8964 clas4="line" na31011L900">31996./a>u/* We treat OOM as packet lossr"s4rsios4" cl4= 4tcast.c#L942" id  L9424 clas4="line1L900">31996./a>u3f="n're  L9erest>3199 MLD messages sabl.u/* We treat OOM as packet lossr"s4rrt.offsea4ulticast.c#L953" id  L9534 clas4="line1L900">31996./a>u3f= - Vt/brid is 6u/* We treat OOM as packet lossr"s4ret/bridge484ticast.c#L848" id  L8484 clas4="line1L900">31996./a>u3f= - MLD has always Rmult_ Alert hop-by-hop optridhmacomment">/* We treat OOM as packet lossr"s4r>310 5.304ltttcast.c#L942" id  L9424 clas41.e=sp1L900">31996./a>u3f= - But we do no0">up+cod jumbrograms.u/* We treat OOM as packet lossr"s4r7310 5.304ulticast.c#L953" id  L9534 clas4="line1L900">31996./a>u3f>u/* We treat OOM as packet lossr"s4 <31017.3145lticast.c#L848" id  L8484 clas41"line" na28071039./a>#if3.a href> 6roup" c>toh>) * 4;6="+co" cl< 5 ||oref">data./a> +la;pa href="net/bridhmult_di6 ||ent">/* We treat OOM as packet lossr"s4 ridge/br_4ulticast.c#L955" id  L9554 clas41"line" n>31029L90./a>#if3.a href> 6roup" c>toh>) * 4;6="+co" cl< 5 ||oref">dde=nrt./a>,3la;pa hrefde=nrt."+codisabl
d" class="sr/rotoco.HOPOPTS           .2107rotoco.HOPOPTS"+cod||ent">/* We treat OOM as packet lossr"s4 c31019.314ulticast.c#L900" id  L9004 clas42"line" na3104 L90./a>#if3.a href> 6roup" c>toh>) * 4;6="+co" cl< 5 ||oref">dpayloada>);u/* We treat OOM as packet lossr"s4 ridge/br_4ctttcast.c#L942" id  L9424 clas4="line" na31011L900">31021./a>u31022L900">31022./a>              4 c31022.3248lticast.c#L873" id  L8734 clas42"line" na31043L900">31043./a>{uicmp6h./ as an IGMPv2 report for3ncast_add_g6roup" c>toh>) * 4;6="+co" cl< 5 ||oref">dpayloada>);uskb./a>, 6roup" c>toh>) * 4;6="+cobu31030./a>uport./a>-&a href="net/bridge/br_mulss="sref">data./a> + as an IGMPv2 repsent">/* We treat OOM as packet lossr"s4 et/bridge4ulticast.c#L943" id  L9434 clas4="line" na31025L900">31998./a>                >310 8.3098ntinue;uEINVAL./a>;u( ass="sref">skb./a>);udde=nrt./a>,3la;pa hrefde=nrt."+cod02=br" class=ref">p6roup" c>toh>) * 4;6="+co" cl< 5 ||oref">dde=nrt./a>,3la;pa hrefde=nrt."+coass="sr="sref">EINVAL./a>;u31018./as="sref">igm a5Lx625ridhmu7r" class="line" na3104="v6nskip_e=nrt./a>,3la;pa href="v6nskip_e=nrt.lass="sref">pskb_may_pull./a>(.a href="+code=skb" class="sref">skb./a>, 6roup" c>toh>) * 4;6="+cobge/br_multisref">port.de=nrt./a>,3la;pa hrefde=nrt."+coge/br_multisref">port.frag_s="a href="+codesSfrag_s=""+cobu309 6L900">31999./a>u31030./a>uigm a5Lx625ridhmu7r" cle/br_0ort for3n"lt; ref">de=nrt./a>,3la;pa hrefde=nrt."+codisabl
d" class="sr/rotoco.ICM>(.a href="+codesS/rotoco.ICM>(. repsent">/* We treat OOM as packet lossr"s4bridge/br_4ulttcast.c#L955" id  L9554 clas4="line" na31011L900">31031./a>u31032L900">31032./a>              4 i31032.3348lticast.c#L873" id  L8734 clas4="line" na31021L900">31996./a>uv6 headpo3f>u/* We treat OOM as packet lossr"s4 report fo43tiacast.c#L905" id  L9054 clas4="line" na3103./a>#if3.a hrefidgskb./a>)u   bridge hr0brlticast_add_group" c hr_clon> *.a href="+cod hr_clon>s="sref">skb./a>, sizeof(*.a href="+code=icmp6hst_add_group" cGFP_ATOMIC;f="+code=igmpv4FP_ATOMIC_4ulticast.c#L955" id  L9554 clas43"line" na315 1L900">31015./a>    t/bri31035.339                stru"sre" class="sref">p hr032./a>  4bridge hr04rlttcast.c#L955" id  L9554 clas4="line" na31026L900">3        return .a31036.330                struct3.arucass="sr="sref">EINVAL./aNOMEM href="net4bridgNOMEM4ulticast.c#L953" id  L9534 clas4="line" n>317 1L900">31037./a>}u31018./af="net/bri31038.3398ntinue;u>                .31031.3303              strucass="sr="sref">EINVAL./a>;u31015./a>                 31015.31085br" class="sre" class="sref">pskb_may_pum.a href="+code=ode=strim_0">31030./a>uigm a5Lx625ridhmu7r" cl;ub" clas>310  L9a>u3static int3.a hre310a hre21040.2494ef="+code=out" class="sref">out./a>;u31011./a>              4104" class4"sricast.c#L852" id  L8524 clas44"line" na312 s="line" na3104>{uigm a5Lx625ridhmu7r" cl-ss="line" na3104 L900">318k_s="sref">igm a5Lx625r L900">318k_s="srer3n-cast_add_group" cipdp>( as an IGMPv2 repoipdout" class="sref">out./a>;uout./a>;ubr./5Enfclass="s  .a hrefs__ L90    31015.31085br" __ L90    _group" code=strim_rcsum.a href="+code=ode=strim_rcsums="sref">ss="sref">igm a5Lx625ridhmu7r" cdp>( ass="sref">skb./a>);u21075./a L90remu7ef">ph">mldheadport./a>-&ze"+cod L90remu7ef">ph">mldheadpor3n-cast_add_group" cipdp>( as an IGMPv2 repoipdp>( ass="sref">skb./a>);us L900">318k_headport./a>-&ze"+cod L900">318k_headpor3n-cast_add_group" cipdp>( as an IGMPv2 repoipdrt" class="sref">port./a>,u23997./a>   rcsums="sref">s L900">318k_headpoa>);u318k_headpoa>);r3n-cast_add_group" cipdp>( as an IGMPv2 repoipddp>( ass="sref">skb./a>);u31028./a>              4hr21048.244ulticast.c#L939" id  L9394 clas44"line" n.31029L900">31029./aicmp6_byp>,3.a href="+codicmp6_byp>"+colass="line" na3104=cmp6_rt./a>,3la;pa href=cmp6ort.r3n-cast_add_group" cipdp>( as an IGMPv2 repoipdT_SKB_CBs="sref">skb cmp6_byp>,3.a href="+codicmp6_byp>"+code=sgmrp>(ss="sref">skb./a>)u23990./a>        int3.a4);u31033./a>   ,cmp6_byp>,3.a href="+codicmp6_byp>"+coort for3n"/broref">data./a> + as an IGMPv4>);ustatic int3."CM>(._MGM_QUERYCAL_GROUP_MASK4"CM>(._MGM_QUERYlineg21059.2502"neef">out./a>;ustatic int3."CM>(._MGM_REPORTCAL_GROUP_MASK4"CM>(._MGM_REPORTlineg21059.2502"neef">out./a>;ustatic int3."CM>(._MGM_REDUCTIONCAL_GROUP_MASK4"CM>(._MGM_REDUCTIONlineg21059.2502"neef">out./a>;ustatic int3."CM>(._MLD2_REPORTCAL_GROUP_MASK4"CM>(._MLD2_REPORTlineg21059.2502"neef">out./a>;u210na4L897">3897./a>      210na4250          4     strub4eakscast.c#L848" id  L8484 clas4="line" na2101defa250g21059.2502"neef">out./a>;u31038./a>u31029L900">3static int3.a hre310a hre21040.2494ef="+code=out" class="sref">out./a>;u21061./a>        .a href4ulticas="c4ulticast.c#L955" id  L9554 clas46"line" na31011L900">31011./a>              4"21061.2604   }cast.c#L848" id  L8484 clas46"line" na31011L900">31996./a>uu/* We treat OOM as packet lossr"s4ri21062.2648lticast.c#L873" id  L8734 clas46"line" na31023L900">31033./a>      m.a href="+code=ode=striet/bridhmult6hst_addort./a>-&a href="net/bridge/br_mulss="sref">data./a> + as an IGMPv2 report for3n"/broref">data./a> + as an IGMPv4bridge/br_4ulticast.c#L941" id  L9414 clas46"line" na31034L900">31034./a>       f="net/bri31038.3398ntinue;uerr./a> = 0;uskb./a>, sizeo032./a>   bridge hr0brlt6hst_add_group" c as an IGMP4bridge/br_4ulticast.c#L942" id  L9424 clas46"line" na31025L900">31039./a>#if3.a href="+cod31039.3302"net/bridge/br_multicreef">err./a> = 0;u23996./a>static int3.a hre310a hre21040.2494ef="+code=out" class="sref">out./a>;u28L900">31018./af="net/bri31038.3398ntinue;u>                .31031.3303              strucass="sr="sref">EINVAL./a>;u21061./a>        .a href4ur21058.254ulticast.c#L939" id  L9394 clas46"line" n>309 6L900">31999./a>u31010./a> 6roup" c>toh>) * 4;6="+co102=br" class=ref">po6trt./a>,3la;pa href="v6net/bridhmulticast_add_groudp>( as an IGMPv2 repoipdp>( ass="sref">skb./a>);u31011./a>              4.a21071.274 1ticast.c#L896" id  L8964 clas4="line" na2107switch900">31033./a>      m.a href="+code=ode=striet/bridhmult6hst_add_p_addm402"net/bridge/br_p_addm40 report for3n"/broref">data./a> + as an IGMPv4/bridge/br4mulicast.c#L955" id  L9554 clas47"line" na2105 ane./a>static int3.CHECKSUM_COMPLETE2"net/bridge/brCHECKSUM_COMPLETElineg21059.2502"neef">out./a>;u39L900">31015./a>    _add_="v6nmagic2"net/bridge/br_add_="v6nmagicbridh/br_multisref">port.>p6roup" c>toh>) * 4;6="+co" cl< 5 ||oref">dsrt./a>-&ip;pa href=snet/bridge/br_multisref">port.>p6roup" c>toh>) * 4;6="+co" cl< 5 ||oref">dort./a>-&ip;pa href="net/bridge0">31033./a>   cipdp>( as an IGMPv2 repoipet/bridhmult6hst_addort./a>-&a href="net/bridrt" class="sref">port./a>,u3333333333333333333333333bl
d" class="sr/rotoco.ICM>(.a href="+codesS/rotoco.ICM>(. repge0">31033./a>   cipdp>( as an IGMPv2 repoipet/bridhmult6hst_add;u22222222210na4L897">3897./a>      210na4250          4i21076.2104t" }cast.c#L848" id  L8484 clas47"line" na29077L900">28L900">31996./a>uu/* We treat OOM as packet lossr"s4baa cge/br45lticast.c#L848" id  L8484 clas47"line" na3101 ane./a>static int3.CHECKSUM_NONE2"net/bridge/brCHECKSUM_NONElineg21059.2502"neef">out./a>;u31029L900">30">31033./a>   cipdp>( as an IGMPv2 repoipet/bridhmult6hst_add;u31015./a>    _add_unfol02"net/bridge/br_add_unfol0bridhmulticast_add_g_add_="v6nmagic2"net/bridge/br_add_="v6nmagicbridh/br_multisref">port.>p6roup" c>toh>) * 4;6="+co" cl< 5 ||oref">dsrt./a>-&ip;pa href=snet/bridg21059.2502"neef">out./a>;u31040./a>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/br_multisref">port.>p6roup" c>toh>) * 4;6="+co" cl< 5 ||oref">dort./a>-&ip;pa href="net/bridg21059.2502"neef">out./a>;u222222222222222222222222222222222222222220">31033./a>   cipdp>( as an IGMPv2 repoipet/bridhmult6hst_addort./a>-&a href="net/bridrt" class="sref">port./a>,u31033./a>   /rotoco.ICM>(.a href="+codesS/rotoco.ICM>(. repge0ddp>( ass="sref">skb./a>);u31039./a>#if3.a href__ L90 heckadd_/a>plea>,3.a href="+cod__ L90 heckadd_/a>plea>r3n-cast_add_group" cipdp>( as an IGMPv2 repoipdd>( ass="sref">skb./a>);u333333333static int3.a hre310a hre21040.2494ef="+code=out" class="sref">out./a>;u21061./a>        .a href4ba cge/br_4ulttcast.c#L942" id  L9424 clas48"line>( ass="sref">skb./a>);udf="net/bri31038.3398ntinue;u>u31028./a>              4de=grec" c4assicast.c#L955" id  L9554 clas48"line" n.31029L900">31029./a  31025.329                struuuuuuuuuLD_SOURCES" claBR_INPUT_SKB_CBskb cla2"net/bridge/br_gc21024.21ss="srerouters_onl cl.a href="+coderoute4TH_P_IPV6_4ulticast.c#L955" id  L9554 clas49"line" na2908 L900">23990./a>        int3.a4Tridge/br_480ticast.c#L936" id  L9364 clas49"line" na311  witch900">31033./a>   ,cmp6_byp>,3.a href="+codicmp6_byp>"+coort for3n"/broref">data./a> + as an IGMPv4aa cge/br_4ulticast.c#L955" id  L9554 clas49"line" na2105 ane./a>static int3."CM>(._MGM_REPORTCAL_GROUP_MASK4"CM>(._MGM_REPORTlineg21059.2502"neef">out./a>;udata./a> + as an IGMPv4aETH_P_IPc4penfcast.c#L852" id  L8524 clas49"line" na31034L900">3>310  L9a>uskb./a>ml02"net/bridge/brml0brids="srerouters_onl cl.a href="+coderoute4Te21084.21484ticast.c#L848" id  L8484 clas49"line" na21065L900">29L900">31015./a>                 31015.31085br" class="sre" class="sref">pskb_may_pum.a href="+code=ode=strim_b" class="sref">skb./a>ml02"net/bridge/brml0brid))ort for3n"/broref">data./a> + as an IGMPv4aa cge/br_4ulticast.c#L941" id  L9414 clas4="line" na29076L900">23996./a>8L900">31018./af="net/bri31038.3398ntinue;u>                .31031.3303              strucass="sr="sref">EINVAL./a>;u23997./a>static int3.a hre310a hre21040.2494ef="+code=out" class="sref">out./a>;u3" na21061L900">21061./a>        .a href4Te=grec" c4codacast.c#L905" id  L9054 clas49"line" n>31029L900">30">31033./a>   ml02"net/bridge/brml0bride;us>310  L9a>us L90f">ph">mldheadport./a>-&ze"+cod L90f">ph">mldheadpor3n-cast_add_group" cipdp>( as an IGMPv2 repoipdp>( ass="sref">skb./a>);u39L900">31029./a  31025.329                struuuuuuuuuLD_SOURCES" claBR_INPUT_SKB_CBskb./a>);u2f="net/bri31038.3398ntinue;ubport6ast_igmp3_radd06   ca_multvoidsref">port6ast_igmp3_radd06   cRCES" claBR_INPUT_SKd_group./aa class="lineleaveastica" claf">br./a>,uport.ml02"net/bridge/brml0bridT_SKB_CBs="sref">skb.ld_mcaCAL_GROUP_MASK4mld_mcapoipdp>( ass="sref">skb./a>);u3897./a>      210na4250          5b3idge/br_5u c}cast.c#L848" id  L8485 clas50"line" na31013L90" na21061L900">21061./a>        .a href5ort.offsea5or3icast.c#L955" id  L9555 clas504line" na2107 ane./a>static int3."CM>(._MLD2_REPORTCAL_GROUP_MASK4"CM>(._MLD2_REPORTlineg21059.2502"neef">out./a>;u2f="net/bri31038.3398ntinue;ubport6ast_igmp3_rmld2_re">br./a>,ubrRCES" claBR_INPUT_SKd_group./aa class="lineleaveastica" claf">br./a>,u( as an IGMPv2 repoipdp>( ass="sref">skb./a>);u210na4L897">3897./a>      210na4250          5=7310 5.3057lticast.c#L942" id  L9425 clas50"line" na2101 ane./a>static int3."CM>(._MGM_QUERYCAL_GROUP_MASK4"CM>(._MGM_QUERYlineg21059.2502"neef">out./a>;u3f="net/bri31038.3398ntinue;ubport6ast_igmp3_rss="ef="net/bridge/bbport6ast_igmp3_rss="eRCES" claBR_INPUT_SKd_group./aa class="lineleaveastica" claf">br./a>,u( as an IGMPv2 repoipdp>( ass="sref">skb./a>);u31029L900">310na4L897">3897./a>      210na4250          5r>310 9.305ulticast.c#L900" id  L9005 clas51"line" na2107 ane./a>static int3."CM>(._MGM_REDUCTIONCAL_GROUP_MASK4"CM>(._MGM_REDUCTIONlineg21059.2502"neef">out./a>;udata./a> + as an IGMPv5 .31011.315 1ticast.c#L896" id  L8965 clas51"line" na2107" na3104>310  L9a>uskb./a>ml02"net/bridge/brml0brids="srerouters_onl cl.a href="+coderoute5rsios4" cl5= 4tcast.c#L942" id  L9425 clas51"line" na31013L900">310390">31015./a>                 31015.31085br" class="sre" class="sref">pskb_may_pum.a href="+code=ode=strim_b" class="sref">skb./a>ml02"net/bridge/brml0brid))ort for3n"/broref">data./a> + as an IGMPv5rrt.offsea5ulticast.c#L953" id  L9535 clas51"line" na31034L900">3333333338L900">31018./af="net/bri31038.3398ntinue;u>                .31031.3303              strucass="sr="sref">EINVAL./a>;u333333333static int3.a hre310a hre21040.2494ef="+code=out" class="sref">out./a>;u2" na21061L900">21061./a>        .a href5r7310 5.305ulticast.c#L953" id  L9535 clas51"line" na29077L900">28L900">31018./aml02"net/bridge/brml0bride;us>310  L9a>us L90f">ph">mldheadport./a>-&ze"+cod L90f">ph">mldheadpor3n-cast_add_group" cipdp>( as an IGMPv2 repoipdp>( ass="sref">skb./a>);u3bport6ast_igmp3_r63.2106   ca_multvoidsref">port6ast_igmp3_r63.2106   cRCES" claBR_INPUT_SKd_group./aa class="lineleaveastica" claf">br./a>,uport.ml02"net/bridge/brml0bridT_SKB_CBs="sref">skb.ld_mcaCAL_GROUP_MASK4mld_mcapoipdp>( ass="sref">skb./a>);u31029L90" na21061L900">21061./a>        .a href5 c31019.315ulticast.c#L900" id  L9005 clas52"line" na3104" na21061L900">21061./a>        .a href5 ridge/br_5ctttcast.c#L942" id  L9425 clas52"line" na31011L900">31011./a>              5bridge/br_5ulticast.c#L953" id  L9535 clas5="linec int3.a hre310a hre21040.2494ef="+code=g21059.2502"neef">out./a>;u31043./akfree_ref"./a> *.a href=kfree_refr3n-cast_add_group" cipdp>( as an IGMPv2 repoipdp>( ass="sref">skb./a>);uuskb./a>);u21061./a>        .a href5 >310 5.305ca1icast.c#L896" id  L8965 clas52"line#endif na21061L900">21061./a>        .a href5 7310 5.305sr0icast.c#L896" id  L8965 clas52"line" n>317 1L900">31037./a>}u23995./a>        .a href9>>239    ca_multiccast_igmp3_r" class="lineipv4_rcaev"+code=port" " class="lineipv4_rca" cladge" class="sref">net_bridge./a> *.a href="+codef"net/br>2399>>2305               struref=LLLLLLLLLLLLLk_e_port" class="sref">net_bridge_port./a> *.a href="+code=port" class="sref">port./a>,u31029L900">333333"net/br>2399>>2305    ef="net/bridge/ut" LLLLLLLLLLLLLk_e_port" class="sref"./a> *.a href="+code=skb" class="sref">skb./a>)udata./a> + as an IGMPv5bridge/br_5ulttcast.c#L955" id  L9555 clas53"line" na29081L900">23991./a  31025.329                struuuuuuuuuLD_SOURCES" claBR_INPUT_SKB_CBskb cla2"net/bridge/br_gc21024.21>uskb./a>);uuout./a>;u#if3.a hrefidge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rdisabl402"net/bridge/br.t_igmp3_rdisabl40ode=skb" class="sref">skb./a>)u31998./a>u( ass="sref">skb./a>);u31033./a>      Bdprtatco 31015.31085br" crtatco "+coort for3n"/broref">data./a> + as an IGMPv5br31037.3355lticast.c#L848" id  L8485 clas53"line" na3101 ane./a>static int3.htoncmp6h./ as an IGhtoncRCES" claBR_INPUT_SKETH_P_IP1.3303          TH_P_IP"+coog21059.2502"neef">out./a>;u31029L900">3       1038./a>u>239    ca_multiccast_igmp3_repo4r" class= claBR_INPUT_SKd_group./aa class="lineleaveastica" claf">br./a>,u21078./a>                .21078.2703=br#e"sLD_SOURCES" clasS_ENIS/a>(.a href="+codesS_ENIS/a>s="sref">skb./a>);ustatic int3.htoncmp6h./ as an IGhtoncRCES" claBR_INPUT_SKETH_P_IP(.a href="+codesSETH_P_IP(."+coog21059.2502"neef">out./a>;uu>239    ca_multiccast_igmp3_repo6t" class= claBR_INPUT_SKd_group./aa class="lineleaveastica" claf">br./a>,u21061./a>        .a href5rreport fo5ulticast.c#L953" id  L9535 clas50">br./5Enfcla" na21061L900">21061./a>        .a href5rP_ATOMIC_5hlticast.c#L937" id  L9375 clas54"line na21061L900">21061./a>        .a href5r>310 5.305))iacast.c#L905" id  L9055 clas5="line" na21041998./a>u21061./a>        .a href5rr31037.335nueicast.c#L937" id  L9375 clas54"line" na31018L900">31028./a>              5hr21048.245ulticast.c#L939" id  L9395 clas54"line" na230void 1038./a>u31long 1038./a>uskb./a>);udata./a> + as an IGMPv5);unet_bridge./a> *.a href="+code;usvoid s)rcsums="sref">sdataCAL_GROUP_MASK4datasrefu31032L900">31032./a>              5ul)r"/br_m5t)iacast.c#L905" id  L9055 clas55"line" na31043L900">31043./aspin_lockBport.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockB#if3.a hrefidge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_r" nrtuprss="ies_s#if3.a hrefidge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_r" nrtuprss="y_coua hskb./a>);u310 5.3057lticast.c#L936" id  L9365 clas5="line" na21056L900">2./a>#if3.a hrefidge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_r" nrtuprss="ies_s317 1L900">31037./a>}u31018./accast_igmp3_rs *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_r" nrtuprss="ies_s309 6L900">31999./a>u31010./arpin_unlockBport.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockB21061./a>        .a href5"21061.2605   }cast.c#L848" id  L8485 clas56"line" n>31032L900">31032./a>              5ri21062.2658lticast.c#L873" id  L8735 clas56"linevoid 1038./a>u,unet_bridge./a> *.a href="+cod">skb./a>);udata./a> + as an IGMPv5bridge/br_5ulticast.c#L942" id  L9425 clas56"line" na21065L900">21075./aidge./a> *.a href="+codT_SKB_CBs="sref">skbhash_e/a>as itef="net/bridge/bhash_e/a>as ite+code;u4u *.a href="+codT_SKB_CBs="sref">skbhash_maxf="net/bridge/bhash_max+code;u512u317 1L900">31037./a>}u31018./accge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_r_mult_B31029./accge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rss="ie_Bu31010./aidge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlp3_rmember_coua h23991./aidge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_r" nrtuprss="y_coua h31032L900">31032./a>              5/bridge/br5mulicast.c#L955" id  L9555 clas57"line" na31043L900">31043./aidge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlp3_rmember_ L9erva 31015.31085br" .t_igmp3_rlp3_rmember_ L9erva srefcla_CBs="sref">skbHZ31015.31085br" HZsrefu31029./accge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rss="y0remponse_ L9erva 31015.31085br" .t_igmp3_rss="y0remponse_ L9erva +code;us0 *a_CBs="sref">skbHZ31015.31085br" HZsrefu21075./aidge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_r" nrtuprss="y_ L9erva 31015.31085br" .t_igmp3_r" nrtuprss="y_ L9erva +code;us25 *a_CBs="sref">skbHZ31015.31085br" HZsref /u4u *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rss="y0 L9erva 31015.31085br" .t_igmp3_rss="y0 L9erva +code;us25 *a_CBs="sref">skbHZ31015.31085br" HZsrefudccge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rss="ie_0 L9erva 31015.31085br" .t_igmp3_rss="ier_ L9erva srefcla255 *a_CBs="sref">skbHZ31015.31085br" HZsrefu31018./accge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rmembership0 L9erva 31015.31085br" .t_igmp3_rmembership0 L9erva srefcla260 *a_CBs="sref">skbHZ31015.31085br" HZsrefu309 6L900">31999./a>u31010./arpin_lockrinir./a>,uport.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockB23991./asetuprtimport./a>-&ze"+cod etuprtimpolass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_r_mult_rtimport./a>-&ze"+cod.t_igmp3_r_mult_rtimpolinelu31043./asetuprtimport./a>-&ze"+cod etuprtimpolass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rss="ier_timport./a>-&ze"+cod.t_igmp3_rss="ier_timpolinel333331038./a>u31long)rcsums="sref">sidge./a> *.a href="+cod"u21075./a etuprtimport./a>-&ze"+cod etuprtimpolass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rss="y_timport./a>-&ze"+cod.t_igmp3_rss="y_timpolinel 1038./a>u23996= L900">31long)rcsums="sref">sidge./a> *.a href="+cod"u21061./a>        .a href5baa cge/br55lticast.c#L848" id  L8485 clas58"line" na31018L900">31028./a>              5de=grec" c5assicast.c#L955" id  L9555 clas58"linevoid 1038./a>u-&a href="nccast_igmp3_roprtlass="lineipv4_rcaev"+code=port" " class="lineipv4_rca" cladge" class="sref">net_bridge./a> *.a href="+cod">skb./a>);udata./a> + as an IGMPv5Tridge/br_580ticast.c#L936" id  L9365 clas59"line" na29081L900">23991./aidge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_r" nrtuprss="ies_su31032L900">31032./a>              5>2399>>23052 c}cast.c#L848" id  L8485 clas59"line" na31023L900">31033./a>   idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rdisabl402"net/bridge/br.t_igmp3_rdisabl40ode=skb" class="sref">skb./a>)u31998./u21061./a>        .a href5aa cge/br_5ulticast.c#L941" id  L9415 clas59"line" na2104s="line" na3104mod_timport./a>-&ze"+cod.od_timpolass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rss="y_timport./a>-&ze"+cod.t_igmp3_rss="y_timpolinel 1038./a>u-&ze"+codjiffies+cod"u21061./a>        .a href5bridge/br_5ulticast.c#L943" id  L9435 clas59"line" na31018L900">31028./a>              5Te=grec" c5codacast.c#L905" id  L9055 clas59"linevoid 1038./a>upost_igmp3_rstoclass="lineipv4_rcaev"+code=port" " class="lineipv4_rca" cladge" class="sref">net_bridge./a> *.a href="+cod">skb./a>);udata./a> + as an IGMPv6b1idge/br_6u0ticast.c#L936" id  L9366 clas60"line" na311  lineipv4_rcaev"+code=port" " cl_mdb_htabl4ass="lineipv4_rca" cladge_mdb_htabl4" class="sref">net_brmdbrt./a>-&ze"+cod.dbsrefunet_brmca_multvoidsref"c21024unet_brca_multvoidsref"plinel ss="sref">net_brt./a>-&a href="nn1024u31029./auulticast.c#ref="nu3"line"9L900">31029./avport./a>-&ze"+codventinup>( ass="sref">skb./a>);u23995./a>  irt./a>-&ze"+coditinup>( ass="sref">skb./a>);u( ass="sref">skb./a>);uddel_timpo_sync2"net/bridge/brdel_timpo_synclass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_r_mult_rtimport./a>-&ze"+cod.t_igmp3_r_mult_rtimpoline"u31018./adel_timpo_sync2"net/bridge/brdel_timpo_synclass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rss="ier_timport./a>-&ze"+cod.t_igmp3_rss="ier_timpoline"u31029./adel_timpo_sync2"net/bridge/brdel_timpo_synclass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rss="y_timport./a>-&ze"+cod.t_igmp3_rss="y_timpoline"u23990./a>        int3.a6bridge/br_6ulticast.c#L955" id  L9556 clas61"line" na29081L900">23991./aspin_lockrbroup" c>toh>) * spin_lockrbrlass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockBnet_brmdbrt./a>-&ze"+cod.dbsrefcla_CBs="sref">skbmlockrde="se="ncef="net/bridge/bmlockrde="se="ncelass=ultisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.dbrt./a>-&ze"+cod.dbsrefleaveastica" clafidge./a> *.a href="+codUu31015./a>    .dbrt./a>-&ze"+cod.dbsref">skb./a>);u3static int3.a hre310a hre21040.2494ef="+code=out" class="sref">out./a>;u21061./a>        .a href6r>310 5.306ltttcast.c#L942" id  L9426 clas61"line" na2104s="line" na3104idge./a> *.a href="+codT_SKB_CBs="sref">skb.dbrt./a>-&ze"+cod.dbsrefcla_CBs="sref">skbNUL31.3303         NUL3lineout" class="sref">out./a>;u317 1L900">31037./a>}u31018./avport./a>-&ze"+codventinucla_CBs="sref">skbmdbrt./a>-&ze"+cod.dbsrefT_SKB_CBs="sref">skbvport./a>-&ze"+codventinup>( ass="sref">skb./a>);u3102for900">31033./a>   ,rt./a>-&ze"+coditinu"la>u900">23995./a>  irt./a>-&ze"+coditinu"e/bra_CBs="sref">skbmdbrt./a>-&ze"+cod.dbsrefT_SKB_CBs="sref">skbmaxf="net/bridge/bmax+codu900">23995./a>  irt./a>-&ze"+coditinu++ort for3n"/broref">data./a> + as an IGMPv6 c31019.316ulticast.c#L900" id  L9006 clas62"line" na3104 L900">39L900">31029./ahli3_rfor_each_port.mca_multvoidsref"c21024leaveastica" claf"a_multvoidsref"plinel s="sref">net_brt./a>-&a href="nn1024ge/br_multisref">port.mdbrt./a>-&ze"+cod.dbsrefT_SKB_CBs="sref">skbmhashrt./a>-&ze"+cod.hashsref[00">23995./a>  irt./a>-&ze"+coditinu]l2222222222222222222222222229L900">31029./ahli3_f="net/bridge/bhli3_sref[00">23995./a>  vport./a>-&ze"+codventinu]ort for3n"/broref">data./a> + as an IGMPv6 .31011.316ulticast.c#L953" id  L9536 clas62"line" na2107" na3104222222229L900">31029./adel_timpo2"net/bridge/brdel_timpolass=/br_multisref">port.mca_multvoidsref"c21024T_SKB_CBs="sref">skbtimpo2"net/bridge/brtimpoline"u3222222229L900">31029./acall_rcurbroup" c>toh>) * call_rcurbrlass=/br_multisref">port.mca_multvoidsref"c21024T_SKB_CBs="sref">skbrcua_multvoidsref"rculinel 1038./a>upost_igmp3_rfree_6   cline"u3" na21061L900">21061./a>        .a href6 et/bridge6ulticast.c#L943" id  L9436 clas62"line" na3102" na21061L900">21061./a>        .a href6 >310 5.306ca1icast.c#L896" id  L8966 clas62"line>( ass="sref">skb./a>);u31033./a>   mdbrt./a>-&ze"+cod.dbsrefT_SKB_CBs="sref">skbol02"net/bridge/brol0bridort for3n"/broref">data./a> + as an IGMPv6 <31017.316   }cast.c#L848" id  L8486 clas62"line" na318 6L900">3rpin_unlockrbroup" c>toh>) * spin_unlockrbrlass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockB31029L900">3_CBs="sref">skbrcu_bar"ier_broup" c>toh>) * rcu_bar"ier_brlass=Uu39L900">31029./aspin_lockrbroup" c>toh>) * spin_lockrbrlass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockB2WARN_ONCAL_GROUP_MASK4WARN_ONlass=ultisref">port.mdbrt./a>-&ze"+cod.dbsrefT_SKB_CBs="sref">skbol02"net/bridge/brol0bridou21061./a>        .a href6bc31022.3268lticast.c#L873" id  L8736 clas63"lineut" class="sref">out./a>;u31029./amdbrt./a>-&ze"+cod.dbsrefT_SKB_CBs="sref">skbol02"net/bridge/brol0bridcla_CBs="sref">skbmdbrt./a>-&ze"+cod.dbsrefu21075./acall_rcurbroup" c>toh>) * call_rcurbrlass=/br_multisref">port.mdbrt./a>-&ze"+cod.dbsrefT_SKB_CBs="sref">skbrcua_multvoidsref"rculinel 1038./a>uposdbrfreebridou( ass="sref">skb./a>);uout./a>;u31018./arpin_unlockrbroup" c>toh>) * spin_unlockrbrlass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockB21061./a>        .a href6net/bridge6br_tcast.c#L955" id  L9556 clas64"line" na2908 L900">23990./a>        int3.a6roudge_ ho6ulticast.c#L953" id  L9536 clas641line85L900">23995./a>        .a hrefse_r_mult_Bnet_bridge./a> *.a href="+cod,  L900">31long 1038./a>uskb./a>);udata./a> + as an IGMPv6nc31022.3268lticast.c#L873" id  L8736 clas64"line" na310235L900">23995./a>  f="net/bri31038.3398ntinue;u>                NOENTCAL_GROUP_MASK4 NOENTsrefubr.21075./a pin_lockrbroup" c>toh>) * spin_lockrbrlass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockB310 5.306))iacast.c#L905" id  L9056 clas6="line" na21043L900">31015./a>    et/if_runningCAL_GROUP_MASK4et/if_runninglass=ultisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skbde>239    ca_multide>_INPU">skb./a>);u2static int3.a hre310unlockB31028./a>              6hr21048.246ulticast.c#L939" id  L9396 clas64"line" n>3102switch900">31033./a>   va 31015.31085br" va sref"rt for3n"/broref">data./a> + as an IGMPv6" c)las="s6e="scast.c#L848" id  L8486 clas65"line" na2107 ane.0g21059.2502"neef">out./a>;uout./a>;u31029./adel_timpo2"net/bridge/brdel_timpolass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_r_mult_rtimport./a>-&ze"+cod.t_igmp3_r_mult_rtimpoline"u3/* fall th_mugh */31028./a>              6ureport fo6ltiscast.c#L848" id  L8486 clas65"line" na3103 ane.1g21059.2502"neef">out./a>;u31029./accge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_r_mult_B31033./a>   va 31015.31085br" va srefu2./a>#if3.a hreff="net/bri31038.3398ntinue;u>u210na4L897">3897./a>      210na4250          6ur31037.336   }cast.c#L848" id  L8486 clas65"line" na31018L900">31028./a>              6ur21048.246ulticast.c#L939" id  L9396 clas65"line" n>3102defa   g21059.2502"neef">out./a>;u39L900">31029./af="net/bri31038.3398ntinue;u>                .31031.3303              strucass="sr="sref">EINVAL./a>;u210na4L897">3897./a>      210na4250          6"21061.2606   }cast.c#L848" id  L8486 clas66"line" na312 " na21061L900">21061./a>        .a href6ri21062.2668lticast.c#L873" id  L8736 clas66"lineut" class="sref">out./a>;uout./a>;u21075./arpin_unlockrbroup" c>toh>) * spin_unlockrbrlass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockB310 5.306multcast.c#L942" id  L9426 clas66"line>( ass="sref">skb./a>);uuskb./a>);u21061./a>        .a href6rr21048.246ulticast.c#L939" id  L9396 clas66"line" n>309 6L900">31999./a>u23995./a>        .a hrefse_r">mld_mult_Bmld_mult_lass="lineipv4_rcaev"+code=port" " cl struref=LLLLLLLLLLLLLk_e_port" class="sref">net_bridge_pa_multvoidsref"plinel  L900">31long 1038./a>uskb./a>);udata./a> + as an IGMPv6b21061.2606 1ticast.c#L896" id  L8966 clas67"line" na2107 lineipv4_rcaev"+code=port" " class="lineipv4_rca" cladge" class="sref">net_bridge./a> *.a href="+code;u0">31033./a>   pa_multvoidsref"plineT_SKB_CBs="sref">skbidge./a> *.a href="+codp>( ass="sref">skb./a>);u23995./a>  f="net/bri31038.3398ntinue;u>                NOENTCAL_GROUP_MASK4 NOENTsrefubr.21075./aspin_lockBport.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockB31015./a>    et/if_runningCAL_GROUP_MASK4et/if_runninglass=ultisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skbde>239    ca_multide>_INPU ||u0">31033./a>   pa_multvoidsref"plineT_SKB_CBs="sref">skb" nalass="lineipv4_r" naltinue;;u0">31033./a>   BR_STATE_DIS                .210BR_STATE_DIS     sref">skb./a>);u2static int3.a hre310unlockB31028./a>              6rr21058.256rlttcast.c#L936" id  L9366 clas67"line" n>3102switch900">31033./a>   va 31015.31085br" va sref"rt for3n"/broref">data./a> + as an IGMPv6bridge/br_6ulticast.c#L941" id  L9416 clas68"line" na2107 ane.0g21059.2502"neef">out./a>;uout./a>;uout./a>;u3<">31033./a>   pa_multvoidsref"plineT_SKB_CBs="sref">skb.t_igmp3_r_mult_B31033./a>   va 31015.31085br" va srefu3./a>#if3.a hreff="net/bri31038.3398ntinue;u>u21061./a>        .a href6ba cge/br_6ulttcast.c#L942" id  L9426 clas68"line" na29076L900">23L900">31033./a>   va 31015.31085br" va sref"e/bra2e/br_m/br_m 0">31015./a>    hli3_runhash402"net/bridge/brhli3_runhash40lass=/br_multisref">port.pa_multvoidsref"plineT_SKB_CBs="sref">skbrli3_f="net/bridge/brli3_srefU">skb./a>);u24L900">3./a>#if3.a hrefhli3_rdel_inir_rcua_multvoidsref"hli3_rdel_inir_rculass=/br_multisref">port.pa_multvoidsref"plineT_SKB_CBs="sref">skbrli3_f="net/bridge/brli3_srefUu31028./a>              6de=grec" c6assicast.c#L955" id  L9556 clas68"line" n>31029L900">33L900">31033./a>   va 31015.31085br" va sref";;u1">skb./a>);u33333333310na4L897">3897./a>      210na4250          6Tridge/br_680ticast.c#L936" id  L9366 clas69"line" na31011L900">31011./a>              6aa cge/br_6ulticast.c#L955" id  L9556 clas69"line" na2107" na31049L900">31029./adel_timpo2"net/bridge/brdel_timpolass=/br_multisref">port.pa_multvoidsref"plineT_SKB_CBs="sref">skb.t_igmp3_r_mult_rtimport./a>-&ze"+cod.t_igmp3_r_mult_rtimpoline"uout./a>;u33L900">31033./a>   va 31015.31085br" va sref";;u0">skb./a>);u3897./a>      210na4250          6Ta cge/br_6ulticast.c#L941" id  L9416 clas69"line>( ass="sref">skb./a>);u200">23995./a>        .a hrefaddd_mult_Bport.idge./a> *.a href="+codleaveastica" claf"a_multvoidsref"pline"u310na4L897">3897./a>      210na4250          6Te=grec" c6codacast.c#L905" id  L9056 clas69"line" n>309 6L900">31999./a>uout./a>;u2f="net/bri31038.3398ntinue;u>                .31031.3303              strucass="sr="sref">EINVAL./a>;u3897./a>      210na4250          7b3idge/br_7u c}cast.c#L848" id  L8487 clas70"line" na3101" na21061L900">21061./a>        .a href7b4idge/br_7uenfcast.c#L852" id  L8527 clas70">br.out./a>;uport.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockB317 1L900">31037./a>}uuskb./a>);u21061./a>        .a href7r>310 9.307ulticast.c#L900" id  L9007 clas71"line" na2908 L900">23990./a>        int3.a7bridge/br_7ulticast.c#L955" id  L9557 clas71"line" na230void 1038./a>unet_bridge./a> *.a href="+cod">skb./a>);udata./a> + as an IGMPv7 3idge/br_7= 4tcast.c#L942" id  L9427 clas71"line" na3101 lineipv4_rcaev"+code=port" " cl struref=LLLLLLLLLLLLLk_e_port" class="sref">net_bridge_p>br./a>,uskb./a>);ubr.21075./aidast_igmp3_roprt./a>-&a href="nccast_igmp3_roprtlass=s="sref">net_bridge./a> *.a href="+cod"p>( ass="sref">skb./a>);u( ass="sref">skb./a>);udli3_rfor_each_ *.a hrefli3_rfor_each_net_br">br./a>,uport.idge./a> *.a href="+codT_SKB_CBs="sref">skb">mldli3_f="net/bridge/b">mldli3_+codleaveastica" clafli3_f="net/bridge/bli3_srefUrt for3n"/broref">data./a> + as an IGMPv7 <31017.3175lticast.c#L848" id  L8487 clas71"line" na318 6L900">33L900">31033./a>   ">br./a>,uskb" nalass="lineipv4_r" naltinue;;u0">31033./a>   BR_STATE_DIS                .210BR_STATE_DIS     sref || for3n"/broref">data./a> + as an IGMPv7 9/bridhmu7ulticast.c#L955" id  L9557 clas71"line" n>31029L900">3317 lt; 5 ||oref">d">br./a>,uskb" nalass="lineipv4_r" naltinue;;u0">31033./a>   BR_STATE_BLOCKING           .210BR_STATE_BLOCKING+cod">skb./a>);u333333333continuep>( ass="sref">skb./a>);u31011./a>              7 .31011.317ulticast.c#L953" id  L9537 clas72"line" na2107" na31040">31033./a>   __ccast_igmp3_renabl4 struref=LLLLLLLLLLL__ccast_igmp3_renabl4 strulass=s="sref">net_br">br./a>,u( ass="sref">skb./a>);u21061./a>        .a href7 rt.offsea7ctiacast.c#L905" id  L9057 clas72"line" na21061L900">21061./a>        .a href7 et/bridge7ulticast.c#L943" id  L9437 clas72"line na21061L900">21061./a>        .a href7 >310 5.307ca1icast.c#L896" id  L8967 clas72"line85L900">23995./a>        .a hreftoggl4ass="lineipv4_r      .a hreftoggl4lass="lineipv4_rcaev"+code=port" " class="lineipv4_rca" cladge" class="sref">net_bridge./a> *.a href="+codl  L900">31long 1038./a>uskb./a>);udata./a> + as an IGMPv7 <31017.317   }cast.c#L848" id  L8487 clas72"line" na318 35L900">23995./a>  f="net/bri31038.3398ntinue;u>u3102 lineipv4_rcaev"+code=port" " cl_mdb_htabl4ass="lineipv4_rca" cladge_mdb_htabl4" class="sref">net_brmdbrt./a>-&ze"+cod.dbsrefu23990./a>        int3.a7bridge/br_7ulttcast.c#L955" id  L9557 clas73"line" na29081L900">23991./aspin_lockrbroup" c>toh>) * spin_lockrbrlass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockB31033./a>   idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rdisabl402"net/bridge/br.t_igmp3_rdisabl40ode=e;;u0">31015./a>    va 31015.31085br" va sref">skb./a>);u3static int3.a hre310unlockBbr.21075./aidge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rdisabl402"net/bridge/br.t_igmp3_rdisabl40ode=e;u0">31015./a>    va 31015.31085br" va srefu21075./aidge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rdisabl402"net/bridge/br.t_igmp3_rdisabl40ode=">skb./a>);u2static int3.a hre310unlockB31028./a>              72 report f7r3ticast.c#L953" id  L9537 clas739line" na21043L900">31015./a>    et/if_runningCAL_GROUP_MASK4et/if_runninglass=ultisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skbde>239    ca_multide>_INPU">skb./a>);u3static int3.a hre310unlockB31011./a>              7104" class7"sricast.c#L852" id  L8527 clas74"line" na2107s="sref">net_brmdbrt./a>-&ze"+cod.dbsrefcla_CBs="sref">skbmlockrde="se="ncef="net/bridge/bmlockrde="se="ncelass=ultisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.dbrt./a>-&ze"+cod.dbsrefleaveastica" clafidge./a> *.a href="+codUu31011./a>              71c31022.3278lticast.c#L873" id  L8737 clas74"line" na31023L900">31033./a>   .dbrt./a>-&ze"+cod.dbsref"rt for3n"/broref">data./a> + as an IGMPv7rreport fo7ulticast.c#L953" id  L9537 clas74"line" na31034L900">33L900">31033./a>   mdbrt./a>-&ze"+cod.dbsrefT_SKB_CBs="sref">skbol02"net/bridge/brol0bridort for3n"/broref">data./a> + as an IGMPv7ret/bridge7 id  L8966 clas651line" n7 clas74ddd_mult_B3101031.3303       rollbalocklassuout./a>;uskb87111111111111111111111111111111111111111113       rollbal21111111111111fo7ulticast.c#L953" id  L9537 clas74"line" na31034Lv7 <31017e0">21075.aveastica" clafidge./a> ef">data./a> + as an a href="+code7net/bridge7br_tcast.c#L955" id  L9557 clas74"line" na3104 L900">3static int3.a hre310ut.c#L848" id  L9376 clas64"line" na71018L74ef">data./a> + as an 61./a>        .a href7 rt.offsea7ctiacas>   va 31075.31085br" va sref"rt for7n"/br75/bri31026.320             7potoneles_7ulticaL8486 clas75"line" na2107 ane.0g21057.250275eef">out./a>;u        .a href7 2 lre024ge/br_multisref"ef7 2 lre024gas73"line" na29081L900">23991./aspin_lockrbroup" c>toh>) * spin_lockrse="ncelass=ultisref">port.idge./a> *.a hcoditinu"la>u900">23995./a>  irt./a>-&ze"+coditinu"e/bra_CBs="sref">sk>skbmhashrt./a>-&ze"+cod.hashsref[00">27L8966 clas751line" na3101 ane.2g21057.25027neef">out./a>;u;uskb.dbrt./a>-&ze"+cod.dbsrefleaveastic+cod.t_igm73_r_mult_rtimpoline"u *.a href="+codT_SKB_CBs="srefmm/* 7all th_mugh */data./a> + as an a href="+code7net/bridge7br_      7roudge_ ho7ulticast.c#L955" ">skb.dbrt./a>-&ze"+cod.dbsrefleaveastic+skbol02"ne5"line" na3103 ane.1g21057.250275">21061./a>        .a href6 et/bridge6ulticast.c#L947/a>   va 37015.31085br" va srefuskb./a>);uuu *.a href="+codT_SKB_CBs="sref">skb.dbrt./a>-&ze"+cod.dbsrefleaveasticlas65"line7 na29077L900">210na4L897"73897.7a>      210na4250          6ur31037.336   }c7st.c#L848"7id  L8486 clas65"line" na71018L700">317net/bridge7br_tcast.c#L955" id  L9557 clas74"id  L9056 clas6="line" na21743L907">31019396 clas67"line" n>3102defa   g21057.25027neef">out./a>;       int3.a7bridgeidge6ulticast.c#L942" id  L9426 clas66"line" na21065L900">21075./arpin_unlockrbroup" c>toh>) * spin_unlockrbrlass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockB<7 .31031.3373              strucass="7r="sr76/bri31026.320             7roudge_ ho7ulticalas66"line7 na21081L900">210na4L897"73897.7a>      210na4uu" id  L8487 clas66"line" na312 " na27061L970">210      .a href6 et/bridge6ulticast.c#L947st.c#L873"7id  L8736 clas66"lineut" 7lass=76/bri31026.320             7 report fo73tiacaunlockB999./a>uunet_bridge./a> *.a href="+codl  L900">31long 1038./a>u href="net7b.t_igmp3_rlock_INPUu( a7s="sr76/bri31026.320             5anfcast.c#L852" id  L8526 cl11113       rollbal21111111111111fo7ulticast.c#L953" id  L9537 clas74"line" na31034      210na4250          6ur31037.336   }c7t.c#L955" 7d  L9556 clas66"line" na27061L976/bri31026.320             6eridge/br_7ulttcast.c#L955" id  L9557 clas73"line" na29081L900">23991./aspin_lockrbroup" c>toh>) * spin_lockrbrlass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockB709 6L77eef">out./a>;             7 >310 5.307rlttcast.c#L955" id  L9557 clas73"line" na2104355" id  L9557 clas71"le" na2104355" id >br./a>,unet_bridge./a> *.a href="+codl  L900">31long 1038./a>uskb7/a>);77eef">out./a>;u3static int3.a hre310t.c#L955" 7d  L9556 clas67"linet for7n"/br77/bri31026.320             5aa cge/br_5ultic7ref">skbid7e./a> *.a href="+codp>( a7s="sr7f">skb./a>);u<         7 >310 5.307rlttcast.c#L955" id  L9557 clas73"line" na2104355" id  L9557 clas71"le" na2104355" id >br./aSKB_CBs="sref">skb.t_igmp3_r_mult_B310337 NOENTCAL_7ROUP_MASK4 NOENTsrefuout./a>;             7 >310ass="sref">net_bridge./a> *.a href="+codl  L900">31long 1038./a>ubr.out./a>;uu *.a href="+codT_SKB_CBs="sref">skb.dbrt./a>-&ze"+cod.dbsrefleaveastic href="net7b.t_igmp3_rlock_INPUuskb./a>);uskb7/a>);77">skb./a>);u3101unlockBout./a>;u31018./arpin_unlockrbroup" c>toh>) * spin_unlockrbrlass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockB<7st.c#L848"7id  L8486 clas67"line" na71018L77>      210na4250          6Te=grec" c6codaca>   va 31075.31085br" va sref"rt for7n"/br7ref">data./a> u23995./a>L9416 clas78"line" na2107 ane.0g21057.25027neef">      .a href6 et/bridge6ulticast.c#L947L9426 clas781line" na3101 ane.1g21057.250278/bri31026.320             5aa cge/br_5ultic7L9366 clas78"line" na2107 ane.2g21057.25027neef">999./a>unet_bridge./a> *.a href="+codl  L900">31long 1038./a>u/a>   va 37015.31085br" va srefuskb./a>);u23995./a>  f="net/bri31038.3398ntinue;u>              7st.c#L848"7id  L8486 clas68"line na27061L978eef">out./a>;u33L900">31033./a>  et/bri31038.3398ntinue;u>              7s     .2107t/bridge/brli3_srefU">skb7/a>);73102 lineipv4_rcaev"+code=port" " cl_mdb_htabl4ass="lineipv4_rca" cladge_mdb_htabl4" class="sref">brli3_f="n7t/bridge/brli3_srefUu31018./arpin_unlockrbroup" c>toh>) * spin_unlockrbrlass=/br_multisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockB<7 va 31015.71085br" va sref";;u1">skb7/a>);79eef">out./a>;             72 report f7r3ticast.c#L953" id  L9537 clas739line" na21043L900">31015./a>    et/if_runningCAL_GROUP_MASK4et/if_runninglass=ultisref">port.idge./a> *.a href="+codT_SKB_CBs="srefne" na31047L900">33333333310na4L897"73897.79eef">out./a>;u3static int3.a hre310st.c#L936"7id  L9366 clas69"line" na71011L79/bri31026.320             5aa cge/br_5ultic7+cod.t_igm73_r_mult_rtimpoline"uskb./a>);u<         7 >310_7u0ticast.c#L936" id  L9367 clas70"line" na21081L900">2f="net/bri31038.3398ntinue;u>               st.c#L848"7id  L8486 clas69"lineut" 7lass=794ef">out./a>;             72 repois_power_of_dge/br_6uenfcastis_power_of_dne" na21043L900">310ass="sref">net_bridge./a> t.idge./a> *.a href="+codT_SKB_CBs="srefnff="net/b71085br" va sref";;u0">skb7/a>);73static int3.a hre310st.c#L848"7L9031043333333310na4L897"73897.7a>      210na4250          6Ta cge/br_6ultic7st.c#L941"7id  L9416 clas69"line>( a7s="sr79/bri31026.320             5a04" class7"sricast.c#L852" id  L8527 clas74"line" na2107s="sref">net_brmdbrt./a>-&ze"+cod.dbsrefcla_CBs="sref">skbmlockrde="se="ncef="net/bridge/bmlockrde="se="ncelass=ultisref">port.idge./a> *.a href="+codT_SKB_CBs="sref">skb.dbrt./a>-&ze"+cod.dbsrefleaveas a7srli3_f="n7_multvoidsref"pline"u   ,rt./a>-&ze"+coditinu"la>u900">23995./a>  irt./a>-&ze"+codsiz3317 lt; 5 ||orefiz3./a> *.a href="+codl  L900">31long 1038./a>ulas69"line7 na318 6L900">310na4L897"73897.79ef">data./a> + as an +code7net/bridge7br_tcast.c#L955" id  L9557 clas74"line" na3104 L900">3static int3.a hre318st.c#L905"8id  L9056 clas69"line" n>809 6L80/bri31026.320             7potoneles_7ultic89557 clas78"line" na3104defa   g21058.2502800">23990./a>        int3.a7b17.317   }cast.c#L848" id  L8487 clas72"line" na318 35L900">23995./a8 .31031.3383              strucass="8r="sr80/bri31026.320             5aa cge/br_5ultic8las70"line8 na2107" na310410na4L897"83897.80">skb./a>);u<         7 >310ine" na31039L900">31029./amdbrt./a>-&ze"+cost6.320     t_let/bri31038a>   __cca"+codT_024g_itinu"e/bra_CBs="s024g_iti hre487 clas72"line" na318 35L900">23995./a8 4s70"line8 d  L8486 clas69"lineut" 8061L980ref">out./a>;uskb.t_igmp3_r_mult_B310338st.c#L852"8id  L8527 clas70">br.21061./a>        .a href7 et/bridge7ultic8unlockB31033./8 href="net8b.t_igmp3_rlock_INPUuout./a>;u33L900">31033./a>   mdbrt./a>-&ze"+cod.dbsrefT_SKB_CBs="sref8st.c#L942"8id  L9427 clas70"line" n>817 1L80ef">data./a> + as an a href="         7 >310_7u0ticast.c#L936" id  L9367 clas70"line" na2"net/b      .a hrefaddd_mult_let/bri31038.3398ntinue;u>              8317net/bridge7br_      7roudge_ ho7ulticast.c#L955" id  L9056 clas6="line" na21743L907">3108t.c#L905" 8d  L9057 clas70"line" na28061L981CONFIG_IPV6(.a href="+code7 cusL900">33L900">31033./a>  et/bri31038.3398ntinue;u>              8st.c#L900"8id  L9007 clas71"line" na8908 L81/bri31026.320             6 r+code7net/bridge7br_tcast.c#L955" id  L9557 clas74"line" na3104 L900">3static int3.a hre318">net_brid8e./a> *.a href="+cod">skb8/a>);81eef">out./a>;u2399>>23062 c}c8dge_p>br./8>,uu23991./aspin_lockrbroup" c>toh>) * spin_lockrse="ncelass=ultisref">port.idge./a> *.a hst6.320     t_let/bri31038a>   __cca"+codT_024g_itinu"e/bra_CBs="s024g_iti hre>skbmhashrt./a>-&ze"+cod.hashsref[00">28st.c#L953"8id  L9537 clas71">br.data./a> + as an IGMPv7reef="+code7 cuskb.dbrt./a>-&ze"+cod.dbsrefleaveasti8>net_bridg8./a> *.a href="+cod"p>( a8s="sr81">21061./a>        .a href6ba cge/br_6ul_7u0ticast.c#L936" id  L9t.idge./a> *.a href="+codT_SKB_CBs="sre8st.c#L942"8id  L9427 clas71"line>( a8s="sr81lof">out./a>;uskb.dbrt./a>-&ze"+cod.dbsrefleaveasti8afli3_f="n8t/bridge/bli3_srefUrt for8n"/br8ref">data./a>       .a href6 et/bridge6ulticast.c#L948ta href="n8STATE_DIS     sref || for8n"/br81>      210na4250          6Te=grec" c6codac8      .2108R_STATE_BLOCKING+cod">skb8/a>);8);u3108 na3104 L980">333333333continuep>( a8s="sr820">23990./a>        int3.a7bridgeidge7blticast.c#L941" id  L9417 clas70"line" na2104s="line" na3104rpin_unlockBport.idge./a> *.a href="+codT_SKB_CBs="sref">skb.t_igmp3_rlockB<8st.c#L942"8id  L9427 clas72"line" na81011L82/bri31026.320             5aa cge/br_5ultic8_br">br./a8,u( a8s="sr8f">skb./a>);u8" id  L8738 clas72"line" na3101" na28061L980">21061./a>        .a href7 rt.offsea7ctiaca8t.c#L905" 8d  L9057 clas72"line" na28061L980">210


The original LXR software by the ./a> http://sourceforge. .projects/lx L>LXR r_m6unit."sre, this experi6t)ial version by ./a> mailto:lx @as7ux.no">lx @as7ux.no"sre.
lx .as7ux.no kindly hosted by ./a> http://www.redpill-as7pro.no">Redpill Ls7pro AS"sre, provider of Ls7uxc310soffsng and operations services since 1995.