|  | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | 
|  | #ifndef _UAPI_VSOCKMON_H | 
|  | #define _UAPI_VSOCKMON_H | 
|  |  | 
|  | #include <linux/virtio_vsock.h> | 
|  |  | 
|  | /* | 
|  | * vsockmon is the AF_VSOCK packet capture device.  Packets captured have the | 
|  | * following layout: | 
|  | * | 
|  | *   +-----------------------------------+ | 
|  | *   |           vsockmon header         | | 
|  | *   |      (struct af_vsockmon_hdr)     | | 
|  | *   +-----------------------------------+ | 
|  | *   |          transport header         | | 
|  | *   | (af_vsockmon_hdr->len bytes long) | | 
|  | *   +-----------------------------------+ | 
|  | *   |              payload              | | 
|  | *   |       (until end of packet)       | | 
|  | *   +-----------------------------------+ | 
|  | * | 
|  | * The vsockmon header is a transport-independent description of the packet. | 
|  | * It duplicates some of the information from the transport header so that | 
|  | * no transport-specific knowledge is necessary to process packets. | 
|  | * | 
|  | * The transport header is useful for low-level transport-specific packet | 
|  | * analysis.  Transport type is given in af_vsockmon_hdr->transport and | 
|  | * transport header length is given in af_vsockmon_hdr->len. | 
|  | * | 
|  | * If af_vsockmon_hdr->op is AF_VSOCK_OP_PAYLOAD then the payload follows the | 
|  | * transport header.  Other ops do not have a payload. | 
|  | */ | 
|  |  | 
|  | struct af_vsockmon_hdr { | 
|  | __le64 src_cid; | 
|  | __le64 dst_cid; | 
|  | __le32 src_port; | 
|  | __le32 dst_port; | 
|  | __le16 op;			/* enum af_vsockmon_op */ | 
|  | __le16 transport;		/* enum af_vsockmon_transport */ | 
|  | __le16 len;			/* Transport header length */ | 
|  | __u8 reserved[2]; | 
|  | }; | 
|  |  | 
|  | enum af_vsockmon_op { | 
|  | AF_VSOCK_OP_UNKNOWN = 0, | 
|  | AF_VSOCK_OP_CONNECT = 1, | 
|  | AF_VSOCK_OP_DISCONNECT = 2, | 
|  | AF_VSOCK_OP_CONTROL = 3, | 
|  | AF_VSOCK_OP_PAYLOAD = 4, | 
|  | }; | 
|  |  | 
|  | enum af_vsockmon_transport { | 
|  | AF_VSOCK_TRANSPORT_UNKNOWN = 0, | 
|  | AF_VSOCK_TRANSPORT_NO_INFO = 1,	/* No transport information */ | 
|  |  | 
|  | /* Transport header type: struct virtio_vsock_hdr */ | 
|  | AF_VSOCK_TRANSPORT_VIRTIO = 2, | 
|  | }; | 
|  |  | 
|  | #endif |