1*5c2921b0SApple OSS Distributions""" Please make sure you read the README COMPLETELY BEFORE reading anything below. 2*5c2921b0SApple OSS Distributions It is very critical that you read coding guidelines in Section E in README file. 3*5c2921b0SApple OSS Distributions""" 4*5c2921b0SApple OSS Distributionsfrom __future__ import absolute_import, print_function 5*5c2921b0SApple OSS Distributions 6*5c2921b0SApple OSS Distributionsfrom builtins import hex 7*5c2921b0SApple OSS Distributionsfrom xnu import * 8*5c2921b0SApple OSS Distributionsfrom utils import * 9*5c2921b0SApple OSS Distributionsfrom string import * 10*5c2921b0SApple OSS Distributionsfrom socket import * 11*5c2921b0SApple OSS Distributions 12*5c2921b0SApple OSS Distributionsimport xnudefines 13*5c2921b0SApple OSS Distributionsfrom netdefines import * 14*5c2921b0SApple OSS Distributionsfrom routedefines import * 15*5c2921b0SApple OSS Distributions 16*5c2921b0SApple OSS Distributionsdef ShowNstatTUShadow(inshadow): 17*5c2921b0SApple OSS Distributions """ Display summary for an nstat_tu_shadow struct 18*5c2921b0SApple OSS Distributions params: 19*5c2921b0SApple OSS Distributions inshadow : cvalue object which points to 'struct nstat_tu_shadow *' 20*5c2921b0SApple OSS Distributions """ 21*5c2921b0SApple OSS Distributions shad = Cast(inshadow, 'struct nstat_tu_shadow *') 22*5c2921b0SApple OSS Distributions procdetails = shad.shad_procdetails 23*5c2921b0SApple OSS Distributions out_string = "" 24*5c2921b0SApple OSS Distributions if shad : 25*5c2921b0SApple OSS Distributions format_string = "nstat_tu_shadow {0: <s}: next={1: <s} prev={2: <s} context (necp_client *)={3: <s} live={4: <d}" 26*5c2921b0SApple OSS Distributions out_string += format_string.format(hex(shad), hex(shad.shad_link.tqe_next), hex(shad.shad_link.tqe_prev), hex(shad.shad_provider_context),shad.shad_live) 27*5c2921b0SApple OSS Distributions 28*5c2921b0SApple OSS Distributions magic = unsigned(shad.shad_magic) 29*5c2921b0SApple OSS Distributions if (magic != 0xfeedf00d) : 30*5c2921b0SApple OSS Distributions format_string = " INVALID shad magic {0: <s}" 31*5c2921b0SApple OSS Distributions out_string += format_string.format(hex(magic)) 32*5c2921b0SApple OSS Distributions 33*5c2921b0SApple OSS Distributions if (procdetails) : 34*5c2921b0SApple OSS Distributions format_string = " --> procdetails {0: <s}: pid={1: <d} name={2: <s} numflows={3: <d}" 35*5c2921b0SApple OSS Distributions out_string += format_string.format(hex(procdetails), procdetails.pdet_pid, procdetails.pdet_procname, procdetails.pdet_numflows) 36*5c2921b0SApple OSS Distributions 37*5c2921b0SApple OSS Distributions procmagic = unsigned(procdetails.pdet_magic) 38*5c2921b0SApple OSS Distributions if (procmagic != 0xfeedc001) : 39*5c2921b0SApple OSS Distributions format_string = " INVALID proc magic {0: <s}" 40*5c2921b0SApple OSS Distributions out_string += format_string.format(hex(procmagic)) 41*5c2921b0SApple OSS Distributions 42*5c2921b0SApple OSS Distributions print(out_string) 43*5c2921b0SApple OSS Distributions 44*5c2921b0SApple OSS Distributionsdef GetNstatProcdetailsBrief(procdetails): 45*5c2921b0SApple OSS Distributions """ Display a brief summary for an nstat_procdetails struct 46*5c2921b0SApple OSS Distributions params: 47*5c2921b0SApple OSS Distributions procdetails : cvalue object which points to 'struct nstat_procdetails *' 48*5c2921b0SApple OSS Distributions returns: 49*5c2921b0SApple OSS Distributions str : A string describing various information for the nstat_procdetails structure 50*5c2921b0SApple OSS Distributions """ 51*5c2921b0SApple OSS Distributions procdetails = Cast(procdetails, 'struct nstat_procdetails *') 52*5c2921b0SApple OSS Distributions out_string = "" 53*5c2921b0SApple OSS Distributions if (procdetails) : 54*5c2921b0SApple OSS Distributions format_string = " --> pid={0: <d} name={1: <s} numflows={2: <d}" 55*5c2921b0SApple OSS Distributions out_string += format_string.format(procdetails.pdet_pid, procdetails.pdet_procname, procdetails.pdet_numflows) 56*5c2921b0SApple OSS Distributions 57*5c2921b0SApple OSS Distributions procmagic = unsigned(procdetails.pdet_magic) 58*5c2921b0SApple OSS Distributions if (procmagic != 0xfeedc001) : 59*5c2921b0SApple OSS Distributions format_string = " INVALID proc magic {0: <s}" 60*5c2921b0SApple OSS Distributions out_string += format_string.format(hex(procmagic)) 61*5c2921b0SApple OSS Distributions 62*5c2921b0SApple OSS Distributions return out_string 63*5c2921b0SApple OSS Distributions 64*5c2921b0SApple OSS Distributionsdef ShowNstatProcdetails(procdetails): 65*5c2921b0SApple OSS Distributions """ Display a summary for an nstat_procdetails struct 66*5c2921b0SApple OSS Distributions params: 67*5c2921b0SApple OSS Distributions procdetails : cvalue object which points to 'struct nstat_procdetails *' 68*5c2921b0SApple OSS Distributions """ 69*5c2921b0SApple OSS Distributions procdetails = Cast(procdetails, 'struct nstat_procdetails *') 70*5c2921b0SApple OSS Distributions out_string = "" 71*5c2921b0SApple OSS Distributions if (procdetails) : 72*5c2921b0SApple OSS Distributions format_string = "nstat_procdetails: {0: <s} next={1: <s} prev={2: <s} " 73*5c2921b0SApple OSS Distributions out_string += format_string.format(hex(procdetails), hex(procdetails.pdet_link.tqe_next), hex(procdetails.pdet_link.tqe_prev)) 74*5c2921b0SApple OSS Distributions out_string += GetNstatProcdetailsBrief(procdetails) 75*5c2921b0SApple OSS Distributions 76*5c2921b0SApple OSS Distributions print(out_string) 77*5c2921b0SApple OSS Distributions 78*5c2921b0SApple OSS Distributionsdef GetNstatTUShadowBrief(shadow): 79*5c2921b0SApple OSS Distributions """ Display a summary for an nstat_tu_shadow struct 80*5c2921b0SApple OSS Distributions params: 81*5c2921b0SApple OSS Distributions shadow : cvalue object which points to 'struct nstat_tu_shadow *' 82*5c2921b0SApple OSS Distributions returns: 83*5c2921b0SApple OSS Distributions str : A string describing various information for the nstat_tu_shadow structure 84*5c2921b0SApple OSS Distributions """ 85*5c2921b0SApple OSS Distributions out_string = "" 86*5c2921b0SApple OSS Distributions shad = Cast(shadow, 'struct nstat_tu_shadow *') 87*5c2921b0SApple OSS Distributions procdetails = shad.shad_procdetails 88*5c2921b0SApple OSS Distributions procdetails = Cast(procdetails, 'struct nstat_procdetails *') 89*5c2921b0SApple OSS Distributions out_string = "" 90*5c2921b0SApple OSS Distributions if shad : 91*5c2921b0SApple OSS Distributions format_string = " shadow {0: <s}: necp_client ={1: <s} live={2: <d}" 92*5c2921b0SApple OSS Distributions out_string += format_string.format(hex(shad),hex(shad.shad_provider_context),shad.shad_live) 93*5c2921b0SApple OSS Distributions magic = unsigned(shad.shad_magic) 94*5c2921b0SApple OSS Distributions if (magic != 0xfeedf00d) : 95*5c2921b0SApple OSS Distributions format_string = " INVALID shad magic {0: <s}" 96*5c2921b0SApple OSS Distributions out_string += format_string.format(hex(magic)) 97*5c2921b0SApple OSS Distributions elif (procdetails) : 98*5c2921b0SApple OSS Distributions out_string += GetNstatProcdetailsBrief(procdetails) 99*5c2921b0SApple OSS Distributions 100*5c2921b0SApple OSS Distributions return out_string 101*5c2921b0SApple OSS Distributions 102*5c2921b0SApple OSS Distributionsdef ShowNstatSrc(insrc): 103*5c2921b0SApple OSS Distributions """ Display summary for an nstat_src struct 104*5c2921b0SApple OSS Distributions params: 105*5c2921b0SApple OSS Distributions insrc : cvalue object which points to 'struct nstat_src *' 106*5c2921b0SApple OSS Distributions """ 107*5c2921b0SApple OSS Distributions src = Cast(insrc, 'nstat_src *') 108*5c2921b0SApple OSS Distributions prov = src.provider 109*5c2921b0SApple OSS Distributions prov = Cast(prov, 'nstat_provider *') 110*5c2921b0SApple OSS Distributions prov_string = "?" 111*5c2921b0SApple OSS Distributions if (prov.nstat_provider_id == 2): 112*5c2921b0SApple OSS Distributions prov_string = "TCP k" 113*5c2921b0SApple OSS Distributions elif (prov.nstat_provider_id == 3): 114*5c2921b0SApple OSS Distributions prov_string = "TCP u" 115*5c2921b0SApple OSS Distributions elif (prov.nstat_provider_id == 4): 116*5c2921b0SApple OSS Distributions prov_string = "UDP k" 117*5c2921b0SApple OSS Distributions elif (prov.nstat_provider_id == 5): 118*5c2921b0SApple OSS Distributions prov_string = "UDP u" 119*5c2921b0SApple OSS Distributions elif (prov.nstat_provider_id == 1): 120*5c2921b0SApple OSS Distributions prov_string = "Route" 121*5c2921b0SApple OSS Distributions elif (prov.nstat_provider_id == 6): 122*5c2921b0SApple OSS Distributions prov_string = "ifnet" 123*5c2921b0SApple OSS Distributions elif (prov.nstat_provider_id == 7): 124*5c2921b0SApple OSS Distributions prov_string = "sysinfo" 125*5c2921b0SApple OSS Distributions else: 126*5c2921b0SApple OSS Distributions prov_string = "unknown-provider" 127*5c2921b0SApple OSS Distributions 128*5c2921b0SApple OSS Distributions out_string = "" 129*5c2921b0SApple OSS Distributions if src : 130*5c2921b0SApple OSS Distributions format_string = " nstat_src {0: <s}: prov={1: <s} next={2: <s} prev={3: <s} ref={4: <d}" 131*5c2921b0SApple OSS Distributions out_string += format_string.format(hex(src), prov_string, hex(src.ns_control_link.tqe_next), hex(src.ns_control_link.tqe_prev), src.srcref) 132*5c2921b0SApple OSS Distributions 133*5c2921b0SApple OSS Distributions if (prov.nstat_provider_id == 3): 134*5c2921b0SApple OSS Distributions out_string += GetNstatTUShadowBrief(src.cookie); 135*5c2921b0SApple OSS Distributions 136*5c2921b0SApple OSS Distributions print(out_string) 137*5c2921b0SApple OSS Distributions 138*5c2921b0SApple OSS Distributionsdef ShowNstatCtrl(inctrl): 139*5c2921b0SApple OSS Distributions """ Display an nstat_control_state struct 140*5c2921b0SApple OSS Distributions params: 141*5c2921b0SApple OSS Distributions ctrl : value object representing an nstat_control_state in the kernel 142*5c2921b0SApple OSS Distributions """ 143*5c2921b0SApple OSS Distributions ctrl = Cast(inctrl, 'nstat_control_state *') 144*5c2921b0SApple OSS Distributions out_string = "" 145*5c2921b0SApple OSS Distributions if ctrl : 146*5c2921b0SApple OSS Distributions format_string = "nstat_control_state {0: <s}: next={1: <s} src head={2: <s} tail={3: <s}" 147*5c2921b0SApple OSS Distributions out_string += format_string.format(hex(ctrl), hex(ctrl.ncs_next), hex(ctrl.ncs_src_queue.tqh_first), hex(ctrl.ncs_src_queue.tqh_last)) 148*5c2921b0SApple OSS Distributions 149*5c2921b0SApple OSS Distributions print(out_string) 150*5c2921b0SApple OSS Distributions 151*5c2921b0SApple OSS Distributions for src in IterateTAILQ_HEAD(ctrl.ncs_src_queue, 'ns_control_link'): 152*5c2921b0SApple OSS Distributions ShowNstatSrc(src) 153*5c2921b0SApple OSS Distributions 154*5c2921b0SApple OSS Distributions# Macro: showallntstat 155*5c2921b0SApple OSS Distributions 156*5c2921b0SApple OSS Distributions@lldb_command('showallntstat') 157*5c2921b0SApple OSS Distributionsdef ShowAllNtstat(cmd_args=None) : 158*5c2921b0SApple OSS Distributions """ Show the contents of various ntstat (network statistics) data structures 159*5c2921b0SApple OSS Distributions """ 160*5c2921b0SApple OSS Distributions print("nstat_controls list:\n") 161*5c2921b0SApple OSS Distributions ctrl = kern.globals.nstat_controls 162*5c2921b0SApple OSS Distributions ctrl = cast(ctrl, 'nstat_control_state *') 163*5c2921b0SApple OSS Distributions while ctrl != 0: 164*5c2921b0SApple OSS Distributions ShowNstatCtrl(ctrl) 165*5c2921b0SApple OSS Distributions ctrl = cast(ctrl.ncs_next, 'nstat_control_state *') 166*5c2921b0SApple OSS Distributions 167*5c2921b0SApple OSS Distributions print("\nnstat_userprot_shad list:\n") 168*5c2921b0SApple OSS Distributions shadows = kern.globals.nstat_userprot_shad_head 169*5c2921b0SApple OSS Distributions for shad in IterateTAILQ_HEAD(shadows, 'shad_link'): 170*5c2921b0SApple OSS Distributions ShowNstatTUShadow(shad) 171*5c2921b0SApple OSS Distributions 172*5c2921b0SApple OSS Distributions print("\nnstat_procdetails list:\n") 173*5c2921b0SApple OSS Distributions procdetails_head = kern.globals.nstat_procdetails_head 174*5c2921b0SApple OSS Distributions for procdetails in IterateTAILQ_HEAD(procdetails_head, 'pdet_link'): 175*5c2921b0SApple OSS Distributions ShowNstatProcdetails(procdetails) 176*5c2921b0SApple OSS Distributions 177*5c2921b0SApple OSS Distributions# EndMacro: showallntstat 178