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