Commit | Line | Data |
---|---|---|
6f52b16c | 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
0b2e6644 GG |
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 |