|
@@ -65,6 +65,7 @@
|
|
|
#include <net/checksum.h>
|
|
|
#include <net/netlink.h>
|
|
|
#include <net/fib_rules.h>
|
|
|
+#include <linux/netconf.h>
|
|
|
|
|
|
#if defined(CONFIG_IP_PIMSM_V1) || defined(CONFIG_IP_PIMSM_V2)
|
|
|
#define CONFIG_IP_PIMSM 1
|
|
@@ -582,6 +583,9 @@ static int vif_delete(struct mr_table *mrt, int vifi, int notify,
|
|
|
in_dev = __in_dev_get_rtnl(dev);
|
|
|
if (in_dev) {
|
|
|
IPV4_DEVCONF(in_dev->cnf, MC_FORWARDING)--;
|
|
|
+ inet_netconf_notify_devconf(dev_net(dev),
|
|
|
+ NETCONFA_MC_FORWARDING,
|
|
|
+ dev->ifindex, &in_dev->cnf);
|
|
|
ip_rt_multicast_event(in_dev);
|
|
|
}
|
|
|
|
|
@@ -772,6 +776,8 @@ static int vif_add(struct net *net, struct mr_table *mrt,
|
|
|
return -EADDRNOTAVAIL;
|
|
|
}
|
|
|
IPV4_DEVCONF(in_dev->cnf, MC_FORWARDING)++;
|
|
|
+ inet_netconf_notify_devconf(net, NETCONFA_MC_FORWARDING, dev->ifindex,
|
|
|
+ &in_dev->cnf);
|
|
|
ip_rt_multicast_event(in_dev);
|
|
|
|
|
|
/* Fill in the VIF structures */
|
|
@@ -1185,6 +1191,9 @@ static void mrtsock_destruct(struct sock *sk)
|
|
|
ipmr_for_each_table(mrt, net) {
|
|
|
if (sk == rtnl_dereference(mrt->mroute_sk)) {
|
|
|
IPV4_DEVCONF_ALL(net, MC_FORWARDING)--;
|
|
|
+ inet_netconf_notify_devconf(net, NETCONFA_MC_FORWARDING,
|
|
|
+ NETCONFA_IFINDEX_ALL,
|
|
|
+ net->ipv4.devconf_all);
|
|
|
RCU_INIT_POINTER(mrt->mroute_sk, NULL);
|
|
|
mroute_clean_tables(mrt);
|
|
|
}
|
|
@@ -1236,6 +1245,9 @@ int ip_mroute_setsockopt(struct sock *sk, int optname, char __user *optval, unsi
|
|
|
if (ret == 0) {
|
|
|
rcu_assign_pointer(mrt->mroute_sk, sk);
|
|
|
IPV4_DEVCONF_ALL(net, MC_FORWARDING)++;
|
|
|
+ inet_netconf_notify_devconf(net, NETCONFA_MC_FORWARDING,
|
|
|
+ NETCONFA_IFINDEX_ALL,
|
|
|
+ net->ipv4.devconf_all);
|
|
|
}
|
|
|
rtnl_unlock();
|
|
|
return ret;
|