]> git.saurik.com Git - apple/xnu.git/blob - bsd/dev/dtrace/scripts/mptcp.d
xnu-3248.60.10.tar.gz
[apple/xnu.git] / bsd / dev / dtrace / scripts / mptcp.d
1 /*
2 * Copyright (c) 2013-2014 Apple Computer, Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24 #pragma D depends_on library darwin.d
25 #pragma D depends_on library socket.d
26 #pragma D depends_on module mach_kernel
27 #pragma D depends_on provider mptcp
28 #pragma D depends_on provider ip
29
30 /*
31 * MPTCP Protocol Control Block.
32 */
33 inline int MPTCPS_CLOSED = 0;
34 #pragma D binding "1.0" MPTCPS_CLOSED
35 inline int MPTCPS_LISTEN = 1;
36 #pragma D binding "1.0" MPTCPS_LISTEN
37 inline int MPTCPS_ESTABLISHED = 2;
38 #pragma D binding "1.0" MPTCPS_ESTABLISHED
39 inline int MPTCPS_CLOSE_WAIT = 3;
40 #pragma D binding "1.0" MPTCPS_CLOSE_WAIT
41 inline int MPTCPS_FIN_WAIT_1 = 4;
42 #pragma D binding "1.0" MPTCPS_FIN_WAIT_1
43 inline int MPTCPS_CLOSING = 5;
44 #pragma D binding "1.0" MPTCPS_CLOSING
45 inline int MPTCPS_LAST_ACK = 6;
46 #pragma D binding "1.0" MPTCPS_LAST_ACK
47 inline int MPTCPS_FIN_WAIT_2 = 7;
48 #pragma D binding "1.0" MPTCPS_FIN_WAIT_2
49 inline int MPTCPS_TIME_WAIT = 8;
50 #pragma D binding "1.0" MPTCPS_TIME_WAIT
51 inline int MPTCPS_FASTCLOSE_WAIT = 9;
52 #pragma D binding "1.0" MPTCPS_FASTCLOSE_WAIT
53 inline int MPTCPS_TERMINATE = 10;
54 #pragma D binding "1.0" MPTCPS_TERMINATE
55
56 typedef uint64_t mptcp_key_t;
57 typedef uint32_t mptcp_token_t;
58
59 typedef struct mptsinfo {
60 string state;
61 uint32_t flags;
62 uint32_t vers;
63 uint32_t error;
64 mptcp_key_t localkey;
65 mptcp_key_t remotekey;
66 mptcp_token_t localtoken;
67 mptcp_token_t remotetoken;
68 int rxtshift;
69 uint32_t rxtstart;
70 uint64_t rtseq;
71 uint32_t timervals;
72 uint32_t timewait;
73 uint64_t snduna;
74 uint64_t sndnxt;
75 uint64_t sndmax;
76 uint64_t local_idsn;
77 uint32_t sndwnd;
78 uint64_t rcvnxt;
79 uint64_t rcvatmark;
80 uint64_t remote_idsn;
81 uint32_t rcvwnd;
82 struct mptcb *mptcb;
83 } mptsinfo_t;
84
85 #pragma D binding "1.0" translator
86 translator mptsinfo_t < struct mptcb *T > {
87 state = T->mpt_state == MPTCPS_CLOSED ? "state-closed" :
88 T->mpt_state == MPTCPS_LISTEN ? "state-listen" :
89 T->mpt_state == MPTCPS_ESTABLISHED ?
90 "state-established" :
91 T->mpt_state == MPTCPS_CLOSE_WAIT ? "state-close-wait" :
92 T->mpt_state == MPTCPS_FIN_WAIT_1 ? "state-fin-wait-1" :
93 T->mpt_state == MPTCPS_CLOSING ? "state-closing" :
94 T->mpt_state == MPTCPS_LAST_ACK ? "state-last-ack" :
95 T->mpt_state == MPTCPS_FIN_WAIT_2 ? "state-fin-wait-2" :
96 T->mpt_state == MPTCPS_TIME_WAIT ? "state-time-wait" :
97 T->mpt_state == MPTCPS_FASTCLOSE_WAIT ?
98 "state-fastclose-wait" :
99 T->mpt_state == MPTCPS_TERMINATE ?
100 "state-terminate" :
101 "<unknown>";
102 flags = T->mpt_flags;
103 vers = T->mpt_version;
104 error = T->mpt_softerror;
105 localkey = T->mpt_localkey ? *T->mpt_localkey : 0;
106 remotekey = T->mpt_remotekey;
107 localtoken = T->mpt_localtoken;
108 remotetoken = T->mpt_remotetoken;
109 rxtshift = T->mpt_rxtshift;
110 rxtstart = T->mpt_rxtstart;
111 rtseq = T->mpt_rtseq;
112 timervals = T->mpt_timer_vals;
113 timewait = T->mpt_timewait;
114 snduna = T->mpt_snduna;
115 sndnxt = T->mpt_sndnxt;
116 sndmax = T->mpt_sndmax;
117 local_idsn = T->mpt_local_idsn;
118 sndwnd = T->mpt_sndwnd;
119 rcvnxt = T->mpt_rcvnxt;
120 rcvatmark = T->mpt_rcvatmark;
121 remote_idsn = T->mpt_remote_idsn;
122 rcvwnd = T->mpt_rcvwnd;
123 mptcb = T;
124 };
125
126 /*
127 * Multipath Control Block.
128 */
129 inline int MPPCB_STATE_INUSE = 1;
130 #pragma D binding "1.0" MPPCB_STATE_INUSE
131 inline int MPPCB_STATE_DEAD = 2;
132 #pragma D binding "1.0" MPPCB_STATE_DEAD
133
134 typedef struct mppsinfo {
135 string state;
136 uint32_t flags;
137 struct mppcb *mppcb;
138 } mppsinfo_t;
139
140 #pragma D binding "1.0" translator
141 translator mppsinfo_t < struct mppcb *T> {
142 state = T ?
143 T->mpp_state == MPPCB_STATE_INUSE ? "state-inuse" :
144 T->mpp_state == MPPCB_STATE_DEAD ? "state-dead" :
145 "<unknown>" : "<null>";
146 flags = T->mpp_flags;
147 mppcb = T;
148 };
149
150 /*
151 * MPTCP Session.
152 */
153 typedef struct mptsesinfo {
154 uint16_t numflows;
155 uint16_t nummpcapflows;
156 sae_connid_t connid_last;
157 uint8_t flags;
158 struct mptses *mptses;
159 } mptsesinfo_t;
160
161 #pragma D binding "1.0" translator
162 translator mptsesinfo_t < struct mptses *T > {
163 numflows = T->mpte_numflows;
164 nummpcapflows = T->mpte_nummpcapflows;
165 connid_last = T->mpte_connid_last;
166 flags = T->mpte_flags;
167 mptses = T;
168 };
169
170 /*
171 * MPTCP Subflow.
172 */
173 inline int MPTSF_ATTACHED = 0x00001;
174 #pragma D binding "1.0" MPTSF_ATTACHED
175 inline int MPTSF_CONNECTING = 0x00002;
176 #pragma D binding "1.0" MPTSF_CONNECTING
177 inline int MPTSF_CONNECT_PENDING= 0x00004;
178 #pragma D binding "1.0" MPTSF_CONNECT_PENDING
179 inline int MPTSF_CONNECTED = 0x00008;
180 #pragma D binding "1.0" MPTSF_CONNECTED
181 inline int MPTSF_DISCONNECTING = 0x00010;
182 #pragma D binding "1.0" MPTSF_DISCONNECTING
183 inline int MPTSF_DISCONNECTED = 0x00020;
184 #pragma D binding "1.0" MPTSF_DISCONNECTED
185 inline int MPTSF_MP_CAPABLE = 0x00040;
186 #pragma D binding "1.0" MPTSF_MP_CAPABLE
187 inline int MPTSF_MP_READY = 0x00080;
188 #pragma D binding "1.0" MPTSF_MP_READY
189 inline int MPTSF_MP_DEGRADED = 0x00100;
190 #pragma D binding "1.0" MPTSF_MP_DEGRADED
191 inline int MPTSF_SUSPENDED = 0x00200;
192 #pragma D binding "1.0" MPTSF_SUSPENDED
193 inline int MPTSF_BOUND_IF = 0x00400;
194 #pragma D binding "1.0" MPTSF_BOUND_IF
195 inline int MPTSF_BOUND_IP = 0x00800;
196 #pragma D binding "1.0" MPTSF_BOUND_IP
197 inline int MPTSF_BOUND_PORT = 0x01000;
198 #pragma D binding "1.0" MPTSF_BOUND_PORT
199 inline int MPTSF_PREFERRED = 0x02000;
200 #pragma D binding "1.0" MPTSF_PREFERRED
201 inline int MPTSF_SOPT_OLDVAL = 0x04000;
202 #pragma D binding "1.0" MPTSF_SOPT_OLDVAL
203 inline int MPTSF_SOPT_INPROG = 0x08000;
204 #pragma D binding "1.0" MPTSF_SOPT_INPROG
205 inline int MPTSF_DELETEOK = 0x10000;
206 #pragma D binding "1.0" MPTSF_DELETEOK
207 inline int MPTSF_FAILINGOVER = 0x20000;
208 #pragma D binding "1.0" MPTSF_FAILINGOVER
209 inline int MPTSF_ACTIVE = 0x40000;
210 #pragma D binding "1.0" MPTSF_ACTIVE
211 inline int MPTSF_MPCAP_CTRSET = 0x80000;
212 #pragma D binding "1.0" MPTSF_MPCAP_CTRSET
213 inline int MPTSF_FASTJ_SEND = 0x100000;
214 #pragma D binding "1.0" MPTSF_FASTJ_SEND
215
216 typedef struct mptsubinfo {
217 uint32_t flags;
218 uint32_t evctl;
219 uint32_t family;
220 sae_connid_t connid;
221 uint32_t rank;
222 int32_t error;
223 uint64_t sndnxt;
224 struct mptsub *mptsub;
225 } mptsubinfo_t;
226
227 #pragma D binding "1.0" translator
228 translator mptsubinfo_t < struct mptsub *T > {
229 flags = T->mpts_flags;
230 evctl = T->mpts_evctl;
231 family = T->mpts_family;
232 connid = T->mpts_connid;
233 rank = T->mpts_rank;
234 error = T->mpts_soerror;
235 sndnxt = T->mpts_sndnxt;
236 mptsub = T;
237 };