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