diff options
author | Stephen Hemminger <shemminger@vyatta.com> | 2008-11-20 23:33:56 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-11-20 23:33:56 -0500 |
commit | 1326c3d5a4b792a2b15877feb7fb691f8945d203 (patch) | |
tree | ec87c30b83541f2f96c864e4fc7096fcec9490b3 /net/ipv6/sit.c | |
parent | 23a12b14715e2dcd34dc8002927263ad3437344c (diff) |
ipv6: convert tunnels to net_device_ops
Like IPV4, convert the tunnel virtual devices to use net_device_ops.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/sit.c')
-rw-r--r-- | net/ipv6/sit.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c index b7a50e968506..1ebf99a6776e 100644 --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c | |||
@@ -62,8 +62,8 @@ | |||
62 | #define HASH_SIZE 16 | 62 | #define HASH_SIZE 16 |
63 | #define HASH(addr) (((__force u32)addr^((__force u32)addr>>4))&0xF) | 63 | #define HASH(addr) (((__force u32)addr^((__force u32)addr>>4))&0xF) |
64 | 64 | ||
65 | static int ipip6_fb_tunnel_init(struct net_device *dev); | 65 | static void ipip6_fb_tunnel_init(struct net_device *dev); |
66 | static int ipip6_tunnel_init(struct net_device *dev); | 66 | static void ipip6_tunnel_init(struct net_device *dev); |
67 | static void ipip6_tunnel_setup(struct net_device *dev); | 67 | static void ipip6_tunnel_setup(struct net_device *dev); |
68 | 68 | ||
69 | static int sit_net_id; | 69 | static int sit_net_id; |
@@ -188,7 +188,8 @@ static struct ip_tunnel * ipip6_tunnel_locate(struct net *net, | |||
188 | } | 188 | } |
189 | 189 | ||
190 | nt = netdev_priv(dev); | 190 | nt = netdev_priv(dev); |
191 | dev->init = ipip6_tunnel_init; | 191 | ipip6_tunnel_init(dev); |
192 | |||
192 | nt->parms = *parms; | 193 | nt->parms = *parms; |
193 | 194 | ||
194 | if (parms->i_flags & SIT_ISATAP) | 195 | if (parms->i_flags & SIT_ISATAP) |
@@ -926,13 +927,17 @@ static int ipip6_tunnel_change_mtu(struct net_device *dev, int new_mtu) | |||
926 | return 0; | 927 | return 0; |
927 | } | 928 | } |
928 | 929 | ||
930 | static const struct net_device_ops ipip6_netdev_ops = { | ||
931 | .ndo_uninit = ipip6_tunnel_uninit, | ||
932 | .ndo_start_xmit = ipip6_tunnel_xmit, | ||
933 | .ndo_do_ioctl = ipip6_tunnel_ioctl, | ||
934 | .ndo_change_mtu = ipip6_tunnel_change_mtu, | ||
935 | }; | ||
936 | |||
929 | static void ipip6_tunnel_setup(struct net_device *dev) | 937 | static void ipip6_tunnel_setup(struct net_device *dev) |
930 | { | 938 | { |
931 | dev->uninit = ipip6_tunnel_uninit; | 939 | dev->netdev_ops = &ipip6_netdev_ops; |
932 | dev->destructor = free_netdev; | 940 | dev->destructor = free_netdev; |
933 | dev->hard_start_xmit = ipip6_tunnel_xmit; | ||
934 | dev->do_ioctl = ipip6_tunnel_ioctl; | ||
935 | dev->change_mtu = ipip6_tunnel_change_mtu; | ||
936 | 941 | ||
937 | dev->type = ARPHRD_SIT; | 942 | dev->type = ARPHRD_SIT; |
938 | dev->hard_header_len = LL_MAX_HEADER + sizeof(struct iphdr); | 943 | dev->hard_header_len = LL_MAX_HEADER + sizeof(struct iphdr); |
@@ -943,11 +948,9 @@ static void ipip6_tunnel_setup(struct net_device *dev) | |||
943 | dev->features |= NETIF_F_NETNS_LOCAL; | 948 | dev->features |= NETIF_F_NETNS_LOCAL; |
944 | } | 949 | } |
945 | 950 | ||
946 | static int ipip6_tunnel_init(struct net_device *dev) | 951 | static void ipip6_tunnel_init(struct net_device *dev) |
947 | { | 952 | { |
948 | struct ip_tunnel *tunnel; | 953 | struct ip_tunnel *tunnel = netdev_priv(dev); |
949 | |||
950 | tunnel = netdev_priv(dev); | ||
951 | 954 | ||
952 | tunnel->dev = dev; | 955 | tunnel->dev = dev; |
953 | strcpy(tunnel->parms.name, dev->name); | 956 | strcpy(tunnel->parms.name, dev->name); |
@@ -956,11 +959,9 @@ static int ipip6_tunnel_init(struct net_device *dev) | |||
956 | memcpy(dev->broadcast, &tunnel->parms.iph.daddr, 4); | 959 | memcpy(dev->broadcast, &tunnel->parms.iph.daddr, 4); |
957 | 960 | ||
958 | ipip6_tunnel_bind_dev(dev); | 961 | ipip6_tunnel_bind_dev(dev); |
959 | |||
960 | return 0; | ||
961 | } | 962 | } |
962 | 963 | ||
963 | static int ipip6_fb_tunnel_init(struct net_device *dev) | 964 | static void ipip6_fb_tunnel_init(struct net_device *dev) |
964 | { | 965 | { |
965 | struct ip_tunnel *tunnel = netdev_priv(dev); | 966 | struct ip_tunnel *tunnel = netdev_priv(dev); |
966 | struct iphdr *iph = &tunnel->parms.iph; | 967 | struct iphdr *iph = &tunnel->parms.iph; |
@@ -977,7 +978,6 @@ static int ipip6_fb_tunnel_init(struct net_device *dev) | |||
977 | 978 | ||
978 | dev_hold(dev); | 979 | dev_hold(dev); |
979 | sitn->tunnels_wc[0] = tunnel; | 980 | sitn->tunnels_wc[0] = tunnel; |
980 | return 0; | ||
981 | } | 981 | } |
982 | 982 | ||
983 | static struct xfrm_tunnel sit_handler = { | 983 | static struct xfrm_tunnel sit_handler = { |
@@ -1026,7 +1026,7 @@ static int sit_init_net(struct net *net) | |||
1026 | goto err_alloc_dev; | 1026 | goto err_alloc_dev; |
1027 | } | 1027 | } |
1028 | 1028 | ||
1029 | sitn->fb_tunnel_dev->init = ipip6_fb_tunnel_init; | 1029 | ipip6_fb_tunnel_init(sitn->fb_tunnel_dev); |
1030 | dev_net_set(sitn->fb_tunnel_dev, net); | 1030 | dev_net_set(sitn->fb_tunnel_dev, net); |
1031 | 1031 | ||
1032 | if ((err = register_netdev(sitn->fb_tunnel_dev))) | 1032 | if ((err = register_netdev(sitn->fb_tunnel_dev))) |
@@ -1035,6 +1035,7 @@ static int sit_init_net(struct net *net) | |||
1035 | return 0; | 1035 | return 0; |
1036 | 1036 | ||
1037 | err_reg_dev: | 1037 | err_reg_dev: |
1038 | dev_put(sitn->fb_tunnel_dev); | ||
1038 | free_netdev(sitn->fb_tunnel_dev); | 1039 | free_netdev(sitn->fb_tunnel_dev); |
1039 | err_alloc_dev: | 1040 | err_alloc_dev: |
1040 | /* nothing */ | 1041 | /* nothing */ |