| /* 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 |