Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 | /* * Copyright (c) 2013-2017 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_TERMINATE = 10; #pragma D binding "1.0" MPTCPS_TERMINATE 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 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_TERMINATE ? "state-terminate" : "<unknown>"; flags = T->mpt_flags; vers = T->mpt_version; error = T->mpt_softerror; localkey = T->mpt_localkey; 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; 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; sae_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; sae_connid_t connid; uint32_t rank; 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; connid = T->mpts_connid; mptsub = T; }; |