diff options
Diffstat (limited to 'drivers/net/tun.c')
-rw-r--r-- | drivers/net/tun.c | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 329d9feb9b89..20db30891db0 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c | |||
@@ -177,7 +177,7 @@ static struct net_device_stats *tun_net_stats(struct net_device *dev) | |||
177 | static void tun_net_init(struct net_device *dev) | 177 | static void tun_net_init(struct net_device *dev) |
178 | { | 178 | { |
179 | struct tun_struct *tun = netdev_priv(dev); | 179 | struct tun_struct *tun = netdev_priv(dev); |
180 | 180 | ||
181 | switch (tun->flags & TUN_TYPE_MASK) { | 181 | switch (tun->flags & TUN_TYPE_MASK) { |
182 | case TUN_TUN_DEV: | 182 | case TUN_TUN_DEV: |
183 | /* Point-to-Point TUN Device */ | 183 | /* Point-to-Point TUN Device */ |
@@ -186,7 +186,7 @@ static void tun_net_init(struct net_device *dev) | |||
186 | dev->mtu = 1500; | 186 | dev->mtu = 1500; |
187 | 187 | ||
188 | /* Zero header length */ | 188 | /* Zero header length */ |
189 | dev->type = ARPHRD_NONE; | 189 | dev->type = ARPHRD_NONE; |
190 | dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; | 190 | dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; |
191 | dev->tx_queue_len = TUN_READQ_SIZE; /* We prefer our own queue length */ | 191 | dev->tx_queue_len = TUN_READQ_SIZE; /* We prefer our own queue length */ |
192 | break; | 192 | break; |
@@ -206,7 +206,7 @@ static void tun_net_init(struct net_device *dev) | |||
206 | 206 | ||
207 | /* Poll */ | 207 | /* Poll */ |
208 | static unsigned int tun_chr_poll(struct file *file, poll_table * wait) | 208 | static unsigned int tun_chr_poll(struct file *file, poll_table * wait) |
209 | { | 209 | { |
210 | struct tun_struct *tun = file->private_data; | 210 | struct tun_struct *tun = file->private_data; |
211 | unsigned int mask = POLLOUT | POLLWRNORM; | 211 | unsigned int mask = POLLOUT | POLLWRNORM; |
212 | 212 | ||
@@ -216,7 +216,7 @@ static unsigned int tun_chr_poll(struct file *file, poll_table * wait) | |||
216 | DBG(KERN_INFO "%s: tun_chr_poll\n", tun->dev->name); | 216 | DBG(KERN_INFO "%s: tun_chr_poll\n", tun->dev->name); |
217 | 217 | ||
218 | poll_wait(file, &tun->read_wait, wait); | 218 | poll_wait(file, &tun->read_wait, wait); |
219 | 219 | ||
220 | if (!skb_queue_empty(&tun->readq)) | 220 | if (!skb_queue_empty(&tun->readq)) |
221 | mask |= POLLIN | POLLRDNORM; | 221 | mask |= POLLIN | POLLRDNORM; |
222 | 222 | ||
@@ -240,7 +240,7 @@ static __inline__ ssize_t tun_get_user(struct tun_struct *tun, struct iovec *iv, | |||
240 | 240 | ||
241 | if ((tun->flags & TUN_TYPE_MASK) == TUN_TAP_DEV) | 241 | if ((tun->flags & TUN_TYPE_MASK) == TUN_TAP_DEV) |
242 | align = NET_IP_ALIGN; | 242 | align = NET_IP_ALIGN; |
243 | 243 | ||
244 | if (!(skb = alloc_skb(len + align, GFP_KERNEL))) { | 244 | if (!(skb = alloc_skb(len + align, GFP_KERNEL))) { |
245 | tun->stats.rx_dropped++; | 245 | tun->stats.rx_dropped++; |
246 | return -ENOMEM; | 246 | return -ENOMEM; |
@@ -267,29 +267,29 @@ static __inline__ ssize_t tun_get_user(struct tun_struct *tun, struct iovec *iv, | |||
267 | 267 | ||
268 | if (tun->flags & TUN_NOCHECKSUM) | 268 | if (tun->flags & TUN_NOCHECKSUM) |
269 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 269 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
270 | 270 | ||
271 | netif_rx_ni(skb); | 271 | netif_rx_ni(skb); |
272 | tun->dev->last_rx = jiffies; | 272 | tun->dev->last_rx = jiffies; |
273 | 273 | ||
274 | tun->stats.rx_packets++; | 274 | tun->stats.rx_packets++; |
275 | tun->stats.rx_bytes += len; | 275 | tun->stats.rx_bytes += len; |
276 | 276 | ||
277 | return count; | 277 | return count; |
278 | } | 278 | } |
279 | 279 | ||
280 | static inline size_t iov_total(const struct iovec *iv, unsigned long count) | 280 | static inline size_t iov_total(const struct iovec *iv, unsigned long count) |
281 | { | 281 | { |
282 | unsigned long i; | 282 | unsigned long i; |
283 | size_t len; | 283 | size_t len; |
284 | 284 | ||
285 | for (i = 0, len = 0; i < count; i++) | 285 | for (i = 0, len = 0; i < count; i++) |
286 | len += iv[i].iov_len; | 286 | len += iv[i].iov_len; |
287 | 287 | ||
288 | return len; | 288 | return len; |
289 | } | 289 | } |
290 | 290 | ||
291 | /* Writev */ | 291 | /* Writev */ |
292 | static ssize_t tun_chr_writev(struct file * file, const struct iovec *iv, | 292 | static ssize_t tun_chr_writev(struct file * file, const struct iovec *iv, |
293 | unsigned long count, loff_t *pos) | 293 | unsigned long count, loff_t *pos) |
294 | { | 294 | { |
295 | struct tun_struct *tun = file->private_data; | 295 | struct tun_struct *tun = file->private_data; |
@@ -303,7 +303,7 @@ static ssize_t tun_chr_writev(struct file * file, const struct iovec *iv, | |||
303 | } | 303 | } |
304 | 304 | ||
305 | /* Write */ | 305 | /* Write */ |
306 | static ssize_t tun_chr_write(struct file * file, const char __user * buf, | 306 | static ssize_t tun_chr_write(struct file * file, const char __user * buf, |
307 | size_t count, loff_t *pos) | 307 | size_t count, loff_t *pos) |
308 | { | 308 | { |
309 | struct iovec iv = { (void __user *) buf, count }; | 309 | struct iovec iv = { (void __user *) buf, count }; |
@@ -326,11 +326,11 @@ static __inline__ ssize_t tun_put_user(struct tun_struct *tun, | |||
326 | /* Packet will be striped */ | 326 | /* Packet will be striped */ |
327 | pi.flags |= TUN_PKT_STRIP; | 327 | pi.flags |= TUN_PKT_STRIP; |
328 | } | 328 | } |
329 | 329 | ||
330 | if (memcpy_toiovec(iv, (void *) &pi, sizeof(pi))) | 330 | if (memcpy_toiovec(iv, (void *) &pi, sizeof(pi))) |
331 | return -EFAULT; | 331 | return -EFAULT; |
332 | total += sizeof(pi); | 332 | total += sizeof(pi); |
333 | } | 333 | } |
334 | 334 | ||
335 | len = min_t(int, skb->len, len); | 335 | len = min_t(int, skb->len, len); |
336 | 336 | ||
@@ -427,7 +427,7 @@ static ssize_t tun_chr_readv(struct file *file, const struct iovec *iv, | |||
427 | } | 427 | } |
428 | 428 | ||
429 | /* Read */ | 429 | /* Read */ |
430 | static ssize_t tun_chr_read(struct file * file, char __user * buf, | 430 | static ssize_t tun_chr_read(struct file * file, char __user * buf, |
431 | size_t count, loff_t *pos) | 431 | size_t count, loff_t *pos) |
432 | { | 432 | { |
433 | struct iovec iv = { buf, count }; | 433 | struct iovec iv = { buf, count }; |
@@ -480,8 +480,8 @@ static int tun_set_iff(struct file *file, struct ifreq *ifr) | |||
480 | if (tun->owner != -1 && | 480 | if (tun->owner != -1 && |
481 | current->euid != tun->owner && !capable(CAP_NET_ADMIN)) | 481 | current->euid != tun->owner && !capable(CAP_NET_ADMIN)) |
482 | return -EPERM; | 482 | return -EPERM; |
483 | } | 483 | } |
484 | else if (__dev_get_by_name(ifr->ifr_name)) | 484 | else if (__dev_get_by_name(ifr->ifr_name)) |
485 | return -EINVAL; | 485 | return -EINVAL; |
486 | else { | 486 | else { |
487 | char *name; | 487 | char *name; |
@@ -501,9 +501,9 @@ static int tun_set_iff(struct file *file, struct ifreq *ifr) | |||
501 | /* TAP device */ | 501 | /* TAP device */ |
502 | flags |= TUN_TAP_DEV; | 502 | flags |= TUN_TAP_DEV; |
503 | name = "tap%d"; | 503 | name = "tap%d"; |
504 | } else | 504 | } else |
505 | goto failed; | 505 | goto failed; |
506 | 506 | ||
507 | if (*ifr->ifr_name) | 507 | if (*ifr->ifr_name) |
508 | name = ifr->ifr_name; | 508 | name = ifr->ifr_name; |
509 | 509 | ||
@@ -533,7 +533,7 @@ static int tun_set_iff(struct file *file, struct ifreq *ifr) | |||
533 | err = register_netdevice(tun->dev); | 533 | err = register_netdevice(tun->dev); |
534 | if (err < 0) | 534 | if (err < 0) |
535 | goto err_free_dev; | 535 | goto err_free_dev; |
536 | 536 | ||
537 | list_add(&tun->list, &tun_dev_list); | 537 | list_add(&tun->list, &tun_dev_list); |
538 | } | 538 | } |
539 | 539 | ||
@@ -557,7 +557,7 @@ static int tun_set_iff(struct file *file, struct ifreq *ifr) | |||
557 | return err; | 557 | return err; |
558 | } | 558 | } |
559 | 559 | ||
560 | static int tun_chr_ioctl(struct inode *inode, struct file *file, | 560 | static int tun_chr_ioctl(struct inode *inode, struct file *file, |
561 | unsigned int cmd, unsigned long arg) | 561 | unsigned int cmd, unsigned long arg) |
562 | { | 562 | { |
563 | struct tun_struct *tun = file->private_data; | 563 | struct tun_struct *tun = file->private_data; |
@@ -711,14 +711,14 @@ static int tun_chr_fasync(int fd, struct file *file, int on) | |||
711 | DBG(KERN_INFO "%s: tun_chr_fasync %d\n", tun->dev->name, on); | 711 | DBG(KERN_INFO "%s: tun_chr_fasync %d\n", tun->dev->name, on); |
712 | 712 | ||
713 | if ((ret = fasync_helper(fd, file, on, &tun->fasync)) < 0) | 713 | if ((ret = fasync_helper(fd, file, on, &tun->fasync)) < 0) |
714 | return ret; | 714 | return ret; |
715 | 715 | ||
716 | if (on) { | 716 | if (on) { |
717 | ret = f_setown(file, current->pid, 0); | 717 | ret = f_setown(file, current->pid, 0); |
718 | if (ret) | 718 | if (ret) |
719 | return ret; | 719 | return ret; |
720 | tun->flags |= TUN_FASYNC; | 720 | tun->flags |= TUN_FASYNC; |
721 | } else | 721 | } else |
722 | tun->flags &= ~TUN_FASYNC; | 722 | tun->flags &= ~TUN_FASYNC; |
723 | 723 | ||
724 | return 0; | 724 | return 0; |
@@ -762,7 +762,7 @@ static int tun_chr_close(struct inode *inode, struct file *file) | |||
762 | } | 762 | } |
763 | 763 | ||
764 | static struct file_operations tun_fops = { | 764 | static struct file_operations tun_fops = { |
765 | .owner = THIS_MODULE, | 765 | .owner = THIS_MODULE, |
766 | .llseek = no_llseek, | 766 | .llseek = no_llseek, |
767 | .read = tun_chr_read, | 767 | .read = tun_chr_read, |
768 | .readv = tun_chr_readv, | 768 | .readv = tun_chr_readv, |
@@ -772,7 +772,7 @@ static struct file_operations tun_fops = { | |||
772 | .ioctl = tun_chr_ioctl, | 772 | .ioctl = tun_chr_ioctl, |
773 | .open = tun_chr_open, | 773 | .open = tun_chr_open, |
774 | .release = tun_chr_close, | 774 | .release = tun_chr_close, |
775 | .fasync = tun_chr_fasync | 775 | .fasync = tun_chr_fasync |
776 | }; | 776 | }; |
777 | 777 | ||
778 | static struct miscdevice tun_miscdev = { | 778 | static struct miscdevice tun_miscdev = { |
@@ -883,7 +883,7 @@ static void tun_cleanup(void) | |||
883 | { | 883 | { |
884 | struct tun_struct *tun, *nxt; | 884 | struct tun_struct *tun, *nxt; |
885 | 885 | ||
886 | misc_deregister(&tun_miscdev); | 886 | misc_deregister(&tun_miscdev); |
887 | 887 | ||
888 | rtnl_lock(); | 888 | rtnl_lock(); |
889 | list_for_each_entry_safe(tun, nxt, &tun_dev_list, list) { | 889 | list_for_each_entry_safe(tun, nxt, &tun_dev_list, list) { |
@@ -891,7 +891,7 @@ static void tun_cleanup(void) | |||
891 | unregister_netdevice(tun->dev); | 891 | unregister_netdevice(tun->dev); |
892 | } | 892 | } |
893 | rtnl_unlock(); | 893 | rtnl_unlock(); |
894 | 894 | ||
895 | } | 895 | } |
896 | 896 | ||
897 | module_init(tun_init); | 897 | module_init(tun_init); |