--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/proftpd/dtrace/ftp.d Tue May 19 02:34:35 2015 -0700
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
+ */
+
+#pragma D depends_on library net.d
+
+typedef struct ftpinfo {
+ string fti_user; /* user name */
+ string fti_cmd; /* FTP command */
+ string fti_pathname; /* path of file being operated upon */
+ uint64_t fti_nbytes; /* bytes transferred, if any */
+ int fti_fd; /* fd for transfer, if any */
+} ftpinfo_t;
+
+/*
+ * This structure must match the definition of same in ftp_provider_impl.h.
+ */
+typedef struct ftpproto {
+ uint32_t ftp_user; /* user name */
+ uint32_t ftp_cmd; /* FTP command */
+ uint32_t ftp_pathname; /* path of file being operated upon */
+ uint32_t ftp_raddr; /* remote address, as IPv6 address */
+ uint32_t ftp_fd; /* fd for transfer, if any */
+ uint32_t ftp_pad; /* padding for copyin() */
+ uint64_t ftp_nbytes; /* bytes transferred, if any */
+} ftpproto_t;
+
+#pragma D binding "1.6.1" translator
+translator conninfo_t <ftpproto_t *f> {
+ ci_protocol = "tcp";
+ ci_remote = copyinstr((uintptr_t)
+ *(uint32_t *)copyin((uintptr_t)&f->ftp_raddr, sizeof (uint32_t)));
+ ci_local = "<unknown>";
+};
+
+#pragma D binding "1.6.1" translator
+translator ftpinfo_t <ftpproto_t *f> {
+ fti_user = copyinstr((uintptr_t)
+ *(uint32_t *)copyin((uintptr_t)&f->ftp_user, sizeof (uint32_t)));
+ fti_cmd = copyinstr((uintptr_t)
+ *(uint32_t *)copyin((uintptr_t)&f->ftp_cmd, sizeof (uint32_t)));
+ fti_pathname = copyinstr((uintptr_t)
+ *(uint32_t *)copyin((uintptr_t)&f->ftp_pathname,
+ sizeof (uint32_t)));
+ fti_nbytes =
+ *(uint64_t *)copyin((uintptr_t)&f->ftp_nbytes, sizeof (uint64_t));
+ fti_fd = *(uint32_t *)copyin((uintptr_t)&f->ftp_fd, sizeof (uint32_t));
+};