History

VSOCK: Add vsockmon device

Add vsockmon virtual network device that receives packets from the vsock transports and exposes them to user space. Based on the nlmon device.

Gerard Garcia committed 9 years ago

Commit 0b2e6641 parent 531b3746 files · +242 −0Browse files

Showing the changes to include/uapi/linux (2 of 6 files). Show all

Unified · Split

2 files
  1. include/uapi/linux/Kbuild +1 −0
  2. include/uapi/linux/vsockmon.h +60 −0
include/uapi/linux/Kbuild+1−0
@@ -477,6 +477,7 @@ header-y += virtio_types.h · 476 unmodified lines
477477 header-y += virtio_vsock.h
478478 header-y += virtio_crypto.h
479479 header-y += vm_sockets.h
480+header-y += vsockmon.h
480481 header-y += vt.h
481482 header-y += vtpm_proxy.h
482483 header-y += wait.h
include/uapi/linux/vsockmon.h+60−0
@@ -0,0 +1,60 @@
1+#ifndef _UAPI_VSOCKMON_H
2+#define _UAPI_VSOCKMON_H
3+
4+#include <linux/virtio_vsock.h>
5+
6+/*
7+ * vsockmon is the AF_VSOCK packet capture device. Packets captured have the
8+ * following layout:
9+ *
10+ * +-----------------------------------+
11+ * | vsockmon header |
12+ * | (struct af_vsockmon_hdr) |
13+ * +-----------------------------------+
14+ * | transport header |
15+ * | (af_vsockmon_hdr->len bytes long) |
16+ * +-----------------------------------+
17+ * | payload |
18+ * | (until end of packet) |
19+ * +-----------------------------------+
20+ *
21+ * The vsockmon header is a transport-independent description of the packet.
22+ * It duplicates some of the information from the transport header so that
23+ * no transport-specific knowledge is necessary to process packets.
24+ *
25+ * The transport header is useful for low-level transport-specific packet
26+ * analysis. Transport type is given in af_vsockmon_hdr->transport and
27+ * transport header length is given in af_vsockmon_hdr->len.
28+ *
29+ * If af_vsockmon_hdr->op is AF_VSOCK_OP_PAYLOAD then the payload follows the
30+ * transport header. Other ops do not have a payload.
31+ */
32+
33+struct af_vsockmon_hdr {
34+ __le64 src_cid;
35+ __le64 dst_cid;
36+ __le32 src_port;
37+ __le32 dst_port;
38+ __le16 op; /* enum af_vsockmon_op */
39+ __le16 transport; /* enum af_vsockmon_transport */
40+ __le16 len; /* Transport header length */
41+ __u8 reserved[2];
42+};
43+
44+enum af_vsockmon_op {
45+ AF_VSOCK_OP_UNKNOWN = 0,
46+ AF_VSOCK_OP_CONNECT = 1,
47+ AF_VSOCK_OP_DISCONNECT = 2,
48+ AF_VSOCK_OP_CONTROL = 3,
49+ AF_VSOCK_OP_PAYLOAD = 4,
50+};
51+
52+enum af_vsockmon_transport {
53+ AF_VSOCK_TRANSPORT_UNKNOWN = 0,
54+ AF_VSOCK_TRANSPORT_NO_INFO = 1, /* No transport information */
55+
56+ /* Transport header type: struct virtio_vsock_hdr */
57+ AF_VSOCK_TRANSPORT_VIRTIO = 2,
58+};
59+
60+#endif