Home | History | Annotate | Download | only in linux
      1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
      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
     62