root/include/linux/if_tap.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. tap_get_socket
  2. tap_get_ptr_ring

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _LINUX_IF_TAP_H_
   3 #define _LINUX_IF_TAP_H_
   4 
   5 #if IS_ENABLED(CONFIG_TAP)
   6 struct socket *tap_get_socket(struct file *);
   7 struct ptr_ring *tap_get_ptr_ring(struct file *file);
   8 #else
   9 #include <linux/err.h>
  10 #include <linux/errno.h>
  11 struct file;
  12 struct socket;
  13 static inline struct socket *tap_get_socket(struct file *f)
  14 {
  15         return ERR_PTR(-EINVAL);
  16 }
  17 static inline struct ptr_ring *tap_get_ptr_ring(struct file *f)
  18 {
  19         return ERR_PTR(-EINVAL);
  20 }
  21 #endif /* CONFIG_TAP */
  22 
  23 #include <net/sock.h>
  24 #include <linux/skb_array.h>
  25 
  26 /*
  27  * Maximum times a tap device can be opened. This can be used to
  28  * configure the number of receive queue, e.g. for multiqueue virtio.
  29  */
  30 #define MAX_TAP_QUEUES 256
  31 
  32 struct tap_queue;
  33 
  34 struct tap_dev {
  35         struct net_device       *dev;
  36         u16                     flags;
  37         /* This array tracks active taps. */
  38         struct tap_queue    __rcu *taps[MAX_TAP_QUEUES];
  39         /* This list tracks all taps (both enabled and disabled) */
  40         struct list_head        queue_list;
  41         int                     numvtaps;
  42         int                     numqueues;
  43         netdev_features_t       tap_features;
  44         int                     minor;
  45 
  46         void (*update_features)(struct tap_dev *tap, netdev_features_t features);
  47         void (*count_tx_dropped)(struct tap_dev *tap);
  48         void (*count_rx_dropped)(struct tap_dev *tap);
  49 };
  50 
  51 /*
  52  * A tap queue is the central object of tap module, it connects
  53  * an open character device to virtual interface. There can be
  54  * multiple queues on one interface, which map back to queues
  55  * implemented in hardware on the underlying device.
  56  *
  57  * tap_proto is used to allocate queues through the sock allocation
  58  * mechanism.
  59  *
  60  */
  61 
  62 struct tap_queue {
  63         struct sock sk;
  64         struct socket sock;
  65         int vnet_hdr_sz;
  66         struct tap_dev __rcu *tap;
  67         struct file *file;
  68         unsigned int flags;
  69         u16 queue_index;
  70         bool enabled;
  71         struct list_head next;
  72         struct ptr_ring ring;
  73 };
  74 
  75 rx_handler_result_t tap_handle_frame(struct sk_buff **pskb);
  76 void tap_del_queues(struct tap_dev *tap);
  77 int tap_get_minor(dev_t major, struct tap_dev *tap);
  78 void tap_free_minor(dev_t major, struct tap_dev *tap);
  79 int tap_queue_resize(struct tap_dev *tap);
  80 int tap_create_cdev(struct cdev *tap_cdev, dev_t *tap_major,
  81                     const char *device_name, struct module *module);
  82 void tap_destroy_cdev(dev_t major, struct cdev *tap_cdev);
  83 
  84 #endif /*_LINUX_IF_TAP_H_*/

/* [<][>][^][v][top][bottom][index][help] */