aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/ipv6/ip6_tunnel.c192
1 files changed, 96 insertions, 96 deletions
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index a6541495deab..70684e0d31f1 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -74,12 +74,12 @@ 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
77static int ip6ip6_fb_tnl_dev_init(struct net_device *dev); 77static int ip6_fb_tnl_dev_init(struct net_device *dev);
78static int ip6ip6_tnl_dev_init(struct net_device *dev); 78static int ip6_tnl_dev_init(struct net_device *dev);
79static void ip6ip6_tnl_dev_setup(struct net_device *dev); 79static void ip6_tnl_dev_setup(struct net_device *dev);
80 80
81/* the IPv6 tunnel fallback device */ 81/* the IPv6 tunnel fallback device */
82static struct net_device *ip6ip6_fb_tnl_dev; 82static struct net_device *ip6_fb_tnl_dev;
83 83
84 84
85/* lists for storing tunnels in use */ 85/* lists for storing tunnels in use */
@@ -88,7 +88,7 @@ static struct ip6_tnl *tnls_wc[1];
88static struct ip6_tnl **tnls[2] = { tnls_wc, tnls_r_l }; 88static struct ip6_tnl **tnls[2] = { tnls_wc, tnls_r_l };
89 89
90/* lock for the tunnel lists */ 90/* lock for the tunnel lists */
91static DEFINE_RWLOCK(ip6ip6_lock); 91static DEFINE_RWLOCK(ip6_tnl_lock);
92 92
93static inline struct dst_entry *ip6_tnl_dst_check(struct ip6_tnl *t) 93static inline struct dst_entry *ip6_tnl_dst_check(struct ip6_tnl *t)
94{ 94{
@@ -119,7 +119,7 @@ static inline void ip6_tnl_dst_store(struct ip6_tnl *t, struct dst_entry *dst)
119} 119}
120 120
121/** 121/**
122 * ip6ip6_tnl_lookup - fetch tunnel matching the end-point addresses 122 * ip6_tnl_lookup - fetch tunnel matching the end-point addresses
123 * @remote: the address of the tunnel exit-point 123 * @remote: the address of the tunnel exit-point
124 * @local: the address of the tunnel entry-point 124 * @local: the address of the tunnel entry-point
125 * 125 *
@@ -130,7 +130,7 @@ static inline void ip6_tnl_dst_store(struct ip6_tnl *t, struct dst_entry *dst)
130 **/ 130 **/
131 131
132static struct ip6_tnl * 132static struct ip6_tnl *
133ip6ip6_tnl_lookup(struct in6_addr *remote, struct in6_addr *local) 133ip6_tnl_lookup(struct in6_addr *remote, struct in6_addr *local)
134{ 134{
135 unsigned h0 = HASH(remote); 135 unsigned h0 = HASH(remote);
136 unsigned h1 = HASH(local); 136 unsigned h1 = HASH(local);
@@ -149,18 +149,18 @@ ip6ip6_tnl_lookup(struct in6_addr *remote, struct in6_addr *local)
149} 149}
150 150
151/** 151/**
152 * ip6ip6_bucket - get head of list matching given tunnel parameters 152 * ip6_tnl_bucket - get head of list matching given tunnel parameters
153 * @p: parameters containing tunnel end-points 153 * @p: parameters containing tunnel end-points
154 * 154 *
155 * Description: 155 * Description:
156 * ip6ip6_bucket() returns the head of the list matching the 156 * ip6_tnl_bucket() returns the head of the list matching the
157 * &struct in6_addr entries laddr and raddr in @p. 157 * &struct in6_addr entries laddr and raddr in @p.
158 * 158 *
159 * Return: head of IPv6 tunnel list 159 * Return: head of IPv6 tunnel list
160 **/ 160 **/
161 161
162static struct ip6_tnl ** 162static struct ip6_tnl **
163ip6ip6_bucket(struct ip6_tnl_parm *p) 163ip6_tnl_bucket(struct ip6_tnl_parm *p)
164{ 164{
165 struct in6_addr *remote = &p->raddr; 165 struct in6_addr *remote = &p->raddr;
166 struct in6_addr *local = &p->laddr; 166 struct in6_addr *local = &p->laddr;
@@ -175,36 +175,36 @@ ip6ip6_bucket(struct ip6_tnl_parm *p)
175} 175}
176 176
177/** 177/**
178 * ip6ip6_tnl_link - add tunnel to hash table 178 * ip6_tnl_link - add tunnel to hash table
179 * @t: tunnel to be added 179 * @t: tunnel to be added
180 **/ 180 **/
181 181
182static void 182static void
183ip6ip6_tnl_link(struct ip6_tnl *t) 183ip6_tnl_link(struct ip6_tnl *t)
184{ 184{
185 struct ip6_tnl **tp = ip6ip6_bucket(&t->parms); 185 struct ip6_tnl **tp = ip6_tnl_bucket(&t->parms);
186 186
187 t->next = *tp; 187 t->next = *tp;
188 write_lock_bh(&ip6ip6_lock); 188 write_lock_bh(&ip6_tnl_lock);
189 *tp = t; 189 *tp = t;
190 write_unlock_bh(&ip6ip6_lock); 190 write_unlock_bh(&ip6_tnl_lock);
191} 191}
192 192
193/** 193/**
194 * ip6ip6_tnl_unlink - remove tunnel from hash table 194 * ip6_tnl_unlink - remove tunnel from hash table
195 * @t: tunnel to be removed 195 * @t: tunnel to be removed
196 **/ 196 **/
197 197
198static void 198static void
199ip6ip6_tnl_unlink(struct ip6_tnl *t) 199ip6_tnl_unlink(struct ip6_tnl *t)
200{ 200{
201 struct ip6_tnl **tp; 201 struct ip6_tnl **tp;
202 202
203 for (tp = ip6ip6_bucket(&t->parms); *tp; tp = &(*tp)->next) { 203 for (tp = ip6_tnl_bucket(&t->parms); *tp; tp = &(*tp)->next) {
204 if (t == *tp) { 204 if (t == *tp) {
205 write_lock_bh(&ip6ip6_lock); 205 write_lock_bh(&ip6_tnl_lock);
206 *tp = t->next; 206 *tp = t->next;
207 write_unlock_bh(&ip6ip6_lock); 207 write_unlock_bh(&ip6_tnl_lock);
208 break; 208 break;
209 } 209 }
210 } 210 }
@@ -241,12 +241,12 @@ static struct ip6_tnl *ip6_tnl_create(struct ip6_tnl_parm *p)
241 if (i == IP6_TNL_MAX) 241 if (i == IP6_TNL_MAX)
242 goto failed; 242 goto failed;
243 } 243 }
244 dev = alloc_netdev(sizeof (*t), name, ip6ip6_tnl_dev_setup); 244 dev = alloc_netdev(sizeof (*t), name, ip6_tnl_dev_setup);
245 if (dev == NULL) 245 if (dev == NULL)
246 goto failed; 246 goto failed;
247 247
248 t = netdev_priv(dev); 248 t = netdev_priv(dev);
249 dev->init = ip6ip6_tnl_dev_init; 249 dev->init = ip6_tnl_dev_init;
250 t->parms = *p; 250 t->parms = *p;
251 251
252 if ((err = register_netdevice(dev)) < 0) { 252 if ((err = register_netdevice(dev)) < 0) {
@@ -254,19 +254,19 @@ static struct ip6_tnl *ip6_tnl_create(struct ip6_tnl_parm *p)
254 goto failed; 254 goto failed;
255 } 255 }
256 dev_hold(dev); 256 dev_hold(dev);
257 ip6ip6_tnl_link(t); 257 ip6_tnl_link(t);
258 return t; 258 return t;
259failed: 259failed:
260 return NULL; 260 return NULL;
261} 261}
262 262
263/** 263/**
264 * ip6ip6_tnl_locate - find or create tunnel matching given parameters 264 * ip6_tnl_locate - find or create tunnel matching given parameters
265 * @p: tunnel parameters 265 * @p: tunnel parameters
266 * @create: != 0 if allowed to create new tunnel if no match found 266 * @create: != 0 if allowed to create new tunnel if no match found
267 * 267 *
268 * Description: 268 * Description:
269 * ip6ip6_tnl_locate() first tries to locate an existing tunnel 269 * ip6_tnl_locate() first tries to locate an existing tunnel
270 * based on @parms. If this is unsuccessful, but @create is set a new 270 * based on @parms. If this is unsuccessful, but @create is set a new
271 * tunnel device is created and registered for use. 271 * tunnel device is created and registered for use.
272 * 272 *
@@ -274,13 +274,13 @@ failed:
274 * matching tunnel or NULL 274 * matching tunnel or NULL
275 **/ 275 **/
276 276
277static struct ip6_tnl *ip6ip6_tnl_locate(struct ip6_tnl_parm *p, int create) 277static struct ip6_tnl *ip6_tnl_locate(struct ip6_tnl_parm *p, int create)
278{ 278{
279 struct in6_addr *remote = &p->raddr; 279 struct in6_addr *remote = &p->raddr;
280 struct in6_addr *local = &p->laddr; 280 struct in6_addr *local = &p->laddr;
281 struct ip6_tnl *t; 281 struct ip6_tnl *t;
282 282
283 for (t = *ip6ip6_bucket(p); t; t = t->next) { 283 for (t = *ip6_tnl_bucket(p); t; t = t->next) {
284 if (ipv6_addr_equal(local, &t->parms.laddr) && 284 if (ipv6_addr_equal(local, &t->parms.laddr) &&
285 ipv6_addr_equal(remote, &t->parms.raddr)) 285 ipv6_addr_equal(remote, &t->parms.raddr))
286 return t; 286 return t;
@@ -291,24 +291,24 @@ static struct ip6_tnl *ip6ip6_tnl_locate(struct ip6_tnl_parm *p, int create)
291} 291}
292 292
293/** 293/**
294 * ip6ip6_tnl_dev_uninit - tunnel device uninitializer 294 * ip6_tnl_dev_uninit - tunnel device uninitializer
295 * @dev: the device to be destroyed 295 * @dev: the device to be destroyed
296 * 296 *
297 * Description: 297 * Description:
298 * ip6ip6_tnl_dev_uninit() removes tunnel from its list 298 * ip6_tnl_dev_uninit() removes tunnel from its list
299 **/ 299 **/
300 300
301static void 301static void
302ip6ip6_tnl_dev_uninit(struct net_device *dev) 302ip6_tnl_dev_uninit(struct net_device *dev)
303{ 303{
304 struct ip6_tnl *t = netdev_priv(dev); 304 struct ip6_tnl *t = netdev_priv(dev);
305 305
306 if (dev == ip6ip6_fb_tnl_dev) { 306 if (dev == ip6_fb_tnl_dev) {
307 write_lock_bh(&ip6ip6_lock); 307 write_lock_bh(&ip6_tnl_lock);
308 tnls_wc[0] = NULL; 308 tnls_wc[0] = NULL;
309 write_unlock_bh(&ip6ip6_lock); 309 write_unlock_bh(&ip6_tnl_lock);
310 } else { 310 } else {
311 ip6ip6_tnl_unlink(t); 311 ip6_tnl_unlink(t);
312 } 312 }
313 ip6_tnl_dst_reset(t); 313 ip6_tnl_dst_reset(t);
314 dev_put(dev); 314 dev_put(dev);
@@ -400,8 +400,8 @@ ip6_tnl_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
400 in trouble since we might need the source address for further 400 in trouble since we might need the source address for further
401 processing of the error. */ 401 processing of the error. */
402 402
403 read_lock(&ip6ip6_lock); 403 read_lock(&ip6_tnl_lock);
404 if ((t = ip6ip6_tnl_lookup(&ipv6h->daddr, &ipv6h->saddr)) == NULL) 404 if ((t = ip6_tnl_lookup(&ipv6h->daddr, &ipv6h->saddr)) == NULL)
405 goto out; 405 goto out;
406 406
407 err = 0; 407 err = 0;
@@ -469,7 +469,7 @@ ip6_tnl_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
469 *msg = rel_msg; 469 *msg = rel_msg;
470 470
471out: 471out:
472 read_unlock(&ip6ip6_lock); 472 read_unlock(&ip6_tnl_lock);
473 return err; 473 return err;
474} 474}
475 475
@@ -662,7 +662,7 @@ static inline int ip6_tnl_rcv_ctl(struct ip6_tnl *t)
662} 662}
663 663
664/** 664/**
665 * ip6ip6_rcv - decapsulate IPv6 packet and retransmit it locally 665 * ip6_tnl_rcv - decapsulate IPv6 packet and retransmit it locally
666 * @skb: received socket buffer 666 * @skb: received socket buffer
667 * @protocol: ethernet protocol ID 667 * @protocol: ethernet protocol ID
668 * @dscp_ecn_decapsulate: the function to decapsulate DSCP code and ECN 668 * @dscp_ecn_decapsulate: the function to decapsulate DSCP code and ECN
@@ -680,17 +680,17 @@ static int ip6_tnl_rcv(struct sk_buff *skb, __u16 protocol,
680 680
681 ipv6h = skb->nh.ipv6h; 681 ipv6h = skb->nh.ipv6h;
682 682
683 read_lock(&ip6ip6_lock); 683 read_lock(&ip6_tnl_lock);
684 684
685 if ((t = ip6ip6_tnl_lookup(&ipv6h->saddr, &ipv6h->daddr)) != NULL) { 685 if ((t = ip6_tnl_lookup(&ipv6h->saddr, &ipv6h->daddr)) != NULL) {
686 if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) { 686 if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) {
687 read_unlock(&ip6ip6_lock); 687 read_unlock(&ip6_tnl_lock);
688 goto discard; 688 goto discard;
689 } 689 }
690 690
691 if (!ip6_tnl_rcv_ctl(t)) { 691 if (!ip6_tnl_rcv_ctl(t)) {
692 t->stat.rx_dropped++; 692 t->stat.rx_dropped++;
693 read_unlock(&ip6ip6_lock); 693 read_unlock(&ip6_tnl_lock);
694 goto discard; 694 goto discard;
695 } 695 }
696 secpath_reset(skb); 696 secpath_reset(skb);
@@ -709,10 +709,10 @@ static int ip6_tnl_rcv(struct sk_buff *skb, __u16 protocol,
709 t->stat.rx_packets++; 709 t->stat.rx_packets++;
710 t->stat.rx_bytes += skb->len; 710 t->stat.rx_bytes += skb->len;
711 netif_rx(skb); 711 netif_rx(skb);
712 read_unlock(&ip6ip6_lock); 712 read_unlock(&ip6_tnl_lock);
713 return 0; 713 return 0;
714 } 714 }
715 read_unlock(&ip6ip6_lock); 715 read_unlock(&ip6_tnl_lock);
716 return 1; 716 return 1;
717 717
718discard: 718discard:
@@ -750,7 +750,7 @@ static void init_tel_txopt(struct ipv6_tel_txoption *opt, __u8 encap_limit)
750} 750}
751 751
752/** 752/**
753 * ip6ip6_tnl_addr_conflict - compare packet addresses to tunnel's own 753 * ip6_tnl_addr_conflict - compare packet addresses to tunnel's own
754 * @t: the outgoing tunnel device 754 * @t: the outgoing tunnel device
755 * @hdr: IPv6 header from the incoming packet 755 * @hdr: IPv6 header from the incoming packet
756 * 756 *
@@ -764,7 +764,7 @@ static void init_tel_txopt(struct ipv6_tel_txoption *opt, __u8 encap_limit)
764 **/ 764 **/
765 765
766static inline int 766static inline int
767ip6ip6_tnl_addr_conflict(struct ip6_tnl *t, struct ipv6hdr *hdr) 767ip6_tnl_addr_conflict(struct ip6_tnl *t, struct ipv6hdr *hdr)
768{ 768{
769 return ipv6_addr_equal(&t->parms.raddr, &hdr->saddr); 769 return ipv6_addr_equal(&t->parms.raddr, &hdr->saddr);
770} 770}
@@ -978,7 +978,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
978 __u32 mtu; 978 __u32 mtu;
979 int err; 979 int err;
980 980
981 if (!ip6_tnl_xmit_ctl(t) || ip6ip6_tnl_addr_conflict(t, ipv6h)) 981 if (!ip6_tnl_xmit_ctl(t) || ip6_tnl_addr_conflict(t, ipv6h))
982 return -1; 982 return -1;
983 983
984 if ((offset = parse_tlv_tnl_enc_lim(skb, skb->nh.raw)) > 0) { 984 if ((offset = parse_tlv_tnl_enc_lim(skb, skb->nh.raw)) > 0) {
@@ -1068,7 +1068,7 @@ static void ip6_tnl_set_cap(struct ip6_tnl *t)
1068 } 1068 }
1069} 1069}
1070 1070
1071static void ip6ip6_tnl_link_config(struct ip6_tnl *t) 1071static void ip6_tnl_link_config(struct ip6_tnl *t)
1072{ 1072{
1073 struct net_device *dev = t->dev; 1073 struct net_device *dev = t->dev;
1074 struct ip6_tnl_parm *p = &t->parms; 1074 struct ip6_tnl_parm *p = &t->parms;
@@ -1121,17 +1121,17 @@ static void ip6ip6_tnl_link_config(struct ip6_tnl *t)
1121} 1121}
1122 1122
1123/** 1123/**
1124 * ip6ip6_tnl_change - update the tunnel parameters 1124 * ip6_tnl_change - update the tunnel parameters
1125 * @t: tunnel to be changed 1125 * @t: tunnel to be changed
1126 * @p: tunnel configuration parameters 1126 * @p: tunnel configuration parameters
1127 * @active: != 0 if tunnel is ready for use 1127 * @active: != 0 if tunnel is ready for use
1128 * 1128 *
1129 * Description: 1129 * Description:
1130 * ip6ip6_tnl_change() updates the tunnel parameters 1130 * ip6_tnl_change() updates the tunnel parameters
1131 **/ 1131 **/
1132 1132
1133static int 1133static int
1134ip6ip6_tnl_change(struct ip6_tnl *t, struct ip6_tnl_parm *p) 1134ip6_tnl_change(struct ip6_tnl *t, struct ip6_tnl_parm *p)
1135{ 1135{
1136 ipv6_addr_copy(&t->parms.laddr, &p->laddr); 1136 ipv6_addr_copy(&t->parms.laddr, &p->laddr);
1137 ipv6_addr_copy(&t->parms.raddr, &p->raddr); 1137 ipv6_addr_copy(&t->parms.raddr, &p->raddr);
@@ -1141,18 +1141,18 @@ ip6ip6_tnl_change(struct ip6_tnl *t, struct ip6_tnl_parm *p)
1141 t->parms.flowinfo = p->flowinfo; 1141 t->parms.flowinfo = p->flowinfo;
1142 t->parms.link = p->link; 1142 t->parms.link = p->link;
1143 ip6_tnl_dst_reset(t); 1143 ip6_tnl_dst_reset(t);
1144 ip6ip6_tnl_link_config(t); 1144 ip6_tnl_link_config(t);
1145 return 0; 1145 return 0;
1146} 1146}
1147 1147
1148/** 1148/**
1149 * ip6ip6_tnl_ioctl - configure ipv6 tunnels from userspace 1149 * ip6_tnl_ioctl - configure ipv6 tunnels from userspace
1150 * @dev: virtual device associated with tunnel 1150 * @dev: virtual device associated with tunnel
1151 * @ifr: parameters passed from userspace 1151 * @ifr: parameters passed from userspace
1152 * @cmd: command to be performed 1152 * @cmd: command to be performed
1153 * 1153 *
1154 * Description: 1154 * Description:
1155 * ip6ip6_tnl_ioctl() is used for managing IPv6 tunnels 1155 * ip6_tnl_ioctl() is used for managing IPv6 tunnels
1156 * from userspace. 1156 * from userspace.
1157 * 1157 *
1158 * The possible commands are the following: 1158 * The possible commands are the following:
@@ -1174,7 +1174,7 @@ ip6ip6_tnl_change(struct ip6_tnl *t, struct ip6_tnl_parm *p)
1174 **/ 1174 **/
1175 1175
1176static int 1176static int
1177ip6ip6_tnl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 1177ip6_tnl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
1178{ 1178{
1179 int err = 0; 1179 int err = 0;
1180 struct ip6_tnl_parm p; 1180 struct ip6_tnl_parm p;
@@ -1182,12 +1182,12 @@ ip6ip6_tnl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
1182 1182
1183 switch (cmd) { 1183 switch (cmd) {
1184 case SIOCGETTUNNEL: 1184 case SIOCGETTUNNEL:
1185 if (dev == ip6ip6_fb_tnl_dev) { 1185 if (dev == ip6_fb_tnl_dev) {
1186 if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof (p))) { 1186 if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof (p))) {
1187 err = -EFAULT; 1187 err = -EFAULT;
1188 break; 1188 break;
1189 } 1189 }
1190 t = ip6ip6_tnl_locate(&p, 0); 1190 t = ip6_tnl_locate(&p, 0);
1191 } 1191 }
1192 if (t == NULL) 1192 if (t == NULL)
1193 t = netdev_priv(dev); 1193 t = netdev_priv(dev);
@@ -1207,8 +1207,8 @@ ip6ip6_tnl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
1207 err = -EINVAL; 1207 err = -EINVAL;
1208 if (p.proto != IPPROTO_IPV6) 1208 if (p.proto != IPPROTO_IPV6)
1209 break; 1209 break;
1210 t = ip6ip6_tnl_locate(&p, cmd == SIOCADDTUNNEL); 1210 t = ip6_tnl_locate(&p, cmd == SIOCADDTUNNEL);
1211 if (dev != ip6ip6_fb_tnl_dev && cmd == SIOCCHGTUNNEL) { 1211 if (dev != ip6_fb_tnl_dev && cmd == SIOCCHGTUNNEL) {
1212 if (t != NULL) { 1212 if (t != NULL) {
1213 if (t->dev != dev) { 1213 if (t->dev != dev) {
1214 err = -EEXIST; 1214 err = -EEXIST;
@@ -1217,9 +1217,9 @@ ip6ip6_tnl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
1217 } else 1217 } else
1218 t = netdev_priv(dev); 1218 t = netdev_priv(dev);
1219 1219
1220 ip6ip6_tnl_unlink(t); 1220 ip6_tnl_unlink(t);
1221 err = ip6ip6_tnl_change(t, &p); 1221 err = ip6_tnl_change(t, &p);
1222 ip6ip6_tnl_link(t); 1222 ip6_tnl_link(t);
1223 netdev_state_change(dev); 1223 netdev_state_change(dev);
1224 } 1224 }
1225 if (t) { 1225 if (t) {
@@ -1235,15 +1235,15 @@ ip6ip6_tnl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
1235 if (!capable(CAP_NET_ADMIN)) 1235 if (!capable(CAP_NET_ADMIN))
1236 break; 1236 break;
1237 1237
1238 if (dev == ip6ip6_fb_tnl_dev) { 1238 if (dev == ip6_fb_tnl_dev) {
1239 err = -EFAULT; 1239 err = -EFAULT;
1240 if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof (p))) 1240 if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof (p)))
1241 break; 1241 break;
1242 err = -ENOENT; 1242 err = -ENOENT;
1243 if ((t = ip6ip6_tnl_locate(&p, 0)) == NULL) 1243 if ((t = ip6_tnl_locate(&p, 0)) == NULL)
1244 break; 1244 break;
1245 err = -EPERM; 1245 err = -EPERM;
1246 if (t->dev == ip6ip6_fb_tnl_dev) 1246 if (t->dev == ip6_fb_tnl_dev)
1247 break; 1247 break;
1248 dev = t->dev; 1248 dev = t->dev;
1249 } 1249 }
@@ -1257,20 +1257,20 @@ ip6ip6_tnl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
1257} 1257}
1258 1258
1259/** 1259/**
1260 * ip6ip6_tnl_get_stats - return the stats for tunnel device 1260 * ip6_tnl_get_stats - return the stats for tunnel device
1261 * @dev: virtual device associated with tunnel 1261 * @dev: virtual device associated with tunnel
1262 * 1262 *
1263 * Return: stats for device 1263 * Return: stats for device
1264 **/ 1264 **/
1265 1265
1266static struct net_device_stats * 1266static struct net_device_stats *
1267ip6ip6_tnl_get_stats(struct net_device *dev) 1267ip6_tnl_get_stats(struct net_device *dev)
1268{ 1268{
1269 return &(((struct ip6_tnl *)netdev_priv(dev))->stat); 1269 return &(((struct ip6_tnl *)netdev_priv(dev))->stat);
1270} 1270}
1271 1271
1272/** 1272/**
1273 * ip6ip6_tnl_change_mtu - change mtu manually for tunnel device 1273 * ip6_tnl_change_mtu - change mtu manually for tunnel device
1274 * @dev: virtual device associated with tunnel 1274 * @dev: virtual device associated with tunnel
1275 * @new_mtu: the new mtu 1275 * @new_mtu: the new mtu
1276 * 1276 *
@@ -1280,7 +1280,7 @@ ip6ip6_tnl_get_stats(struct net_device *dev)
1280 **/ 1280 **/
1281 1281
1282static int 1282static int
1283ip6ip6_tnl_change_mtu(struct net_device *dev, int new_mtu) 1283ip6_tnl_change_mtu(struct net_device *dev, int new_mtu)
1284{ 1284{
1285 if (new_mtu < IPV6_MIN_MTU) { 1285 if (new_mtu < IPV6_MIN_MTU) {
1286 return -EINVAL; 1286 return -EINVAL;
@@ -1290,22 +1290,22 @@ ip6ip6_tnl_change_mtu(struct net_device *dev, int new_mtu)
1290} 1290}
1291 1291
1292/** 1292/**
1293 * ip6ip6_tnl_dev_setup - setup virtual tunnel device 1293 * ip6_tnl_dev_setup - setup virtual tunnel device
1294 * @dev: virtual device associated with tunnel 1294 * @dev: virtual device associated with tunnel
1295 * 1295 *
1296 * Description: 1296 * Description:
1297 * Initialize function pointers and device parameters 1297 * Initialize function pointers and device parameters
1298 **/ 1298 **/
1299 1299
1300static void ip6ip6_tnl_dev_setup(struct net_device *dev) 1300static void ip6_tnl_dev_setup(struct net_device *dev)
1301{ 1301{
1302 SET_MODULE_OWNER(dev); 1302 SET_MODULE_OWNER(dev);
1303 dev->uninit = ip6ip6_tnl_dev_uninit; 1303 dev->uninit = ip6_tnl_dev_uninit;
1304 dev->destructor = free_netdev; 1304 dev->destructor = free_netdev;
1305 dev->hard_start_xmit = ip6_tnl_xmit; 1305 dev->hard_start_xmit = ip6_tnl_xmit;
1306 dev->get_stats = ip6ip6_tnl_get_stats; 1306 dev->get_stats = ip6_tnl_get_stats;
1307 dev->do_ioctl = ip6ip6_tnl_ioctl; 1307 dev->do_ioctl = ip6_tnl_ioctl;
1308 dev->change_mtu = ip6ip6_tnl_change_mtu; 1308 dev->change_mtu = ip6_tnl_change_mtu;
1309 1309
1310 dev->type = ARPHRD_TUNNEL6; 1310 dev->type = ARPHRD_TUNNEL6;
1311 dev->hard_header_len = LL_MAX_HEADER + sizeof (struct ipv6hdr); 1311 dev->hard_header_len = LL_MAX_HEADER + sizeof (struct ipv6hdr);
@@ -1316,12 +1316,12 @@ static void ip6ip6_tnl_dev_setup(struct net_device *dev)
1316 1316
1317 1317
1318/** 1318/**
1319 * ip6ip6_tnl_dev_init_gen - general initializer for all tunnel devices 1319 * ip6_tnl_dev_init_gen - general initializer for all tunnel devices
1320 * @dev: virtual device associated with tunnel 1320 * @dev: virtual device associated with tunnel
1321 **/ 1321 **/
1322 1322
1323static inline void 1323static inline void
1324ip6ip6_tnl_dev_init_gen(struct net_device *dev) 1324ip6_tnl_dev_init_gen(struct net_device *dev)
1325{ 1325{
1326 struct ip6_tnl *t = netdev_priv(dev); 1326 struct ip6_tnl *t = netdev_priv(dev);
1327 t->fl.proto = IPPROTO_IPV6; 1327 t->fl.proto = IPPROTO_IPV6;
@@ -1330,31 +1330,31 @@ ip6ip6_tnl_dev_init_gen(struct net_device *dev)
1330} 1330}
1331 1331
1332/** 1332/**
1333 * ip6ip6_tnl_dev_init - initializer for all non fallback tunnel devices 1333 * ip6_tnl_dev_init - initializer for all non fallback tunnel devices
1334 * @dev: virtual device associated with tunnel 1334 * @dev: virtual device associated with tunnel
1335 **/ 1335 **/
1336 1336
1337static int 1337static int
1338ip6ip6_tnl_dev_init(struct net_device *dev) 1338ip6_tnl_dev_init(struct net_device *dev)
1339{ 1339{
1340 struct ip6_tnl *t = netdev_priv(dev); 1340 struct ip6_tnl *t = netdev_priv(dev);
1341 ip6ip6_tnl_dev_init_gen(dev); 1341 ip6_tnl_dev_init_gen(dev);
1342 ip6ip6_tnl_link_config(t); 1342 ip6_tnl_link_config(t);
1343 return 0; 1343 return 0;
1344} 1344}
1345 1345
1346/** 1346/**
1347 * ip6ip6_fb_tnl_dev_init - initializer for fallback tunnel device 1347 * ip6_fb_tnl_dev_init - initializer for fallback tunnel device
1348 * @dev: fallback device 1348 * @dev: fallback device
1349 * 1349 *
1350 * Return: 0 1350 * Return: 0
1351 **/ 1351 **/
1352 1352
1353static int 1353static int
1354ip6ip6_fb_tnl_dev_init(struct net_device *dev) 1354ip6_fb_tnl_dev_init(struct net_device *dev)
1355{ 1355{
1356 struct ip6_tnl *t = netdev_priv(dev); 1356 struct ip6_tnl *t = netdev_priv(dev);
1357 ip6ip6_tnl_dev_init_gen(dev); 1357 ip6_tnl_dev_init_gen(dev);
1358 dev_hold(dev); 1358 dev_hold(dev);
1359 tnls_wc[0] = t; 1359 tnls_wc[0] = t;
1360 return 0; 1360 return 0;
@@ -1383,27 +1383,27 @@ static int __init ip6_tunnel_init(void)
1383 int err; 1383 int err;
1384 1384
1385 if (xfrm6_tunnel_register(&ip4ip6_handler, AF_INET)) { 1385 if (xfrm6_tunnel_register(&ip4ip6_handler, AF_INET)) {
1386 printk(KERN_ERR "ip4ip6 init: can't register tunnel\n"); 1386 printk(KERN_ERR "ip6_tunnel init: can't register ip4ip6\n");
1387 err = -EAGAIN; 1387 err = -EAGAIN;
1388 goto out; 1388 goto out;
1389 } 1389 }
1390 1390
1391 if (xfrm6_tunnel_register(&ip6ip6_handler, AF_INET6)) { 1391 if (xfrm6_tunnel_register(&ip6ip6_handler, AF_INET6)) {
1392 printk(KERN_ERR "ip6ip6 init: can't register tunnel\n"); 1392 printk(KERN_ERR "ip6_tunnel init: can't register ip6ip6\n");
1393 err = -EAGAIN; 1393 err = -EAGAIN;
1394 goto unreg_ip4ip6; 1394 goto unreg_ip4ip6;
1395 } 1395 }
1396 ip6ip6_fb_tnl_dev = alloc_netdev(sizeof(struct ip6_tnl), "ip6tnl0", 1396 ip6_fb_tnl_dev = alloc_netdev(sizeof(struct ip6_tnl), "ip6tnl0",
1397 ip6ip6_tnl_dev_setup); 1397 ip6_tnl_dev_setup);
1398 1398
1399 if (!ip6ip6_fb_tnl_dev) { 1399 if (!ip6_fb_tnl_dev) {
1400 err = -ENOMEM; 1400 err = -ENOMEM;
1401 goto fail; 1401 goto fail;
1402 } 1402 }
1403 ip6ip6_fb_tnl_dev->init = ip6ip6_fb_tnl_dev_init; 1403 ip6_fb_tnl_dev->init = ip6_fb_tnl_dev_init;
1404 1404
1405 if ((err = register_netdev(ip6ip6_fb_tnl_dev))) { 1405 if ((err = register_netdev(ip6_fb_tnl_dev))) {
1406 free_netdev(ip6ip6_fb_tnl_dev); 1406 free_netdev(ip6_fb_tnl_dev);
1407 goto fail; 1407 goto fail;
1408 } 1408 }
1409 return 0; 1409 return 0;
@@ -1415,7 +1415,7 @@ out:
1415 return err; 1415 return err;
1416} 1416}
1417 1417
1418static void __exit ip6ip6_destroy_tunnels(void) 1418static void __exit ip6_tnl_destroy_tunnels(void)
1419{ 1419{
1420 int h; 1420 int h;
1421 struct ip6_tnl *t; 1421 struct ip6_tnl *t;
@@ -1436,13 +1436,13 @@ static void __exit ip6ip6_destroy_tunnels(void)
1436static void __exit ip6_tunnel_cleanup(void) 1436static void __exit ip6_tunnel_cleanup(void)
1437{ 1437{
1438 if (xfrm6_tunnel_deregister(&ip4ip6_handler, AF_INET)) 1438 if (xfrm6_tunnel_deregister(&ip4ip6_handler, AF_INET))
1439 printk(KERN_INFO "ip4ip6 close: can't deregister tunnel\n"); 1439 printk(KERN_INFO "ip6_tunnel close: can't deregister ip4ip6\n");
1440 1440
1441 if (xfrm6_tunnel_deregister(&ip6ip6_handler, AF_INET6)) 1441 if (xfrm6_tunnel_deregister(&ip6ip6_handler, AF_INET6))
1442 printk(KERN_INFO "ip6ip6 close: can't deregister tunnel\n"); 1442 printk(KERN_INFO "ip6_tunnel close: can't deregister ip6ip6\n");
1443 1443
1444 rtnl_lock(); 1444 rtnl_lock();
1445 ip6ip6_destroy_tunnels(); 1445 ip6_tnl_destroy_tunnels();
1446 rtnl_unlock(); 1446 rtnl_unlock();
1447} 1447}
1448 1448