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