Dynamic version, working.
[virt-mem.git] / lib / kernel.ml
index b02e187..95df51d 100644 (file)
@@ -12,10 +12,9 @@ module StringMap = Map.Make(String);;
 module AddrMap = Map.Make(Int64);;
 type kernel_version = 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
@@ -24,75 +23,57 @@ supported Linux distribution, see this page about adding support:
 "
        version struct_name);;
 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 =
+  { 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 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 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 ('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 =
+  { 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 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 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 ('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 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 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 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_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;;
 let offset_of_net_device_dev_list'next =
   let map =
     StringMap.add "2.6.25.14-69.fc8.i686" 48
@@ -109,7 +90,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 +100,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 (Virt_mem_types.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 +126,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 (Virt_mem_types.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 +152,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 (Virt_mem_types.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 +178,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 (Virt_mem_types.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 +204,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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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_9", match_err));;
 let net_device_parser_10 kernel_version bits = 
   bitmatch bits with
   | { name : 128 : offset(0), string;
@@ -246,21 +344,19 @@ 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));;
 let net_device_parser_11 kernel_version bits = 
@@ -275,21 +371,19 @@ 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));;
 let net_device_parser_12 kernel_version bits = 
@@ -304,21 +398,19 @@ 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));;
 let net_device_parser_13 kernel_version bits = 
@@ -333,705 +425,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 = 
+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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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));;
 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));;
 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));;
 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 = 
+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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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_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 (Virt_mem_types.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 (Virt_mem_types.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 (Virt_mem_types.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 (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 (Virt_mem_types.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;;