in tools/lldbmacros/net.py [0:0]
def GetInPcb(pcb, proto):
out_string = ""
out_string += hex(pcb)
if (proto == IPPROTO_TCP):
out_string += " tcp"
elif (proto == IPPROTO_UDP):
out_string += " udp"
elif (proto == IPPROTO_RAW):
out_string += " raw"
else:
out_string += str(proto) + "."
if (pcb.inp_vflag & INP_IPV4):
out_string += "4 "
if (pcb.inp_vflag & INP_IPV6):
out_string += "6 "
if (pcb.inp_vflag & INP_IPV4):
out_string += " "
out_string += GetInAddrAsString(addressof(pcb.inp_dependladdr.inp46_local.ia46_addr4))
else:
out_string += " "
out_string += GetIn6AddrAsString((pcb.inp_dependladdr.inp6_local.__u6_addr.__u6_addr8))
out_string += " "
out_string += Getntohs(pcb.inp_lport)
out_string += " "
if (pcb.inp_vflag & INP_IPV4):
out_string += " "
out_string += GetInAddrAsString(addressof(pcb.inp_dependfaddr.inp46_foreign.ia46_addr4))
else:
out_string += GetIn6AddrAsString((pcb.inp_dependfaddr.inp6_foreign.__u6_addr.__u6_addr8))
out_string += " "
out_string += Getntohs(pcb.inp_fport)
out_string += " "
if (proto == IPPROTO_TCP):
out_string += GetTcpState(pcb.inp_ppcb)
out_string += "\n\t"
if (pcb.inp_flags & INP_RECVOPTS):
out_string += "recvopts "
if (pcb.inp_flags & INP_RECVRETOPTS):
out_string += "recvretopts "
if (pcb.inp_flags & INP_RECVDSTADDR):
out_string += "recvdstaddr "
if (pcb.inp_flags & INP_HDRINCL):
out_string += "hdrincl "
if (pcb.inp_flags & INP_HIGHPORT):
out_string += "highport "
if (pcb.inp_flags & INP_LOWPORT):
out_string += "lowport "
if (pcb.inp_flags & INP_ANONPORT):
out_string += "anonport "
if (pcb.inp_flags & INP_RECVIF):
out_string += "recvif "
if (pcb.inp_flags & INP_MTUDISC):
out_string += "mtudisc "
if (pcb.inp_flags & INP_STRIPHDR):
out_string += "striphdr "
if (pcb.inp_flags & INP_RECV_ANYIF):
out_string += "recv_anyif "
if (pcb.inp_flags & INP_INADDR_ANY):
out_string += "inaddr_any "
if (pcb.inp_flags & INP_RECVTTL):
out_string += "recvttl "
if (pcb.inp_flags & INP_UDP_NOCKSUM):
out_string += "nocksum "
if (pcb.inp_flags & INP_BOUND_IF):
out_string += "boundif "
if (pcb.inp_flags & IN6P_IPV6_V6ONLY):
out_string += "v6only "
if (pcb.inp_flags & IN6P_PKTINFO):
out_string += "pktinfo "
if (pcb.inp_flags & IN6P_HOPLIMIT):
out_string += "hoplimit "
if (pcb.inp_flags & IN6P_HOPOPTS):
out_string += "hopopts "
if (pcb.inp_flags & IN6P_DSTOPTS):
out_string += "dstopts "
if (pcb.inp_flags & IN6P_RTHDR):
out_string += "rthdr "
if (pcb.inp_flags & IN6P_RTHDRDSTOPTS):
out_string += "rthdrdstopts "
if (pcb.inp_flags & IN6P_TCLASS):
out_string += "rcv_tclass "
if (pcb.inp_flags & IN6P_AUTOFLOWLABEL):
out_string += "autoflowlabel "
if (pcb.inp_flags & IN6P_BINDV6ONLY):
out_string += "bindv6only "
if (pcb.inp_flags & IN6P_RFC2292):
out_string += "RFC2292 "
if (pcb.inp_flags & IN6P_MTU):
out_string += "rcv_pmtu "
if (pcb.inp_flags & INP_PKTINFO):
out_string += "pktinfo "
if (pcb.inp_flags & INP_FLOW_SUSPENDED):
out_string += "suspended "
if (pcb.inp_flags & INP_NO_IFT_CELLULAR):
out_string += "nocellular "
if (pcb.inp_flags & INP_FLOW_CONTROLLED):
out_string += "flowctld "
if (pcb.inp_flags & INP_FC_FEEDBACK):
out_string += "fcfeedback "
if (pcb.inp_flags2 & INP2_TIMEWAIT):
out_string += "timewait "
if (pcb.inp_flags2 & INP2_IN_FCTREE):
out_string += "in_fctree "
if (pcb.inp_flags2 & INP2_WANT_APP_POLICY):
out_string += "want_app_policy "
out_string += "\n\t"
so = pcb.inp_socket
if (so != 0):
out_string += "so=" + str(so) + " s=" + str(int(so.so_snd.sb_cc)) + " r=" + str(int(so.so_rcv.sb_cc))
if proto == IPPROTO_TCP :
tcpcb = cast(pcb.inp_ppcb, 'tcpcb *')
out_string += " reass=" + str(int(tcpcb.t_reassqlen))
out_string += " usecnt=" + str(int(so.so_usecount)) + ", "
if (pcb.inp_state == 0 or pcb.inp_state == INPCB_STATE_INUSE):
out_string += "inuse"
else:
if (pcb.inp_state == INPCB_STATE_DEAD):
out_string += "dead"
else:
out_string += "unknown (" + str(int(pcb.inp_state)) + ")"
return out_string