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 | |
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')
-rw-r--r-- | net/ipv6/ip6_tunnel.c | 29 | ||||
-rw-r--r-- | net/ipv6/sit.c | 33 |
2 files changed, 32 insertions, 30 deletions
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c index 64ce3d33d9c6..adfcd6527921 100644 --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c | |||
@@ -74,8 +74,8 @@ MODULE_LICENSE("GPL"); | |||
74 | (addr)->s6_addr32[2] ^ (addr)->s6_addr32[3]) & \ | 74 | (addr)->s6_addr32[2] ^ (addr)->s6_addr32[3]) & \ |
75 | (HASH_SIZE - 1)) | 75 | (HASH_SIZE - 1)) |
76 | 76 | ||
77 | static int ip6_fb_tnl_dev_init(struct net_device *dev); | 77 | static void ip6_fb_tnl_dev_init(struct net_device *dev); |
78 | static int ip6_tnl_dev_init(struct net_device *dev); | 78 | static void ip6_tnl_dev_init(struct net_device *dev); |
79 | static void ip6_tnl_dev_setup(struct net_device *dev); | 79 | static void ip6_tnl_dev_setup(struct net_device *dev); |
80 | 80 | ||
81 | static int ip6_tnl_net_id; | 81 | static int ip6_tnl_net_id; |
@@ -249,7 +249,7 @@ static struct ip6_tnl *ip6_tnl_create(struct net *net, struct ip6_tnl_parm *p) | |||
249 | } | 249 | } |
250 | 250 | ||
251 | t = netdev_priv(dev); | 251 | t = netdev_priv(dev); |
252 | dev->init = ip6_tnl_dev_init; | 252 | ip6_tnl_dev_init(dev); |
253 | t->parms = *p; | 253 | t->parms = *p; |
254 | 254 | ||
255 | if ((err = register_netdevice(dev)) < 0) | 255 | if ((err = register_netdevice(dev)) < 0) |
@@ -1306,6 +1306,14 @@ ip6_tnl_change_mtu(struct net_device *dev, int new_mtu) | |||
1306 | return 0; | 1306 | return 0; |
1307 | } | 1307 | } |
1308 | 1308 | ||
1309 | |||
1310 | static const struct net_device_ops ip6_tnl_netdev_ops = { | ||
1311 | .ndo_uninit = ip6_tnl_dev_uninit, | ||
1312 | .ndo_start_xmit = ip6_tnl_xmit, | ||
1313 | .ndo_do_ioctl = ip6_tnl_ioctl, | ||
1314 | .ndo_change_mtu = ip6_tnl_change_mtu, | ||
1315 | }; | ||
1316 | |||
1309 | /** | 1317 | /** |
1310 | * ip6_tnl_dev_setup - setup virtual tunnel device | 1318 | * ip6_tnl_dev_setup - setup virtual tunnel device |
1311 | * @dev: virtual device associated with tunnel | 1319 | * @dev: virtual device associated with tunnel |
@@ -1316,11 +1324,8 @@ ip6_tnl_change_mtu(struct net_device *dev, int new_mtu) | |||
1316 | 1324 | ||
1317 | static void ip6_tnl_dev_setup(struct net_device *dev) | 1325 | static void ip6_tnl_dev_setup(struct net_device *dev) |
1318 | { | 1326 | { |
1319 | dev->uninit = ip6_tnl_dev_uninit; | 1327 | dev->netdev_ops = &ip6_tnl_netdev_ops; |
1320 | dev->destructor = free_netdev; | 1328 | dev->destructor = free_netdev; |
1321 | dev->hard_start_xmit = ip6_tnl_xmit; | ||
1322 | dev->do_ioctl = ip6_tnl_ioctl; | ||
1323 | dev->change_mtu = ip6_tnl_change_mtu; | ||
1324 | 1329 | ||
1325 | dev->type = ARPHRD_TUNNEL6; | 1330 | dev->type = ARPHRD_TUNNEL6; |
1326 | dev->hard_header_len = LL_MAX_HEADER + sizeof (struct ipv6hdr); | 1331 | dev->hard_header_len = LL_MAX_HEADER + sizeof (struct ipv6hdr); |
@@ -1349,13 +1354,11 @@ ip6_tnl_dev_init_gen(struct net_device *dev) | |||
1349 | * @dev: virtual device associated with tunnel | 1354 | * @dev: virtual device associated with tunnel |
1350 | **/ | 1355 | **/ |
1351 | 1356 | ||
1352 | static int | 1357 | static void ip6_tnl_dev_init(struct net_device *dev) |
1353 | ip6_tnl_dev_init(struct net_device *dev) | ||
1354 | { | 1358 | { |
1355 | struct ip6_tnl *t = netdev_priv(dev); | 1359 | struct ip6_tnl *t = netdev_priv(dev); |
1356 | ip6_tnl_dev_init_gen(dev); | 1360 | ip6_tnl_dev_init_gen(dev); |
1357 | ip6_tnl_link_config(t); | 1361 | ip6_tnl_link_config(t); |
1358 | return 0; | ||
1359 | } | 1362 | } |
1360 | 1363 | ||
1361 | /** | 1364 | /** |
@@ -1365,8 +1368,7 @@ ip6_tnl_dev_init(struct net_device *dev) | |||
1365 | * Return: 0 | 1368 | * Return: 0 |
1366 | **/ | 1369 | **/ |
1367 | 1370 | ||
1368 | static int | 1371 | static void ip6_fb_tnl_dev_init(struct net_device *dev) |
1369 | ip6_fb_tnl_dev_init(struct net_device *dev) | ||
1370 | { | 1372 | { |
1371 | struct ip6_tnl *t = netdev_priv(dev); | 1373 | struct ip6_tnl *t = netdev_priv(dev); |
1372 | struct net *net = dev_net(dev); | 1374 | struct net *net = dev_net(dev); |
@@ -1376,7 +1378,6 @@ ip6_fb_tnl_dev_init(struct net_device *dev) | |||
1376 | t->parms.proto = IPPROTO_IPV6; | 1378 | t->parms.proto = IPPROTO_IPV6; |
1377 | dev_hold(dev); | 1379 | dev_hold(dev); |
1378 | ip6n->tnls_wc[0] = t; | 1380 | ip6n->tnls_wc[0] = t; |
1379 | return 0; | ||
1380 | } | 1381 | } |
1381 | 1382 | ||
1382 | static struct xfrm6_tunnel ip4ip6_handler = { | 1383 | static struct xfrm6_tunnel ip4ip6_handler = { |
@@ -1429,7 +1430,7 @@ static int ip6_tnl_init_net(struct net *net) | |||
1429 | if (!ip6n->fb_tnl_dev) | 1430 | if (!ip6n->fb_tnl_dev) |
1430 | goto err_alloc_dev; | 1431 | goto err_alloc_dev; |
1431 | 1432 | ||
1432 | ip6n->fb_tnl_dev->init = ip6_fb_tnl_dev_init; | 1433 | ip6_fb_tnl_dev_init(ip6n->fb_tnl_dev); |
1433 | dev_net_set(ip6n->fb_tnl_dev, net); | 1434 | dev_net_set(ip6n->fb_tnl_dev, net); |
1434 | 1435 | ||
1435 | err = register_netdev(ip6n->fb_tnl_dev); | 1436 | err = register_netdev(ip6n->fb_tnl_dev); |
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 */ |