diff options
author | Michael S. Tsirkin <mst@redhat.com> | 2010-01-14 01:17:09 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-01-15 04:43:28 -0500 |
commit | 05c2828c72c4eabf62376adfe27bd24797621f62 (patch) | |
tree | 4db94de98ef8e75d5038f6a889dd434f3747c9d3 /include/linux/if_tun.h | |
parent | ad72c347e56bf3a0231b9d686e17764157d2961c (diff) |
tun: export underlying socket
Tun device looks similar to a packet socket
in that both pass complete frames from/to userspace.
This patch fills in enough fields in the socket underlying tun driver
to support sendmsg/recvmsg operations, and message flags
MSG_TRUNC and MSG_DONTWAIT, and exports access to this socket
to modules. Regular read/write behaviour is unchanged.
This way, code using raw sockets to inject packets
into a physical device, can support injecting
packets into host network stack almost without modification.
First user of this interface will be vhost virtualization
accelerator.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/if_tun.h')
-rw-r--r-- | include/linux/if_tun.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/include/linux/if_tun.h b/include/linux/if_tun.h index 3f5fd523b49d..404abe00162c 100644 --- a/include/linux/if_tun.h +++ b/include/linux/if_tun.h | |||
@@ -86,4 +86,18 @@ struct tun_filter { | |||
86 | __u8 addr[0][ETH_ALEN]; | 86 | __u8 addr[0][ETH_ALEN]; |
87 | }; | 87 | }; |
88 | 88 | ||
89 | #ifdef __KERNEL__ | ||
90 | #if defined(CONFIG_TUN) || defined(CONFIG_TUN_MODULE) | ||
91 | struct socket *tun_get_socket(struct file *); | ||
92 | #else | ||
93 | #include <linux/err.h> | ||
94 | #include <linux/errno.h> | ||
95 | struct file; | ||
96 | struct socket; | ||
97 | static inline struct socket *tun_get_socket(struct file *f) | ||
98 | { | ||
99 | return ERR_PTR(-EINVAL); | ||
100 | } | ||
101 | #endif /* CONFIG_TUN */ | ||
102 | #endif /* __KERNEL__ */ | ||
89 | #endif /* __IF_TUN_H */ | 103 | #endif /* __IF_TUN_H */ |