Structure parsers reintroduced. ** NOT WORKING **
[virt-mem.git] / lib / kernel.ml
index a75fdad..1a2e91b 100644 (file)
+(* WARNING: This file and the corresponding mli (interface) are
+ * automatically generated by the extract/codegen/ program.
+ *
+ * Any edits you make to this file will be lost.
+ *
+ * To update this file from the latest kernel database, it is recommended
+ * that you do 'make update-kernel-structs'.
+ *)
+
 type ('a, 'b) task_struct =
   { task_struct_shape : 'a; task_struct_content : 'b
   };;
 type task_struct_shape_fields_2 =
-  { tasks'next : Virt_mem_mmap.addr; tasks'prev : Virt_mem_mmap.addr
+  { task_struct_shape_fields_2_tasks'next : Virt_mem_mmap.addr;
+    task_struct_shape_fields_2_tasks'prev : Virt_mem_mmap.addr
   };;
 type task_struct_shape_fields_1 =
-  { run_list'next : Virt_mem_mmap.addr; run_list'prev : Virt_mem_mmap.addr;
-    tasks'next : Virt_mem_mmap.addr; tasks'prev : Virt_mem_mmap.addr
+  { task_struct_shape_fields_1_run_list'next : Virt_mem_mmap.addr;
+    task_struct_shape_fields_1_run_list'prev : Virt_mem_mmap.addr;
+    task_struct_shape_fields_1_tasks'next : Virt_mem_mmap.addr;
+    task_struct_shape_fields_1_tasks'prev : Virt_mem_mmap.addr
   };;
 type task_struct_content_fields_3 =
-  { comm : string; normal_prio : int64; pid : int64; prio : int64;
-    state : int64; static_prio : int64
+  { task_struct_content_fields_3_comm : string;
+    task_struct_content_fields_3_normal_prio : int64;
+    task_struct_content_fields_3_pid : int64;
+    task_struct_content_fields_3_prio : int64;
+    task_struct_content_fields_3_state : int64;
+    task_struct_content_fields_3_static_prio : int64
   };;
 type ('a, 'b) net_device = { net_device_shape : 'a; net_device_content : 'b };;
 type net_device_shape_fields_12 =
-  { ip6_ptr : Virt_mem_mmap.addr; ip_ptr : Virt_mem_mmap.addr;
-    next : Virt_mem_mmap.addr
+  { net_device_shape_fields_12_ip6_ptr : Virt_mem_mmap.addr;
+    net_device_shape_fields_12_ip_ptr : Virt_mem_mmap.addr;
+    net_device_shape_fields_12_next : Virt_mem_mmap.addr
   };;
 type net_device_shape_fields_13 =
-  { dev_list'next : Virt_mem_mmap.addr; dev_list'prev : Virt_mem_mmap.addr;
-    ip6_ptr : Virt_mem_mmap.addr; ip_ptr : Virt_mem_mmap.addr
+  { net_device_shape_fields_13_dev_list'next : Virt_mem_mmap.addr;
+    net_device_shape_fields_13_dev_list'prev : Virt_mem_mmap.addr;
+    net_device_shape_fields_13_ip6_ptr : Virt_mem_mmap.addr;
+    net_device_shape_fields_13_ip_ptr : Virt_mem_mmap.addr
   };;
 type net_device_content_fields_14 =
-  { addr_len : int64; flags : int64; mtu : int64; name : string;
-    operstate : int64; perm_addr : string
+  { net_device_content_fields_14_addr_len : int64;
+    net_device_content_fields_14_flags : int64;
+    net_device_content_fields_14_mtu : int64;
+    net_device_content_fields_14_name : string;
+    net_device_content_fields_14_operstate : int64;
+    net_device_content_fields_14_perm_addr : string
   };;
 type ('a, 'b) net = { net_shape : 'a; net_content : 'b };;
 type net_shape_fields_22 =
-  { dev_base_head'next : Virt_mem_mmap.addr;
-    dev_base_head'prev : Virt_mem_mmap.addr
+  { net_shape_fields_22_dev_base_head'next : Virt_mem_mmap.addr;
+    net_shape_fields_22_dev_base_head'prev : Virt_mem_mmap.addr
   };;
 type net_content_fields_23 = unit;;
 type ('a, 'b) in_device = { in_device_shape : 'a; in_device_content : 'b };;
-type in_device_shape_fields_28 = { ifa_list : Virt_mem_mmap.addr };;
+type in_device_shape_fields_28 =
+  { in_device_shape_fields_28_ifa_list : Virt_mem_mmap.addr
+  };;
 type in_device_content_fields_29 = unit;;
 type ('a, 'b) inet6_dev = { inet6_dev_shape : 'a; inet6_dev_content : 'b };;
-type inet6_dev_shape_fields_34 = { addr_list : Virt_mem_mmap.addr };;
+type inet6_dev_shape_fields_34 =
+  { inet6_dev_shape_fields_34_addr_list : Virt_mem_mmap.addr
+  };;
 type inet6_dev_content_fields_35 = unit;;
 type ('a, 'b) in_ifaddr = { in_ifaddr_shape : 'a; in_ifaddr_content : 'b };;
-type in_ifaddr_shape_fields_40 = { ifa_next : Virt_mem_mmap.addr };;
+type in_ifaddr_shape_fields_40 =
+  { in_ifaddr_shape_fields_40_ifa_next : Virt_mem_mmap.addr
+  };;
 type in_ifaddr_content_fields_41 =
-  { ifa_address : int64; ifa_broadcast : int64; ifa_local : int64;
-    ifa_mask : int64
+  { in_ifaddr_content_fields_41_ifa_address : int64;
+    in_ifaddr_content_fields_41_ifa_broadcast : int64;
+    in_ifaddr_content_fields_41_ifa_local : int64;
+    in_ifaddr_content_fields_41_ifa_mask : int64
   };;
 type ('a, 'b) inet6_ifaddr =
   { inet6_ifaddr_shape : 'a; inet6_ifaddr_content : 'b
   };;
-type inet6_ifaddr_shape_fields_46 = { lst_next : Virt_mem_mmap.addr };;
-type inet6_ifaddr_content_fields_47 = { prefix_len : int64 };;
+type inet6_ifaddr_shape_fields_46 =
+  { inet6_ifaddr_shape_fields_46_lst_next : Virt_mem_mmap.addr
+  };;
+type inet6_ifaddr_content_fields_47 =
+  { inet6_ifaddr_content_fields_47_prefix_len : int64
+  };;
+let match_err = "failed to match kernel structure";;
+let zero = 0;;
+let task_struct_parser_4 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 } ->
+      let shape =
+      { task_struct_shape_fields_1_run_list'next = Int64.sub run_list'next 36L;
+        task_struct_shape_fields_1_run_list'prev = Int64.sub run_list'prev 40L;
+        task_struct_shape_fields_1_tasks'next = Int64.sub tasks'next 124L;
+        task_struct_shape_fields_1_tasks'prev = Int64.sub tasks'prev 128L } in
+      let content =
+      { task_struct_shape_fields_1_run_list'next = run_list'next;
+        task_struct_shape_fields_1_run_list'prev = run_list'prev;
+        task_struct_shape_fields_1_tasks'next = tasks'next;
+        task_struct_shape_fields_1_tasks'prev = tasks'prev } in
+      { task_struct_shape = shape; task_struct_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_4", match_err));;
+let task_struct_parser_5 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 } ->
+      let shape =
+      { task_struct_shape_fields_1_run_list'next = Int64.sub run_list'next 36L;
+        task_struct_shape_fields_1_run_list'prev = Int64.sub run_list'prev 40L;
+        task_struct_shape_fields_1_tasks'next = Int64.sub tasks'next 124L;
+        task_struct_shape_fields_1_tasks'prev = Int64.sub tasks'prev 128L } in
+      let content =
+      { task_struct_shape_fields_1_run_list'next = run_list'next;
+        task_struct_shape_fields_1_run_list'prev = run_list'prev;
+        task_struct_shape_fields_1_tasks'next = tasks'next;
+        task_struct_shape_fields_1_tasks'prev = tasks'prev } in
+      { task_struct_shape = shape; task_struct_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_5", match_err));;
+let task_struct_parser_6 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 } ->
+      let shape =
+      { task_struct_shape_fields_1_run_list'next = Int64.sub run_list'next 36L;
+        task_struct_shape_fields_1_run_list'prev = Int64.sub run_list'prev 40L;
+        task_struct_shape_fields_1_tasks'next = Int64.sub tasks'next 124L;
+        task_struct_shape_fields_1_tasks'prev = Int64.sub tasks'prev 128L } in
+      let content =
+      { task_struct_shape_fields_1_run_list'next = run_list'next;
+        task_struct_shape_fields_1_run_list'prev = run_list'prev;
+        task_struct_shape_fields_1_tasks'next = tasks'next;
+        task_struct_shape_fields_1_tasks'prev = tasks'prev } in
+      { task_struct_shape = shape; task_struct_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_6", match_err));;
+let task_struct_parser_7 bits = 
+  bitmatch bits with
+  | { state : zero+32 : offset(0), bigendian;
+      prio : zero+32 : offset(160), bigendian;
+      static_prio : zero+32 : offset(192), bigendian;
+      normal_prio : zero+32 : offset(224), bigendian;
+      run_list'next : zero+32 : offset(256), bigendian;
+      run_list'prev : zero+32 : offset(288), bigendian;
+      tasks'next : zero+32 : offset(2176), bigendian;
+      tasks'prev : zero+32 : offset(2208), bigendian;
+      pid : zero+32 : offset(2528), bigendian;
+      comm : 128 : offset(4416), string } ->
+      let shape =
+      { task_struct_shape_fields_1_run_list'next = Int64.sub run_list'next 36L;
+        task_struct_shape_fields_1_run_list'prev = Int64.sub run_list'prev 40L;
+        task_struct_shape_fields_1_tasks'next = Int64.sub tasks'next 124L;
+        task_struct_shape_fields_1_tasks'prev = Int64.sub tasks'prev 128L } in
+      let content =
+      { task_struct_shape_fields_1_run_list'next = run_list'next;
+        task_struct_shape_fields_1_run_list'prev = run_list'prev;
+        task_struct_shape_fields_1_tasks'next = tasks'next;
+        task_struct_shape_fields_1_tasks'prev = tasks'prev } in
+      { task_struct_shape = shape; task_struct_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_7", match_err));;
+let task_struct_parser_8 bits = 
+  bitmatch bits with
+  | { state : zero+64 : offset(0), bigendian;
+      prio : zero+32 : offset(224), bigendian;
+      static_prio : zero+32 : offset(256), bigendian;
+      normal_prio : zero+32 : offset(288), bigendian;
+      run_list'next : zero+64 : offset(320), bigendian;
+      run_list'prev : zero+64 : offset(384), bigendian;
+      tasks'next : zero+64 : offset(3648), bigendian;
+      tasks'prev : zero+64 : offset(3712), bigendian;
+      pid : zero+32 : offset(4160), bigendian;
+      comm : 128 : offset(7752), string } ->
+      let shape =
+      { task_struct_shape_fields_1_run_list'next = Int64.sub run_list'next 36L;
+        task_struct_shape_fields_1_run_list'prev = Int64.sub run_list'prev 40L;
+        task_struct_shape_fields_1_tasks'next = Int64.sub tasks'next 124L;
+        task_struct_shape_fields_1_tasks'prev = Int64.sub tasks'prev 128L } in
+      let content =
+      { task_struct_shape_fields_1_run_list'next = run_list'next;
+        task_struct_shape_fields_1_run_list'prev = run_list'prev;
+        task_struct_shape_fields_1_tasks'next = tasks'next;
+        task_struct_shape_fields_1_tasks'prev = tasks'prev } in
+      { task_struct_shape = shape; task_struct_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_8", match_err));;
+let task_struct_parser_9 bits = 
+  bitmatch bits with
+  | { state : zero+64 : offset(0), littleendian;
+      prio : zero+32 : offset(224), littleendian;
+      static_prio : zero+32 : offset(256), littleendian;
+      normal_prio : zero+32 : offset(288), littleendian;
+      tasks'next : zero+64 : offset(3840), littleendian;
+      tasks'prev : zero+64 : offset(3904), littleendian;
+      pid : zero+32 : offset(4352), littleendian;
+      comm : 128 : offset(8392), string } ->
+      let shape =
+      { task_struct_shape_fields_2_tasks'next = Int64.sub tasks'next 480L;
+        task_struct_shape_fields_2_tasks'prev = Int64.sub tasks'prev 488L } in
+      let content =
+      { task_struct_shape_fields_2_tasks'next = tasks'next;
+        task_struct_shape_fields_2_tasks'prev = tasks'prev } in
+      { task_struct_shape = shape; task_struct_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_9", match_err));;
+let task_struct_parser_10 bits = 
+  bitmatch bits with
+  | { state : zero+64 : offset(0), bigendian;
+      prio : zero+32 : offset(256), bigendian;
+      static_prio : zero+32 : offset(288), bigendian;
+      normal_prio : zero+32 : offset(320), bigendian;
+      tasks'next : zero+64 : offset(4096), bigendian;
+      tasks'prev : zero+64 : offset(4160), bigendian;
+      pid : zero+32 : offset(4608), bigendian;
+      comm : 128 : offset(8712), string } ->
+      let shape =
+      { task_struct_shape_fields_2_tasks'next = Int64.sub tasks'next 480L;
+        task_struct_shape_fields_2_tasks'prev = Int64.sub tasks'prev 488L } in
+      let content =
+      { task_struct_shape_fields_2_tasks'next = tasks'next;
+        task_struct_shape_fields_2_tasks'prev = tasks'prev } in
+      { task_struct_shape = shape; task_struct_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_10", match_err));;
+let task_struct_parser_11 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;
+      tasks'next : zero+32 : offset(3712), bigendian;
+      tasks'prev : zero+32 : offset(3744), bigendian;
+      pid : zero+32 : offset(4064), bigendian;
+      comm : 128 : offset(6464), string } ->
+      let shape =
+      { task_struct_shape_fields_2_tasks'next = Int64.sub tasks'next 480L;
+        task_struct_shape_fields_2_tasks'prev = Int64.sub tasks'prev 488L } in
+      let content =
+      { task_struct_shape_fields_2_tasks'next = tasks'next;
+        task_struct_shape_fields_2_tasks'prev = tasks'prev } in
+      { task_struct_shape = shape; task_struct_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_11", match_err));;
+let net_device_parser_15 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 } ->
+      let shape =
+      { net_device_shape_fields_12_ip6_ptr = ip6_ptr;
+        net_device_shape_fields_12_ip_ptr = ip_ptr;
+        net_device_shape_fields_12_next = next } in
+      let content =
+      { net_device_shape_fields_12_ip6_ptr = ip6_ptr;
+        net_device_shape_fields_12_ip_ptr = ip_ptr;
+        net_device_shape_fields_12_next = next } in
+      { net_device_shape = shape; net_device_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_15", match_err));;
+let net_device_parser_16 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 } ->
+      let shape =
+      { net_device_shape_fields_12_ip6_ptr = ip6_ptr;
+        net_device_shape_fields_12_ip_ptr = ip_ptr;
+        net_device_shape_fields_12_next = next } in
+      let content =
+      { net_device_shape_fields_12_ip6_ptr = ip6_ptr;
+        net_device_shape_fields_12_ip_ptr = ip_ptr;
+        net_device_shape_fields_12_next = next } in
+      { net_device_shape = shape; net_device_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_16", match_err));;
+let net_device_parser_17 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 } ->
+      let shape =
+      { net_device_shape_fields_12_ip6_ptr = ip6_ptr;
+        net_device_shape_fields_12_ip_ptr = ip_ptr;
+        net_device_shape_fields_12_next = next } in
+      let content =
+      { net_device_shape_fields_12_ip6_ptr = ip6_ptr;
+        net_device_shape_fields_12_ip_ptr = ip_ptr;
+        net_device_shape_fields_12_next = next } in
+      { net_device_shape = shape; net_device_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_17", match_err));;
+let net_device_parser_18 bits = 
+  bitmatch bits with
+  | { name : 128 : offset(0), string;
+      dev_list'next : zero+32 : offset(384), bigendian;
+      dev_list'prev : zero+32 : offset(416), bigendian;
+      flags : zero+32 : offset(1472), bigendian;
+      operstate : zero+8 : offset(1552), bigendian;
+      mtu : zero+32 : offset(1568), bigendian;
+      perm_addr : 256 : offset(1664), string;
+      addr_len : zero+8 : offset(1920), bigendian;
+      ip_ptr : zero+32 : offset(2112), bigendian;
+      ip6_ptr : zero+32 : offset(2176), bigendian } ->
+      let shape =
+      { net_device_shape_fields_13_dev_list'next = Int64.sub dev_list'next 48L;
+        net_device_shape_fields_13_dev_list'prev = Int64.sub dev_list'prev 52L;
+        net_device_shape_fields_13_ip6_ptr = ip6_ptr;
+        net_device_shape_fields_13_ip_ptr = ip_ptr } in
+      let content =
+      { net_device_shape_fields_13_dev_list'next = dev_list'next;
+        net_device_shape_fields_13_dev_list'prev = dev_list'prev;
+        net_device_shape_fields_13_ip6_ptr = ip6_ptr;
+        net_device_shape_fields_13_ip_ptr = ip_ptr } in
+      { net_device_shape = shape; net_device_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_18", match_err));;
+let net_device_parser_19 bits = 
+  bitmatch bits with
+  | { name : 128 : offset(0), string;
+      dev_list'next : zero+64 : offset(576), bigendian;
+      dev_list'prev : zero+64 : offset(640), bigendian;
+      flags : zero+32 : offset(2880), bigendian;
+      operstate : zero+8 : offset(2960), bigendian;
+      mtu : zero+32 : offset(2976), bigendian;
+      perm_addr : 256 : offset(3136), string;
+      addr_len : zero+8 : offset(3392), bigendian;
+      ip_ptr : zero+64 : offset(3840), bigendian;
+      ip6_ptr : zero+64 : offset(3968), bigendian } ->
+      let shape =
+      { net_device_shape_fields_13_dev_list'next = Int64.sub dev_list'next 48L;
+        net_device_shape_fields_13_dev_list'prev = Int64.sub dev_list'prev 52L;
+        net_device_shape_fields_13_ip6_ptr = ip6_ptr;
+        net_device_shape_fields_13_ip_ptr = ip_ptr } in
+      let content =
+      { net_device_shape_fields_13_dev_list'next = dev_list'next;
+        net_device_shape_fields_13_dev_list'prev = dev_list'prev;
+        net_device_shape_fields_13_ip6_ptr = ip6_ptr;
+        net_device_shape_fields_13_ip_ptr = ip_ptr } in
+      { net_device_shape = shape; net_device_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_19", match_err));;
+let net_device_parser_20 bits = 
+  bitmatch bits with
+  | { name : 128 : offset(0), string;
+      dev_list'next : zero+64 : offset(576), littleendian;
+      dev_list'prev : zero+64 : offset(640), littleendian;
+      flags : zero+32 : offset(2880), littleendian;
+      operstate : zero+8 : offset(2960), littleendian;
+      mtu : zero+32 : offset(2976), littleendian;
+      perm_addr : 256 : offset(3136), string;
+      addr_len : zero+8 : offset(3392), littleendian;
+      ip_ptr : zero+64 : offset(3840), littleendian;
+      ip6_ptr : zero+64 : offset(3968), littleendian } ->
+      let shape =
+      { net_device_shape_fields_13_dev_list'next = Int64.sub dev_list'next 48L;
+        net_device_shape_fields_13_dev_list'prev = Int64.sub dev_list'prev 52L;
+        net_device_shape_fields_13_ip6_ptr = ip6_ptr;
+        net_device_shape_fields_13_ip_ptr = ip_ptr } in
+      let content =
+      { net_device_shape_fields_13_dev_list'next = dev_list'next;
+        net_device_shape_fields_13_dev_list'prev = dev_list'prev;
+        net_device_shape_fields_13_ip6_ptr = ip6_ptr;
+        net_device_shape_fields_13_ip_ptr = ip_ptr } in
+      { net_device_shape = shape; net_device_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_20", match_err));;
+let net_device_parser_21 bits = 
+  bitmatch bits with
+  | { name : 128 : offset(0), string;
+      dev_list'next : zero+32 : offset(384), bigendian;
+      dev_list'prev : zero+32 : offset(416), bigendian;
+      flags : zero+32 : offset(1536), bigendian;
+      operstate : zero+8 : offset(1616), bigendian;
+      mtu : zero+32 : offset(1632), bigendian;
+      perm_addr : 256 : offset(1760), string;
+      addr_len : zero+8 : offset(2016), bigendian;
+      ip_ptr : zero+32 : offset(2432), bigendian;
+      ip6_ptr : zero+32 : offset(2496), bigendian } ->
+      let shape =
+      { net_device_shape_fields_13_dev_list'next = Int64.sub dev_list'next 48L;
+        net_device_shape_fields_13_dev_list'prev = Int64.sub dev_list'prev 52L;
+        net_device_shape_fields_13_ip6_ptr = ip6_ptr;
+        net_device_shape_fields_13_ip_ptr = ip_ptr } in
+      let content =
+      { net_device_shape_fields_13_dev_list'next = dev_list'next;
+        net_device_shape_fields_13_dev_list'prev = dev_list'prev;
+        net_device_shape_fields_13_ip6_ptr = ip6_ptr;
+        net_device_shape_fields_13_ip_ptr = ip_ptr } in
+      { net_device_shape = shape; net_device_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_21", match_err));;
+let net_parser_24 bits = 
+  bitmatch bits with
+  | { dev_base_head'next : zero+64 : offset(704), bigendian;
+      dev_base_head'prev : zero+64 : offset(768), bigendian } ->
+      let shape =
+      { net_shape_fields_22_dev_base_head'next = Int64.sub dev_base_head'next 666L;
+        net_shape_fields_22_dev_base_head'prev = Int64.sub dev_base_head'prev 666L } in
+      let content =
+      { net_shape_fields_22_dev_base_head'next = dev_base_head'next;
+        net_shape_fields_22_dev_base_head'prev = dev_base_head'prev } in
+      { net_shape = shape; net_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("net", "net_parser_24", match_err));;
+let net_parser_25 bits = 
+  bitmatch bits with
+  | { dev_base_head'next : zero+64 : offset(768), littleendian;
+      dev_base_head'prev : zero+64 : offset(832), littleendian } ->
+      let shape =
+      { net_shape_fields_22_dev_base_head'next = Int64.sub dev_base_head'next 666L;
+        net_shape_fields_22_dev_base_head'prev = Int64.sub dev_base_head'prev 666L } in
+      let content =
+      { net_shape_fields_22_dev_base_head'next = dev_base_head'next;
+        net_shape_fields_22_dev_base_head'prev = dev_base_head'prev } in
+      { net_shape = shape; net_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("net", "net_parser_25", match_err));;
+let net_parser_26 bits = 
+  bitmatch bits with
+  | { dev_base_head'next : zero+64 : offset(768), bigendian;
+      dev_base_head'prev : zero+64 : offset(832), bigendian } ->
+      let shape =
+      { net_shape_fields_22_dev_base_head'next = Int64.sub dev_base_head'next 666L;
+        net_shape_fields_22_dev_base_head'prev = Int64.sub dev_base_head'prev 666L } in
+      let content =
+      { net_shape_fields_22_dev_base_head'next = dev_base_head'next;
+        net_shape_fields_22_dev_base_head'prev = dev_base_head'prev } in
+      { net_shape = shape; net_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("net", "net_parser_26", match_err));;
+let net_parser_27 bits = 
+  bitmatch bits with
+  | { dev_base_head'next : zero+32 : offset(448), bigendian;
+      dev_base_head'prev : zero+32 : offset(480), bigendian } ->
+      let shape =
+      { net_shape_fields_22_dev_base_head'next = Int64.sub dev_base_head'next 666L;
+        net_shape_fields_22_dev_base_head'prev = Int64.sub dev_base_head'prev 666L } in
+      let content =
+      { net_shape_fields_22_dev_base_head'next = dev_base_head'next;
+        net_shape_fields_22_dev_base_head'prev = dev_base_head'prev } in
+      { net_shape = shape; net_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("net", "net_parser_27", match_err));;
+let in_device_parser_30 bits = 
+  bitmatch bits with
+  | { ifa_list : zero+32 : offset(96), littleendian } ->
+      let shape =
+      { in_device_shape_fields_28_ifa_list = ifa_list } in
+      let content =
+      { in_device_shape_fields_28_ifa_list = ifa_list } in
+      { in_device_shape = shape; in_device_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_30", match_err));;
+let in_device_parser_33 bits = 
+  bitmatch bits with
+  | { ifa_list : zero+32 : offset(96), bigendian } ->
+      let shape =
+      { in_device_shape_fields_28_ifa_list = ifa_list } in
+      let content =
+      { in_device_shape_fields_28_ifa_list = ifa_list } in
+      { in_device_shape = shape; in_device_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_33", match_err));;
+let in_device_parser_32 bits = 
+  bitmatch bits with
+  | { ifa_list : zero+64 : offset(128), littleendian } ->
+      let shape =
+      { in_device_shape_fields_28_ifa_list = ifa_list } in
+      let content =
+      { in_device_shape_fields_28_ifa_list = ifa_list } in
+      { in_device_shape = shape; in_device_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_32", match_err));;
+let in_device_parser_31 bits = 
+  bitmatch bits with
+  | { ifa_list : zero+64 : offset(128), bigendian } ->
+      let shape =
+      { in_device_shape_fields_28_ifa_list = ifa_list } in
+      let content =
+      { in_device_shape_fields_28_ifa_list = ifa_list } in
+      { in_device_shape = shape; in_device_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_31", match_err));;
+let inet6_dev_parser_36 bits = 
+  bitmatch bits with
+  | { addr_list : zero+32 : offset(32), littleendian } ->
+      let shape =
+      { inet6_dev_shape_fields_34_addr_list = addr_list } in
+      let content =
+      { inet6_dev_shape_fields_34_addr_list = addr_list } in
+      { inet6_dev_shape = shape; inet6_dev_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_36", match_err));;
+let inet6_dev_parser_39 bits = 
+  bitmatch bits with
+  | { addr_list : zero+32 : offset(32), bigendian } ->
+      let shape =
+      { inet6_dev_shape_fields_34_addr_list = addr_list } in
+      let content =
+      { inet6_dev_shape_fields_34_addr_list = addr_list } in
+      { inet6_dev_shape = shape; inet6_dev_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_39", match_err));;
+let inet6_dev_parser_38 bits = 
+  bitmatch bits with
+  | { addr_list : zero+64 : offset(64), littleendian } ->
+      let shape =
+      { inet6_dev_shape_fields_34_addr_list = addr_list } in
+      let content =
+      { inet6_dev_shape_fields_34_addr_list = addr_list } in
+      { inet6_dev_shape = shape; inet6_dev_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_38", match_err));;
+let inet6_dev_parser_37 bits = 
+  bitmatch bits with
+  | { addr_list : zero+64 : offset(64), bigendian } ->
+      let shape =
+      { inet6_dev_shape_fields_34_addr_list = addr_list } in
+      let content =
+      { inet6_dev_shape_fields_34_addr_list = addr_list } in
+      { inet6_dev_shape = shape; inet6_dev_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_37", match_err));;
+let in_ifaddr_parser_42 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 shape =
+      { in_ifaddr_shape_fields_40_ifa_next = ifa_next } in
+      let content =
+      { in_ifaddr_shape_fields_40_ifa_next = ifa_next } in
+      { in_ifaddr_shape = shape; in_ifaddr_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_42", match_err));;
+let in_ifaddr_parser_45 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 shape =
+      { in_ifaddr_shape_fields_40_ifa_next = ifa_next } in
+      let content =
+      { in_ifaddr_shape_fields_40_ifa_next = ifa_next } in
+      { in_ifaddr_shape = shape; in_ifaddr_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_45", match_err));;
+let in_ifaddr_parser_43 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 shape =
+      { in_ifaddr_shape_fields_40_ifa_next = ifa_next } in
+      let content =
+      { in_ifaddr_shape_fields_40_ifa_next = ifa_next } in
+      { in_ifaddr_shape = shape; in_ifaddr_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_43", match_err));;
+let in_ifaddr_parser_44 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 shape =
+      { in_ifaddr_shape_fields_40_ifa_next = ifa_next } in
+      let content =
+      { in_ifaddr_shape_fields_40_ifa_next = ifa_next } in
+      { in_ifaddr_shape = shape; in_ifaddr_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_44", match_err));;
+let inet6_ifaddr_parser_48 bits = 
+  bitmatch bits with
+  | { prefix_len : zero+32 : offset(128), littleendian;
+      lst_next : zero+32 : offset(1024), littleendian } ->
+      let shape =
+      { inet6_ifaddr_shape_fields_46_lst_next = lst_next } in
+      let content =
+      { inet6_ifaddr_shape_fields_46_lst_next = lst_next } in
+      { inet6_ifaddr_shape = shape; inet6_ifaddr_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_48", match_err));;
+let inet6_ifaddr_parser_50 bits = 
+  bitmatch bits with
+  | { prefix_len : zero+32 : offset(128), littleendian;
+      lst_next : zero+64 : offset(1856), littleendian } ->
+      let shape =
+      { inet6_ifaddr_shape_fields_46_lst_next = lst_next } in
+      let content =
+      { inet6_ifaddr_shape_fields_46_lst_next = lst_next } in
+      { inet6_ifaddr_shape = shape; inet6_ifaddr_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_50", match_err));;
+let inet6_ifaddr_parser_49 bits = 
+  bitmatch bits with
+  | { prefix_len : zero+32 : offset(128), bigendian;
+      lst_next : zero+64 : offset(1472), bigendian } ->
+      let shape =
+      { inet6_ifaddr_shape_fields_46_lst_next = lst_next } in
+      let content =
+      { inet6_ifaddr_shape_fields_46_lst_next = lst_next } in
+      { inet6_ifaddr_shape = shape; inet6_ifaddr_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_49", match_err));;
+let inet6_ifaddr_parser_51 bits = 
+  bitmatch bits with
+  | { prefix_len : zero+32 : offset(128), littleendian;
+      lst_next : zero+64 : offset(1472), littleendian } ->
+      let shape =
+      { inet6_ifaddr_shape_fields_46_lst_next = lst_next } in
+      let content =
+      { inet6_ifaddr_shape_fields_46_lst_next = lst_next } in
+      { inet6_ifaddr_shape = shape; inet6_ifaddr_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_51", match_err));;
+let inet6_ifaddr_parser_52 bits = 
+  bitmatch bits with
+  | { prefix_len : zero+32 : offset(128), bigendian;
+      lst_next : zero+32 : offset(928), bigendian } ->
+      let shape =
+      { inet6_ifaddr_shape_fields_46_lst_next = lst_next } in
+      let content =
+      { inet6_ifaddr_shape_fields_46_lst_next = lst_next } in
+      { inet6_ifaddr_shape = shape; inet6_ifaddr_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_52", match_err));;
+let inet6_ifaddr_parser_53 bits = 
+  bitmatch bits with
+  | { prefix_len : zero+32 : offset(128), littleendian;
+      lst_next : zero+64 : offset(1280), littleendian } ->
+      let shape =
+      { inet6_ifaddr_shape_fields_46_lst_next = lst_next } in
+      let content =
+      { inet6_ifaddr_shape_fields_46_lst_next = lst_next } in
+      { inet6_ifaddr_shape = shape; inet6_ifaddr_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_53", match_err));;
+let inet6_ifaddr_parser_54 bits = 
+  bitmatch bits with
+  | { prefix_len : zero+32 : offset(128), bigendian;
+      lst_next : zero+64 : offset(1280), bigendian } ->
+      let shape =
+      { inet6_ifaddr_shape_fields_46_lst_next = lst_next } in
+      let content =
+      { inet6_ifaddr_shape_fields_46_lst_next = lst_next } in
+      { inet6_ifaddr_shape = shape; inet6_ifaddr_content = content }
+  | { _ } ->
+      raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_54", match_err));;