1 (* WARNING: This file and the corresponding mli (interface) are
2 * automatically generated by the extract/codegen/ program.
4 * Any edits you make to this file will be lost.
6 * To update this file from the latest kernel database, it is recommended
7 * that you do 'make update-kernel-structs'.
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 =
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
24 version struct_name);;
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
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
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
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
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
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
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
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
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
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
84 type inet6_ifaddr_content_fields_39 =
85 { inet6_ifaddr_content_fields_39_prefix_len : int64
87 let offset_of_net_device_dev_list'next =
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 =
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 } ->
114 { task_struct_shape_fields_1_tasks'next = (if tasks'next <> 0L then Int64.sub tasks'next 480L else tasks'next) } in
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
125 raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_3", match_err));;
126 let task_struct_parser_4 kernel_version bits =
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 } ->
137 { task_struct_shape_fields_1_tasks'next = (if tasks'next <> 0L then Int64.sub tasks'next 480L else tasks'next) } in
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
148 raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_4", match_err));;
149 let task_struct_parser_5 kernel_version bits =
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 } ->
160 { task_struct_shape_fields_1_tasks'next = (if tasks'next <> 0L then Int64.sub tasks'next 400L else tasks'next) } in
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
171 raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_5", match_err));;
172 let task_struct_parser_6 kernel_version bits =
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 } ->
183 { task_struct_shape_fields_1_tasks'next = (if tasks'next <> 0L then Int64.sub tasks'next 404L else tasks'next) } in
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
194 raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_6", match_err));;
195 let task_struct_parser_7 kernel_version bits =
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 } ->
206 { task_struct_shape_fields_1_tasks'next = (if tasks'next <> 0L then Int64.sub tasks'next 416L else tasks'next) } in
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
217 raise (Virt_mem_types.ParseError ("task_struct", "task_struct_parser_7", match_err));;
218 let net_device_parser_10 kernel_version bits =
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 } ->
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
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
244 raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_10", match_err));;
245 let net_device_parser_11 kernel_version bits =
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 } ->
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
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
271 raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_11", match_err));;
272 let net_device_parser_12 kernel_version bits =
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 } ->
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
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
298 raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_12", match_err));;
299 let net_device_parser_13 kernel_version bits =
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 } ->
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
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
325 raise (Virt_mem_types.ParseError ("net_device", "net_device_parser_13", match_err));;
326 let net_parser_18 kernel_version bits =
328 | { dev_base_head'next : zero+32 : offset(416), littleendian;
329 dev_base_head'prev : zero+32 : offset(448), littleendian } ->
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
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
349 raise (Virt_mem_types.ParseError ("net", "net_parser_18", match_err));;
350 let net_parser_19 kernel_version bits =
352 | { dev_base_head'next : zero+32 : offset(416), bigendian;
353 dev_base_head'prev : zero+32 : offset(448), bigendian } ->
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
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
373 raise (Virt_mem_types.ParseError ("net", "net_parser_19", match_err));;
374 let net_parser_16 kernel_version bits =
376 | { dev_base_head'next : zero+64 : offset(768), littleendian;
377 dev_base_head'prev : zero+64 : offset(832), littleendian } ->
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
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
397 raise (Virt_mem_types.ParseError ("net", "net_parser_16", match_err));;
398 let net_parser_17 kernel_version bits =
400 | { dev_base_head'next : zero+64 : offset(768), bigendian;
401 dev_base_head'prev : zero+64 : offset(832), bigendian } ->
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
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
421 raise (Virt_mem_types.ParseError ("net", "net_parser_17", match_err));;
422 let in_device_parser_24 kernel_version bits =
424 | { ifa_list : zero+32 : offset(96), littleendian } ->
426 { in_device_shape_fields_20_ifa_list = ifa_list } in
431 raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_24", match_err));;
432 let in_device_parser_25 kernel_version bits =
434 | { ifa_list : zero+32 : offset(96), bigendian } ->
436 { in_device_shape_fields_20_ifa_list = ifa_list } in
441 raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_25", match_err));;
442 let in_device_parser_22 kernel_version bits =
444 | { ifa_list : zero+64 : offset(128), littleendian } ->
446 { in_device_shape_fields_20_ifa_list = ifa_list } in
451 raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_22", match_err));;
452 let in_device_parser_23 kernel_version bits =
454 | { ifa_list : zero+64 : offset(128), bigendian } ->
456 { in_device_shape_fields_20_ifa_list = ifa_list } in
461 raise (Virt_mem_types.ParseError ("in_device", "in_device_parser_23", match_err));;
462 let inet6_dev_parser_30 kernel_version bits =
464 | { addr_list : zero+32 : offset(32), littleendian } ->
466 { inet6_dev_shape_fields_26_addr_list = addr_list } in
471 raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_30", match_err));;
472 let inet6_dev_parser_31 kernel_version bits =
474 | { addr_list : zero+32 : offset(32), bigendian } ->
476 { inet6_dev_shape_fields_26_addr_list = addr_list } in
481 raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_31", match_err));;
482 let inet6_dev_parser_28 kernel_version bits =
484 | { addr_list : zero+64 : offset(64), littleendian } ->
486 { inet6_dev_shape_fields_26_addr_list = addr_list } in
491 raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_28", match_err));;
492 let inet6_dev_parser_29 kernel_version bits =
494 | { addr_list : zero+64 : offset(64), bigendian } ->
496 { inet6_dev_shape_fields_26_addr_list = addr_list } in
501 raise (Virt_mem_types.ParseError ("inet6_dev", "inet6_dev_parser_29", match_err));;
502 let in_ifaddr_parser_36 kernel_version bits =
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 } ->
510 { in_ifaddr_shape_fields_32_ifa_next = ifa_next } in
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
518 raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_36", match_err));;
519 let in_ifaddr_parser_37 kernel_version bits =
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 } ->
527 { in_ifaddr_shape_fields_32_ifa_next = ifa_next } in
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
535 raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_37", match_err));;
536 let in_ifaddr_parser_34 kernel_version bits =
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 } ->
544 { in_ifaddr_shape_fields_32_ifa_next = ifa_next } in
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
552 raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_34", match_err));;
553 let in_ifaddr_parser_35 kernel_version bits =
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 } ->
561 { in_ifaddr_shape_fields_32_ifa_next = ifa_next } in
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
569 raise (Virt_mem_types.ParseError ("in_ifaddr", "in_ifaddr_parser_35", match_err));;
570 let inet6_ifaddr_parser_42 kernel_version bits =
572 | { prefix_len : zero+32 : offset(128), littleendian;
573 lst_next : zero+32 : offset(832), littleendian } ->
575 { inet6_ifaddr_shape_fields_38_lst_next = lst_next } in
577 { inet6_ifaddr_content_fields_39_prefix_len = prefix_len } in
580 raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_42", match_err));;
581 let inet6_ifaddr_parser_40 kernel_version bits =
583 | { prefix_len : zero+32 : offset(128), littleendian;
584 lst_next : zero+64 : offset(1280), littleendian } ->
586 { inet6_ifaddr_shape_fields_38_lst_next = lst_next } in
588 { inet6_ifaddr_content_fields_39_prefix_len = prefix_len } in
591 raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_40", match_err));;
592 let inet6_ifaddr_parser_41 kernel_version bits =
594 | { prefix_len : zero+32 : offset(128), bigendian;
595 lst_next : zero+64 : offset(1280), bigendian } ->
597 { inet6_ifaddr_shape_fields_38_lst_next = lst_next } in
599 { inet6_ifaddr_content_fields_39_prefix_len = prefix_len } in
602 raise (Virt_mem_types.ParseError ("inet6_ifaddr", "inet6_ifaddr_parser_41", match_err));;
603 let inet6_ifaddr_parser_43 kernel_version bits =
605 | { prefix_len : zero+32 : offset(128), bigendian;
606 lst_next : zero+32 : offset(800), bigendian } ->
608 { inet6_ifaddr_shape_fields_38_lst_next = lst_next } in
610 { inet6_ifaddr_content_fields_39_prefix_len = prefix_len } in
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
618 let net_device_shape_fields_8_follower load followers map shape =
619 let (_, _, _, _, _, f, _) = followers in
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
627 let net_shape_fields_14_follower load followers map shape =
628 let (_, _, _, _, _, f, _) = followers in
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
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
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
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
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
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))
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)
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;;
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,
975 net_device_kv0_follower,
976 task_struct_kv0_follower)
977 StringMap.empty)))))))))));;
978 let task_struct_follower kernel_version load addr =
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 =
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 =
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 =
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 =
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 =
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 =
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;;