X-Git-Url: http://git.annexia.org/?p=virt-mem.git;a=blobdiff_plain;f=lib%2Fkernel.ml;h=efdd41364428a8179672eaa56fd743d841ed8dd0;hp=b02e1878dea767a5600211a63f01c258a25e867b;hb=82201a5312c3582daeb7215efd731f7e784d9edf;hpb=246caaf2b9558153bbcc85adf9a6e0d58de3399b diff --git a/lib/kernel.ml b/lib/kernel.ml index b02e187..efdd413 100644 --- a/lib/kernel.ml +++ b/lib/kernel.ml @@ -10,12 +10,11 @@ open Printf;; module StringMap = Map.Make(String);; module AddrMap = Map.Make(Int64);; -type kernel_version = string;; +exception ParseError of string * string * string;; let match_err = "failed to match kernel structure";; -let struct_missing_err = "struct does not exist in this kernel version";; let unknown_kernel_version version struct_name = invalid_arg - (Printf.sprintf + (sprintf "%s: unknown kernel version or struct %s is not supported in this kernel. Try a newer version of virt-mem, or if the guest is not from a @@ -23,76 +22,62 @@ supported Linux distribution, see this page about adding support: http://et.redhat.com/~rjones/virt-mem/faq.html " version struct_name);; +type kernel_version = string;; +type load_fn = string -> Virt_mem_mmap.addr -> int -> Bitstring.bitstring;; let zero = 0;; -type ('a, 'b) task_struct = ('a * 'b);; -type task_struct_shape_fields_1 = - { task_struct_shape_fields_1_tasks'next : Virt_mem_mmap.addr; - task_struct_shape_fields_1_tasks'next_offset : int; - task_struct_shape_fields_1_tasks'next_adjustment : int - };; -type task_struct_content_fields_2 = - { task_struct_content_fields_2_comm : string; - task_struct_content_fields_2_normal_prio : int64; - task_struct_content_fields_2_pid : int64; - task_struct_content_fields_2_prio : int64; - task_struct_content_fields_2_state : int64; - task_struct_content_fields_2_static_prio : int64; - task_struct_content_fields_2_tasks'prev : Virt_mem_mmap.addr - };; -type ('a, 'b) net_device = ('a * 'b);; -type net_device_shape_fields_8 = - { net_device_shape_fields_8_dev_list'next : Virt_mem_mmap.addr; - net_device_shape_fields_8_dev_list'next_offset : int; - net_device_shape_fields_8_dev_list'next_adjustment : int; - net_device_shape_fields_8_ip6_ptr : Virt_mem_mmap.addr; - net_device_shape_fields_8_ip_ptr : Virt_mem_mmap.addr - };; -type net_device_content_fields_9 = - { net_device_content_fields_9_addr_len : int64; - net_device_content_fields_9_dev_list'prev : Virt_mem_mmap.addr; - net_device_content_fields_9_flags : int64; - net_device_content_fields_9_mtu : int64; - net_device_content_fields_9_name : string; - net_device_content_fields_9_operstate : int64; - net_device_content_fields_9_perm_addr : string - };; -type ('a, 'b) net = ('a * 'b);; -type net_shape_fields_14 = - { net_shape_fields_14_dev_base_head'next : Virt_mem_mmap.addr; - net_shape_fields_14_dev_base_head'next_offset : int; - net_shape_fields_14_dev_base_head'next_adjustment : int; - net_shape_fields_14_dev_base_head'prev : Virt_mem_mmap.addr; - net_shape_fields_14_dev_base_head'prev_offset : int; - net_shape_fields_14_dev_base_head'prev_adjustment : int +type task_struct = + { task_struct_comm : string; task_struct_normal_prio : int64; + task_struct_pid : int64; task_struct_prio : int64; + task_struct_run_list'next : Virt_mem_mmap.addr option; + task_struct_run_list'next_offset : int; + task_struct_run_list'next_adjustment : int; + task_struct_run_list'prev : Virt_mem_mmap.addr option; + task_struct_state : int64; task_struct_static_prio : int64; + task_struct_tasks'next : Virt_mem_mmap.addr; + task_struct_tasks'next_offset : int; + task_struct_tasks'next_adjustment : int; + task_struct_tasks'prev : Virt_mem_mmap.addr };; -type net_content_fields_15 = unit;; -type ('a, 'b) in_device = ('a * 'b);; -type in_device_shape_fields_20 = - { in_device_shape_fields_20_ifa_list : Virt_mem_mmap.addr +type net_device = + { net_device_addr_len : int64; + net_device_dev_list'next : Virt_mem_mmap.addr option; + net_device_dev_list'next_offset : int; + net_device_dev_list'next_adjustment : int; + net_device_dev_list'prev : Virt_mem_mmap.addr option; + net_device_flags : int64; net_device_ip6_ptr : Virt_mem_mmap.addr; + net_device_ip_ptr : Virt_mem_mmap.addr; net_device_mtu : int64; + net_device_name : string; net_device_next : Virt_mem_mmap.addr option; + net_device_operstate : int64; net_device_perm_addr : string };; -type in_device_content_fields_21 = unit;; -type ('a, 'b) inet6_dev = ('a * 'b);; -type inet6_dev_shape_fields_26 = - { inet6_dev_shape_fields_26_addr_list : Virt_mem_mmap.addr +type net = + { net_dev_base_head'next : Virt_mem_mmap.addr; + net_dev_base_head'next_offset : int; + net_dev_base_head'next_adjustment : int; + net_dev_base_head'prev : Virt_mem_mmap.addr; + net_dev_base_head'prev_offset : int; + net_dev_base_head'prev_adjustment : int };; -type inet6_dev_content_fields_27 = unit;; -type ('a, 'b) in_ifaddr = ('a * 'b);; -type in_ifaddr_shape_fields_32 = - { in_ifaddr_shape_fields_32_ifa_next : Virt_mem_mmap.addr +type in_device = { in_device_ifa_list : Virt_mem_mmap.addr };; +type inet6_dev = { inet6_dev_addr_list : Virt_mem_mmap.addr };; +type in_ifaddr = + { in_ifaddr_ifa_address : int64; in_ifaddr_ifa_broadcast : int64; + in_ifaddr_ifa_local : int64; in_ifaddr_ifa_mask : int64; + in_ifaddr_ifa_next : Virt_mem_mmap.addr };; -type in_ifaddr_content_fields_33 = - { in_ifaddr_content_fields_33_ifa_address : int64; - in_ifaddr_content_fields_33_ifa_broadcast : int64; - in_ifaddr_content_fields_33_ifa_local : int64; - in_ifaddr_content_fields_33_ifa_mask : int64 - };; -type ('a, 'b) inet6_ifaddr = ('a * 'b);; -type inet6_ifaddr_shape_fields_38 = - { inet6_ifaddr_shape_fields_38_lst_next : Virt_mem_mmap.addr - };; -type inet6_ifaddr_content_fields_39 = - { inet6_ifaddr_content_fields_39_prefix_len : int64 +type inet6_ifaddr = + { inet6_ifaddr_lst_next : Virt_mem_mmap.addr; + inet6_ifaddr_prefix_len : int64 };; +type kernel_struct = + Task_struct of task_struct + | Net_device of net_device + | Net of net + | In_device of in_device + | Inet6_dev of inet6_dev + | In_ifaddr of in_ifaddr + | Inet6_ifaddr of inet6_ifaddr;; +type addrmap = + (string * ((int * Bitstring.bitstring * kernel_struct) option)) AddrMap.t;; let offset_of_net_device_dev_list'next = let map = StringMap.add "2.6.25.14-69.fc8.i686" 48 @@ -109,7 +94,7 @@ let offset_of_net_device_dev_list'next = (StringMap.add "2.6.25.14-69.fc8.x86_64" 72 StringMap.empty))))))))))) in fun kernel_version -> StringMap.find kernel_version map;; -let task_struct_parser_3 kernel_version bits = +let task_struct_parser_1 kernel_version bits = bitmatch bits with | { state : zero+64 : offset(0), littleendian; prio : zero+32 : offset(224), littleendian; @@ -119,22 +104,23 @@ let task_struct_parser_3 kernel_version bits = tasks'prev : zero+64 : offset(3904), littleendian; pid : zero+32 : offset(4352), littleendian; comm : 128 : offset(8392), string } -> - let s = - { task_struct_shape_fields_1_tasks'next = tasks'next; - task_struct_shape_fields_1_tasks'next_offset = 480; - task_struct_shape_fields_1_tasks'next_adjustment = 480 } in - let c = - { task_struct_content_fields_2_comm = comm; - task_struct_content_fields_2_normal_prio = normal_prio; - task_struct_content_fields_2_pid = pid; - task_struct_content_fields_2_prio = prio; - task_struct_content_fields_2_state = state; - task_struct_content_fields_2_static_prio = static_prio; - task_struct_content_fields_2_tasks'prev = tasks'prev } in - (s, c) + { task_struct_comm = comm; + task_struct_normal_prio = normal_prio; + task_struct_pid = pid; + task_struct_prio = prio; + task_struct_run_list'next = None; + task_struct_run_list'next_offset = -1; + task_struct_run_list'next_adjustment = -1; + task_struct_run_list'prev = None; + task_struct_state = state; + task_struct_static_prio = static_prio; + task_struct_tasks'next = tasks'next; + task_struct_tasks'next_offset = 480; + task_struct_tasks'next_adjustment = 480; + task_struct_tasks'prev = tasks'prev } | { _ } -> - raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_3", match_err));; -let task_struct_parser_4 kernel_version bits = + raise (ParseError ("task_struct", "task_struct_parser_1", match_err));; +let task_struct_parser_2 kernel_version bits = bitmatch bits with | { state : zero+64 : offset(0), bigendian; prio : zero+32 : offset(224), bigendian; @@ -144,22 +130,23 @@ let task_struct_parser_4 kernel_version bits = tasks'prev : zero+64 : offset(3904), bigendian; pid : zero+32 : offset(4352), bigendian; comm : 128 : offset(8392), string } -> - let s = - { task_struct_shape_fields_1_tasks'next = tasks'next; - task_struct_shape_fields_1_tasks'next_offset = 480; - task_struct_shape_fields_1_tasks'next_adjustment = 480 } in - let c = - { task_struct_content_fields_2_comm = comm; - task_struct_content_fields_2_normal_prio = normal_prio; - task_struct_content_fields_2_pid = pid; - task_struct_content_fields_2_prio = prio; - task_struct_content_fields_2_state = state; - task_struct_content_fields_2_static_prio = static_prio; - task_struct_content_fields_2_tasks'prev = tasks'prev } in - (s, c) + { task_struct_comm = comm; + task_struct_normal_prio = normal_prio; + task_struct_pid = pid; + task_struct_prio = prio; + task_struct_run_list'next = None; + task_struct_run_list'next_offset = -1; + task_struct_run_list'next_adjustment = -1; + task_struct_run_list'prev = None; + task_struct_state = state; + task_struct_static_prio = static_prio; + task_struct_tasks'next = tasks'next; + task_struct_tasks'next_offset = 480; + task_struct_tasks'next_adjustment = 480; + task_struct_tasks'prev = tasks'prev } | { _ } -> - raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_4", match_err));; -let task_struct_parser_5 kernel_version bits = + raise (ParseError ("task_struct", "task_struct_parser_2", match_err));; +let task_struct_parser_3 kernel_version bits = bitmatch bits with | { state : zero+32 : offset(0), littleendian; prio : zero+32 : offset(160), littleendian; @@ -169,22 +156,23 @@ let task_struct_parser_5 kernel_version bits = tasks'prev : zero+32 : offset(3232), littleendian; pid : zero+32 : offset(3552), littleendian; comm : 128 : offset(5896), string } -> - let s = - { task_struct_shape_fields_1_tasks'next = tasks'next; - task_struct_shape_fields_1_tasks'next_offset = 400; - task_struct_shape_fields_1_tasks'next_adjustment = 400 } in - let c = - { task_struct_content_fields_2_comm = comm; - task_struct_content_fields_2_normal_prio = normal_prio; - task_struct_content_fields_2_pid = pid; - task_struct_content_fields_2_prio = prio; - task_struct_content_fields_2_state = state; - task_struct_content_fields_2_static_prio = static_prio; - task_struct_content_fields_2_tasks'prev = tasks'prev } in - (s, c) + { task_struct_comm = comm; + task_struct_normal_prio = normal_prio; + task_struct_pid = pid; + task_struct_prio = prio; + task_struct_run_list'next = None; + task_struct_run_list'next_offset = -1; + task_struct_run_list'next_adjustment = -1; + task_struct_run_list'prev = None; + task_struct_state = state; + task_struct_static_prio = static_prio; + task_struct_tasks'next = tasks'next; + task_struct_tasks'next_offset = 400; + task_struct_tasks'next_adjustment = 400; + task_struct_tasks'prev = tasks'prev } | { _ } -> - raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_5", match_err));; -let task_struct_parser_6 kernel_version bits = + raise (ParseError ("task_struct", "task_struct_parser_3", match_err));; +let task_struct_parser_4 kernel_version bits = bitmatch bits with | { state : zero+32 : offset(0), littleendian; prio : zero+32 : offset(160), littleendian; @@ -194,22 +182,23 @@ let task_struct_parser_6 kernel_version bits = tasks'prev : zero+32 : offset(3264), littleendian; pid : zero+32 : offset(3584), littleendian; comm : 128 : offset(5928), string } -> - let s = - { task_struct_shape_fields_1_tasks'next = tasks'next; - task_struct_shape_fields_1_tasks'next_offset = 404; - task_struct_shape_fields_1_tasks'next_adjustment = 404 } in - let c = - { task_struct_content_fields_2_comm = comm; - task_struct_content_fields_2_normal_prio = normal_prio; - task_struct_content_fields_2_pid = pid; - task_struct_content_fields_2_prio = prio; - task_struct_content_fields_2_state = state; - task_struct_content_fields_2_static_prio = static_prio; - task_struct_content_fields_2_tasks'prev = tasks'prev } in - (s, c) + { task_struct_comm = comm; + task_struct_normal_prio = normal_prio; + task_struct_pid = pid; + task_struct_prio = prio; + task_struct_run_list'next = None; + task_struct_run_list'next_offset = -1; + task_struct_run_list'next_adjustment = -1; + task_struct_run_list'prev = None; + task_struct_state = state; + task_struct_static_prio = static_prio; + task_struct_tasks'next = tasks'next; + task_struct_tasks'next_offset = 404; + task_struct_tasks'next_adjustment = 404; + task_struct_tasks'prev = tasks'prev } | { _ } -> - raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_6", match_err));; -let task_struct_parser_7 kernel_version bits = + raise (ParseError ("task_struct", "task_struct_parser_4", match_err));; +let task_struct_parser_5 kernel_version bits = bitmatch bits with | { state : zero+32 : offset(0), bigendian; prio : zero+32 : offset(160), bigendian; @@ -219,21 +208,134 @@ let task_struct_parser_7 kernel_version bits = tasks'prev : zero+32 : offset(3360), bigendian; pid : zero+32 : offset(3680), bigendian; comm : 128 : offset(6056), string } -> - let s = - { task_struct_shape_fields_1_tasks'next = tasks'next; - task_struct_shape_fields_1_tasks'next_offset = 416; - task_struct_shape_fields_1_tasks'next_adjustment = 416 } in - let c = - { task_struct_content_fields_2_comm = comm; - task_struct_content_fields_2_normal_prio = normal_prio; - task_struct_content_fields_2_pid = pid; - task_struct_content_fields_2_prio = prio; - task_struct_content_fields_2_state = state; - task_struct_content_fields_2_static_prio = static_prio; - task_struct_content_fields_2_tasks'prev = tasks'prev } in - (s, c) + { task_struct_comm = comm; + task_struct_normal_prio = normal_prio; + task_struct_pid = pid; + task_struct_prio = prio; + task_struct_run_list'next = None; + task_struct_run_list'next_offset = -1; + task_struct_run_list'next_adjustment = -1; + task_struct_run_list'prev = None; + task_struct_state = state; + task_struct_static_prio = static_prio; + task_struct_tasks'next = tasks'next; + task_struct_tasks'next_offset = 416; + task_struct_tasks'next_adjustment = 416; + task_struct_tasks'prev = tasks'prev } + | { _ } -> + raise (ParseError ("task_struct", "task_struct_parser_5", match_err));; +let task_struct_parser_6 kernel_version bits = + bitmatch bits with + | { state : zero+32 : offset(0), bigendian; + prio : zero+32 : offset(192), bigendian; + static_prio : zero+32 : offset(224), bigendian; + normal_prio : zero+32 : offset(256), bigendian; + run_list'next : zero+32 : offset(288), bigendian; + run_list'prev : zero+32 : offset(320), bigendian; + tasks'next : zero+32 : offset(1024), bigendian; + tasks'prev : zero+32 : offset(1056), bigendian; + pid : zero+32 : offset(1376), bigendian; + comm : 128 : offset(3264), string } -> + { task_struct_comm = comm; + task_struct_normal_prio = normal_prio; + task_struct_pid = pid; + task_struct_prio = prio; + task_struct_run_list'next = Some run_list'next; + task_struct_run_list'next_offset = 36; + task_struct_run_list'next_adjustment = 36; + task_struct_run_list'prev = Some run_list'prev; + task_struct_state = state; + task_struct_static_prio = static_prio; + task_struct_tasks'next = tasks'next; + task_struct_tasks'next_offset = 128; + task_struct_tasks'next_adjustment = 128; + task_struct_tasks'prev = tasks'prev } + | { _ } -> + raise (ParseError ("task_struct", "task_struct_parser_6", match_err));; +let task_struct_parser_7 kernel_version bits = + bitmatch bits with + | { state : zero+64 : offset(0), littleendian; + prio : zero+32 : offset(320), littleendian; + static_prio : zero+32 : offset(352), littleendian; + normal_prio : zero+32 : offset(384), littleendian; + run_list'next : zero+64 : offset(448), littleendian; + run_list'prev : zero+64 : offset(512), littleendian; + tasks'next : zero+64 : offset(1536), littleendian; + tasks'prev : zero+64 : offset(1600), littleendian; + pid : zero+32 : offset(2144), littleendian; + comm : 128 : offset(5440), string } -> + { task_struct_comm = comm; + task_struct_normal_prio = normal_prio; + task_struct_pid = pid; + task_struct_prio = prio; + task_struct_run_list'next = Some run_list'next; + task_struct_run_list'next_offset = 56; + task_struct_run_list'next_adjustment = 56; + task_struct_run_list'prev = Some run_list'prev; + task_struct_state = state; + task_struct_static_prio = static_prio; + task_struct_tasks'next = tasks'next; + task_struct_tasks'next_offset = 192; + task_struct_tasks'next_adjustment = 192; + task_struct_tasks'prev = tasks'prev } + | { _ } -> + raise (ParseError ("task_struct", "task_struct_parser_7", match_err));; +let task_struct_parser_8 kernel_version bits = + bitmatch bits with + | { state : zero+32 : offset(0), littleendian; + prio : zero+32 : offset(192), littleendian; + static_prio : zero+32 : offset(224), littleendian; + normal_prio : zero+32 : offset(256), littleendian; + run_list'next : zero+32 : offset(288), littleendian; + run_list'prev : zero+32 : offset(320), littleendian; + tasks'next : zero+32 : offset(992), littleendian; + tasks'prev : zero+32 : offset(1024), littleendian; + pid : zero+32 : offset(1344), littleendian; + comm : 128 : offset(3232), string } -> + { task_struct_comm = comm; + task_struct_normal_prio = normal_prio; + task_struct_pid = pid; + task_struct_prio = prio; + task_struct_run_list'next = Some run_list'next; + task_struct_run_list'next_offset = 36; + task_struct_run_list'next_adjustment = 36; + task_struct_run_list'prev = Some run_list'prev; + task_struct_state = state; + task_struct_static_prio = static_prio; + task_struct_tasks'next = tasks'next; + task_struct_tasks'next_offset = 124; + task_struct_tasks'next_adjustment = 124; + task_struct_tasks'prev = tasks'prev } + | { _ } -> + raise (ParseError ("task_struct", "task_struct_parser_8", match_err));; +let task_struct_parser_9 kernel_version bits = + bitmatch bits with + | { state : zero+64 : offset(0), bigendian; + prio : zero+32 : offset(320), bigendian; + static_prio : zero+32 : offset(352), bigendian; + normal_prio : zero+32 : offset(384), bigendian; + run_list'next : zero+64 : offset(448), bigendian; + run_list'prev : zero+64 : offset(512), bigendian; + tasks'next : zero+64 : offset(1600), bigendian; + tasks'prev : zero+64 : offset(1664), bigendian; + pid : zero+32 : offset(2208), bigendian; + comm : 128 : offset(5440), string } -> + { task_struct_comm = comm; + task_struct_normal_prio = normal_prio; + task_struct_pid = pid; + task_struct_prio = prio; + task_struct_run_list'next = Some run_list'next; + task_struct_run_list'next_offset = 56; + task_struct_run_list'next_adjustment = 56; + task_struct_run_list'prev = Some run_list'prev; + task_struct_state = state; + task_struct_static_prio = static_prio; + task_struct_tasks'next = tasks'next; + task_struct_tasks'next_offset = 200; + task_struct_tasks'next_adjustment = 200; + task_struct_tasks'prev = tasks'prev } | { _ } -> - raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_7", match_err));; + raise (ParseError ("task_struct", "task_struct_parser_9", match_err));; let net_device_parser_10 kernel_version bits = bitmatch bits with | { name : 128 : offset(0), string; @@ -246,23 +348,21 @@ let net_device_parser_10 kernel_version bits = addr_len : zero+8 : offset(3392), littleendian; ip_ptr : zero+64 : offset(3840), littleendian; ip6_ptr : zero+64 : offset(3968), littleendian } -> - let s = - { net_device_shape_fields_8_dev_list'next = dev_list'next; - net_device_shape_fields_8_dev_list'next_offset = 72; - net_device_shape_fields_8_dev_list'next_adjustment = 72; - net_device_shape_fields_8_ip6_ptr = ip6_ptr; - net_device_shape_fields_8_ip_ptr = ip_ptr } in - let c = - { net_device_content_fields_9_addr_len = addr_len; - net_device_content_fields_9_dev_list'prev = dev_list'prev; - net_device_content_fields_9_flags = flags; - net_device_content_fields_9_mtu = mtu; - net_device_content_fields_9_name = name; - net_device_content_fields_9_operstate = operstate; - net_device_content_fields_9_perm_addr = perm_addr } in - (s, c) + { net_device_addr_len = addr_len; + net_device_dev_list'next = Some dev_list'next; + net_device_dev_list'next_offset = 72; + net_device_dev_list'next_adjustment = 72; + net_device_dev_list'prev = Some dev_list'prev; + net_device_flags = flags; + net_device_ip6_ptr = ip6_ptr; + net_device_ip_ptr = ip_ptr; + net_device_mtu = mtu; + net_device_name = name; + net_device_next = None; + net_device_operstate = operstate; + net_device_perm_addr = perm_addr } | { _ } -> - raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_10", match_err));; + raise (ParseError ("net_device", "net_device_parser_10", match_err));; let net_device_parser_11 kernel_version bits = bitmatch bits with | { name : 128 : offset(0), string; @@ -275,23 +375,21 @@ let net_device_parser_11 kernel_version bits = addr_len : zero+8 : offset(3392), bigendian; ip_ptr : zero+64 : offset(3840), bigendian; ip6_ptr : zero+64 : offset(3968), bigendian } -> - let s = - { net_device_shape_fields_8_dev_list'next = dev_list'next; - net_device_shape_fields_8_dev_list'next_offset = 72; - net_device_shape_fields_8_dev_list'next_adjustment = 72; - net_device_shape_fields_8_ip6_ptr = ip6_ptr; - net_device_shape_fields_8_ip_ptr = ip_ptr } in - let c = - { net_device_content_fields_9_addr_len = addr_len; - net_device_content_fields_9_dev_list'prev = dev_list'prev; - net_device_content_fields_9_flags = flags; - net_device_content_fields_9_mtu = mtu; - net_device_content_fields_9_name = name; - net_device_content_fields_9_operstate = operstate; - net_device_content_fields_9_perm_addr = perm_addr } in - (s, c) + { net_device_addr_len = addr_len; + net_device_dev_list'next = Some dev_list'next; + net_device_dev_list'next_offset = 72; + net_device_dev_list'next_adjustment = 72; + net_device_dev_list'prev = Some dev_list'prev; + net_device_flags = flags; + net_device_ip6_ptr = ip6_ptr; + net_device_ip_ptr = ip_ptr; + net_device_mtu = mtu; + net_device_name = name; + net_device_next = None; + net_device_operstate = operstate; + net_device_perm_addr = perm_addr } | { _ } -> - raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_11", match_err));; + raise (ParseError ("net_device", "net_device_parser_11", match_err));; let net_device_parser_12 kernel_version bits = bitmatch bits with | { name : 128 : offset(0), string; @@ -304,23 +402,21 @@ let net_device_parser_12 kernel_version bits = addr_len : zero+8 : offset(2016), littleendian; ip_ptr : zero+32 : offset(2304), littleendian; ip6_ptr : zero+32 : offset(2368), littleendian } -> - let s = - { net_device_shape_fields_8_dev_list'next = dev_list'next; - net_device_shape_fields_8_dev_list'next_offset = 48; - net_device_shape_fields_8_dev_list'next_adjustment = 48; - net_device_shape_fields_8_ip6_ptr = ip6_ptr; - net_device_shape_fields_8_ip_ptr = ip_ptr } in - let c = - { net_device_content_fields_9_addr_len = addr_len; - net_device_content_fields_9_dev_list'prev = dev_list'prev; - net_device_content_fields_9_flags = flags; - net_device_content_fields_9_mtu = mtu; - net_device_content_fields_9_name = name; - net_device_content_fields_9_operstate = operstate; - net_device_content_fields_9_perm_addr = perm_addr } in - (s, c) + { net_device_addr_len = addr_len; + net_device_dev_list'next = Some dev_list'next; + net_device_dev_list'next_offset = 48; + net_device_dev_list'next_adjustment = 48; + net_device_dev_list'prev = Some dev_list'prev; + net_device_flags = flags; + net_device_ip6_ptr = ip6_ptr; + net_device_ip_ptr = ip_ptr; + net_device_mtu = mtu; + net_device_name = name; + net_device_next = None; + net_device_operstate = operstate; + net_device_perm_addr = perm_addr } | { _ } -> - raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_12", match_err));; + raise (ParseError ("net_device", "net_device_parser_12", match_err));; let net_device_parser_13 kernel_version bits = bitmatch bits with | { name : 128 : offset(0), string; @@ -333,705 +429,973 @@ let net_device_parser_13 kernel_version bits = addr_len : zero+8 : offset(2016), bigendian; ip_ptr : zero+32 : offset(2304), bigendian; ip6_ptr : zero+32 : offset(2368), bigendian } -> - let s = - { net_device_shape_fields_8_dev_list'next = dev_list'next; - net_device_shape_fields_8_dev_list'next_offset = 48; - net_device_shape_fields_8_dev_list'next_adjustment = 48; - net_device_shape_fields_8_ip6_ptr = ip6_ptr; - net_device_shape_fields_8_ip_ptr = ip_ptr } in - let c = - { net_device_content_fields_9_addr_len = addr_len; - net_device_content_fields_9_dev_list'prev = dev_list'prev; - net_device_content_fields_9_flags = flags; - net_device_content_fields_9_mtu = mtu; - net_device_content_fields_9_name = name; - net_device_content_fields_9_operstate = operstate; - net_device_content_fields_9_perm_addr = perm_addr } in - (s, c) + { net_device_addr_len = addr_len; + net_device_dev_list'next = Some dev_list'next; + net_device_dev_list'next_offset = 48; + net_device_dev_list'next_adjustment = 48; + net_device_dev_list'prev = Some dev_list'prev; + net_device_flags = flags; + net_device_ip6_ptr = ip6_ptr; + net_device_ip_ptr = ip_ptr; + net_device_mtu = mtu; + net_device_name = name; + net_device_next = None; + net_device_operstate = operstate; + net_device_perm_addr = perm_addr } | { _ } -> - raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_13", match_err));; -let net_parser_18 kernel_version bits = + raise (ParseError ("net_device", "net_device_parser_13", match_err));; +let net_device_parser_14 kernel_version bits = + bitmatch bits with + | { name : 128 : offset(0), string; + next : zero+32 : offset(384), bigendian; + flags : zero+32 : offset(704), bigendian; + operstate : zero+8 : offset(784), bigendian; + mtu : zero+32 : offset(800), bigendian; + perm_addr : 256 : offset(896), string; + addr_len : zero+8 : offset(1152), bigendian; + ip_ptr : zero+32 : offset(1344), bigendian; + ip6_ptr : zero+32 : offset(1408), bigendian } -> + { net_device_addr_len = addr_len; + net_device_dev_list'next = None; + net_device_dev_list'next_offset = -1; + net_device_dev_list'next_adjustment = -1; + net_device_dev_list'prev = None; + net_device_flags = flags; + net_device_ip6_ptr = ip6_ptr; + net_device_ip_ptr = ip_ptr; + net_device_mtu = mtu; + net_device_name = name; + net_device_next = Some next; + net_device_operstate = operstate; + net_device_perm_addr = perm_addr } + | { _ } -> + raise (ParseError ("net_device", "net_device_parser_14", match_err));; +let net_device_parser_15 kernel_version bits = + bitmatch bits with + | { name : 128 : offset(0), string; + next : zero+64 : offset(576), littleendian; + flags : zero+32 : offset(1152), littleendian; + operstate : zero+8 : offset(1232), littleendian; + mtu : zero+32 : offset(1248), littleendian; + perm_addr : 256 : offset(1408), string; + addr_len : zero+8 : offset(1664), littleendian; + ip_ptr : zero+64 : offset(1984), littleendian; + ip6_ptr : zero+64 : offset(2112), littleendian } -> + { net_device_addr_len = addr_len; + net_device_dev_list'next = None; + net_device_dev_list'next_offset = -1; + net_device_dev_list'next_adjustment = -1; + net_device_dev_list'prev = None; + net_device_flags = flags; + net_device_ip6_ptr = ip6_ptr; + net_device_ip_ptr = ip_ptr; + net_device_mtu = mtu; + net_device_name = name; + net_device_next = Some next; + net_device_operstate = operstate; + net_device_perm_addr = perm_addr } + | { _ } -> + raise (ParseError ("net_device", "net_device_parser_15", match_err));; +let net_device_parser_16 kernel_version bits = + bitmatch bits with + | { name : 128 : offset(0), string; + next : zero+32 : offset(384), littleendian; + flags : zero+32 : offset(704), littleendian; + operstate : zero+8 : offset(784), littleendian; + mtu : zero+32 : offset(800), littleendian; + perm_addr : 256 : offset(896), string; + addr_len : zero+8 : offset(1152), littleendian; + ip_ptr : zero+32 : offset(1344), littleendian; + ip6_ptr : zero+32 : offset(1408), littleendian } -> + { net_device_addr_len = addr_len; + net_device_dev_list'next = None; + net_device_dev_list'next_offset = -1; + net_device_dev_list'next_adjustment = -1; + net_device_dev_list'prev = None; + net_device_flags = flags; + net_device_ip6_ptr = ip6_ptr; + net_device_ip_ptr = ip_ptr; + net_device_mtu = mtu; + net_device_name = name; + net_device_next = Some next; + net_device_operstate = operstate; + net_device_perm_addr = perm_addr } + | { _ } -> + raise (ParseError ("net_device", "net_device_parser_16", match_err));; +let net_device_parser_17 kernel_version bits = + bitmatch bits with + | { name : 128 : offset(0), string; + next : zero+64 : offset(576), bigendian; + flags : zero+32 : offset(1152), bigendian; + operstate : zero+8 : offset(1232), bigendian; + mtu : zero+32 : offset(1248), bigendian; + perm_addr : 256 : offset(1408), string; + addr_len : zero+8 : offset(1664), bigendian; + ip_ptr : zero+64 : offset(1984), bigendian; + ip6_ptr : zero+64 : offset(2112), bigendian } -> + { net_device_addr_len = addr_len; + net_device_dev_list'next = None; + net_device_dev_list'next_offset = -1; + net_device_dev_list'next_adjustment = -1; + net_device_dev_list'prev = None; + net_device_flags = flags; + net_device_ip6_ptr = ip6_ptr; + net_device_ip_ptr = ip_ptr; + net_device_mtu = mtu; + net_device_name = name; + net_device_next = Some next; + net_device_operstate = operstate; + net_device_perm_addr = perm_addr } + | { _ } -> + raise (ParseError ("net_device", "net_device_parser_17", match_err));; +let net_parser_20 kernel_version bits = bitmatch bits with | { dev_base_head'next : zero+32 : offset(416), littleendian; dev_base_head'prev : zero+32 : offset(448), littleendian } -> - let s = - { net_shape_fields_14_dev_base_head'next = dev_base_head'next; - net_shape_fields_14_dev_base_head'next_offset = 52; - net_shape_fields_14_dev_base_head'next_adjustment = offset_of_net_device_dev_list'next kernel_version; - net_shape_fields_14_dev_base_head'prev = dev_base_head'prev; - net_shape_fields_14_dev_base_head'prev_offset = 56; - net_shape_fields_14_dev_base_head'prev_adjustment = offset_of_net_device_dev_list'next kernel_version } in - let c = - () in - (s, c) + { net_dev_base_head'next = dev_base_head'next; + net_dev_base_head'next_offset = 52; + net_dev_base_head'next_adjustment = offset_of_net_device_dev_list'next kernel_version; + net_dev_base_head'prev = dev_base_head'prev; + net_dev_base_head'prev_offset = 56; + net_dev_base_head'prev_adjustment = offset_of_net_device_dev_list'next kernel_version } | { _ } -> - raise (Virt_mem_types.ParseError ("net", "net_parser_18", match_err));; -let net_parser_19 kernel_version bits = + raise (ParseError ("net", "net_parser_20", match_err));; +let net_parser_21 kernel_version bits = bitmatch bits with | { dev_base_head'next : zero+32 : offset(416), bigendian; dev_base_head'prev : zero+32 : offset(448), bigendian } -> - let s = - { net_shape_fields_14_dev_base_head'next = dev_base_head'next; - net_shape_fields_14_dev_base_head'next_offset = 52; - net_shape_fields_14_dev_base_head'next_adjustment = offset_of_net_device_dev_list'next kernel_version; - net_shape_fields_14_dev_base_head'prev = dev_base_head'prev; - net_shape_fields_14_dev_base_head'prev_offset = 56; - net_shape_fields_14_dev_base_head'prev_adjustment = offset_of_net_device_dev_list'next kernel_version } in - let c = - () in - (s, c) + { net_dev_base_head'next = dev_base_head'next; + net_dev_base_head'next_offset = 52; + net_dev_base_head'next_adjustment = offset_of_net_device_dev_list'next kernel_version; + net_dev_base_head'prev = dev_base_head'prev; + net_dev_base_head'prev_offset = 56; + net_dev_base_head'prev_adjustment = offset_of_net_device_dev_list'next kernel_version } | { _ } -> - raise (Virt_mem_types.ParseError ("net", "net_parser_19", match_err));; -let net_parser_16 kernel_version bits = + raise (ParseError ("net", "net_parser_21", match_err));; +let net_parser_18 kernel_version bits = bitmatch bits with | { dev_base_head'next : zero+64 : offset(768), littleendian; dev_base_head'prev : zero+64 : offset(832), littleendian } -> - let s = - { net_shape_fields_14_dev_base_head'next = dev_base_head'next; - net_shape_fields_14_dev_base_head'next_offset = 96; - net_shape_fields_14_dev_base_head'next_adjustment = offset_of_net_device_dev_list'next kernel_version; - net_shape_fields_14_dev_base_head'prev = dev_base_head'prev; - net_shape_fields_14_dev_base_head'prev_offset = 104; - net_shape_fields_14_dev_base_head'prev_adjustment = offset_of_net_device_dev_list'next kernel_version } in - let c = - () in - (s, c) + { net_dev_base_head'next = dev_base_head'next; + net_dev_base_head'next_offset = 96; + net_dev_base_head'next_adjustment = offset_of_net_device_dev_list'next kernel_version; + net_dev_base_head'prev = dev_base_head'prev; + net_dev_base_head'prev_offset = 104; + net_dev_base_head'prev_adjustment = offset_of_net_device_dev_list'next kernel_version } | { _ } -> - raise (Virt_mem_types.ParseError ("net", "net_parser_16", match_err));; -let net_parser_17 kernel_version bits = + raise (ParseError ("net", "net_parser_18", match_err));; +let net_parser_19 kernel_version bits = bitmatch bits with | { dev_base_head'next : zero+64 : offset(768), bigendian; dev_base_head'prev : zero+64 : offset(832), bigendian } -> - let s = - { net_shape_fields_14_dev_base_head'next = dev_base_head'next; - net_shape_fields_14_dev_base_head'next_offset = 96; - net_shape_fields_14_dev_base_head'next_adjustment = offset_of_net_device_dev_list'next kernel_version; - net_shape_fields_14_dev_base_head'prev = dev_base_head'prev; - net_shape_fields_14_dev_base_head'prev_offset = 104; - net_shape_fields_14_dev_base_head'prev_adjustment = offset_of_net_device_dev_list'next kernel_version } in - let c = - () in - (s, c) + { net_dev_base_head'next = dev_base_head'next; + net_dev_base_head'next_offset = 96; + net_dev_base_head'next_adjustment = offset_of_net_device_dev_list'next kernel_version; + net_dev_base_head'prev = dev_base_head'prev; + net_dev_base_head'prev_offset = 104; + net_dev_base_head'prev_adjustment = offset_of_net_device_dev_list'next kernel_version } | { _ } -> - raise (Virt_mem_types.ParseError ("net", "net_parser_17", match_err));; + raise (ParseError ("net", "net_parser_19", match_err));; let in_device_parser_24 kernel_version bits = bitmatch bits with | { ifa_list : zero+32 : offset(96), littleendian } -> - let s = - { in_device_shape_fields_20_ifa_list = ifa_list } in - let c = - () in - (s, c) + { in_device_ifa_list = ifa_list } | { _ } -> - raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_24", match_err));; + raise (ParseError ("in_device", "in_device_parser_24", match_err));; let in_device_parser_25 kernel_version bits = bitmatch bits with | { ifa_list : zero+32 : offset(96), bigendian } -> - let s = - { in_device_shape_fields_20_ifa_list = ifa_list } in - let c = - () in - (s, c) + { in_device_ifa_list = ifa_list } | { _ } -> - raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_25", match_err));; + raise (ParseError ("in_device", "in_device_parser_25", match_err));; let in_device_parser_22 kernel_version bits = bitmatch bits with | { ifa_list : zero+64 : offset(128), littleendian } -> - let s = - { in_device_shape_fields_20_ifa_list = ifa_list } in - let c = - () in - (s, c) + { in_device_ifa_list = ifa_list } | { _ } -> - raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_22", match_err));; + raise (ParseError ("in_device", "in_device_parser_22", match_err));; let in_device_parser_23 kernel_version bits = bitmatch bits with | { ifa_list : zero+64 : offset(128), bigendian } -> - let s = - { in_device_shape_fields_20_ifa_list = ifa_list } in - let c = - () in - (s, c) + { in_device_ifa_list = ifa_list } | { _ } -> - raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_23", match_err));; -let inet6_dev_parser_30 kernel_version bits = + raise (ParseError ("in_device", "in_device_parser_23", match_err));; +let inet6_dev_parser_28 kernel_version bits = bitmatch bits with | { addr_list : zero+32 : offset(32), littleendian } -> - let s = - { inet6_dev_shape_fields_26_addr_list = addr_list } in - let c = - () in - (s, c) + { inet6_dev_addr_list = addr_list } | { _ } -> - raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_30", match_err));; -let inet6_dev_parser_31 kernel_version bits = + raise (ParseError ("inet6_dev", "inet6_dev_parser_28", match_err));; +let inet6_dev_parser_29 kernel_version bits = bitmatch bits with | { addr_list : zero+32 : offset(32), bigendian } -> - let s = - { inet6_dev_shape_fields_26_addr_list = addr_list } in - let c = - () in - (s, c) + { inet6_dev_addr_list = addr_list } | { _ } -> - raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_31", match_err));; -let inet6_dev_parser_28 kernel_version bits = + raise (ParseError ("inet6_dev", "inet6_dev_parser_29", match_err));; +let inet6_dev_parser_26 kernel_version bits = bitmatch bits with | { addr_list : zero+64 : offset(64), littleendian } -> - let s = - { inet6_dev_shape_fields_26_addr_list = addr_list } in - let c = - () in - (s, c) + { inet6_dev_addr_list = addr_list } | { _ } -> - raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_28", match_err));; -let inet6_dev_parser_29 kernel_version bits = + raise (ParseError ("inet6_dev", "inet6_dev_parser_26", match_err));; +let inet6_dev_parser_27 kernel_version bits = bitmatch bits with | { addr_list : zero+64 : offset(64), bigendian } -> - let s = - { inet6_dev_shape_fields_26_addr_list = addr_list } in - let c = - () in - (s, c) + { inet6_dev_addr_list = addr_list } | { _ } -> - raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_29", match_err));; -let in_ifaddr_parser_36 kernel_version bits = + raise (ParseError ("inet6_dev", "inet6_dev_parser_27", match_err));; +let in_ifaddr_parser_32 kernel_version bits = bitmatch bits with | { ifa_next : zero+32 : offset(0), littleendian; ifa_local : zero+32 : offset(128), littleendian; ifa_address : zero+32 : offset(160), littleendian; ifa_mask : zero+32 : offset(192), littleendian; ifa_broadcast : zero+32 : offset(224), littleendian } -> - let s = - { in_ifaddr_shape_fields_32_ifa_next = ifa_next } in - let c = - { in_ifaddr_content_fields_33_ifa_address = ifa_address; - in_ifaddr_content_fields_33_ifa_broadcast = ifa_broadcast; - in_ifaddr_content_fields_33_ifa_local = ifa_local; - in_ifaddr_content_fields_33_ifa_mask = ifa_mask } in - (s, c) + { in_ifaddr_ifa_address = ifa_address; + in_ifaddr_ifa_broadcast = ifa_broadcast; + in_ifaddr_ifa_local = ifa_local; + in_ifaddr_ifa_mask = ifa_mask; + in_ifaddr_ifa_next = ifa_next } | { _ } -> - raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_36", match_err));; -let in_ifaddr_parser_37 kernel_version bits = + raise (ParseError ("in_ifaddr", "in_ifaddr_parser_32", match_err));; +let in_ifaddr_parser_33 kernel_version bits = bitmatch bits with | { ifa_next : zero+32 : offset(0), bigendian; ifa_local : zero+32 : offset(128), bigendian; ifa_address : zero+32 : offset(160), bigendian; ifa_mask : zero+32 : offset(192), bigendian; ifa_broadcast : zero+32 : offset(224), bigendian } -> - let s = - { in_ifaddr_shape_fields_32_ifa_next = ifa_next } in - let c = - { in_ifaddr_content_fields_33_ifa_address = ifa_address; - in_ifaddr_content_fields_33_ifa_broadcast = ifa_broadcast; - in_ifaddr_content_fields_33_ifa_local = ifa_local; - in_ifaddr_content_fields_33_ifa_mask = ifa_mask } in - (s, c) + { in_ifaddr_ifa_address = ifa_address; + in_ifaddr_ifa_broadcast = ifa_broadcast; + in_ifaddr_ifa_local = ifa_local; + in_ifaddr_ifa_mask = ifa_mask; + in_ifaddr_ifa_next = ifa_next } | { _ } -> - raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_37", match_err));; -let in_ifaddr_parser_34 kernel_version bits = + raise (ParseError ("in_ifaddr", "in_ifaddr_parser_33", match_err));; +let in_ifaddr_parser_30 kernel_version bits = bitmatch bits with | { ifa_next : zero+64 : offset(0), littleendian; ifa_local : zero+32 : offset(256), littleendian; ifa_address : zero+32 : offset(288), littleendian; ifa_mask : zero+32 : offset(320), littleendian; ifa_broadcast : zero+32 : offset(352), littleendian } -> - let s = - { in_ifaddr_shape_fields_32_ifa_next = ifa_next } in - let c = - { in_ifaddr_content_fields_33_ifa_address = ifa_address; - in_ifaddr_content_fields_33_ifa_broadcast = ifa_broadcast; - in_ifaddr_content_fields_33_ifa_local = ifa_local; - in_ifaddr_content_fields_33_ifa_mask = ifa_mask } in - (s, c) + { in_ifaddr_ifa_address = ifa_address; + in_ifaddr_ifa_broadcast = ifa_broadcast; + in_ifaddr_ifa_local = ifa_local; + in_ifaddr_ifa_mask = ifa_mask; + in_ifaddr_ifa_next = ifa_next } | { _ } -> - raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_34", match_err));; -let in_ifaddr_parser_35 kernel_version bits = + raise (ParseError ("in_ifaddr", "in_ifaddr_parser_30", match_err));; +let in_ifaddr_parser_31 kernel_version bits = bitmatch bits with | { ifa_next : zero+64 : offset(0), bigendian; ifa_local : zero+32 : offset(256), bigendian; ifa_address : zero+32 : offset(288), bigendian; ifa_mask : zero+32 : offset(320), bigendian; ifa_broadcast : zero+32 : offset(352), bigendian } -> - let s = - { in_ifaddr_shape_fields_32_ifa_next = ifa_next } in - let c = - { in_ifaddr_content_fields_33_ifa_address = ifa_address; - in_ifaddr_content_fields_33_ifa_broadcast = ifa_broadcast; - in_ifaddr_content_fields_33_ifa_local = ifa_local; - in_ifaddr_content_fields_33_ifa_mask = ifa_mask } in - (s, c) + { in_ifaddr_ifa_address = ifa_address; + in_ifaddr_ifa_broadcast = ifa_broadcast; + in_ifaddr_ifa_local = ifa_local; + in_ifaddr_ifa_mask = ifa_mask; + in_ifaddr_ifa_next = ifa_next } | { _ } -> - raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_35", match_err));; -let inet6_ifaddr_parser_42 kernel_version bits = + raise (ParseError ("in_ifaddr", "in_ifaddr_parser_31", match_err));; +let inet6_ifaddr_parser_36 kernel_version bits = bitmatch bits with | { prefix_len : zero+32 : offset(128), littleendian; lst_next : zero+32 : offset(832), littleendian } -> - let s = - { inet6_ifaddr_shape_fields_38_lst_next = lst_next } in - let c = - { inet6_ifaddr_content_fields_39_prefix_len = prefix_len } in - (s, c) + { inet6_ifaddr_lst_next = lst_next; + inet6_ifaddr_prefix_len = prefix_len } | { _ } -> - raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_42", match_err));; -let inet6_ifaddr_parser_40 kernel_version bits = + raise (ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_36", match_err));; +let inet6_ifaddr_parser_34 kernel_version bits = bitmatch bits with | { prefix_len : zero+32 : offset(128), littleendian; lst_next : zero+64 : offset(1280), littleendian } -> - let s = - { inet6_ifaddr_shape_fields_38_lst_next = lst_next } in - let c = - { inet6_ifaddr_content_fields_39_prefix_len = prefix_len } in - (s, c) + { inet6_ifaddr_lst_next = lst_next; + inet6_ifaddr_prefix_len = prefix_len } | { _ } -> - raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_40", match_err));; -let inet6_ifaddr_parser_41 kernel_version bits = + raise (ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_34", match_err));; +let inet6_ifaddr_parser_35 kernel_version bits = bitmatch bits with | { prefix_len : zero+32 : offset(128), bigendian; lst_next : zero+64 : offset(1280), bigendian } -> - let s = - { inet6_ifaddr_shape_fields_38_lst_next = lst_next } in - let c = - { inet6_ifaddr_content_fields_39_prefix_len = prefix_len } in - (s, c) + { inet6_ifaddr_lst_next = lst_next; + inet6_ifaddr_prefix_len = prefix_len } | { _ } -> - raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_41", match_err));; -let inet6_ifaddr_parser_43 kernel_version bits = + raise (ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_35", match_err));; +let inet6_ifaddr_parser_37 kernel_version bits = bitmatch bits with | { prefix_len : zero+32 : offset(128), bigendian; lst_next : zero+32 : offset(800), bigendian } -> - let s = - { inet6_ifaddr_shape_fields_38_lst_next = lst_next } in - let c = - { inet6_ifaddr_content_fields_39_prefix_len = prefix_len } in - (s, c) + { inet6_ifaddr_lst_next = lst_next; + inet6_ifaddr_prefix_len = prefix_len } | { _ } -> - raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_43", match_err));; -let task_struct_shape_fields_1_follower load followers map addr shape = - let (_, _, _, _, _, _, f) = followers in - let offset = shape.task_struct_shape_fields_1_tasks'next_offset - and adj = shape.task_struct_shape_fields_1_tasks'next_adjustment in - let offset = Int64.of_int offset and adj = Int64.of_int adj in - let addr = Int64.sub (Int64.add addr offset) adj in - let map = AddrMap.add addr ("task_struct", 0) map in - let out_addr = Int64.sub shape.task_struct_shape_fields_1_tasks'next adj in - let map = f load followers map out_addr in map;; -let net_device_shape_fields_8_follower load followers map addr shape = - let (_, _, _, _, _, f, _) = followers in - let offset = shape.net_device_shape_fields_8_dev_list'next_offset - and adj = shape.net_device_shape_fields_8_dev_list'next_adjustment in - let offset = Int64.of_int offset and adj = Int64.of_int adj in - let addr = Int64.sub (Int64.add addr offset) adj in - let map = AddrMap.add addr ("net_device", 0) map in - let out_addr = - Int64.sub shape.net_device_shape_fields_8_dev_list'next adj in - let map = f load followers map out_addr in - let (_, _, f, _, _, _, _) = followers in - let map = f load followers map shape.net_device_shape_fields_8_ip6_ptr in - let (_, _, _, f, _, _, _) = followers in - let map = f load followers map shape.net_device_shape_fields_8_ip_ptr - in map;; -let net_shape_fields_14_follower load followers map addr shape = - let (_, _, _, _, _, f, _) = followers in - let offset = shape.net_shape_fields_14_dev_base_head'next_offset - and adj = shape.net_shape_fields_14_dev_base_head'next_adjustment in - let offset = Int64.of_int offset and adj = Int64.of_int adj in - let addr = Int64.sub (Int64.add addr offset) adj in - let map = AddrMap.add addr ("net_device", 0) map in - let out_addr = - Int64.sub shape.net_shape_fields_14_dev_base_head'next adj in - let map = f load followers map out_addr in - let (_, _, _, _, _, f, _) = followers in - let offset = shape.net_shape_fields_14_dev_base_head'prev_offset - and adj = shape.net_shape_fields_14_dev_base_head'prev_adjustment in - let offset = Int64.of_int offset and adj = Int64.of_int adj in - let addr = Int64.sub (Int64.add addr offset) adj in - let map = AddrMap.add addr ("net_device", 0) map in - let out_addr = - Int64.sub shape.net_shape_fields_14_dev_base_head'prev adj in - let map = f load followers map out_addr in map;; -let in_device_shape_fields_20_follower load followers map addr shape = - let (_, f, _, _, _, _, _) = followers in - let map = f load followers map shape.in_device_shape_fields_20_ifa_list - in map;; -let inet6_dev_shape_fields_26_follower load followers map addr shape = - let (f, _, _, _, _, _, _) = followers in - let map = f load followers map shape.inet6_dev_shape_fields_26_addr_list - in map;; -let in_ifaddr_shape_fields_32_follower load followers map addr shape = - let (_, f, _, _, _, _, _) = followers in - let map = f load followers map shape.in_ifaddr_shape_fields_32_ifa_next - in map;; -let inet6_ifaddr_shape_fields_38_follower load followers map addr shape = - let (f, _, _, _, _, _, _) = followers in - let map = f load followers map shape.inet6_ifaddr_shape_fields_38_lst_next - in map;; -let kv_follower kernel_version struct_name total_size parserfn followerfn - load followers map addr = + raise (ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_37", match_err));; +let inet6_ifaddr_parser_39 kernel_version bits = + bitmatch bits with + | { prefix_len : zero+32 : offset(128), littleendian; + lst_next : zero+64 : offset(1216), littleendian } -> + { inet6_ifaddr_lst_next = lst_next; + inet6_ifaddr_prefix_len = prefix_len } + | { _ } -> + raise (ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_39", match_err));; +let inet6_ifaddr_parser_41 kernel_version bits = + bitmatch bits with + | { prefix_len : zero+32 : offset(128), bigendian; + lst_next : zero+64 : offset(1216), bigendian } -> + { inet6_ifaddr_lst_next = lst_next; + inet6_ifaddr_prefix_len = prefix_len } + | { _ } -> + raise (ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_41", match_err));; +let inet6_ifaddr_parser_38 kernel_version bits = + bitmatch bits with + | { prefix_len : zero+32 : offset(128), bigendian; + lst_next : zero+32 : offset(736), bigendian } -> + { inet6_ifaddr_lst_next = lst_next; + inet6_ifaddr_prefix_len = prefix_len } + | { _ } -> + raise (ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_38", match_err));; +let inet6_ifaddr_parser_40 kernel_version bits = + bitmatch bits with + | { prefix_len : zero+32 : offset(128), littleendian; + lst_next : zero+32 : offset(736), littleendian } -> + { inet6_ifaddr_lst_next = lst_next; + inet6_ifaddr_prefix_len = prefix_len } + | { _ } -> + raise (ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_40", match_err));; +let size_of_task_struct = + let map = + StringMap.add "2.6.25.14-69.fc8.x86_64" 2496 + (StringMap.add "2.6.25.14-108.fc9.ppc64" 2524 + (StringMap.add "2.6.25.14-108.fc9.i586" 1832 + (StringMap.add "2.6.25.14-108.fc9.i686" 1832 + (StringMap.add "2.6.25.14-69.fc8.ppc" 1952 + (StringMap.add "2.6.25.14-108.fc9.x86_64" 2496 + (StringMap.add "2.6.25.11-97.fc9.x86_64" 2496 + (StringMap.add "2.6.25.14-69.fc8.i586" 1832 + (StringMap.add "2.6.20-1.2933.fc6.ppc" 1592 + (StringMap.add "2.6.20-1.2933.fc6.x86_64" 1920 + (StringMap.add "2.6.25.14-69.fc8.ppc64" 2524 + (StringMap.add "2.6.25.11-97.fc9.i686" + 1832 + (StringMap.add + "2.6.20-1.2933.fc6.i686" 1400 + (StringMap.add + "2.6.20-1.2933.fc6.i586" 1400 + (StringMap.add + "2.6.25.14-108.fc9.ppc" 1952 + (StringMap.add + "2.6.20-1.2933.fc6.ppc64" + 2112 + (StringMap.add + "2.6.25.14-69.fc8.i686" + 1832 StringMap.empty)))))))))))))))) + in + fun kernel_version -> + try StringMap.find kernel_version map + with | Not_found -> unknown_kernel_version kernel_version "task_struct";; +let size_of_net_device = + let map = + StringMap.add "2.6.25.14-69.fc8.x86_64" 1752 + (StringMap.add "2.6.25.14-108.fc9.ppc64" 1776 + (StringMap.add "2.6.25.14-108.fc9.i586" 1212 + (StringMap.add "2.6.25.14-108.fc9.i686" 1212 + (StringMap.add "2.6.25.14-69.fc8.ppc" 904 + (StringMap.add "2.6.25.14-108.fc9.x86_64" 1752 + (StringMap.add "2.6.25.11-97.fc9.x86_64" 1752 + (StringMap.add "2.6.25.14-69.fc8.i586" 1212 + (StringMap.add "2.6.20-1.2933.fc6.ppc" 668 + (StringMap.add "2.6.20-1.2933.fc6.x86_64" 1260 + (StringMap.add "2.6.25.14-69.fc8.ppc64" 1776 + (StringMap.add "2.6.25.11-97.fc9.i686" + 1212 + (StringMap.add + "2.6.20-1.2933.fc6.i686" 912 + (StringMap.add + "2.6.20-1.2933.fc6.i586" 912 + (StringMap.add + "2.6.25.14-108.fc9.ppc" 904 + (StringMap.add + "2.6.20-1.2933.fc6.ppc64" + 1260 + (StringMap.add + "2.6.25.14-69.fc8.i686" + 1212 StringMap.empty)))))))))))))))) + in + fun kernel_version -> + try StringMap.find kernel_version map + with | Not_found -> unknown_kernel_version kernel_version "net_device";; +let size_of_net = + let map = + StringMap.add "2.6.25.14-69.fc8.x86_64" 488 + (StringMap.add "2.6.25.14-108.fc9.ppc64" 488 + (StringMap.add "2.6.25.14-108.fc9.i586" 284 + (StringMap.add "2.6.25.14-108.fc9.i686" 284 + (StringMap.add "2.6.25.14-69.fc8.ppc" 276 + (StringMap.add "2.6.25.14-108.fc9.x86_64" 488 + (StringMap.add "2.6.25.11-97.fc9.x86_64" 488 + (StringMap.add "2.6.25.14-69.fc8.i586" 284 + (StringMap.add "2.6.25.14-69.fc8.ppc64" 488 + (StringMap.add "2.6.25.11-97.fc9.i686" 284 + (StringMap.add "2.6.25.14-108.fc9.ppc" 276 + (StringMap.add "2.6.25.14-69.fc8.i686" + 284 StringMap.empty))))))))))) + in + fun kernel_version -> + try StringMap.find kernel_version map + with | Not_found -> unknown_kernel_version kernel_version "net";; +let size_of_in_device = + let map = + StringMap.add "2.6.25.14-69.fc8.x86_64" 368 + (StringMap.add "2.6.25.14-108.fc9.ppc64" 368 + (StringMap.add "2.6.25.14-108.fc9.i586" 244 + (StringMap.add "2.6.25.14-108.fc9.i686" 244 + (StringMap.add "2.6.25.14-69.fc8.ppc" 236 + (StringMap.add "2.6.25.14-108.fc9.x86_64" 368 + (StringMap.add "2.6.25.11-97.fc9.x86_64" 368 + (StringMap.add "2.6.25.14-69.fc8.i586" 244 + (StringMap.add "2.6.20-1.2933.fc6.ppc" 212 + (StringMap.add "2.6.20-1.2933.fc6.x86_64" 328 + (StringMap.add "2.6.25.14-69.fc8.ppc64" 368 + (StringMap.add "2.6.25.11-97.fc9.i686" + 244 + (StringMap.add + "2.6.20-1.2933.fc6.i686" 216 + (StringMap.add + "2.6.20-1.2933.fc6.i586" 216 + (StringMap.add + "2.6.25.14-108.fc9.ppc" 236 + (StringMap.add + "2.6.20-1.2933.fc6.ppc64" + 328 + (StringMap.add + "2.6.25.14-69.fc8.i686" + 244 StringMap.empty)))))))))))))))) + in + fun kernel_version -> + try StringMap.find kernel_version map + with | Not_found -> unknown_kernel_version kernel_version "in_device";; +let size_of_inet6_dev = + let map = + StringMap.add "2.6.25.14-69.fc8.x86_64" 536 + (StringMap.add "2.6.25.14-108.fc9.ppc64" 536 + (StringMap.add "2.6.25.14-108.fc9.i586" 356 + (StringMap.add "2.6.25.14-108.fc9.i686" 356 + (StringMap.add "2.6.25.14-69.fc8.ppc" 348 + (StringMap.add "2.6.25.14-108.fc9.x86_64" 536 + (StringMap.add "2.6.25.11-97.fc9.x86_64" 536 + (StringMap.add "2.6.25.14-69.fc8.i586" 356 + (StringMap.add "2.6.20-1.2933.fc6.ppc" 284 + (StringMap.add "2.6.20-1.2933.fc6.x86_64" 464 + (StringMap.add "2.6.25.14-69.fc8.ppc64" 536 + (StringMap.add "2.6.25.11-97.fc9.i686" + 356 + (StringMap.add + "2.6.20-1.2933.fc6.i686" 292 + (StringMap.add + "2.6.20-1.2933.fc6.i586" 292 + (StringMap.add + "2.6.25.14-108.fc9.ppc" 348 + (StringMap.add + "2.6.20-1.2933.fc6.ppc64" + 464 + (StringMap.add + "2.6.25.14-69.fc8.i686" + 356 StringMap.empty)))))))))))))))) + in + fun kernel_version -> + try StringMap.find kernel_version map + with | Not_found -> unknown_kernel_version kernel_version "inet6_dev";; +let size_of_in_ifaddr = + let map = + StringMap.add "2.6.25.14-69.fc8.x86_64" 71 + (StringMap.add "2.6.25.14-108.fc9.ppc64" 71 + (StringMap.add "2.6.25.14-108.fc9.i586" 55 + (StringMap.add "2.6.25.14-108.fc9.i686" 55 + (StringMap.add "2.6.25.14-69.fc8.ppc" 55 + (StringMap.add "2.6.25.14-108.fc9.x86_64" 71 + (StringMap.add "2.6.25.11-97.fc9.x86_64" 71 + (StringMap.add "2.6.25.14-69.fc8.i586" 55 + (StringMap.add "2.6.20-1.2933.fc6.ppc" 55 + (StringMap.add "2.6.20-1.2933.fc6.x86_64" 71 + (StringMap.add "2.6.25.14-69.fc8.ppc64" 71 + (StringMap.add "2.6.25.11-97.fc9.i686" 55 + (StringMap.add + "2.6.20-1.2933.fc6.i686" 55 + (StringMap.add + "2.6.20-1.2933.fc6.i586" 55 + (StringMap.add + "2.6.25.14-108.fc9.ppc" 55 + (StringMap.add + "2.6.20-1.2933.fc6.ppc64" + 71 + (StringMap.add + "2.6.25.14-69.fc8.i686" + 55 StringMap.empty)))))))))))))))) + in + fun kernel_version -> + try StringMap.find kernel_version map + with | Not_found -> unknown_kernel_version kernel_version "in_ifaddr";; +let size_of_inet6_ifaddr = + let map = + StringMap.add "2.6.25.14-69.fc8.x86_64" 200 + (StringMap.add "2.6.25.14-108.fc9.ppc64" 200 + (StringMap.add "2.6.25.14-108.fc9.i586" 128 + (StringMap.add "2.6.25.14-108.fc9.i686" 128 + (StringMap.add "2.6.25.14-69.fc8.ppc" 124 + (StringMap.add "2.6.25.14-108.fc9.x86_64" 200 + (StringMap.add "2.6.25.11-97.fc9.x86_64" 200 + (StringMap.add "2.6.25.14-69.fc8.i586" 128 + (StringMap.add "2.6.20-1.2933.fc6.ppc" 116 + (StringMap.add "2.6.20-1.2933.fc6.x86_64" 192 + (StringMap.add "2.6.25.14-69.fc8.ppc64" 200 + (StringMap.add "2.6.25.11-97.fc9.i686" + 128 + (StringMap.add + "2.6.20-1.2933.fc6.i686" 116 + (StringMap.add + "2.6.20-1.2933.fc6.i586" 116 + (StringMap.add + "2.6.25.14-108.fc9.ppc" 124 + (StringMap.add + "2.6.20-1.2933.fc6.ppc64" + 192 + (StringMap.add + "2.6.25.14-69.fc8.i686" + 128 StringMap.empty)))))))))))))))) + in + fun kernel_version -> + try StringMap.find kernel_version map + with + | Not_found -> unknown_kernel_version kernel_version "inet6_ifaddr";; +let parser_of_task_struct = + let map = + StringMap.add "2.6.25.14-69.fc8.x86_64" task_struct_parser_1 + (StringMap.add "2.6.25.14-108.fc9.ppc64" task_struct_parser_2 + (StringMap.add "2.6.25.14-108.fc9.i586" task_struct_parser_3 + (StringMap.add "2.6.25.14-108.fc9.i686" task_struct_parser_4 + (StringMap.add "2.6.25.14-69.fc8.ppc" task_struct_parser_5 + (StringMap.add "2.6.25.14-108.fc9.x86_64" + task_struct_parser_1 + (StringMap.add "2.6.25.11-97.fc9.x86_64" + task_struct_parser_1 + (StringMap.add "2.6.25.14-69.fc8.i586" + task_struct_parser_3 + (StringMap.add "2.6.20-1.2933.fc6.ppc" + task_struct_parser_6 + (StringMap.add "2.6.20-1.2933.fc6.x86_64" + task_struct_parser_7 + (StringMap.add "2.6.25.14-69.fc8.ppc64" + task_struct_parser_2 + (StringMap.add "2.6.25.11-97.fc9.i686" + task_struct_parser_4 + (StringMap.add + "2.6.20-1.2933.fc6.i686" + task_struct_parser_8 + (StringMap.add + "2.6.20-1.2933.fc6.i586" + task_struct_parser_8 + (StringMap.add + "2.6.25.14-108.fc9.ppc" + task_struct_parser_5 + (StringMap.add + "2.6.20-1.2933.fc6.ppc64" + task_struct_parser_9 + (StringMap.add + "2.6.25.14-69.fc8.i686" + task_struct_parser_4 + StringMap.empty)))))))))))))))) + in + fun kernel_version -> + try StringMap.find kernel_version map + with | Not_found -> unknown_kernel_version kernel_version "task_struct";; +let parser_of_net_device = + let map = + StringMap.add "2.6.25.14-69.fc8.x86_64" net_device_parser_10 + (StringMap.add "2.6.25.14-108.fc9.ppc64" net_device_parser_11 + (StringMap.add "2.6.25.14-108.fc9.i586" net_device_parser_12 + (StringMap.add "2.6.25.14-108.fc9.i686" net_device_parser_12 + (StringMap.add "2.6.25.14-69.fc8.ppc" net_device_parser_13 + (StringMap.add "2.6.25.14-108.fc9.x86_64" + net_device_parser_10 + (StringMap.add "2.6.25.11-97.fc9.x86_64" + net_device_parser_10 + (StringMap.add "2.6.25.14-69.fc8.i586" + net_device_parser_12 + (StringMap.add "2.6.20-1.2933.fc6.ppc" + net_device_parser_14 + (StringMap.add "2.6.20-1.2933.fc6.x86_64" + net_device_parser_15 + (StringMap.add "2.6.25.14-69.fc8.ppc64" + net_device_parser_11 + (StringMap.add "2.6.25.11-97.fc9.i686" + net_device_parser_12 + (StringMap.add + "2.6.20-1.2933.fc6.i686" + net_device_parser_16 + (StringMap.add + "2.6.20-1.2933.fc6.i586" + net_device_parser_16 + (StringMap.add + "2.6.25.14-108.fc9.ppc" + net_device_parser_13 + (StringMap.add + "2.6.20-1.2933.fc6.ppc64" + net_device_parser_17 + (StringMap.add + "2.6.25.14-69.fc8.i686" + net_device_parser_12 + StringMap.empty)))))))))))))))) + in + fun kernel_version -> + try StringMap.find kernel_version map + with | Not_found -> unknown_kernel_version kernel_version "net_device";; +let parser_of_net = + let map = + StringMap.add "2.6.25.14-69.fc8.x86_64" net_parser_18 + (StringMap.add "2.6.25.14-108.fc9.ppc64" net_parser_19 + (StringMap.add "2.6.25.14-108.fc9.i586" net_parser_20 + (StringMap.add "2.6.25.14-108.fc9.i686" net_parser_20 + (StringMap.add "2.6.25.14-69.fc8.ppc" net_parser_21 + (StringMap.add "2.6.25.14-108.fc9.x86_64" net_parser_18 + (StringMap.add "2.6.25.11-97.fc9.x86_64" net_parser_18 + (StringMap.add "2.6.25.14-69.fc8.i586" net_parser_20 + (StringMap.add "2.6.25.14-69.fc8.ppc64" + net_parser_19 + (StringMap.add "2.6.25.11-97.fc9.i686" + net_parser_20 + (StringMap.add "2.6.25.14-108.fc9.ppc" + net_parser_21 + (StringMap.add "2.6.25.14-69.fc8.i686" + net_parser_20 StringMap.empty))))))))))) + in + fun kernel_version -> + try StringMap.find kernel_version map + with | Not_found -> unknown_kernel_version kernel_version "net";; +let parser_of_in_device = + let map = + StringMap.add "2.6.25.14-69.fc8.x86_64" in_device_parser_22 + (StringMap.add "2.6.25.14-108.fc9.ppc64" in_device_parser_23 + (StringMap.add "2.6.25.14-108.fc9.i586" in_device_parser_24 + (StringMap.add "2.6.25.14-108.fc9.i686" in_device_parser_24 + (StringMap.add "2.6.25.14-69.fc8.ppc" in_device_parser_25 + (StringMap.add "2.6.25.14-108.fc9.x86_64" + in_device_parser_22 + (StringMap.add "2.6.25.11-97.fc9.x86_64" + in_device_parser_22 + (StringMap.add "2.6.25.14-69.fc8.i586" + in_device_parser_24 + (StringMap.add "2.6.20-1.2933.fc6.ppc" + in_device_parser_25 + (StringMap.add "2.6.20-1.2933.fc6.x86_64" + in_device_parser_22 + (StringMap.add "2.6.25.14-69.fc8.ppc64" + in_device_parser_23 + (StringMap.add "2.6.25.11-97.fc9.i686" + in_device_parser_24 + (StringMap.add + "2.6.20-1.2933.fc6.i686" + in_device_parser_24 + (StringMap.add + "2.6.20-1.2933.fc6.i586" + in_device_parser_24 + (StringMap.add + "2.6.25.14-108.fc9.ppc" + in_device_parser_25 + (StringMap.add + "2.6.20-1.2933.fc6.ppc64" + in_device_parser_23 + (StringMap.add + "2.6.25.14-69.fc8.i686" + in_device_parser_24 + StringMap.empty)))))))))))))))) + in + fun kernel_version -> + try StringMap.find kernel_version map + with | Not_found -> unknown_kernel_version kernel_version "in_device";; +let parser_of_inet6_dev = + let map = + StringMap.add "2.6.25.14-69.fc8.x86_64" inet6_dev_parser_26 + (StringMap.add "2.6.25.14-108.fc9.ppc64" inet6_dev_parser_27 + (StringMap.add "2.6.25.14-108.fc9.i586" inet6_dev_parser_28 + (StringMap.add "2.6.25.14-108.fc9.i686" inet6_dev_parser_28 + (StringMap.add "2.6.25.14-69.fc8.ppc" inet6_dev_parser_29 + (StringMap.add "2.6.25.14-108.fc9.x86_64" + inet6_dev_parser_26 + (StringMap.add "2.6.25.11-97.fc9.x86_64" + inet6_dev_parser_26 + (StringMap.add "2.6.25.14-69.fc8.i586" + inet6_dev_parser_28 + (StringMap.add "2.6.20-1.2933.fc6.ppc" + inet6_dev_parser_29 + (StringMap.add "2.6.20-1.2933.fc6.x86_64" + inet6_dev_parser_26 + (StringMap.add "2.6.25.14-69.fc8.ppc64" + inet6_dev_parser_27 + (StringMap.add "2.6.25.11-97.fc9.i686" + inet6_dev_parser_28 + (StringMap.add + "2.6.20-1.2933.fc6.i686" + inet6_dev_parser_28 + (StringMap.add + "2.6.20-1.2933.fc6.i586" + inet6_dev_parser_28 + (StringMap.add + "2.6.25.14-108.fc9.ppc" + inet6_dev_parser_29 + (StringMap.add + "2.6.20-1.2933.fc6.ppc64" + inet6_dev_parser_27 + (StringMap.add + "2.6.25.14-69.fc8.i686" + inet6_dev_parser_28 + StringMap.empty)))))))))))))))) + in + fun kernel_version -> + try StringMap.find kernel_version map + with | Not_found -> unknown_kernel_version kernel_version "inet6_dev";; +let parser_of_in_ifaddr = + let map = + StringMap.add "2.6.25.14-69.fc8.x86_64" in_ifaddr_parser_30 + (StringMap.add "2.6.25.14-108.fc9.ppc64" in_ifaddr_parser_31 + (StringMap.add "2.6.25.14-108.fc9.i586" in_ifaddr_parser_32 + (StringMap.add "2.6.25.14-108.fc9.i686" in_ifaddr_parser_32 + (StringMap.add "2.6.25.14-69.fc8.ppc" in_ifaddr_parser_33 + (StringMap.add "2.6.25.14-108.fc9.x86_64" + in_ifaddr_parser_30 + (StringMap.add "2.6.25.11-97.fc9.x86_64" + in_ifaddr_parser_30 + (StringMap.add "2.6.25.14-69.fc8.i586" + in_ifaddr_parser_32 + (StringMap.add "2.6.20-1.2933.fc6.ppc" + in_ifaddr_parser_33 + (StringMap.add "2.6.20-1.2933.fc6.x86_64" + in_ifaddr_parser_30 + (StringMap.add "2.6.25.14-69.fc8.ppc64" + in_ifaddr_parser_31 + (StringMap.add "2.6.25.11-97.fc9.i686" + in_ifaddr_parser_32 + (StringMap.add + "2.6.20-1.2933.fc6.i686" + in_ifaddr_parser_32 + (StringMap.add + "2.6.20-1.2933.fc6.i586" + in_ifaddr_parser_32 + (StringMap.add + "2.6.25.14-108.fc9.ppc" + in_ifaddr_parser_33 + (StringMap.add + "2.6.20-1.2933.fc6.ppc64" + in_ifaddr_parser_31 + (StringMap.add + "2.6.25.14-69.fc8.i686" + in_ifaddr_parser_32 + StringMap.empty)))))))))))))))) + in + fun kernel_version -> + try StringMap.find kernel_version map + with | Not_found -> unknown_kernel_version kernel_version "in_ifaddr";; +let parser_of_inet6_ifaddr = + let map = + StringMap.add "2.6.25.14-69.fc8.x86_64" inet6_ifaddr_parser_34 + (StringMap.add "2.6.25.14-108.fc9.ppc64" inet6_ifaddr_parser_35 + (StringMap.add "2.6.25.14-108.fc9.i586" inet6_ifaddr_parser_36 + (StringMap.add "2.6.25.14-108.fc9.i686" inet6_ifaddr_parser_36 + (StringMap.add "2.6.25.14-69.fc8.ppc" inet6_ifaddr_parser_37 + (StringMap.add "2.6.25.14-108.fc9.x86_64" + inet6_ifaddr_parser_34 + (StringMap.add "2.6.25.11-97.fc9.x86_64" + inet6_ifaddr_parser_34 + (StringMap.add "2.6.25.14-69.fc8.i586" + inet6_ifaddr_parser_36 + (StringMap.add "2.6.20-1.2933.fc6.ppc" + inet6_ifaddr_parser_38 + (StringMap.add "2.6.20-1.2933.fc6.x86_64" + inet6_ifaddr_parser_39 + (StringMap.add "2.6.25.14-69.fc8.ppc64" + inet6_ifaddr_parser_35 + (StringMap.add "2.6.25.11-97.fc9.i686" + inet6_ifaddr_parser_36 + (StringMap.add + "2.6.20-1.2933.fc6.i686" + inet6_ifaddr_parser_40 + (StringMap.add + "2.6.20-1.2933.fc6.i586" + inet6_ifaddr_parser_40 + (StringMap.add + "2.6.25.14-108.fc9.ppc" + inet6_ifaddr_parser_37 + (StringMap.add + "2.6.20-1.2933.fc6.ppc64" + inet6_ifaddr_parser_41 + (StringMap.add + "2.6.25.14-69.fc8.i686" + inet6_ifaddr_parser_36 + StringMap.empty)))))))))))))))) + in + fun kernel_version -> + try StringMap.find kernel_version map + with + | Not_found -> unknown_kernel_version kernel_version "inet6_ifaddr";; +let rec task_struct_follower kernel_version load map addr = + if (addr <> 0L) && (not (AddrMap.mem addr map)) + then + (let parser_ = parser_of_task_struct kernel_version in + let total_size = size_of_task_struct kernel_version in + let bits = load "task_struct" addr total_size in + let data = parser_ kernel_version bits in + let map = + AddrMap.add addr + ("task_struct", (Some (total_size, bits, Task_struct data))) map in + let map = + match data.task_struct_run_list'next with + | None -> map + | Some dest_addr -> + let offset = data.task_struct_run_list'next_offset + and adj = data.task_struct_run_list'next_adjustment in + let offset = Int64.of_int offset and adj = Int64.of_int adj in + let addr = Int64.sub (Int64.add addr offset) adj in + let map = AddrMap.add addr ("task_struct", None) map in + let dest_addr = Int64.sub dest_addr adj in + let map = task_struct_follower kernel_version load map dest_addr + in map in + let dest_addr = data.task_struct_tasks'next in + let map = + let offset = data.task_struct_tasks'next_offset + and adj = data.task_struct_tasks'next_adjustment in + let offset = Int64.of_int offset and adj = Int64.of_int adj in + let addr = Int64.sub (Int64.add addr offset) adj in + let map = AddrMap.add addr ("task_struct", None) map in + let dest_addr = Int64.sub dest_addr adj in + let map = task_struct_follower kernel_version load map dest_addr + in map + in map) + else map +and net_device_follower kernel_version load map addr = + if (addr <> 0L) && (not (AddrMap.mem addr map)) + then + (let parser_ = parser_of_net_device kernel_version in + let total_size = size_of_net_device kernel_version in + let bits = load "net_device" addr total_size in + let data = parser_ kernel_version bits in + let map = + AddrMap.add addr + ("net_device", (Some (total_size, bits, Net_device data))) map in + let map = + match data.net_device_dev_list'next with + | None -> map + | Some dest_addr -> + let offset = data.net_device_dev_list'next_offset + and adj = data.net_device_dev_list'next_adjustment in + let offset = Int64.of_int offset and adj = Int64.of_int adj in + let addr = Int64.sub (Int64.add addr offset) adj in + let map = AddrMap.add addr ("net_device", None) map in + let dest_addr = Int64.sub dest_addr adj in + let map = net_device_follower kernel_version load map dest_addr + in map in + let dest_addr = data.net_device_ip6_ptr in + let map = + let map = inet6_dev_follower kernel_version load map dest_addr in map in + let dest_addr = data.net_device_ip_ptr in + let map = + let map = in_device_follower kernel_version load map dest_addr in map in + let map = + match data.net_device_next with + | None -> map + | Some dest_addr -> + let map = net_device_follower kernel_version load map dest_addr + in map + in map) + else map +and net_follower kernel_version load map addr = + if (addr <> 0L) && (not (AddrMap.mem addr map)) + then + (let parser_ = parser_of_net kernel_version in + let total_size = size_of_net kernel_version in + let bits = load "net" addr total_size in + let data = parser_ kernel_version bits in + let map = + AddrMap.add addr ("net", (Some (total_size, bits, Net data))) map in + let dest_addr = data.net_dev_base_head'next in + let map = + let offset = data.net_dev_base_head'next_offset + and adj = data.net_dev_base_head'next_adjustment in + let offset = Int64.of_int offset and adj = Int64.of_int adj in + let addr = Int64.sub (Int64.add addr offset) adj in + let map = AddrMap.add addr ("net_device", None) map in + let dest_addr = Int64.sub dest_addr adj in + let map = net_device_follower kernel_version load map dest_addr in map in + let dest_addr = data.net_dev_base_head'prev in + let map = + let offset = data.net_dev_base_head'prev_offset + and adj = data.net_dev_base_head'prev_adjustment in + let offset = Int64.of_int offset and adj = Int64.of_int adj in + let addr = Int64.sub (Int64.add addr offset) adj in + let map = AddrMap.add addr ("net_device", None) map in + let dest_addr = Int64.sub dest_addr adj in + let map = net_device_follower kernel_version load map dest_addr in map + in map) + else map +and in_device_follower kernel_version load map addr = + if (addr <> 0L) && (not (AddrMap.mem addr map)) + then + (let parser_ = parser_of_in_device kernel_version in + let total_size = size_of_in_device kernel_version in + let bits = load "in_device" addr total_size in + let data = parser_ kernel_version bits in + let map = + AddrMap.add addr + ("in_device", (Some (total_size, bits, In_device data))) map in + let dest_addr = data.in_device_ifa_list in + let map = + let map = in_ifaddr_follower kernel_version load map dest_addr in map + in map) + else map +and inet6_dev_follower kernel_version load map addr = + if (addr <> 0L) && (not (AddrMap.mem addr map)) + then + (let parser_ = parser_of_inet6_dev kernel_version in + let total_size = size_of_inet6_dev kernel_version in + let bits = load "inet6_dev" addr total_size in + let data = parser_ kernel_version bits in + let map = + AddrMap.add addr + ("inet6_dev", (Some (total_size, bits, Inet6_dev data))) map in + let dest_addr = data.inet6_dev_addr_list in + let map = + let map = inet6_ifaddr_follower kernel_version load map dest_addr + in map + in map) + else map +and in_ifaddr_follower kernel_version load map addr = + if (addr <> 0L) && (not (AddrMap.mem addr map)) + then + (let parser_ = parser_of_in_ifaddr kernel_version in + let total_size = size_of_in_ifaddr kernel_version in + let bits = load "in_ifaddr" addr total_size in + let data = parser_ kernel_version bits in + let map = + AddrMap.add addr + ("in_ifaddr", (Some (total_size, bits, In_ifaddr data))) map in + let dest_addr = data.in_ifaddr_ifa_next in + let map = + let map = in_ifaddr_follower kernel_version load map dest_addr in map + in map) + else map +and inet6_ifaddr_follower kernel_version load map addr = if (addr <> 0L) && (not (AddrMap.mem addr map)) then - (let map = AddrMap.add addr (struct_name, total_size) map in - let bits = load struct_name addr total_size in - let (shape, _) = parserfn kernel_version bits - in followerfn load followers map addr shape) + (let parser_ = parser_of_inet6_ifaddr kernel_version in + let total_size = size_of_inet6_ifaddr kernel_version in + let bits = load "inet6_ifaddr" addr total_size in + let data = parser_ kernel_version bits in + let map = + AddrMap.add addr + ("inet6_ifaddr", (Some (total_size, bits, Inet6_ifaddr data))) map in + let dest_addr = data.inet6_ifaddr_lst_next in + let map = + let map = inet6_ifaddr_follower kernel_version load map dest_addr + in map + in map) else map;; -let task_struct_kv0_follower = - kv_follower "2.6.25.14-69.fc8.x86_64" "task_struct" 2496 - task_struct_parser_3 task_struct_shape_fields_1_follower;; -let task_struct_kv1_follower = - kv_follower "2.6.25.14-108.fc9.ppc64" "task_struct" 2524 - task_struct_parser_4 task_struct_shape_fields_1_follower;; -let task_struct_kv2_follower = - kv_follower "2.6.25.14-108.fc9.i586" "task_struct" 1832 - task_struct_parser_5 task_struct_shape_fields_1_follower;; -let task_struct_kv3_follower = - kv_follower "2.6.25.14-108.fc9.i686" "task_struct" 1832 - task_struct_parser_6 task_struct_shape_fields_1_follower;; -let task_struct_kv4_follower = - kv_follower "2.6.25.14-69.fc8.ppc" "task_struct" 1952 task_struct_parser_7 - task_struct_shape_fields_1_follower;; -let task_struct_kv5_follower = - kv_follower "2.6.25.14-108.fc9.x86_64" "task_struct" 2496 - task_struct_parser_3 task_struct_shape_fields_1_follower;; -let task_struct_kv6_follower = - kv_follower "2.6.25.11-97.fc9.x86_64" "task_struct" 2496 - task_struct_parser_3 task_struct_shape_fields_1_follower;; -let task_struct_kv7_follower = - kv_follower "2.6.25.14-69.fc8.i586" "task_struct" 1832 task_struct_parser_5 - task_struct_shape_fields_1_follower;; -let task_struct_kv8_follower = - kv_follower "2.6.25.14-69.fc8.ppc64" "task_struct" 2524 - task_struct_parser_4 task_struct_shape_fields_1_follower;; -let task_struct_kv9_follower = - kv_follower "2.6.25.11-97.fc9.i686" "task_struct" 1832 task_struct_parser_6 - task_struct_shape_fields_1_follower;; -let task_struct_kv10_follower = - kv_follower "2.6.25.14-108.fc9.ppc" "task_struct" 1952 task_struct_parser_7 - task_struct_shape_fields_1_follower;; -let task_struct_kv11_follower = - kv_follower "2.6.25.14-69.fc8.i686" "task_struct" 1832 task_struct_parser_6 - task_struct_shape_fields_1_follower;; -let net_device_kv0_follower = - kv_follower "2.6.25.14-69.fc8.x86_64" "net_device" 1752 - net_device_parser_10 net_device_shape_fields_8_follower;; -let net_device_kv1_follower = - kv_follower "2.6.25.14-108.fc9.ppc64" "net_device" 1776 - net_device_parser_11 net_device_shape_fields_8_follower;; -let net_device_kv2_follower = - kv_follower "2.6.25.14-108.fc9.i586" "net_device" 1212 net_device_parser_12 - net_device_shape_fields_8_follower;; -let net_device_kv3_follower = - kv_follower "2.6.25.14-108.fc9.i686" "net_device" 1212 net_device_parser_12 - net_device_shape_fields_8_follower;; -let net_device_kv4_follower = - kv_follower "2.6.25.14-69.fc8.ppc" "net_device" 904 net_device_parser_13 - net_device_shape_fields_8_follower;; -let net_device_kv5_follower = - kv_follower "2.6.25.14-108.fc9.x86_64" "net_device" 1752 - net_device_parser_10 net_device_shape_fields_8_follower;; -let net_device_kv6_follower = - kv_follower "2.6.25.11-97.fc9.x86_64" "net_device" 1752 - net_device_parser_10 net_device_shape_fields_8_follower;; -let net_device_kv7_follower = - kv_follower "2.6.25.14-69.fc8.i586" "net_device" 1212 net_device_parser_12 - net_device_shape_fields_8_follower;; -let net_device_kv8_follower = - kv_follower "2.6.25.14-69.fc8.ppc64" "net_device" 1776 net_device_parser_11 - net_device_shape_fields_8_follower;; -let net_device_kv9_follower = - kv_follower "2.6.25.11-97.fc9.i686" "net_device" 1212 net_device_parser_12 - net_device_shape_fields_8_follower;; -let net_device_kv10_follower = - kv_follower "2.6.25.14-108.fc9.ppc" "net_device" 904 net_device_parser_13 - net_device_shape_fields_8_follower;; -let net_device_kv11_follower = - kv_follower "2.6.25.14-69.fc8.i686" "net_device" 1212 net_device_parser_12 - net_device_shape_fields_8_follower;; -let net_kv0_follower = - kv_follower "2.6.25.14-69.fc8.x86_64" "net" 488 net_parser_16 - net_shape_fields_14_follower;; -let net_kv1_follower = - kv_follower "2.6.25.14-108.fc9.ppc64" "net" 488 net_parser_17 - net_shape_fields_14_follower;; -let net_kv2_follower = - kv_follower "2.6.25.14-108.fc9.i586" "net" 284 net_parser_18 - net_shape_fields_14_follower;; -let net_kv3_follower = - kv_follower "2.6.25.14-108.fc9.i686" "net" 284 net_parser_18 - net_shape_fields_14_follower;; -let net_kv4_follower = - kv_follower "2.6.25.14-69.fc8.ppc" "net" 276 net_parser_19 - net_shape_fields_14_follower;; -let net_kv5_follower = - kv_follower "2.6.25.14-108.fc9.x86_64" "net" 488 net_parser_16 - net_shape_fields_14_follower;; -let net_kv6_follower = - kv_follower "2.6.25.11-97.fc9.x86_64" "net" 488 net_parser_16 - net_shape_fields_14_follower;; -let net_kv7_follower = - kv_follower "2.6.25.14-69.fc8.i586" "net" 284 net_parser_18 - net_shape_fields_14_follower;; -let net_kv8_follower = - kv_follower "2.6.25.14-69.fc8.ppc64" "net" 488 net_parser_17 - net_shape_fields_14_follower;; -let net_kv9_follower = - kv_follower "2.6.25.11-97.fc9.i686" "net" 284 net_parser_18 - net_shape_fields_14_follower;; -let net_kv10_follower = - kv_follower "2.6.25.14-108.fc9.ppc" "net" 276 net_parser_19 - net_shape_fields_14_follower;; -let net_kv11_follower = - kv_follower "2.6.25.14-69.fc8.i686" "net" 284 net_parser_18 - net_shape_fields_14_follower;; -let in_device_kv0_follower = - kv_follower "2.6.25.14-69.fc8.x86_64" "in_device" 368 in_device_parser_22 - in_device_shape_fields_20_follower;; -let in_device_kv1_follower = - kv_follower "2.6.25.14-108.fc9.ppc64" "in_device" 368 in_device_parser_23 - in_device_shape_fields_20_follower;; -let in_device_kv2_follower = - kv_follower "2.6.25.14-108.fc9.i586" "in_device" 244 in_device_parser_24 - in_device_shape_fields_20_follower;; -let in_device_kv3_follower = - kv_follower "2.6.25.14-108.fc9.i686" "in_device" 244 in_device_parser_24 - in_device_shape_fields_20_follower;; -let in_device_kv4_follower = - kv_follower "2.6.25.14-69.fc8.ppc" "in_device" 236 in_device_parser_25 - in_device_shape_fields_20_follower;; -let in_device_kv5_follower = - kv_follower "2.6.25.14-108.fc9.x86_64" "in_device" 368 in_device_parser_22 - in_device_shape_fields_20_follower;; -let in_device_kv6_follower = - kv_follower "2.6.25.11-97.fc9.x86_64" "in_device" 368 in_device_parser_22 - in_device_shape_fields_20_follower;; -let in_device_kv7_follower = - kv_follower "2.6.25.14-69.fc8.i586" "in_device" 244 in_device_parser_24 - in_device_shape_fields_20_follower;; -let in_device_kv8_follower = - kv_follower "2.6.25.14-69.fc8.ppc64" "in_device" 368 in_device_parser_23 - in_device_shape_fields_20_follower;; -let in_device_kv9_follower = - kv_follower "2.6.25.11-97.fc9.i686" "in_device" 244 in_device_parser_24 - in_device_shape_fields_20_follower;; -let in_device_kv10_follower = - kv_follower "2.6.25.14-108.fc9.ppc" "in_device" 236 in_device_parser_25 - in_device_shape_fields_20_follower;; -let in_device_kv11_follower = - kv_follower "2.6.25.14-69.fc8.i686" "in_device" 244 in_device_parser_24 - in_device_shape_fields_20_follower;; -let inet6_dev_kv0_follower = - kv_follower "2.6.25.14-69.fc8.x86_64" "inet6_dev" 536 inet6_dev_parser_28 - inet6_dev_shape_fields_26_follower;; -let inet6_dev_kv1_follower = - kv_follower "2.6.25.14-108.fc9.ppc64" "inet6_dev" 536 inet6_dev_parser_29 - inet6_dev_shape_fields_26_follower;; -let inet6_dev_kv2_follower = - kv_follower "2.6.25.14-108.fc9.i586" "inet6_dev" 356 inet6_dev_parser_30 - inet6_dev_shape_fields_26_follower;; -let inet6_dev_kv3_follower = - kv_follower "2.6.25.14-108.fc9.i686" "inet6_dev" 356 inet6_dev_parser_30 - inet6_dev_shape_fields_26_follower;; -let inet6_dev_kv4_follower = - kv_follower "2.6.25.14-69.fc8.ppc" "inet6_dev" 348 inet6_dev_parser_31 - inet6_dev_shape_fields_26_follower;; -let inet6_dev_kv5_follower = - kv_follower "2.6.25.14-108.fc9.x86_64" "inet6_dev" 536 inet6_dev_parser_28 - inet6_dev_shape_fields_26_follower;; -let inet6_dev_kv6_follower = - kv_follower "2.6.25.11-97.fc9.x86_64" "inet6_dev" 536 inet6_dev_parser_28 - inet6_dev_shape_fields_26_follower;; -let inet6_dev_kv7_follower = - kv_follower "2.6.25.14-69.fc8.i586" "inet6_dev" 356 inet6_dev_parser_30 - inet6_dev_shape_fields_26_follower;; -let inet6_dev_kv8_follower = - kv_follower "2.6.25.14-69.fc8.ppc64" "inet6_dev" 536 inet6_dev_parser_29 - inet6_dev_shape_fields_26_follower;; -let inet6_dev_kv9_follower = - kv_follower "2.6.25.11-97.fc9.i686" "inet6_dev" 356 inet6_dev_parser_30 - inet6_dev_shape_fields_26_follower;; -let inet6_dev_kv10_follower = - kv_follower "2.6.25.14-108.fc9.ppc" "inet6_dev" 348 inet6_dev_parser_31 - inet6_dev_shape_fields_26_follower;; -let inet6_dev_kv11_follower = - kv_follower "2.6.25.14-69.fc8.i686" "inet6_dev" 356 inet6_dev_parser_30 - inet6_dev_shape_fields_26_follower;; -let in_ifaddr_kv0_follower = - kv_follower "2.6.25.14-69.fc8.x86_64" "in_ifaddr" 71 in_ifaddr_parser_34 - in_ifaddr_shape_fields_32_follower;; -let in_ifaddr_kv1_follower = - kv_follower "2.6.25.14-108.fc9.ppc64" "in_ifaddr" 71 in_ifaddr_parser_35 - in_ifaddr_shape_fields_32_follower;; -let in_ifaddr_kv2_follower = - kv_follower "2.6.25.14-108.fc9.i586" "in_ifaddr" 55 in_ifaddr_parser_36 - in_ifaddr_shape_fields_32_follower;; -let in_ifaddr_kv3_follower = - kv_follower "2.6.25.14-108.fc9.i686" "in_ifaddr" 55 in_ifaddr_parser_36 - in_ifaddr_shape_fields_32_follower;; -let in_ifaddr_kv4_follower = - kv_follower "2.6.25.14-69.fc8.ppc" "in_ifaddr" 55 in_ifaddr_parser_37 - in_ifaddr_shape_fields_32_follower;; -let in_ifaddr_kv5_follower = - kv_follower "2.6.25.14-108.fc9.x86_64" "in_ifaddr" 71 in_ifaddr_parser_34 - in_ifaddr_shape_fields_32_follower;; -let in_ifaddr_kv6_follower = - kv_follower "2.6.25.11-97.fc9.x86_64" "in_ifaddr" 71 in_ifaddr_parser_34 - in_ifaddr_shape_fields_32_follower;; -let in_ifaddr_kv7_follower = - kv_follower "2.6.25.14-69.fc8.i586" "in_ifaddr" 55 in_ifaddr_parser_36 - in_ifaddr_shape_fields_32_follower;; -let in_ifaddr_kv8_follower = - kv_follower "2.6.25.14-69.fc8.ppc64" "in_ifaddr" 71 in_ifaddr_parser_35 - in_ifaddr_shape_fields_32_follower;; -let in_ifaddr_kv9_follower = - kv_follower "2.6.25.11-97.fc9.i686" "in_ifaddr" 55 in_ifaddr_parser_36 - in_ifaddr_shape_fields_32_follower;; -let in_ifaddr_kv10_follower = - kv_follower "2.6.25.14-108.fc9.ppc" "in_ifaddr" 55 in_ifaddr_parser_37 - in_ifaddr_shape_fields_32_follower;; -let in_ifaddr_kv11_follower = - kv_follower "2.6.25.14-69.fc8.i686" "in_ifaddr" 55 in_ifaddr_parser_36 - in_ifaddr_shape_fields_32_follower;; -let inet6_ifaddr_kv0_follower = - kv_follower "2.6.25.14-69.fc8.x86_64" "inet6_ifaddr" 200 - inet6_ifaddr_parser_40 inet6_ifaddr_shape_fields_38_follower;; -let inet6_ifaddr_kv1_follower = - kv_follower "2.6.25.14-108.fc9.ppc64" "inet6_ifaddr" 200 - inet6_ifaddr_parser_41 inet6_ifaddr_shape_fields_38_follower;; -let inet6_ifaddr_kv2_follower = - kv_follower "2.6.25.14-108.fc9.i586" "inet6_ifaddr" 128 - inet6_ifaddr_parser_42 inet6_ifaddr_shape_fields_38_follower;; -let inet6_ifaddr_kv3_follower = - kv_follower "2.6.25.14-108.fc9.i686" "inet6_ifaddr" 128 - inet6_ifaddr_parser_42 inet6_ifaddr_shape_fields_38_follower;; -let inet6_ifaddr_kv4_follower = - kv_follower "2.6.25.14-69.fc8.ppc" "inet6_ifaddr" 124 - inet6_ifaddr_parser_43 inet6_ifaddr_shape_fields_38_follower;; -let inet6_ifaddr_kv5_follower = - kv_follower "2.6.25.14-108.fc9.x86_64" "inet6_ifaddr" 200 - inet6_ifaddr_parser_40 inet6_ifaddr_shape_fields_38_follower;; -let inet6_ifaddr_kv6_follower = - kv_follower "2.6.25.11-97.fc9.x86_64" "inet6_ifaddr" 200 - inet6_ifaddr_parser_40 inet6_ifaddr_shape_fields_38_follower;; -let inet6_ifaddr_kv7_follower = - kv_follower "2.6.25.14-69.fc8.i586" "inet6_ifaddr" 128 - inet6_ifaddr_parser_42 inet6_ifaddr_shape_fields_38_follower;; -let inet6_ifaddr_kv8_follower = - kv_follower "2.6.25.14-69.fc8.ppc64" "inet6_ifaddr" 200 - inet6_ifaddr_parser_41 inet6_ifaddr_shape_fields_38_follower;; -let inet6_ifaddr_kv9_follower = - kv_follower "2.6.25.11-97.fc9.i686" "inet6_ifaddr" 128 - inet6_ifaddr_parser_42 inet6_ifaddr_shape_fields_38_follower;; -let inet6_ifaddr_kv10_follower = - kv_follower "2.6.25.14-108.fc9.ppc" "inet6_ifaddr" 124 - inet6_ifaddr_parser_43 inet6_ifaddr_shape_fields_38_follower;; -let inet6_ifaddr_kv11_follower = - kv_follower "2.6.25.14-69.fc8.i686" "inet6_ifaddr" 128 - inet6_ifaddr_parser_42 inet6_ifaddr_shape_fields_38_follower;; -let follower_map = - StringMap.add "2.6.25.14-69.fc8.i686" - (inet6_ifaddr_kv11_follower, in_ifaddr_kv11_follower, - inet6_dev_kv11_follower, in_device_kv11_follower, net_kv11_follower, - net_device_kv11_follower, task_struct_kv11_follower) - (StringMap.add "2.6.25.14-108.fc9.ppc" - (inet6_ifaddr_kv10_follower, in_ifaddr_kv10_follower, - inet6_dev_kv10_follower, in_device_kv10_follower, net_kv10_follower, - net_device_kv10_follower, task_struct_kv10_follower) - (StringMap.add "2.6.25.11-97.fc9.i686" - (inet6_ifaddr_kv9_follower, in_ifaddr_kv9_follower, - inet6_dev_kv9_follower, in_device_kv9_follower, net_kv9_follower, - net_device_kv9_follower, task_struct_kv9_follower) - (StringMap.add "2.6.25.14-69.fc8.ppc64" - (inet6_ifaddr_kv8_follower, in_ifaddr_kv8_follower, - inet6_dev_kv8_follower, in_device_kv8_follower, - net_kv8_follower, net_device_kv8_follower, - task_struct_kv8_follower) - (StringMap.add "2.6.25.14-69.fc8.i586" - (inet6_ifaddr_kv7_follower, in_ifaddr_kv7_follower, - inet6_dev_kv7_follower, in_device_kv7_follower, - net_kv7_follower, net_device_kv7_follower, - task_struct_kv7_follower) - (StringMap.add "2.6.25.11-97.fc9.x86_64" - (inet6_ifaddr_kv6_follower, in_ifaddr_kv6_follower, - inet6_dev_kv6_follower, in_device_kv6_follower, - net_kv6_follower, net_device_kv6_follower, - task_struct_kv6_follower) - (StringMap.add "2.6.25.14-108.fc9.x86_64" - (inet6_ifaddr_kv5_follower, in_ifaddr_kv5_follower, - inet6_dev_kv5_follower, in_device_kv5_follower, - net_kv5_follower, net_device_kv5_follower, - task_struct_kv5_follower) - (StringMap.add "2.6.25.14-69.fc8.ppc" - (inet6_ifaddr_kv4_follower, in_ifaddr_kv4_follower, - inet6_dev_kv4_follower, in_device_kv4_follower, - net_kv4_follower, net_device_kv4_follower, - task_struct_kv4_follower) - (StringMap.add "2.6.25.14-108.fc9.i686" - (inet6_ifaddr_kv3_follower, - in_ifaddr_kv3_follower, inet6_dev_kv3_follower, - in_device_kv3_follower, net_kv3_follower, - net_device_kv3_follower, - task_struct_kv3_follower) - (StringMap.add "2.6.25.14-108.fc9.i586" - (inet6_ifaddr_kv2_follower, - in_ifaddr_kv2_follower, - inet6_dev_kv2_follower, - in_device_kv2_follower, net_kv2_follower, - net_device_kv2_follower, - task_struct_kv2_follower) - (StringMap.add "2.6.25.14-108.fc9.ppc64" - (inet6_ifaddr_kv1_follower, - in_ifaddr_kv1_follower, - inet6_dev_kv1_follower, - in_device_kv1_follower, net_kv1_follower, - net_device_kv1_follower, - task_struct_kv1_follower) - (StringMap.add "2.6.25.14-69.fc8.x86_64" - (inet6_ifaddr_kv0_follower, - in_ifaddr_kv0_follower, - inet6_dev_kv0_follower, - in_device_kv0_follower, - net_kv0_follower, - net_device_kv0_follower, - task_struct_kv0_follower) - StringMap.empty)))))))))));; -let task_struct_follower kernel_version load addr = - let followers = - try StringMap.find kernel_version follower_map - with | Not_found -> unknown_kernel_version kernel_version "task_struct" in - let (_, _, _, _, _, _, f) = followers - in f load followers AddrMap.empty addr;; -let net_device_follower kernel_version load addr = - let followers = - try StringMap.find kernel_version follower_map - with | Not_found -> unknown_kernel_version kernel_version "net_device" in - let (_, _, _, _, _, f, _) = followers - in f load followers AddrMap.empty addr;; -let net_follower kernel_version load addr = - let followers = - try StringMap.find kernel_version follower_map - with | Not_found -> unknown_kernel_version kernel_version "net" in - let (_, _, _, _, f, _, _) = followers - in f load followers AddrMap.empty addr;; -let in_device_follower kernel_version load addr = - let followers = - try StringMap.find kernel_version follower_map - with | Not_found -> unknown_kernel_version kernel_version "in_device" in - let (_, _, _, f, _, _, _) = followers - in f load followers AddrMap.empty addr;; -let inet6_dev_follower kernel_version load addr = - let followers = - try StringMap.find kernel_version follower_map - with | Not_found -> unknown_kernel_version kernel_version "inet6_dev" in - let (_, _, f, _, _, _, _) = followers - in f load followers AddrMap.empty addr;; -let in_ifaddr_follower kernel_version load addr = - let followers = - try StringMap.find kernel_version follower_map - with | Not_found -> unknown_kernel_version kernel_version "in_ifaddr" in - let (_, f, _, _, _, _, _) = followers - in f load followers AddrMap.empty addr;; -let inet6_ifaddr_follower kernel_version load addr = - let followers = - try StringMap.find kernel_version follower_map - with | Not_found -> unknown_kernel_version kernel_version "inet6_ifaddr" in - let (f, _, _, _, _, _, _) = followers - in f load followers AddrMap.empty addr;;