#include <linux/unix_diag.h> /* UNIX_DIAG_*, UDIAG_SHOW_*,
struct unix_diag_req */
#include <linux/vm_sockets.h> /* VMADDR_CID* */
-#include <linux/vm_sockets_diag.h> /* vsock_diag_req/vsock_diag_msg */
+#if HAVE_LINUX_VM_SOCKETS_DIAG_H
+# include <linux/vm_sockets_diag.h> /* vsock_diag_req/vsock_diag_msg */
+#endif
#include <sched.h> /* for setns(2) */
#include <search.h> /* tfind, tsearch */
#include <stdint.h>
/*
* VSOCK
*/
+#if HAVE_LINUX_VM_SOCKETS_DIAG_H
struct vsock_addr {
uint32_t cid;
uint32_t port;
send_diag_request(diagsd, &vdr, sizeof(vdr), handle_diag_vsock, netns);
}
+#else
+static void load_xinfo_from_diag_vsock(int diagsd __attribute__((__unused__)),
+ ino_t netns __attribute__((__unused__)))
+{
+}
+#endif /* HAVE_LINUX_VM_SOCKETS_DIAG_H */
# include <linux/unix_diag.h> /* for UNIX domain sockets */
#include <linux/sockios.h> /* SIOCGSKNS */
#include <linux/vm_sockets.h>
-#include <linux/vm_sockets_diag.h> /* vsock_diag_req/vsock_diag_msg */
+#if HAVE_LINUX_VM_SOCKETS_DIAG_H
+# include <linux/vm_sockets_diag.h> /* vsock_diag_req/vsock_diag_msg */
+#endif
#include <mqueue.h>
#include <net/if.h>
#include <netinet/in.h>
(struct sockaddr *)&in6);
}
-#if HAVE_DECL_VMADDR_CID_LOCAL
+#if HAVE_DECL_VMADDR_CID_LOCAL && HAVE_LINUX_VM_SOCKETS_DIAG_H
static void *make_vsock(const struct factory *factory, struct fdesc fdescs[],
int argc, char ** argv)
{
};
return NULL;
}
-#endif /* HAVE_DECL_VMADDR_CID_LOCAL */
+#endif /* HAVE_DECL_VMADDR_CID_LOCAL && HAVE_LINUX_VM_SOCKETS_DIAG_H */
#ifdef SIOCGSKNS
static void *make_netns(const struct factory *factory _U_, struct fdesc fdescs[],
size_t reqlen = 0;
int e;
struct unix_diag_req udr;
+#if HAVE_LINUX_VM_SOCKETS_DIAG_H
struct vsock_diag_req vdr;
+#endif /* HAVE_LINUX_VM_SOCKETS_DIAG_H */
if (strcmp(sfamily, "unix") == 0)
ifamily = AF_UNIX;
+#if HAVE_LINUX_VM_SOCKETS_DIAG_H
else if (strcmp(sfamily, "vsock") == 0)
ifamily = AF_VSOCK;
+#endif /* HAVE_LINUX_VM_SOCKETS_DIAG_H */
else
errx(EXIT_FAILURE, "unknown/unsupported family: %s", sfamily);
};
req = &udr;
reqlen = sizeof(udr);
- } else if (ifamily == AF_VSOCK) {
+ }
+#if HAVE_LINUX_VM_SOCKETS_DIAG_H
+ else if (ifamily == AF_VSOCK) {
vdr = (struct vsock_diag_req) {
.sdiag_family = AF_VSOCK,
.vdiag_states = ~(uint32_t)0,
req = &vdr;
reqlen = sizeof(vdr);
}
+#endif /* HAVE_LINUX_VM_SOCKETS_DIAG_H */
e = send_diag_request(diagsd, req, reqlen);
if (e) {
PARAM_END
}
},
-#if HAVE_DECL_VMADDR_CID_LOCAL
+#if HAVE_DECL_VMADDR_CID_LOCAL && HAVE_LINUX_VM_SOCKETS_DIAG_H
{
"vsock",
.desc = "AF_VSOCK sockets",
PARAM_END
}
},
-#endif /* HAVE_DECL_VMADDR_CID_LOCAL */
+#endif /* HAVE_DECL_VMADDR_CID_LOCAL && HAVE_LINUX_VM_SOCKETS_DIAG_H */
#ifdef SIOCGSKNS
{
.name = "netns",
.name = "family",
.type = PTYPE_STRING,
/* TODO: inet, inet6 */
- .desc = "name of a protocol family ([unix]|vsock)",
+ .desc = "name of a protocol family ([unix]"
+#if HAVE_LINUX_VM_SOCKETS_DIAG_H
+ "|vsock"
+#endif /* HAVE_LINUX_VM_SOCKETS_DIAG_H */
+ ")",
.defv.string = "unix",
},
PARAM_END