mirror of https://gitee.com/openkylin/linux.git
netconf: add a notif when settings are created
All changes are notified, but the initial state was missing. Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d26c638c16
commit
29c994e361
|
@ -2232,7 +2232,7 @@ static struct devinet_sysctl_table {
|
|||
};
|
||||
|
||||
static int __devinet_sysctl_register(struct net *net, char *dev_name,
|
||||
struct ipv4_devconf *p)
|
||||
int ifindex, struct ipv4_devconf *p)
|
||||
{
|
||||
int i;
|
||||
struct devinet_sysctl_table *t;
|
||||
|
@ -2255,6 +2255,8 @@ static int __devinet_sysctl_register(struct net *net, char *dev_name,
|
|||
goto free;
|
||||
|
||||
p->sysctl = t;
|
||||
|
||||
inet_netconf_notify_devconf(net, NETCONFA_ALL, ifindex, p);
|
||||
return 0;
|
||||
|
||||
free:
|
||||
|
@ -2286,7 +2288,7 @@ static int devinet_sysctl_register(struct in_device *idev)
|
|||
if (err)
|
||||
return err;
|
||||
err = __devinet_sysctl_register(dev_net(idev->dev), idev->dev->name,
|
||||
&idev->cnf);
|
||||
idev->dev->ifindex, &idev->cnf);
|
||||
if (err)
|
||||
neigh_sysctl_unregister(idev->arp_parms);
|
||||
return err;
|
||||
|
@ -2347,11 +2349,12 @@ static __net_init int devinet_init_net(struct net *net)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
err = __devinet_sysctl_register(net, "all", all);
|
||||
err = __devinet_sysctl_register(net, "all", NETCONFA_IFINDEX_ALL, all);
|
||||
if (err < 0)
|
||||
goto err_reg_all;
|
||||
|
||||
err = __devinet_sysctl_register(net, "default", dflt);
|
||||
err = __devinet_sysctl_register(net, "default",
|
||||
NETCONFA_IFINDEX_DEFAULT, dflt);
|
||||
if (err < 0)
|
||||
goto err_reg_dflt;
|
||||
|
||||
|
|
|
@ -6032,7 +6032,7 @@ static const struct ctl_table addrconf_sysctl[] = {
|
|||
static int __addrconf_sysctl_register(struct net *net, char *dev_name,
|
||||
struct inet6_dev *idev, struct ipv6_devconf *p)
|
||||
{
|
||||
int i;
|
||||
int i, ifindex;
|
||||
struct ctl_table *table;
|
||||
char path[sizeof("net/ipv6/conf/") + IFNAMSIZ];
|
||||
|
||||
|
@ -6052,6 +6052,13 @@ static int __addrconf_sysctl_register(struct net *net, char *dev_name,
|
|||
if (!p->sysctl_header)
|
||||
goto free;
|
||||
|
||||
if (!strcmp(dev_name, "all"))
|
||||
ifindex = NETCONFA_IFINDEX_ALL;
|
||||
else if (!strcmp(dev_name, "default"))
|
||||
ifindex = NETCONFA_IFINDEX_DEFAULT;
|
||||
else
|
||||
ifindex = idev->dev->ifindex;
|
||||
inet6_netconf_notify_devconf(net, NETCONFA_ALL, ifindex, p);
|
||||
return 0;
|
||||
|
||||
free:
|
||||
|
|
Loading…
Reference in New Issue