d04ef22d37454602a8d106d3704ccf632463f341
[virt-mem.git] / lib / kernel.ml
1 (* WARNING: This file and the corresponding mli (interface) are
2  * automatically generated by the extract/codegen/ program.
3  *
4  * Any edits you make to this file will be lost.
5  *
6  * To update this file from the latest kernel database, it is recommended
7  * that you do 'make update-kernel-structs'.
8  *)
9
10 module StringMap = Map.Make(String);;
11 module AddrMap = Map.Make(Int64);;
12 type kernel_version = string;;
13 let match_err = "failed to match kernel structure";;
14 let struct_missing_err = "struct does not exist in this kernel version";;
15 let unknown_kernel_version version struct_name =
16   invalid_arg
17     (Printf.sprintf
18        "%s: unknown kernel version or
19 struct %s is not supported in this kernel.
20 Try a newer version of virt-mem, or if the guest is not from a
21 supported Linux distribution, see this page about adding support:
22   http://et.redhat.com/~rjones/virt-mem/faq.html
23 "
24        version struct_name);;
25 let zero = 0;;
26 type ('a, 'b) task_struct = ('a * 'b);;
27 type task_struct_shape_fields_1 =
28   { task_struct_shape_fields_1_tasks'next : Virt_mem_mmap.addr
29   };;
30 type task_struct_content_fields_2 =
31   { task_struct_content_fields_2_comm : string;
32     task_struct_content_fields_2_normal_prio : int64;
33     task_struct_content_fields_2_pid : int64;
34     task_struct_content_fields_2_prio : int64;
35     task_struct_content_fields_2_state : int64;
36     task_struct_content_fields_2_static_prio : int64;
37     task_struct_content_fields_2_tasks'prev : Virt_mem_mmap.addr
38   };;
39 type ('a, 'b) net_device = ('a * 'b);;
40 type net_device_shape_fields_8 =
41   { net_device_shape_fields_8_dev_list'next : Virt_mem_mmap.addr;
42     net_device_shape_fields_8_ip6_ptr : Virt_mem_mmap.addr;
43     net_device_shape_fields_8_ip_ptr : Virt_mem_mmap.addr
44   };;
45 type net_device_content_fields_9 =
46   { net_device_content_fields_9_addr_len : int64;
47     net_device_content_fields_9_dev_list'prev : Virt_mem_mmap.addr;
48     net_device_content_fields_9_flags : int64;
49     net_device_content_fields_9_mtu : int64;
50     net_device_content_fields_9_name : string;
51     net_device_content_fields_9_operstate : int64;
52     net_device_content_fields_9_perm_addr : string
53   };;
54 type ('a, 'b) net = ('a * 'b);;
55 type net_shape_fields_14 =
56   { net_shape_fields_14_dev_base_head'next : Virt_mem_mmap.addr;
57     net_shape_fields_14_dev_base_head'prev : Virt_mem_mmap.addr
58   };;
59 type net_content_fields_15 = unit;;
60 type ('a, 'b) in_device = ('a * 'b);;
61 type in_device_shape_fields_20 =
62   { in_device_shape_fields_20_ifa_list : Virt_mem_mmap.addr
63   };;
64 type in_device_content_fields_21 = unit;;
65 type ('a, 'b) inet6_dev = ('a * 'b);;
66 type inet6_dev_shape_fields_26 =
67   { inet6_dev_shape_fields_26_addr_list : Virt_mem_mmap.addr
68   };;
69 type inet6_dev_content_fields_27 = unit;;
70 type ('a, 'b) in_ifaddr = ('a * 'b);;
71 type in_ifaddr_shape_fields_32 =
72   { in_ifaddr_shape_fields_32_ifa_next : Virt_mem_mmap.addr
73   };;
74 type in_ifaddr_content_fields_33 =
75   { in_ifaddr_content_fields_33_ifa_address : int64;
76     in_ifaddr_content_fields_33_ifa_broadcast : int64;
77     in_ifaddr_content_fields_33_ifa_local : int64;
78     in_ifaddr_content_fields_33_ifa_mask : int64
79   };;
80 type ('a, 'b) inet6_ifaddr = ('a * 'b);;
81 type inet6_ifaddr_shape_fields_38 =
82   { inet6_ifaddr_shape_fields_38_lst_next : Virt_mem_mmap.addr
83   };;
84 type inet6_ifaddr_content_fields_39 =
85   { inet6_ifaddr_content_fields_39_prefix_len : int64
86   };;
87 let offset_of_net_device_dev_list'next =
88   let map =
89     StringMap.add "2.6.25.14-69.fc8.i686" 48
90       (StringMap.add "2.6.25.14-108.fc9.ppc" 48
91          (StringMap.add "2.6.25.11-97.fc9.i686" 48
92             (StringMap.add "2.6.25.14-69.fc8.ppc64" 72
93                (StringMap.add "2.6.25.14-69.fc8.i586" 48
94                   (StringMap.add "2.6.25.11-97.fc9.x86_64" 72
95                      (StringMap.add "2.6.25.14-108.fc9.x86_64" 72
96                         (StringMap.add "2.6.25.14-69.fc8.ppc" 48
97                            (StringMap.add "2.6.25.14-108.fc9.i686" 48
98                               (StringMap.add "2.6.25.14-108.fc9.i586" 48
99                                  (StringMap.add "2.6.25.14-108.fc9.ppc64" 72
100                                     (StringMap.add "2.6.25.14-69.fc8.x86_64"
101                                        72 StringMap.empty)))))))))))
102   in fun kernel_version -> StringMap.find kernel_version map;;
103 let task_struct_parser_3 kernel_version bits = 
104   bitmatch bits with
105   | { state : zero+64 : offset(0), littleendian;
106       prio : zero+32 : offset(224), littleendian;
107       static_prio : zero+32 : offset(256), littleendian;
108       normal_prio : zero+32 : offset(288), littleendian;
109       tasks'next : zero+64 : offset(3840), littleendian;
110       tasks'prev : zero+64 : offset(3904), littleendian;
111       pid : zero+32 : offset(4352), littleendian;
112       comm : 128 : offset(8392), string } ->
113       let s =
114       { task_struct_shape_fields_1_tasks'next = (if tasks'next <> 0L then Int64.sub tasks'next 480L else tasks'next) } in
115       let c =
116       { task_struct_content_fields_2_comm = comm;
117         task_struct_content_fields_2_normal_prio = normal_prio;
118         task_struct_content_fields_2_pid = pid;
119         task_struct_content_fields_2_prio = prio;
120         task_struct_content_fields_2_state = state;
121         task_struct_content_fields_2_static_prio = static_prio;
122         task_struct_content_fields_2_tasks'prev = tasks'prev } in
123       (s, c)
124   | { _ } ->
125       raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_3", match_err));;
126 let task_struct_parser_4 kernel_version bits = 
127   bitmatch bits with
128   | { state : zero+64 : offset(0), bigendian;
129       prio : zero+32 : offset(224), bigendian;
130       static_prio : zero+32 : offset(256), bigendian;
131       normal_prio : zero+32 : offset(288), bigendian;
132       tasks'next : zero+64 : offset(3840), bigendian;
133       tasks'prev : zero+64 : offset(3904), bigendian;
134       pid : zero+32 : offset(4352), bigendian;
135       comm : 128 : offset(8392), string } ->
136       let s =
137       { task_struct_shape_fields_1_tasks'next = (if tasks'next <> 0L then Int64.sub tasks'next 480L else tasks'next) } in
138       let c =
139       { task_struct_content_fields_2_comm = comm;
140         task_struct_content_fields_2_normal_prio = normal_prio;
141         task_struct_content_fields_2_pid = pid;
142         task_struct_content_fields_2_prio = prio;
143         task_struct_content_fields_2_state = state;
144         task_struct_content_fields_2_static_prio = static_prio;
145         task_struct_content_fields_2_tasks'prev = tasks'prev } in
146       (s, c)
147   | { _ } ->
148       raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_4", match_err));;
149 let task_struct_parser_5 kernel_version bits = 
150   bitmatch bits with
151   | { state : zero+32 : offset(0), littleendian;
152       prio : zero+32 : offset(160), littleendian;
153       static_prio : zero+32 : offset(192), littleendian;
154       normal_prio : zero+32 : offset(224), littleendian;
155       tasks'next : zero+32 : offset(3200), littleendian;
156       tasks'prev : zero+32 : offset(3232), littleendian;
157       pid : zero+32 : offset(3552), littleendian;
158       comm : 128 : offset(5896), string } ->
159       let s =
160       { task_struct_shape_fields_1_tasks'next = (if tasks'next <> 0L then Int64.sub tasks'next 400L else tasks'next) } in
161       let c =
162       { task_struct_content_fields_2_comm = comm;
163         task_struct_content_fields_2_normal_prio = normal_prio;
164         task_struct_content_fields_2_pid = pid;
165         task_struct_content_fields_2_prio = prio;
166         task_struct_content_fields_2_state = state;
167         task_struct_content_fields_2_static_prio = static_prio;
168         task_struct_content_fields_2_tasks'prev = tasks'prev } in
169       (s, c)
170   | { _ } ->
171       raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_5", match_err));;
172 let task_struct_parser_6 kernel_version bits = 
173   bitmatch bits with
174   | { state : zero+32 : offset(0), littleendian;
175       prio : zero+32 : offset(160), littleendian;
176       static_prio : zero+32 : offset(192), littleendian;
177       normal_prio : zero+32 : offset(224), littleendian;
178       tasks'next : zero+32 : offset(3232), littleendian;
179       tasks'prev : zero+32 : offset(3264), littleendian;
180       pid : zero+32 : offset(3584), littleendian;
181       comm : 128 : offset(5928), string } ->
182       let s =
183       { task_struct_shape_fields_1_tasks'next = (if tasks'next <> 0L then Int64.sub tasks'next 404L else tasks'next) } in
184       let c =
185       { task_struct_content_fields_2_comm = comm;
186         task_struct_content_fields_2_normal_prio = normal_prio;
187         task_struct_content_fields_2_pid = pid;
188         task_struct_content_fields_2_prio = prio;
189         task_struct_content_fields_2_state = state;
190         task_struct_content_fields_2_static_prio = static_prio;
191         task_struct_content_fields_2_tasks'prev = tasks'prev } in
192       (s, c)
193   | { _ } ->
194       raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_6", match_err));;
195 let task_struct_parser_7 kernel_version bits = 
196   bitmatch bits with
197   | { state : zero+32 : offset(0), bigendian;
198       prio : zero+32 : offset(160), bigendian;
199       static_prio : zero+32 : offset(192), bigendian;
200       normal_prio : zero+32 : offset(224), bigendian;
201       tasks'next : zero+32 : offset(3328), bigendian;
202       tasks'prev : zero+32 : offset(3360), bigendian;
203       pid : zero+32 : offset(3680), bigendian;
204       comm : 128 : offset(6056), string } ->
205       let s =
206       { task_struct_shape_fields_1_tasks'next = (if tasks'next <> 0L then Int64.sub tasks'next 416L else tasks'next) } in
207       let c =
208       { task_struct_content_fields_2_comm = comm;
209         task_struct_content_fields_2_normal_prio = normal_prio;
210         task_struct_content_fields_2_pid = pid;
211         task_struct_content_fields_2_prio = prio;
212         task_struct_content_fields_2_state = state;
213         task_struct_content_fields_2_static_prio = static_prio;
214         task_struct_content_fields_2_tasks'prev = tasks'prev } in
215       (s, c)
216   | { _ } ->
217       raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_7", match_err));;
218 let net_device_parser_10 kernel_version bits = 
219   bitmatch bits with
220   | { name : 128 : offset(0), string;
221       dev_list'next : zero+64 : offset(576), littleendian;
222       dev_list'prev : zero+64 : offset(640), littleendian;
223       flags : zero+32 : offset(2880), littleendian;
224       operstate : zero+8 : offset(2960), littleendian;
225       mtu : zero+32 : offset(2976), littleendian;
226       perm_addr : 256 : offset(3136), string;
227       addr_len : zero+8 : offset(3392), littleendian;
228       ip_ptr : zero+64 : offset(3840), littleendian;
229       ip6_ptr : zero+64 : offset(3968), littleendian } ->
230       let s =
231       { net_device_shape_fields_8_dev_list'next = (if dev_list'next <> 0L then Int64.sub dev_list'next 72L else dev_list'next);
232         net_device_shape_fields_8_ip6_ptr = ip6_ptr;
233         net_device_shape_fields_8_ip_ptr = ip_ptr } in
234       let c =
235       { net_device_content_fields_9_addr_len = addr_len;
236         net_device_content_fields_9_dev_list'prev = dev_list'prev;
237         net_device_content_fields_9_flags = flags;
238         net_device_content_fields_9_mtu = mtu;
239         net_device_content_fields_9_name = name;
240         net_device_content_fields_9_operstate = operstate;
241         net_device_content_fields_9_perm_addr = perm_addr } in
242       (s, c)
243   | { _ } ->
244       raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_10", match_err));;
245 let net_device_parser_11 kernel_version bits = 
246   bitmatch bits with
247   | { name : 128 : offset(0), string;
248       dev_list'next : zero+64 : offset(576), bigendian;
249       dev_list'prev : zero+64 : offset(640), bigendian;
250       flags : zero+32 : offset(2880), bigendian;
251       operstate : zero+8 : offset(2960), bigendian;
252       mtu : zero+32 : offset(2976), bigendian;
253       perm_addr : 256 : offset(3136), string;
254       addr_len : zero+8 : offset(3392), bigendian;
255       ip_ptr : zero+64 : offset(3840), bigendian;
256       ip6_ptr : zero+64 : offset(3968), bigendian } ->
257       let s =
258       { net_device_shape_fields_8_dev_list'next = (if dev_list'next <> 0L then Int64.sub dev_list'next 72L else dev_list'next);
259         net_device_shape_fields_8_ip6_ptr = ip6_ptr;
260         net_device_shape_fields_8_ip_ptr = ip_ptr } in
261       let c =
262       { net_device_content_fields_9_addr_len = addr_len;
263         net_device_content_fields_9_dev_list'prev = dev_list'prev;
264         net_device_content_fields_9_flags = flags;
265         net_device_content_fields_9_mtu = mtu;
266         net_device_content_fields_9_name = name;
267         net_device_content_fields_9_operstate = operstate;
268         net_device_content_fields_9_perm_addr = perm_addr } in
269       (s, c)
270   | { _ } ->
271       raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_11", match_err));;
272 let net_device_parser_12 kernel_version bits = 
273   bitmatch bits with
274   | { name : 128 : offset(0), string;
275       dev_list'next : zero+32 : offset(384), littleendian;
276       dev_list'prev : zero+32 : offset(416), littleendian;
277       flags : zero+32 : offset(1568), littleendian;
278       operstate : zero+8 : offset(1648), littleendian;
279       mtu : zero+32 : offset(1664), littleendian;
280       perm_addr : 256 : offset(1760), string;
281       addr_len : zero+8 : offset(2016), littleendian;
282       ip_ptr : zero+32 : offset(2304), littleendian;
283       ip6_ptr : zero+32 : offset(2368), littleendian } ->
284       let s =
285       { net_device_shape_fields_8_dev_list'next = (if dev_list'next <> 0L then Int64.sub dev_list'next 48L else dev_list'next);
286         net_device_shape_fields_8_ip6_ptr = ip6_ptr;
287         net_device_shape_fields_8_ip_ptr = ip_ptr } in
288       let c =
289       { net_device_content_fields_9_addr_len = addr_len;
290         net_device_content_fields_9_dev_list'prev = dev_list'prev;
291         net_device_content_fields_9_flags = flags;
292         net_device_content_fields_9_mtu = mtu;
293         net_device_content_fields_9_name = name;
294         net_device_content_fields_9_operstate = operstate;
295         net_device_content_fields_9_perm_addr = perm_addr } in
296       (s, c)
297   | { _ } ->
298       raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_12", match_err));;
299 let net_device_parser_13 kernel_version bits = 
300   bitmatch bits with
301   | { name : 128 : offset(0), string;
302       dev_list'next : zero+32 : offset(384), bigendian;
303       dev_list'prev : zero+32 : offset(416), bigendian;
304       flags : zero+32 : offset(1568), bigendian;
305       operstate : zero+8 : offset(1648), bigendian;
306       mtu : zero+32 : offset(1664), bigendian;
307       perm_addr : 256 : offset(1760), string;
308       addr_len : zero+8 : offset(2016), bigendian;
309       ip_ptr : zero+32 : offset(2304), bigendian;
310       ip6_ptr : zero+32 : offset(2368), bigendian } ->
311       let s =
312       { net_device_shape_fields_8_dev_list'next = (if dev_list'next <> 0L then Int64.sub dev_list'next 48L else dev_list'next);
313         net_device_shape_fields_8_ip6_ptr = ip6_ptr;
314         net_device_shape_fields_8_ip_ptr = ip_ptr } in
315       let c =
316       { net_device_content_fields_9_addr_len = addr_len;
317         net_device_content_fields_9_dev_list'prev = dev_list'prev;
318         net_device_content_fields_9_flags = flags;
319         net_device_content_fields_9_mtu = mtu;
320         net_device_content_fields_9_name = name;
321         net_device_content_fields_9_operstate = operstate;
322         net_device_content_fields_9_perm_addr = perm_addr } in
323       (s, c)
324   | { _ } ->
325       raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_13", match_err));;
326 let net_parser_18 kernel_version bits = 
327   bitmatch bits with
328   | { dev_base_head'next : zero+32 : offset(416), littleendian;
329       dev_base_head'prev : zero+32 : offset(448), littleendian } ->
330       let s =
331       { net_shape_fields_14_dev_base_head'next = (
332                       if dev_base_head'next <> 0L then (
333                         let offset = offset_of_net_device_dev_list'next kernel_version in
334                         let offset = Int64.of_int offset in
335                         Int64.sub dev_base_head'next offset
336                       ) else dev_base_head'next
337                     );
338         net_shape_fields_14_dev_base_head'prev = (
339                       if dev_base_head'prev <> 0L then (
340                         let offset = offset_of_net_device_dev_list'next kernel_version in
341                         let offset = Int64.of_int offset in
342                         Int64.sub dev_base_head'prev offset
343                       ) else dev_base_head'prev
344                     ) } in
345       let c =
346       () in
347       (s, c)
348   | { _ } ->
349       raise (Virt_mem_types.ParseError ("net", "net_parser_18", match_err));;
350 let net_parser_19 kernel_version bits = 
351   bitmatch bits with
352   | { dev_base_head'next : zero+32 : offset(416), bigendian;
353       dev_base_head'prev : zero+32 : offset(448), bigendian } ->
354       let s =
355       { net_shape_fields_14_dev_base_head'next = (
356                       if dev_base_head'next <> 0L then (
357                         let offset = offset_of_net_device_dev_list'next kernel_version in
358                         let offset = Int64.of_int offset in
359                         Int64.sub dev_base_head'next offset
360                       ) else dev_base_head'next
361                     );
362         net_shape_fields_14_dev_base_head'prev = (
363                       if dev_base_head'prev <> 0L then (
364                         let offset = offset_of_net_device_dev_list'next kernel_version in
365                         let offset = Int64.of_int offset in
366                         Int64.sub dev_base_head'prev offset
367                       ) else dev_base_head'prev
368                     ) } in
369       let c =
370       () in
371       (s, c)
372   | { _ } ->
373       raise (Virt_mem_types.ParseError ("net", "net_parser_19", match_err));;
374 let net_parser_16 kernel_version bits = 
375   bitmatch bits with
376   | { dev_base_head'next : zero+64 : offset(768), littleendian;
377       dev_base_head'prev : zero+64 : offset(832), littleendian } ->
378       let s =
379       { net_shape_fields_14_dev_base_head'next = (
380                       if dev_base_head'next <> 0L then (
381                         let offset = offset_of_net_device_dev_list'next kernel_version in
382                         let offset = Int64.of_int offset in
383                         Int64.sub dev_base_head'next offset
384                       ) else dev_base_head'next
385                     );
386         net_shape_fields_14_dev_base_head'prev = (
387                       if dev_base_head'prev <> 0L then (
388                         let offset = offset_of_net_device_dev_list'next kernel_version in
389                         let offset = Int64.of_int offset in
390                         Int64.sub dev_base_head'prev offset
391                       ) else dev_base_head'prev
392                     ) } in
393       let c =
394       () in
395       (s, c)
396   | { _ } ->
397       raise (Virt_mem_types.ParseError ("net", "net_parser_16", match_err));;
398 let net_parser_17 kernel_version bits = 
399   bitmatch bits with
400   | { dev_base_head'next : zero+64 : offset(768), bigendian;
401       dev_base_head'prev : zero+64 : offset(832), bigendian } ->
402       let s =
403       { net_shape_fields_14_dev_base_head'next = (
404                       if dev_base_head'next <> 0L then (
405                         let offset = offset_of_net_device_dev_list'next kernel_version in
406                         let offset = Int64.of_int offset in
407                         Int64.sub dev_base_head'next offset
408                       ) else dev_base_head'next
409                     );
410         net_shape_fields_14_dev_base_head'prev = (
411                       if dev_base_head'prev <> 0L then (
412                         let offset = offset_of_net_device_dev_list'next kernel_version in
413                         let offset = Int64.of_int offset in
414                         Int64.sub dev_base_head'prev offset
415                       ) else dev_base_head'prev
416                     ) } in
417       let c =
418       () in
419       (s, c)
420   | { _ } ->
421       raise (Virt_mem_types.ParseError ("net", "net_parser_17", match_err));;
422 let in_device_parser_24 kernel_version bits = 
423   bitmatch bits with
424   | { ifa_list : zero+32 : offset(96), littleendian } ->
425       let s =
426       { in_device_shape_fields_20_ifa_list = ifa_list } in
427       let c =
428       () in
429       (s, c)
430   | { _ } ->
431       raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_24", match_err));;
432 let in_device_parser_25 kernel_version bits = 
433   bitmatch bits with
434   | { ifa_list : zero+32 : offset(96), bigendian } ->
435       let s =
436       { in_device_shape_fields_20_ifa_list = ifa_list } in
437       let c =
438       () in
439       (s, c)
440   | { _ } ->
441       raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_25", match_err));;
442 let in_device_parser_22 kernel_version bits = 
443   bitmatch bits with
444   | { ifa_list : zero+64 : offset(128), littleendian } ->
445       let s =
446       { in_device_shape_fields_20_ifa_list = ifa_list } in
447       let c =
448       () in
449       (s, c)
450   | { _ } ->
451       raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_22", match_err));;
452 let in_device_parser_23 kernel_version bits = 
453   bitmatch bits with
454   | { ifa_list : zero+64 : offset(128), bigendian } ->
455       let s =
456       { in_device_shape_fields_20_ifa_list = ifa_list } in
457       let c =
458       () in
459       (s, c)
460   | { _ } ->
461       raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_23", match_err));;
462 let inet6_dev_parser_30 kernel_version bits = 
463   bitmatch bits with
464   | { addr_list : zero+32 : offset(32), littleendian } ->
465       let s =
466       { inet6_dev_shape_fields_26_addr_list = addr_list } in
467       let c =
468       () in
469       (s, c)
470   | { _ } ->
471       raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_30", match_err));;
472 let inet6_dev_parser_31 kernel_version bits = 
473   bitmatch bits with
474   | { addr_list : zero+32 : offset(32), bigendian } ->
475       let s =
476       { inet6_dev_shape_fields_26_addr_list = addr_list } in
477       let c =
478       () in
479       (s, c)
480   | { _ } ->
481       raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_31", match_err));;
482 let inet6_dev_parser_28 kernel_version bits = 
483   bitmatch bits with
484   | { addr_list : zero+64 : offset(64), littleendian } ->
485       let s =
486       { inet6_dev_shape_fields_26_addr_list = addr_list } in
487       let c =
488       () in
489       (s, c)
490   | { _ } ->
491       raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_28", match_err));;
492 let inet6_dev_parser_29 kernel_version bits = 
493   bitmatch bits with
494   | { addr_list : zero+64 : offset(64), bigendian } ->
495       let s =
496       { inet6_dev_shape_fields_26_addr_list = addr_list } in
497       let c =
498       () in
499       (s, c)
500   | { _ } ->
501       raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_29", match_err));;
502 let in_ifaddr_parser_36 kernel_version bits = 
503   bitmatch bits with
504   | { ifa_next : zero+32 : offset(0), littleendian;
505       ifa_local : zero+32 : offset(128), littleendian;
506       ifa_address : zero+32 : offset(160), littleendian;
507       ifa_mask : zero+32 : offset(192), littleendian;
508       ifa_broadcast : zero+32 : offset(224), littleendian } ->
509       let s =
510       { in_ifaddr_shape_fields_32_ifa_next = ifa_next } in
511       let c =
512       { in_ifaddr_content_fields_33_ifa_address = ifa_address;
513         in_ifaddr_content_fields_33_ifa_broadcast = ifa_broadcast;
514         in_ifaddr_content_fields_33_ifa_local = ifa_local;
515         in_ifaddr_content_fields_33_ifa_mask = ifa_mask } in
516       (s, c)
517   | { _ } ->
518       raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_36", match_err));;
519 let in_ifaddr_parser_37 kernel_version bits = 
520   bitmatch bits with
521   | { ifa_next : zero+32 : offset(0), bigendian;
522       ifa_local : zero+32 : offset(128), bigendian;
523       ifa_address : zero+32 : offset(160), bigendian;
524       ifa_mask : zero+32 : offset(192), bigendian;
525       ifa_broadcast : zero+32 : offset(224), bigendian } ->
526       let s =
527       { in_ifaddr_shape_fields_32_ifa_next = ifa_next } in
528       let c =
529       { in_ifaddr_content_fields_33_ifa_address = ifa_address;
530         in_ifaddr_content_fields_33_ifa_broadcast = ifa_broadcast;
531         in_ifaddr_content_fields_33_ifa_local = ifa_local;
532         in_ifaddr_content_fields_33_ifa_mask = ifa_mask } in
533       (s, c)
534   | { _ } ->
535       raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_37", match_err));;
536 let in_ifaddr_parser_34 kernel_version bits = 
537   bitmatch bits with
538   | { ifa_next : zero+64 : offset(0), littleendian;
539       ifa_local : zero+32 : offset(256), littleendian;
540       ifa_address : zero+32 : offset(288), littleendian;
541       ifa_mask : zero+32 : offset(320), littleendian;
542       ifa_broadcast : zero+32 : offset(352), littleendian } ->
543       let s =
544       { in_ifaddr_shape_fields_32_ifa_next = ifa_next } in
545       let c =
546       { in_ifaddr_content_fields_33_ifa_address = ifa_address;
547         in_ifaddr_content_fields_33_ifa_broadcast = ifa_broadcast;
548         in_ifaddr_content_fields_33_ifa_local = ifa_local;
549         in_ifaddr_content_fields_33_ifa_mask = ifa_mask } in
550       (s, c)
551   | { _ } ->
552       raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_34", match_err));;
553 let in_ifaddr_parser_35 kernel_version bits = 
554   bitmatch bits with
555   | { ifa_next : zero+64 : offset(0), bigendian;
556       ifa_local : zero+32 : offset(256), bigendian;
557       ifa_address : zero+32 : offset(288), bigendian;
558       ifa_mask : zero+32 : offset(320), bigendian;
559       ifa_broadcast : zero+32 : offset(352), bigendian } ->
560       let s =
561       { in_ifaddr_shape_fields_32_ifa_next = ifa_next } in
562       let c =
563       { in_ifaddr_content_fields_33_ifa_address = ifa_address;
564         in_ifaddr_content_fields_33_ifa_broadcast = ifa_broadcast;
565         in_ifaddr_content_fields_33_ifa_local = ifa_local;
566         in_ifaddr_content_fields_33_ifa_mask = ifa_mask } in
567       (s, c)
568   | { _ } ->
569       raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_35", match_err));;
570 let inet6_ifaddr_parser_42 kernel_version bits = 
571   bitmatch bits with
572   | { prefix_len : zero+32 : offset(128), littleendian;
573       lst_next : zero+32 : offset(832), littleendian } ->
574       let s =
575       { inet6_ifaddr_shape_fields_38_lst_next = lst_next } in
576       let c =
577       { inet6_ifaddr_content_fields_39_prefix_len = prefix_len } in
578       (s, c)
579   | { _ } ->
580       raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_42", match_err));;
581 let inet6_ifaddr_parser_40 kernel_version bits = 
582   bitmatch bits with
583   | { prefix_len : zero+32 : offset(128), littleendian;
584       lst_next : zero+64 : offset(1280), littleendian } ->
585       let s =
586       { inet6_ifaddr_shape_fields_38_lst_next = lst_next } in
587       let c =
588       { inet6_ifaddr_content_fields_39_prefix_len = prefix_len } in
589       (s, c)
590   | { _ } ->
591       raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_40", match_err));;
592 let inet6_ifaddr_parser_41 kernel_version bits = 
593   bitmatch bits with
594   | { prefix_len : zero+32 : offset(128), bigendian;
595       lst_next : zero+64 : offset(1280), bigendian } ->
596       let s =
597       { inet6_ifaddr_shape_fields_38_lst_next = lst_next } in
598       let c =
599       { inet6_ifaddr_content_fields_39_prefix_len = prefix_len } in
600       (s, c)
601   | { _ } ->
602       raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_41", match_err));;
603 let inet6_ifaddr_parser_43 kernel_version bits = 
604   bitmatch bits with
605   | { prefix_len : zero+32 : offset(128), bigendian;
606       lst_next : zero+32 : offset(800), bigendian } ->
607       let s =
608       { inet6_ifaddr_shape_fields_38_lst_next = lst_next } in
609       let c =
610       { inet6_ifaddr_content_fields_39_prefix_len = prefix_len } in
611       (s, c)
612   | { _ } ->
613       raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_43", match_err));;
614 let task_struct_shape_fields_1_follower load followers map shape =
615   let (_, _, _, _, _, _, f) = followers in
616   let map = f load followers map shape.task_struct_shape_fields_1_tasks'next
617   in map;;
618 let net_device_shape_fields_8_follower load followers map shape =
619   let (_, _, _, _, _, f, _) = followers in
620   let map =
621     f load followers map shape.net_device_shape_fields_8_dev_list'next in
622   let (_, _, f, _, _, _, _) = followers in
623   let map = f load followers map shape.net_device_shape_fields_8_ip6_ptr in
624   let (_, _, _, f, _, _, _) = followers in
625   let map = f load followers map shape.net_device_shape_fields_8_ip_ptr
626   in map;;
627 let net_shape_fields_14_follower load followers map shape =
628   let (_, _, _, _, _, f, _) = followers in
629   let map =
630     f load followers map shape.net_shape_fields_14_dev_base_head'next in
631   let (_, _, _, _, _, f, _) = followers in
632   let map = f load followers map shape.net_shape_fields_14_dev_base_head'prev
633   in map;;
634 let in_device_shape_fields_20_follower load followers map shape =
635   let (_, f, _, _, _, _, _) = followers in
636   let map = f load followers map shape.in_device_shape_fields_20_ifa_list
637   in map;;
638 let inet6_dev_shape_fields_26_follower load followers map shape =
639   let (f, _, _, _, _, _, _) = followers in
640   let map = f load followers map shape.inet6_dev_shape_fields_26_addr_list
641   in map;;
642 let in_ifaddr_shape_fields_32_follower load followers map shape =
643   let (_, f, _, _, _, _, _) = followers in
644   let map = f load followers map shape.in_ifaddr_shape_fields_32_ifa_next
645   in map;;
646 let inet6_ifaddr_shape_fields_38_follower load followers map shape =
647   let (f, _, _, _, _, _, _) = followers in
648   let map = f load followers map shape.inet6_ifaddr_shape_fields_38_lst_next
649   in map;;
650 let kv_follower kernel_version struct_name total_size parserfn followerfn
651                 load followers map addr =
652   if (addr <> 0L) && (not (AddrMap.mem addr map))
653   then
654     (let map = AddrMap.add addr (struct_name, total_size) map in
655      let bits = load struct_name addr total_size in
656      let (shape, _) = parserfn kernel_version bits
657      in followerfn load followers map shape)
658   else map;;
659 let task_struct_kv0_follower =
660   kv_follower "2.6.25.14-69.fc8.x86_64" "task_struct" 2496
661     task_struct_parser_3 task_struct_shape_fields_1_follower;;
662 let task_struct_kv1_follower =
663   kv_follower "2.6.25.14-108.fc9.ppc64" "task_struct" 2524
664     task_struct_parser_4 task_struct_shape_fields_1_follower;;
665 let task_struct_kv2_follower =
666   kv_follower "2.6.25.14-108.fc9.i586" "task_struct" 1832
667     task_struct_parser_5 task_struct_shape_fields_1_follower;;
668 let task_struct_kv3_follower =
669   kv_follower "2.6.25.14-108.fc9.i686" "task_struct" 1832
670     task_struct_parser_6 task_struct_shape_fields_1_follower;;
671 let task_struct_kv4_follower =
672   kv_follower "2.6.25.14-69.fc8.ppc" "task_struct" 1952 task_struct_parser_7
673     task_struct_shape_fields_1_follower;;
674 let task_struct_kv5_follower =
675   kv_follower "2.6.25.14-108.fc9.x86_64" "task_struct" 2496
676     task_struct_parser_3 task_struct_shape_fields_1_follower;;
677 let task_struct_kv6_follower =
678   kv_follower "2.6.25.11-97.fc9.x86_64" "task_struct" 2496
679     task_struct_parser_3 task_struct_shape_fields_1_follower;;
680 let task_struct_kv7_follower =
681   kv_follower "2.6.25.14-69.fc8.i586" "task_struct" 1832 task_struct_parser_5
682     task_struct_shape_fields_1_follower;;
683 let task_struct_kv8_follower =
684   kv_follower "2.6.25.14-69.fc8.ppc64" "task_struct" 2524
685     task_struct_parser_4 task_struct_shape_fields_1_follower;;
686 let task_struct_kv9_follower =
687   kv_follower "2.6.25.11-97.fc9.i686" "task_struct" 1832 task_struct_parser_6
688     task_struct_shape_fields_1_follower;;
689 let task_struct_kv10_follower =
690   kv_follower "2.6.25.14-108.fc9.ppc" "task_struct" 1952 task_struct_parser_7
691     task_struct_shape_fields_1_follower;;
692 let task_struct_kv11_follower =
693   kv_follower "2.6.25.14-69.fc8.i686" "task_struct" 1832 task_struct_parser_6
694     task_struct_shape_fields_1_follower;;
695 let net_device_kv0_follower =
696   kv_follower "2.6.25.14-69.fc8.x86_64" "net_device" 1752
697     net_device_parser_10 net_device_shape_fields_8_follower;;
698 let net_device_kv1_follower =
699   kv_follower "2.6.25.14-108.fc9.ppc64" "net_device" 1776
700     net_device_parser_11 net_device_shape_fields_8_follower;;
701 let net_device_kv2_follower =
702   kv_follower "2.6.25.14-108.fc9.i586" "net_device" 1212 net_device_parser_12
703     net_device_shape_fields_8_follower;;
704 let net_device_kv3_follower =
705   kv_follower "2.6.25.14-108.fc9.i686" "net_device" 1212 net_device_parser_12
706     net_device_shape_fields_8_follower;;
707 let net_device_kv4_follower =
708   kv_follower "2.6.25.14-69.fc8.ppc" "net_device" 904 net_device_parser_13
709     net_device_shape_fields_8_follower;;
710 let net_device_kv5_follower =
711   kv_follower "2.6.25.14-108.fc9.x86_64" "net_device" 1752
712     net_device_parser_10 net_device_shape_fields_8_follower;;
713 let net_device_kv6_follower =
714   kv_follower "2.6.25.11-97.fc9.x86_64" "net_device" 1752
715     net_device_parser_10 net_device_shape_fields_8_follower;;
716 let net_device_kv7_follower =
717   kv_follower "2.6.25.14-69.fc8.i586" "net_device" 1212 net_device_parser_12
718     net_device_shape_fields_8_follower;;
719 let net_device_kv8_follower =
720   kv_follower "2.6.25.14-69.fc8.ppc64" "net_device" 1776 net_device_parser_11
721     net_device_shape_fields_8_follower;;
722 let net_device_kv9_follower =
723   kv_follower "2.6.25.11-97.fc9.i686" "net_device" 1212 net_device_parser_12
724     net_device_shape_fields_8_follower;;
725 let net_device_kv10_follower =
726   kv_follower "2.6.25.14-108.fc9.ppc" "net_device" 904 net_device_parser_13
727     net_device_shape_fields_8_follower;;
728 let net_device_kv11_follower =
729   kv_follower "2.6.25.14-69.fc8.i686" "net_device" 1212 net_device_parser_12
730     net_device_shape_fields_8_follower;;
731 let net_kv0_follower =
732   kv_follower "2.6.25.14-69.fc8.x86_64" "net" 488 net_parser_16
733     net_shape_fields_14_follower;;
734 let net_kv1_follower =
735   kv_follower "2.6.25.14-108.fc9.ppc64" "net" 488 net_parser_17
736     net_shape_fields_14_follower;;
737 let net_kv2_follower =
738   kv_follower "2.6.25.14-108.fc9.i586" "net" 284 net_parser_18
739     net_shape_fields_14_follower;;
740 let net_kv3_follower =
741   kv_follower "2.6.25.14-108.fc9.i686" "net" 284 net_parser_18
742     net_shape_fields_14_follower;;
743 let net_kv4_follower =
744   kv_follower "2.6.25.14-69.fc8.ppc" "net" 276 net_parser_19
745     net_shape_fields_14_follower;;
746 let net_kv5_follower =
747   kv_follower "2.6.25.14-108.fc9.x86_64" "net" 488 net_parser_16
748     net_shape_fields_14_follower;;
749 let net_kv6_follower =
750   kv_follower "2.6.25.11-97.fc9.x86_64" "net" 488 net_parser_16
751     net_shape_fields_14_follower;;
752 let net_kv7_follower =
753   kv_follower "2.6.25.14-69.fc8.i586" "net" 284 net_parser_18
754     net_shape_fields_14_follower;;
755 let net_kv8_follower =
756   kv_follower "2.6.25.14-69.fc8.ppc64" "net" 488 net_parser_17
757     net_shape_fields_14_follower;;
758 let net_kv9_follower =
759   kv_follower "2.6.25.11-97.fc9.i686" "net" 284 net_parser_18
760     net_shape_fields_14_follower;;
761 let net_kv10_follower =
762   kv_follower "2.6.25.14-108.fc9.ppc" "net" 276 net_parser_19
763     net_shape_fields_14_follower;;
764 let net_kv11_follower =
765   kv_follower "2.6.25.14-69.fc8.i686" "net" 284 net_parser_18
766     net_shape_fields_14_follower;;
767 let in_device_kv0_follower =
768   kv_follower "2.6.25.14-69.fc8.x86_64" "in_device" 368 in_device_parser_22
769     in_device_shape_fields_20_follower;;
770 let in_device_kv1_follower =
771   kv_follower "2.6.25.14-108.fc9.ppc64" "in_device" 368 in_device_parser_23
772     in_device_shape_fields_20_follower;;
773 let in_device_kv2_follower =
774   kv_follower "2.6.25.14-108.fc9.i586" "in_device" 244 in_device_parser_24
775     in_device_shape_fields_20_follower;;
776 let in_device_kv3_follower =
777   kv_follower "2.6.25.14-108.fc9.i686" "in_device" 244 in_device_parser_24
778     in_device_shape_fields_20_follower;;
779 let in_device_kv4_follower =
780   kv_follower "2.6.25.14-69.fc8.ppc" "in_device" 236 in_device_parser_25
781     in_device_shape_fields_20_follower;;
782 let in_device_kv5_follower =
783   kv_follower "2.6.25.14-108.fc9.x86_64" "in_device" 368 in_device_parser_22
784     in_device_shape_fields_20_follower;;
785 let in_device_kv6_follower =
786   kv_follower "2.6.25.11-97.fc9.x86_64" "in_device" 368 in_device_parser_22
787     in_device_shape_fields_20_follower;;
788 let in_device_kv7_follower =
789   kv_follower "2.6.25.14-69.fc8.i586" "in_device" 244 in_device_parser_24
790     in_device_shape_fields_20_follower;;
791 let in_device_kv8_follower =
792   kv_follower "2.6.25.14-69.fc8.ppc64" "in_device" 368 in_device_parser_23
793     in_device_shape_fields_20_follower;;
794 let in_device_kv9_follower =
795   kv_follower "2.6.25.11-97.fc9.i686" "in_device" 244 in_device_parser_24
796     in_device_shape_fields_20_follower;;
797 let in_device_kv10_follower =
798   kv_follower "2.6.25.14-108.fc9.ppc" "in_device" 236 in_device_parser_25
799     in_device_shape_fields_20_follower;;
800 let in_device_kv11_follower =
801   kv_follower "2.6.25.14-69.fc8.i686" "in_device" 244 in_device_parser_24
802     in_device_shape_fields_20_follower;;
803 let inet6_dev_kv0_follower =
804   kv_follower "2.6.25.14-69.fc8.x86_64" "inet6_dev" 536 inet6_dev_parser_28
805     inet6_dev_shape_fields_26_follower;;
806 let inet6_dev_kv1_follower =
807   kv_follower "2.6.25.14-108.fc9.ppc64" "inet6_dev" 536 inet6_dev_parser_29
808     inet6_dev_shape_fields_26_follower;;
809 let inet6_dev_kv2_follower =
810   kv_follower "2.6.25.14-108.fc9.i586" "inet6_dev" 356 inet6_dev_parser_30
811     inet6_dev_shape_fields_26_follower;;
812 let inet6_dev_kv3_follower =
813   kv_follower "2.6.25.14-108.fc9.i686" "inet6_dev" 356 inet6_dev_parser_30
814     inet6_dev_shape_fields_26_follower;;
815 let inet6_dev_kv4_follower =
816   kv_follower "2.6.25.14-69.fc8.ppc" "inet6_dev" 348 inet6_dev_parser_31
817     inet6_dev_shape_fields_26_follower;;
818 let inet6_dev_kv5_follower =
819   kv_follower "2.6.25.14-108.fc9.x86_64" "inet6_dev" 536 inet6_dev_parser_28
820     inet6_dev_shape_fields_26_follower;;
821 let inet6_dev_kv6_follower =
822   kv_follower "2.6.25.11-97.fc9.x86_64" "inet6_dev" 536 inet6_dev_parser_28
823     inet6_dev_shape_fields_26_follower;;
824 let inet6_dev_kv7_follower =
825   kv_follower "2.6.25.14-69.fc8.i586" "inet6_dev" 356 inet6_dev_parser_30
826     inet6_dev_shape_fields_26_follower;;
827 let inet6_dev_kv8_follower =
828   kv_follower "2.6.25.14-69.fc8.ppc64" "inet6_dev" 536 inet6_dev_parser_29
829     inet6_dev_shape_fields_26_follower;;
830 let inet6_dev_kv9_follower =
831   kv_follower "2.6.25.11-97.fc9.i686" "inet6_dev" 356 inet6_dev_parser_30
832     inet6_dev_shape_fields_26_follower;;
833 let inet6_dev_kv10_follower =
834   kv_follower "2.6.25.14-108.fc9.ppc" "inet6_dev" 348 inet6_dev_parser_31
835     inet6_dev_shape_fields_26_follower;;
836 let inet6_dev_kv11_follower =
837   kv_follower "2.6.25.14-69.fc8.i686" "inet6_dev" 356 inet6_dev_parser_30
838     inet6_dev_shape_fields_26_follower;;
839 let in_ifaddr_kv0_follower =
840   kv_follower "2.6.25.14-69.fc8.x86_64" "in_ifaddr" 71 in_ifaddr_parser_34
841     in_ifaddr_shape_fields_32_follower;;
842 let in_ifaddr_kv1_follower =
843   kv_follower "2.6.25.14-108.fc9.ppc64" "in_ifaddr" 71 in_ifaddr_parser_35
844     in_ifaddr_shape_fields_32_follower;;
845 let in_ifaddr_kv2_follower =
846   kv_follower "2.6.25.14-108.fc9.i586" "in_ifaddr" 55 in_ifaddr_parser_36
847     in_ifaddr_shape_fields_32_follower;;
848 let in_ifaddr_kv3_follower =
849   kv_follower "2.6.25.14-108.fc9.i686" "in_ifaddr" 55 in_ifaddr_parser_36
850     in_ifaddr_shape_fields_32_follower;;
851 let in_ifaddr_kv4_follower =
852   kv_follower "2.6.25.14-69.fc8.ppc" "in_ifaddr" 55 in_ifaddr_parser_37
853     in_ifaddr_shape_fields_32_follower;;
854 let in_ifaddr_kv5_follower =
855   kv_follower "2.6.25.14-108.fc9.x86_64" "in_ifaddr" 71 in_ifaddr_parser_34
856     in_ifaddr_shape_fields_32_follower;;
857 let in_ifaddr_kv6_follower =
858   kv_follower "2.6.25.11-97.fc9.x86_64" "in_ifaddr" 71 in_ifaddr_parser_34
859     in_ifaddr_shape_fields_32_follower;;
860 let in_ifaddr_kv7_follower =
861   kv_follower "2.6.25.14-69.fc8.i586" "in_ifaddr" 55 in_ifaddr_parser_36
862     in_ifaddr_shape_fields_32_follower;;
863 let in_ifaddr_kv8_follower =
864   kv_follower "2.6.25.14-69.fc8.ppc64" "in_ifaddr" 71 in_ifaddr_parser_35
865     in_ifaddr_shape_fields_32_follower;;
866 let in_ifaddr_kv9_follower =
867   kv_follower "2.6.25.11-97.fc9.i686" "in_ifaddr" 55 in_ifaddr_parser_36
868     in_ifaddr_shape_fields_32_follower;;
869 let in_ifaddr_kv10_follower =
870   kv_follower "2.6.25.14-108.fc9.ppc" "in_ifaddr" 55 in_ifaddr_parser_37
871     in_ifaddr_shape_fields_32_follower;;
872 let in_ifaddr_kv11_follower =
873   kv_follower "2.6.25.14-69.fc8.i686" "in_ifaddr" 55 in_ifaddr_parser_36
874     in_ifaddr_shape_fields_32_follower;;
875 let inet6_ifaddr_kv0_follower =
876   kv_follower "2.6.25.14-69.fc8.x86_64" "inet6_ifaddr" 200
877     inet6_ifaddr_parser_40 inet6_ifaddr_shape_fields_38_follower;;
878 let inet6_ifaddr_kv1_follower =
879   kv_follower "2.6.25.14-108.fc9.ppc64" "inet6_ifaddr" 200
880     inet6_ifaddr_parser_41 inet6_ifaddr_shape_fields_38_follower;;
881 let inet6_ifaddr_kv2_follower =
882   kv_follower "2.6.25.14-108.fc9.i586" "inet6_ifaddr" 128
883     inet6_ifaddr_parser_42 inet6_ifaddr_shape_fields_38_follower;;
884 let inet6_ifaddr_kv3_follower =
885   kv_follower "2.6.25.14-108.fc9.i686" "inet6_ifaddr" 128
886     inet6_ifaddr_parser_42 inet6_ifaddr_shape_fields_38_follower;;
887 let inet6_ifaddr_kv4_follower =
888   kv_follower "2.6.25.14-69.fc8.ppc" "inet6_ifaddr" 124
889     inet6_ifaddr_parser_43 inet6_ifaddr_shape_fields_38_follower;;
890 let inet6_ifaddr_kv5_follower =
891   kv_follower "2.6.25.14-108.fc9.x86_64" "inet6_ifaddr" 200
892     inet6_ifaddr_parser_40 inet6_ifaddr_shape_fields_38_follower;;
893 let inet6_ifaddr_kv6_follower =
894   kv_follower "2.6.25.11-97.fc9.x86_64" "inet6_ifaddr" 200
895     inet6_ifaddr_parser_40 inet6_ifaddr_shape_fields_38_follower;;
896 let inet6_ifaddr_kv7_follower =
897   kv_follower "2.6.25.14-69.fc8.i586" "inet6_ifaddr" 128
898     inet6_ifaddr_parser_42 inet6_ifaddr_shape_fields_38_follower;;
899 let inet6_ifaddr_kv8_follower =
900   kv_follower "2.6.25.14-69.fc8.ppc64" "inet6_ifaddr" 200
901     inet6_ifaddr_parser_41 inet6_ifaddr_shape_fields_38_follower;;
902 let inet6_ifaddr_kv9_follower =
903   kv_follower "2.6.25.11-97.fc9.i686" "inet6_ifaddr" 128
904     inet6_ifaddr_parser_42 inet6_ifaddr_shape_fields_38_follower;;
905 let inet6_ifaddr_kv10_follower =
906   kv_follower "2.6.25.14-108.fc9.ppc" "inet6_ifaddr" 124
907     inet6_ifaddr_parser_43 inet6_ifaddr_shape_fields_38_follower;;
908 let inet6_ifaddr_kv11_follower =
909   kv_follower "2.6.25.14-69.fc8.i686" "inet6_ifaddr" 128
910     inet6_ifaddr_parser_42 inet6_ifaddr_shape_fields_38_follower;;
911 let follower_map =
912   StringMap.add "2.6.25.14-69.fc8.i686"
913     (inet6_ifaddr_kv11_follower, in_ifaddr_kv11_follower,
914      inet6_dev_kv11_follower, in_device_kv11_follower, net_kv11_follower,
915      net_device_kv11_follower, task_struct_kv11_follower)
916     (StringMap.add "2.6.25.14-108.fc9.ppc"
917        (inet6_ifaddr_kv10_follower, in_ifaddr_kv10_follower,
918         inet6_dev_kv10_follower, in_device_kv10_follower, net_kv10_follower,
919         net_device_kv10_follower, task_struct_kv10_follower)
920        (StringMap.add "2.6.25.11-97.fc9.i686"
921           (inet6_ifaddr_kv9_follower, in_ifaddr_kv9_follower,
922            inet6_dev_kv9_follower, in_device_kv9_follower, net_kv9_follower,
923            net_device_kv9_follower, task_struct_kv9_follower)
924           (StringMap.add "2.6.25.14-69.fc8.ppc64"
925              (inet6_ifaddr_kv8_follower, in_ifaddr_kv8_follower,
926               inet6_dev_kv8_follower, in_device_kv8_follower,
927               net_kv8_follower, net_device_kv8_follower,
928               task_struct_kv8_follower)
929              (StringMap.add "2.6.25.14-69.fc8.i586"
930                 (inet6_ifaddr_kv7_follower, in_ifaddr_kv7_follower,
931                  inet6_dev_kv7_follower, in_device_kv7_follower,
932                  net_kv7_follower, net_device_kv7_follower,
933                  task_struct_kv7_follower)
934                 (StringMap.add "2.6.25.11-97.fc9.x86_64"
935                    (inet6_ifaddr_kv6_follower, in_ifaddr_kv6_follower,
936                     inet6_dev_kv6_follower, in_device_kv6_follower,
937                     net_kv6_follower, net_device_kv6_follower,
938                     task_struct_kv6_follower)
939                    (StringMap.add "2.6.25.14-108.fc9.x86_64"
940                       (inet6_ifaddr_kv5_follower, in_ifaddr_kv5_follower,
941                        inet6_dev_kv5_follower, in_device_kv5_follower,
942                        net_kv5_follower, net_device_kv5_follower,
943                        task_struct_kv5_follower)
944                       (StringMap.add "2.6.25.14-69.fc8.ppc"
945                          (inet6_ifaddr_kv4_follower, in_ifaddr_kv4_follower,
946                           inet6_dev_kv4_follower, in_device_kv4_follower,
947                           net_kv4_follower, net_device_kv4_follower,
948                           task_struct_kv4_follower)
949                          (StringMap.add "2.6.25.14-108.fc9.i686"
950                             (inet6_ifaddr_kv3_follower,
951                              in_ifaddr_kv3_follower, inet6_dev_kv3_follower,
952                              in_device_kv3_follower, net_kv3_follower,
953                              net_device_kv3_follower,
954                              task_struct_kv3_follower)
955                             (StringMap.add "2.6.25.14-108.fc9.i586"
956                                (inet6_ifaddr_kv2_follower,
957                                 in_ifaddr_kv2_follower,
958                                 inet6_dev_kv2_follower,
959                                 in_device_kv2_follower, net_kv2_follower,
960                                 net_device_kv2_follower,
961                                 task_struct_kv2_follower)
962                                (StringMap.add "2.6.25.14-108.fc9.ppc64"
963                                   (inet6_ifaddr_kv1_follower,
964                                    in_ifaddr_kv1_follower,
965                                    inet6_dev_kv1_follower,
966                                    in_device_kv1_follower, net_kv1_follower,
967                                    net_device_kv1_follower,
968                                    task_struct_kv1_follower)
969                                   (StringMap.add "2.6.25.14-69.fc8.x86_64"
970                                      (inet6_ifaddr_kv0_follower,
971                                       in_ifaddr_kv0_follower,
972                                       inet6_dev_kv0_follower,
973                                       in_device_kv0_follower,
974                                       net_kv0_follower,
975                                       net_device_kv0_follower,
976                                       task_struct_kv0_follower)
977                                      StringMap.empty)))))))))));;
978 let task_struct_follower kernel_version load addr =
979   let followers =
980     try StringMap.find kernel_version follower_map
981     with | Not_found -> unknown_kernel_version kernel_version "task_struct" in
982   let (_, _, _, _, _, _, f) = followers
983   in f load followers AddrMap.empty addr;;
984 let net_device_follower kernel_version load addr =
985   let followers =
986     try StringMap.find kernel_version follower_map
987     with | Not_found -> unknown_kernel_version kernel_version "net_device" in
988   let (_, _, _, _, _, f, _) = followers
989   in f load followers AddrMap.empty addr;;
990 let net_follower kernel_version load addr =
991   let followers =
992     try StringMap.find kernel_version follower_map
993     with | Not_found -> unknown_kernel_version kernel_version "net" in
994   let (_, _, _, _, f, _, _) = followers
995   in f load followers AddrMap.empty addr;;
996 let in_device_follower kernel_version load addr =
997   let followers =
998     try StringMap.find kernel_version follower_map
999     with | Not_found -> unknown_kernel_version kernel_version "in_device" in
1000   let (_, _, _, f, _, _, _) = followers
1001   in f load followers AddrMap.empty addr;;
1002 let inet6_dev_follower kernel_version load addr =
1003   let followers =
1004     try StringMap.find kernel_version follower_map
1005     with | Not_found -> unknown_kernel_version kernel_version "inet6_dev" in
1006   let (_, _, f, _, _, _, _) = followers
1007   in f load followers AddrMap.empty addr;;
1008 let in_ifaddr_follower kernel_version load addr =
1009   let followers =
1010     try StringMap.find kernel_version follower_map
1011     with | Not_found -> unknown_kernel_version kernel_version "in_ifaddr" in
1012   let (_, f, _, _, _, _, _) = followers
1013   in f load followers AddrMap.empty addr;;
1014 let inet6_ifaddr_follower kernel_version load addr =
1015   let followers =
1016     try StringMap.find kernel_version follower_map
1017     with | Not_found -> unknown_kernel_version kernel_version "inet6_ifaddr" in
1018   let (f, _, _, _, _, _, _) = followers
1019   in f load followers AddrMap.empty addr;;