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