1from xnu import * 2from utils import * 3import ctypes 4 5MBSHIFT = 20 6MSIZE = 256 7MCLBYTES = 2048 8MBIGCLBYTES = 4096 9M16KCLBYTES = 16384 10 11MB_INUSE = 1 12MB_COMP_INUSE = 2 13MB_SCVALID = 4 14 15SLF_MAPPED = 0x0001 16SLF_PARTIAL = 0x0002 17SLF_DETACHED = 0x0004 18 19INTP = ctypes.POINTER(ctypes.c_int) 20 21MCF_NOCPUCACHE = 0x10 22 23def enum(*sequential, **named): 24 enums = dict(zip(sequential, range(len(sequential))), **named) 25 reverse = dict((value, key) for key, value in enums.items()) 26 enums['reverse_mapping'] = reverse 27 return type('Enum', (), enums) 28 29Mbuf_Type = enum( 30 'MT_FREE', 31 'MT_DATA', 32 'MT_HEADER', 33 'MT_SOCKET', 34 'MT_PCB', 35 'MT_RTABLE', 36 'MT_HTABLE', 37 'MT_ATABLE', 38 'MT_SONAME', 39 'MT_SOOPTS', 40 'MT_FTABLE', 41 'MT_RIGHTS', 42 'MT_IFADDR', 43 'MT_CONTROL', 44 'MT_OOBDATA', 45 'MT_TAG', 46 'MT_LAST') 47 48M_EXT = 0x0001 49M_PKTHDR = 0x0002 50M_EOR = 0x0004 51M_PROTO1 = 0x0008 52M_PROTO2 = 0x0010 53M_PROTO3 = 0x0020 54M_LOOP = 0x0040 55M_PROTO5 = 0x0080 56 57M_BCAST = 0x0100 58M_MCAST = 0x0200 59M_FRAG = 0x0400 60M_FIRSTFRAG = 0x0800 61M_LASTFRAG = 0x1000 62M_PROMISC = 0x2000 63M_HASFCS = 0x4000 64M_TAGHDR = 0x8000 65 66mbuf_flags_strings = [ 67 "EXT", 68 "PKTHDR", 69 "EOR", 70 "PROTO1", 71 "PROTO2", 72 "PROTO3", 73 "LOOP", 74 "PROTO5", 75 76 "BCAST", 77 "MCAST", 78 "FRAG", 79 "FIRSTFRAG", 80 "LASTFRAG", 81 "PROMISC", 82 "HASFCS", 83 "TAGHDR"] 84 85mbuf_pkt_crumb_strings = [ 86 "TS_COMP_REQ", 87 "TS_COMP_CB", 88 "DLIL_OUTPUT", 89 "FLOW_TX", 90 "FQ_ENQUEUE", 91 "FQ_DEQUEUE", 92 "SK_PKT_COPY", 93 "TCP_OUTPUT", 94 "UDP_OUTPUT", 95 "SOSEND", 96 "DLIL_INPUT", 97 "IP_INPUT", 98 "TCP_INPUT", 99 "UDP_INPUT"] 100