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 --- |