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 | """ Please make sure you read the README COMPLETELY BEFORE reading anything below. It is very critical that you read coding guidelines in Section E in README file. """ from xnu import * from utils import * from string import * from socket import * import xnudefines from netdefines import * from routedefines import * def ShowNstatTUShadow(inshadow): """ Display summary for an nstat_tu_shadow struct params: inshadow : cvalue object which points to 'struct nstat_tu_shadow *' """ shad = Cast(inshadow, 'struct nstat_tu_shadow *') procdetails = shad.shad_procdetails out_string = "" if shad : format_string = "nstat_tu_shadow {0: <s}: next={1: <s} prev={2: <s} context (necp_client *)={3: <s} live={4: <d}" 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) magic = unsigned(shad.shad_magic) if (magic != 0xfeedf00d) : format_string = " INVALID shad magic {0: <s}" out_string += format_string.format(hex(magic)) if (procdetails) : format_string = " --> procdetails {0: <s}: pid={1: <d} name={2: <s} numflows={3: <d}" out_string += format_string.format(hex(procdetails), procdetails.pdet_pid, procdetails.pdet_procname, procdetails.pdet_numflows) procmagic = unsigned(procdetails.pdet_magic) if (procmagic != 0xfeedc001) : format_string = " INVALID proc magic {0: <s}" out_string += format_string.format(hex(procmagic)) print out_string def GetNstatProcdetailsBrief(procdetails): """ Display a brief summary for an nstat_procdetails struct params: procdetails : cvalue object which points to 'struct nstat_procdetails *' returns: str : A string describing various information for the nstat_procdetails structure """ procdetails = Cast(procdetails, 'struct nstat_procdetails *') out_string = "" if (procdetails) : format_string = " --> pid={0: <d} name={1: <s} numflows={2: <d}" out_string += format_string.format(procdetails.pdet_pid, procdetails.pdet_procname, procdetails.pdet_numflows) procmagic = unsigned(procdetails.pdet_magic) if (procmagic != 0xfeedc001) : format_string = " INVALID proc magic {0: <s}" out_string += format_string.format(hex(procmagic)) return out_string def ShowNstatProcdetails(procdetails): """ Display a summary for an nstat_procdetails struct params: procdetails : cvalue object which points to 'struct nstat_procdetails *' """ procdetails = Cast(procdetails, 'struct nstat_procdetails *') out_string = "" if (procdetails) : format_string = "nstat_procdetails: {0: <s} next={1: <s} prev={2: <s} " out_string += format_string.format(hex(procdetails), hex(procdetails.pdet_link.tqe_next), hex(procdetails.pdet_link.tqe_prev)) out_string += GetNstatProcdetailsBrief(procdetails) print out_string def GetNstatTUShadowBrief(shadow): """ Display a summary for an nstat_tu_shadow struct params: shadow : cvalue object which points to 'struct nstat_tu_shadow *' returns: str : A string describing various information for the nstat_tu_shadow structure """ out_string = "" shad = Cast(shadow, 'struct nstat_tu_shadow *') procdetails = shad.shad_procdetails procdetails = Cast(procdetails, 'struct nstat_procdetails *') out_string = "" if shad : format_string = " shadow {0: <s}: necp_client ={1: <s} live={2: <d}" out_string += format_string.format(hex(shad),hex(shad.shad_provider_context),shad.shad_live) magic = unsigned(shad.shad_magic) if (magic != 0xfeedf00d) : format_string = " INVALID shad magic {0: <s}" out_string += format_string.format(hex(magic)) elif (procdetails) : out_string += GetNstatProcdetailsBrief(procdetails) return out_string def ShowNstatSrc(insrc): """ Display summary for an nstat_src struct params: insrc : cvalue object which points to 'struct nstat_src *' """ src = Cast(insrc, 'nstat_src *') prov = src.provider prov = Cast(prov, 'nstat_provider *') prov_string = "?" if (prov.nstat_provider_id == 2): prov_string = "TCP k" elif (prov.nstat_provider_id == 3): prov_string = "TCP u" elif (prov.nstat_provider_id == 4): prov_string = "UDP k" elif (prov.nstat_provider_id == 5): prov_string = "UDP u" elif (prov.nstat_provider_id == 1): prov_string = "Route" elif (prov.nstat_provider_id == 6): prov_string = "ifnet" elif (prov.nstat_provider_id == 7): prov_string = "sysinfo" else: prov_string = "unknown-provider" out_string = "" if src : format_string = " nstat_src {0: <s}: prov={1: <s} next={2: <s} prev={3: <s} ref={4: <d}" 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) if (prov.nstat_provider_id == 3): out_string += GetNstatTUShadowBrief(src.cookie); print out_string def ShowNstatCtrl(inctrl): """ Display an nstat_control_state struct params: ctrl : value object representing an nstat_control_state in the kernel """ ctrl = Cast(inctrl, 'nstat_control_state *') out_string = "" if ctrl : format_string = "nstat_control_state {0: <s}: next={1: <s} src head={2: <s} tail={3: <s}" 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)) print out_string for src in IterateTAILQ_HEAD(ctrl.ncs_src_queue, 'ns_control_link'): ShowNstatSrc(src) # Macro: showallntstat @lldb_command('showallntstat') def ShowAllNtstat(cmd_args=None) : """ Show the contents of various ntstat (network statistics) data structures """ print "nstat_controls list:\n" ctrl = kern.globals.nstat_controls ctrl = cast(ctrl, 'nstat_control_state *') while ctrl != 0: ShowNstatCtrl(ctrl) ctrl = cast(ctrl.ncs_next, 'nstat_control_state *') print "\nnstat_userprot_shad list:\n" shadows = kern.globals.nstat_userprot_shad_head for shad in IterateTAILQ_HEAD(shadows, 'shad_link'): ShowNstatTUShadow(shad) print "\nnstat_procdetails list:\n" procdetails_head = kern.globals.nstat_procdetails_head for procdetails in IterateTAILQ_HEAD(procdetails_head, 'pdet_link'): ShowNstatProcdetails(procdetails) # EndMacro: showallntstat |