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