addrconf.c (2536524a91fe5c5a9fddd282fd4e79ee0976aefe) addrconf.c (751eb6b6042a596b0080967c1a529a9fe98dac1d)
1/*
2 * IPv6 Address [auto]configuration
3 * Linux INET6 implementation
4 *
5 * Authors:
6 * Pedro Roque <roque@di.fc.ul.pt>
7 * Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
8 *

--- 764 unchanged lines hidden (view full) ---

773 inet6_netconf_notify_devconf(net, NETCONFA_FORWARDING,
774 NETCONFA_IFINDEX_DEFAULT,
775 net->ipv6.devconf_dflt);
776 rtnl_unlock();
777 return 0;
778 }
779
780 if (p == &net->ipv6.devconf_all->forwarding) {
1/*
2 * IPv6 Address [auto]configuration
3 * Linux INET6 implementation
4 *
5 * Authors:
6 * Pedro Roque <roque@di.fc.ul.pt>
7 * Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
8 *

--- 764 unchanged lines hidden (view full) ---

773 inet6_netconf_notify_devconf(net, NETCONFA_FORWARDING,
774 NETCONFA_IFINDEX_DEFAULT,
775 net->ipv6.devconf_dflt);
776 rtnl_unlock();
777 return 0;
778 }
779
780 if (p == &net->ipv6.devconf_all->forwarding) {
781 int old_dflt = net->ipv6.devconf_dflt->forwarding;
782
781 net->ipv6.devconf_dflt->forwarding = newf;
783 net->ipv6.devconf_dflt->forwarding = newf;
784 if ((!newf) ^ (!old_dflt))
785 inet6_netconf_notify_devconf(net, NETCONFA_FORWARDING,
786 NETCONFA_IFINDEX_DEFAULT,
787 net->ipv6.devconf_dflt);
788
782 addrconf_forward_change(net, newf);
783 if ((!newf) ^ (!old))
784 inet6_netconf_notify_devconf(net, NETCONFA_FORWARDING,
785 NETCONFA_IFINDEX_ALL,
786 net->ipv6.devconf_all);
787 } else if ((!newf) ^ (!old))
788 dev_forward_change((struct inet6_dev *)table->extra1);
789 rtnl_unlock();

--- 1146 unchanged lines hidden (view full) ---

1936 }
1937
1938errdad:
1939 /* transition from _POSTDAD to _ERRDAD */
1940 ifp->state = INET6_IFADDR_STATE_ERRDAD;
1941 spin_unlock_bh(&ifp->lock);
1942
1943 addrconf_mod_dad_work(ifp, 0);
789 addrconf_forward_change(net, newf);
790 if ((!newf) ^ (!old))
791 inet6_netconf_notify_devconf(net, NETCONFA_FORWARDING,
792 NETCONFA_IFINDEX_ALL,
793 net->ipv6.devconf_all);
794 } else if ((!newf) ^ (!old))
795 dev_forward_change((struct inet6_dev *)table->extra1);
796 rtnl_unlock();

--- 1146 unchanged lines hidden (view full) ---

1943 }
1944
1945errdad:
1946 /* transition from _POSTDAD to _ERRDAD */
1947 ifp->state = INET6_IFADDR_STATE_ERRDAD;
1948 spin_unlock_bh(&ifp->lock);
1949
1950 addrconf_mod_dad_work(ifp, 0);
1951 in6_ifa_put(ifp);
1944}
1945
1946/* Join to solicited addr multicast group.
1947 * caller must hold RTNL */
1948void addrconf_join_solict(struct net_device *dev, const struct in6_addr *addr)
1949{
1950 struct in6_addr maddr;
1951

--- 1893 unchanged lines hidden (view full) ---

3845 }
3846 }
3847 spin_unlock_bh(&ifp->lock);
3848
3849 if (action == DAD_BEGIN) {
3850 addrconf_dad_begin(ifp);
3851 goto out;
3852 } else if (action == DAD_ABORT) {
1952}
1953
1954/* Join to solicited addr multicast group.
1955 * caller must hold RTNL */
1956void addrconf_join_solict(struct net_device *dev, const struct in6_addr *addr)
1957{
1958 struct in6_addr maddr;
1959

--- 1893 unchanged lines hidden (view full) ---

3853 }
3854 }
3855 spin_unlock_bh(&ifp->lock);
3856
3857 if (action == DAD_BEGIN) {
3858 addrconf_dad_begin(ifp);
3859 goto out;
3860 } else if (action == DAD_ABORT) {
3861 in6_ifa_hold(ifp);
3853 addrconf_dad_stop(ifp, 1);
3854 if (disable_ipv6)
3855 addrconf_ifdown(idev->dev, 0);
3856 goto out;
3857 }
3858
3859 if (!ifp->dad_probes && addrconf_dad_end(ifp))
3860 goto out;

--- 2159 unchanged lines hidden (view full) ---

6020 {
6021 /* sentinel */
6022 }
6023};
6024
6025static int __addrconf_sysctl_register(struct net *net, char *dev_name,
6026 struct inet6_dev *idev, struct ipv6_devconf *p)
6027{
3862 addrconf_dad_stop(ifp, 1);
3863 if (disable_ipv6)
3864 addrconf_ifdown(idev->dev, 0);
3865 goto out;
3866 }
3867
3868 if (!ifp->dad_probes && addrconf_dad_end(ifp))
3869 goto out;

--- 2159 unchanged lines hidden (view full) ---

6029 {
6030 /* sentinel */
6031 }
6032};
6033
6034static int __addrconf_sysctl_register(struct net *net, char *dev_name,
6035 struct inet6_dev *idev, struct ipv6_devconf *p)
6036{
6028 int i;
6037 int i, ifindex;
6029 struct ctl_table *table;
6030 char path[sizeof("net/ipv6/conf/") + IFNAMSIZ];
6031
6032 table = kmemdup(addrconf_sysctl, sizeof(addrconf_sysctl), GFP_KERNEL);
6033 if (!table)
6034 goto out;
6035
6036 for (i = 0; table[i].data; i++) {
6037 table[i].data += (char *)p - (char *)&ipv6_devconf;
6038 table[i].extra1 = idev; /* embedded; no ref */
6039 table[i].extra2 = net;
6040 }
6041
6042 snprintf(path, sizeof(path), "net/ipv6/conf/%s", dev_name);
6043
6044 p->sysctl_header = register_net_sysctl(net, path, table);
6045 if (!p->sysctl_header)
6046 goto free;
6047
6038 struct ctl_table *table;
6039 char path[sizeof("net/ipv6/conf/") + IFNAMSIZ];
6040
6041 table = kmemdup(addrconf_sysctl, sizeof(addrconf_sysctl), GFP_KERNEL);
6042 if (!table)
6043 goto out;
6044
6045 for (i = 0; table[i].data; i++) {
6046 table[i].data += (char *)p - (char *)&ipv6_devconf;
6047 table[i].extra1 = idev; /* embedded; no ref */
6048 table[i].extra2 = net;
6049 }
6050
6051 snprintf(path, sizeof(path), "net/ipv6/conf/%s", dev_name);
6052
6053 p->sysctl_header = register_net_sysctl(net, path, table);
6054 if (!p->sysctl_header)
6055 goto free;
6056
6057 if (!strcmp(dev_name, "all"))
6058 ifindex = NETCONFA_IFINDEX_ALL;
6059 else if (!strcmp(dev_name, "default"))
6060 ifindex = NETCONFA_IFINDEX_DEFAULT;
6061 else
6062 ifindex = idev->dev->ifindex;
6063 inet6_netconf_notify_devconf(net, NETCONFA_ALL, ifindex, p);
6048 return 0;
6049
6050free:
6051 kfree(table);
6052out:
6053 return -ENOBUFS;
6054}
6055

--- 237 unchanged lines hidden ---
6064 return 0;
6065
6066free:
6067 kfree(table);
6068out:
6069 return -ENOBUFS;
6070}
6071

--- 237 unchanged lines hidden ---