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