Code generation of parsing functions now working.
[virt-mem.git] / lib / kernel_net_device.ml
index 47e8253..7d258f9 100644 (file)
@@ -1,24 +1,93 @@
 let warning =
   "This code is automatically generated from the kernel database by kerneldb-to-parser program.  Any edits you make will be lost.";;
-exception ParseError of string;;
+let zero = 0;;
+exception ParseError of string * string * string;;
 type t = { dev_addr : string; name : string };;
-let parser_1 bits = "parser_1";;
-let parser_2 bits = "parser_2";;
-let parser_3 bits = "parser_3";;
-let parser_4 bits = "parser_4";;
-let parser_5 bits = "parser_5";;
-let parser_6 bits = "parser_6";;
-let parser_7 bits = "parser_7";;
-let parser_8 bits = "parser_8";;
-let parser_9 bits = "parser_9";;
-let parser_10 bits = "parser_10";;
-let parser_11 bits = "parser_11";;
-let parser_12 bits = "parser_12";;
-let parser_13 bits = "parser_13";;
-let parser_14 bits = "parser_14";;
-let parser_15 bits = "parser_15";;
-let parser_16 bits = "parser_16";;
-let parser_17 bits = "parser_17";;
+let parser_1 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(2240), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_1", "failed to match kernel structure"));;
+let parser_2 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(2496), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_2", "failed to match kernel structure"));;
+let parser_3 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(2688), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_3", "failed to match kernel structure"));;
+let parser_4 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(4416), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_4", "failed to match kernel structure"));;
+let parser_5 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(3392), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_5", "failed to match kernel structure"));;
+let parser_6 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(4416), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_6", "failed to match kernel structure"));;
+let parser_7 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(3264), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_7", "failed to match kernel structure"));;
+let parser_8 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(4288), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_8", "failed to match kernel structure"));;
+let parser_9 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(1728), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_9", "failed to match kernel structure"));;
+let parser_10 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(1728), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_10", "failed to match kernel structure"));;
+let parser_11 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(2528), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_11", "failed to match kernel structure"));;
+let parser_12 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(3392), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_12", "failed to match kernel structure"));;
+let parser_13 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(2528), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_13", "failed to match kernel structure"));;
+let parser_14 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(4288), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_14", "failed to match kernel structure"));;
+let parser_15 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(1696), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_15", "failed to match kernel structure"));;
+let parser_16 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(2624), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_16", "failed to match kernel structure"));;
+let parser_17 bits = bitmatch bits with
+  | { name : 128 : offset(0), string;
+    dev_addr : 256 : offset(1696), string } -> { name = name;
+    dev_addr = dev_addr }
+  | { _ } -> raise (ParseError ("net_device", "parser_17", "failed to match kernel structure"));;
 module StringMap = Map.Make(String);;
 let map = StringMap.empty;;
 let v = (parser_1, 1284);;
@@ -27,6 +96,8 @@ let v = (parser_2, 1092);;
 let map = StringMap.add "2.6.22-0.23.rc7.git6.fc8.ppc" v map;;
 let v = (parser_1, 1284);;
 let map = StringMap.add "2.6.21-1.3128.fc7.i686" v map;;
+let v = (parser_1, 1284);;
+let map = StringMap.add "2.6.21-1.3132.fc7.i686" v map;;
 let v = (parser_2, 1092);;
 let map = StringMap.add "2.6.21-1.3236.fc8.ppc" v map;;
 let v = (parser_1, 1116);;
@@ -47,12 +118,16 @@ let v = (parser_6, 2044);;
 let map = StringMap.add "2.6.22-0.23.rc7.git6.fc8.ppc64" v map;;
 let v = (parser_7, 1408);;
 let map = StringMap.add "2.6.21-1.3236.fc8.i686" v map;;
+let v = (parser_5, 1924);;
+let map = StringMap.add "2.6.21-1.3132.fc7.ppc64" v map;;
 let v = (parser_1, 1116);;
 let map = StringMap.add "2.6.21-1.3228.fc7.i686" v map;;
 let v = (parser_8, 2288);;
 let map = StringMap.add "2.6.24-9.fc9.x86_64" v map;;
 let v = (parser_6, 2044);;
 let map = StringMap.add "2.6.22-0.23.rc7.git6.fc8.ppc64" v map;;
+let v = (parser_5, 1924);;
+let map = StringMap.add "2.6.21-1.3132.fc7.ppc64" v map;;
 let v = (parser_1, 912);;
 let map = StringMap.add "2.6.18-1.2798.fc6.i586" v map;;
 let v = (parser_9, 1020);;
@@ -214,5 +289,10 @@ let map = StringMap.add "2.6.21-1.3209.fc8.ppc64" v map;;
 type kernel_version = string;;
 let known version = StringMap.mem version map;;
 let size version = let (_, size) = StringMap.find version map in size;;
-let get version bits =
+let of_bits version bits =
   let (parsefn, _) = StringMap.find version map in parsefn bits;;
+let get version mem addr =
+  let (parsefn, size) = StringMap.find version map in
+  let addr = Virt_mem_mmap.unsafe_addr_of_typed_addr addr in
+  let bytes = Virt_mem_mmap.get_bytes mem addr size in
+  let bits = Bitstring.bitstring_of_string bytes in parsefn bits;;