|
@@ -58,6 +58,7 @@
|
|
#include <linux/in_route.h>
|
|
#include <linux/in_route.h>
|
|
#include <linux/route.h>
|
|
#include <linux/route.h>
|
|
#include <linux/skbuff.h>
|
|
#include <linux/skbuff.h>
|
|
|
|
+#include <linux/igmp.h>
|
|
#include <net/net_namespace.h>
|
|
#include <net/net_namespace.h>
|
|
#include <net/dst.h>
|
|
#include <net/dst.h>
|
|
#include <net/sock.h>
|
|
#include <net/sock.h>
|
|
@@ -174,7 +175,9 @@ static int raw_v4_input(struct sk_buff *skb, const struct iphdr *iph, int hash)
|
|
|
|
|
|
while (sk) {
|
|
while (sk) {
|
|
delivered = 1;
|
|
delivered = 1;
|
|
- if (iph->protocol != IPPROTO_ICMP || !icmp_filter(sk, skb)) {
|
|
|
|
|
|
+ if ((iph->protocol != IPPROTO_ICMP || !icmp_filter(sk, skb)) &&
|
|
|
|
+ ip_mc_sf_allow(sk, iph->daddr, iph->saddr,
|
|
|
|
+ skb->dev->ifindex)) {
|
|
struct sk_buff *clone = skb_clone(skb, GFP_ATOMIC);
|
|
struct sk_buff *clone = skb_clone(skb, GFP_ATOMIC);
|
|
|
|
|
|
/* Not releasing hash table! */
|
|
/* Not releasing hash table! */
|