]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/dev/dtrace/scripts/mptcp.d
xnu-2422.1.72.tar.gz
[apple/xnu.git] / bsd / dev / dtrace / scripts / mptcp.d
diff --git a/bsd/dev/dtrace/scripts/mptcp.d b/bsd/dev/dtrace/scripts/mptcp.d
new file mode 100644 (file)
index 0000000..cc7b9d3
--- /dev/null
@@ -0,0 +1,231 @@
+/*
+ * Copyright (c) 2013 Apple Computer, Inc.  All Rights Reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#pragma D depends_on library darwin.d
+#pragma D depends_on library socket.d
+#pragma D depends_on module mach_kernel
+#pragma D depends_on provider mptcp
+#pragma D depends_on provider ip
+
+/*
+ * MPTCP Protocol Control Block.
+ */
+inline int MPTCPS_CLOSED                = 0;
+#pragma D binding "1.0" MPTCPS_CLOSED
+inline int MPTCPS_LISTEN                = 1;
+#pragma D binding "1.0" MPTCPS_LISTEN
+inline int MPTCPS_ESTABLISHED           = 2;
+#pragma D binding "1.0" MPTCPS_ESTABLISHED
+inline int MPTCPS_CLOSE_WAIT            = 3;
+#pragma D binding "1.0" MPTCPS_CLOSE_WAIT
+inline int MPTCPS_FIN_WAIT_1            = 4;
+#pragma D binding "1.0" MPTCPS_FIN_WAIT_1
+inline int MPTCPS_CLOSING               = 5;
+#pragma D binding "1.0" MPTCPS_CLOSING
+inline int MPTCPS_LAST_ACK              = 6;
+#pragma D binding "1.0" MPTCPS_LAST_ACK
+inline int MPTCPS_FIN_WAIT_2            = 7;
+#pragma D binding "1.0" MPTCPS_FIN_WAIT_2
+inline int MPTCPS_TIME_WAIT             = 8;
+#pragma D binding "1.0" MPTCPS_TIME_WAIT
+inline int MPTCPS_FASTCLOSE_WAIT        = 9;
+#pragma D binding "1.0" MPTCPS_FASTCLOSE_WAIT
+
+typedef uint64_t mptcp_key_t;
+typedef uint32_t mptcp_token_t;
+
+typedef struct mptsinfo {
+       string          state;
+       uint32_t        flags;
+       uint32_t        vers;
+       uint32_t        error;
+       mptcp_key_t     localkey;
+       mptcp_key_t     remotekey;
+       mptcp_token_t   localtoken;
+       mptcp_token_t   remotetoken;
+       int             rxtshift;
+       uint32_t        rxtstart;
+       uint64_t        rtseq;
+       uint32_t        timervals;
+       uint32_t        timewait;
+       uint64_t        snduna;
+       uint64_t        sndnxt;
+       uint64_t        sndmax;
+       uint64_t        local_idsn;
+       uint32_t        sndwnd;
+       uint64_t        rcvnxt;
+       uint64_t        rcvatmark;
+       uint64_t        remote_idsn;
+       uint32_t        rcvwnd;
+       struct mptcb    *mptcb;
+} mptsinfo_t;
+
+#pragma D binding "1.0" translator
+translator mptsinfo_t < struct mptcb *T > {
+       state        = T->mpt_state == MPTCPS_CLOSED ? "state-closed" :
+                      T->mpt_state == MPTCPS_LISTEN ? "state-listen" :
+                      T->mpt_state == MPTCPS_ESTABLISHED ?
+                          "state-established" :
+                      T->mpt_state == MPTCPS_CLOSE_WAIT ? "state-close-wait" :
+                      T->mpt_state == MPTCPS_FIN_WAIT_1 ? "state-fin-wait-1" :
+                      T->mpt_state == MPTCPS_CLOSING ? "state-closing" :
+                      T->mpt_state == MPTCPS_LAST_ACK ? "state-last-ack" :
+                      T->mpt_state == MPTCPS_FIN_WAIT_2 ? "state-fin-wait-2" :
+                      T->mpt_state == MPTCPS_TIME_WAIT ? "state-time-wait" :
+                      T->mpt_state == MPTCPS_FASTCLOSE_WAIT ?
+                          "state-fastclose-wait" :
+                      "<unknown>";
+       flags        = T->mpt_flags;
+       vers         = T->mpt_version;
+       error        = T->mpt_softerror;
+       localkey     = T->mpt_localkey ? *T->mpt_localkey : 0;
+       remotekey    = T->mpt_remotekey;
+       localtoken   = T->mpt_localtoken;
+       remotetoken  = T->mpt_remotetoken;
+       rxtshift     = T->mpt_rxtshift;
+       rxtstart     = T->mpt_rxtstart;
+       rtseq        = T->mpt_rtseq;
+       timervals    = T->mpt_timer_vals;
+       timewait     = T->mpt_timewait;
+       snduna       = T->mpt_snduna;
+       sndnxt       = T->mpt_sndnxt;
+       sndmax       = T->mpt_sndmax;
+       local_idsn   = T->mpt_local_idsn;
+       sndwnd       = T->mpt_sndwnd;
+       rcvnxt       = T->mpt_rcvnxt;
+       rcvatmark    = T->mpt_rcvatmark;
+       remote_idsn  = T->mpt_remote_idsn;
+       rcvwnd       = T->mpt_rcvwnd;
+       mptcb        = T;
+};
+
+/*
+ * Multipath Control Block.
+ */
+inline int MPPCB_STATE_INUSE   = 1;
+#pragma D binding "1.0" MPPCB_STATE_INUSE
+inline int MPPCB_STATE_DEAD    = 2;
+#pragma D binding "1.0" MPPCB_STATE_DEAD
+
+typedef struct mppsinfo {
+       string          state;
+       uint32_t        flags;
+       struct mppcb    *mppcb;
+} mppsinfo_t;
+
+#pragma D binding "1.0" translator
+translator mppsinfo_t < struct mppcb *T> {
+       state  = T ? 
+           T->mpp_state == MPPCB_STATE_INUSE ? "state-inuse" :
+           T->mpp_state == MPPCB_STATE_DEAD ? "state-dead" :
+           "<unknown>" : "<null>";
+       flags  = T->mpp_flags;
+       mppcb  = T;
+};
+
+/*
+ * MPTCP Session.
+ */
+typedef struct mptsesinfo {
+       uint16_t        numflows;
+       uint16_t        nummpcapflows;
+       connid_t        connid_last;
+       uint8_t         flags;
+       struct mptses   *mptses;
+} mptsesinfo_t;
+
+#pragma D binding "1.0" translator
+translator mptsesinfo_t < struct mptses *T > {
+       numflows      = T->mpte_numflows;
+       nummpcapflows = T->mpte_nummpcapflows;
+       connid_last   = T->mpte_connid_last;
+       flags         = T->mpte_flags;
+       mptses        = T;
+};
+
+/*
+ * MPTCP Subflow.
+ */
+inline int MPTSF_ATTACHED       = 0x00001;
+#pragma D binding "1.0" MPTSF_ATTACHED
+inline int MPTSF_CONNECTING     = 0x00002;
+#pragma D binding "1.0" MPTSF_CONNECTING
+inline int MPTSF_CONNECT_PENDING= 0x00004;
+#pragma D binding "1.0" MPTSF_CONNECT_PENDING
+inline int MPTSF_CONNECTED      = 0x00008;
+#pragma D binding "1.0" MPTSF_CONNECTED
+inline int MPTSF_DISCONNECTING  = 0x00010;
+#pragma D binding "1.0" MPTSF_DISCONNECTING
+inline int MPTSF_DISCONNECTED   = 0x00020;
+#pragma D binding "1.0" MPTSF_DISCONNECTED
+inline int MPTSF_MP_CAPABLE     = 0x00040;
+#pragma D binding "1.0" MPTSF_MP_CAPABLE
+inline int MPTSF_MP_READY       = 0x00080;
+#pragma D binding "1.0" MPTSF_MP_READY
+inline int MPTSF_MP_DEGRADED    = 0x00100;
+#pragma D binding "1.0" MPTSF_MP_DEGRADED
+inline int MPTSF_SUSPENDED      = 0x00200;
+#pragma D binding "1.0" MPTSF_SUSPENDED
+inline int MPTSF_BOUND_IF       = 0x00400;
+#pragma D binding "1.0" MPTSF_BOUND_IF
+inline int MPTSF_BOUND_IP       = 0x00800;
+#pragma D binding "1.0" MPTSF_BOUND_IP
+inline int MPTSF_BOUND_PORT     = 0x01000;
+#pragma D binding "1.0" MPTSF_BOUND_PORT
+inline int MPTSF_PREFERRED      = 0x02000;
+#pragma D binding "1.0" MPTSF_PREFERRED
+inline int MPTSF_SOPT_OLDVAL    = 0x04000;
+#pragma D binding "1.0" MPTSF_SOPT_OLDVAL
+inline int MPTSF_SOPT_INPROG    = 0x08000;
+#pragma D binding "1.0" MPTSF_SOPT_INPROG
+inline int MPTSF_DELETEOK       = 0x10000;
+#pragma D binding "1.0" MPTSF_DELETEOK
+inline int MPTSF_FAILINGOVER    = 0x20000;
+#pragma D binding "1.0" MPTSF_FAILINGOVER
+inline int MPTSF_ACTIVE         = 0x40000;
+#pragma D binding "1.0" MPTSF_ACTIVE
+inline int MPTSF_MPCAP_CTRSET   = 0x80000;
+#pragma D binding "1.0" MPTSF_MPCAP_CTRSET
+
+typedef struct mptsubinfo {
+       uint32_t        flags;
+       uint32_t        evctl;
+       uint32_t        family;
+       connid_t        connid;
+       uint32_t        rank;
+       int32_t         error;
+       uint64_t        sndnxt;
+       struct mptsub   *mptsub;
+} mptsubinfo_t;
+
+#pragma D binding "1.0" translator
+translator mptsubinfo_t < struct mptsub *T > {
+       flags   = T->mpts_flags;
+       evctl   = T->mpts_evctl;
+       family  = T->mpts_family;
+       connid  = T->mpts_connid;
+       rank    = T->mpts_rank;
+       error   = T->mpts_soerror;
+       sndnxt  = T->mpts_sndnxt;
+       mptsub  = T;
+};