[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[Libguestfs] [PATCH] generator: Put all the daemon procedure numbers (proc_nr) into a single table.



Daemon 'proc_nr's have to be assigned monotonically and uniquely to
each daemon function.  However in practice it can be difficult to work
out which is the next free proc_nr.  Placing all of them into a single
table in a new file (proc_nr.ml) should make this easier.
---
 docs/guestfs-hacking.pod             |   3 +-
 generator/Makefile.am                |   3 +
 generator/README                     |   1 +
 generator/XDR.ml                     |   2 +-
 generator/actions.ml                 |  58 ++--
 generator/actions.mli                |   4 -
 generator/actions_augeas.ml          |  15 -
 generator/actions_core.ml            | 381 --------------------------
 generator/actions_core_deprecated.ml |  41 +--
 generator/actions_debug.ml           |   2 -
 generator/actions_hivex.ml           |  16 --
 generator/actions_tsk.ml             |   3 -
 generator/c.ml                       |   2 +-
 generator/checks.ml                  |  20 --
 generator/proc_nr.ml                 | 515 +++++++++++++++++++++++++++++++++++
 generator/proc_nr.mli                |  25 ++
 16 files changed, 581 insertions(+), 510 deletions(-)
 create mode 100644 generator/proc_nr.ml
 create mode 100644 generator/proc_nr.mli

diff --git a/docs/guestfs-hacking.pod b/docs/guestfs-hacking.pod
index 8f320cc..af23d1b 100644
--- a/docs/guestfs-hacking.pod
+++ b/docs/guestfs-hacking.pod
@@ -349,7 +349,8 @@ To add a new API action there are two changes:
 =item 1.
 
 You need to add a description of the call (name, parameters, return
-type, tests, documentation) to F<generator/actions_*.ml>.
+type, tests, documentation) to F<generator/actions_*.ml> and
+possibly F<generator/proc_nr.ml>.
 
 There are two sorts of API action, depending on whether the call goes
 through to the daemon in the appliance, or is serviced entirely by the
diff --git a/generator/Makefile.am b/generator/Makefile.am
index 38f92a1..cb69fe8 100644
--- a/generator/Makefile.am
+++ b/generator/Makefile.am
@@ -93,6 +93,8 @@ sources = \
 	pr.mli \
 	prepopts.ml \
 	prepopts.mli \
+	proc_nr.ml \
+	proc_nr.mli \
 	python.ml \
 	python.mli \
 	ruby.ml \
@@ -116,6 +118,7 @@ objects = \
 	common_utils.cmo \
 	types.cmo \
 	utils.cmo \
+	proc_nr.cmo \
 	actions_augeas.cmo \
 	actions_core.cmo \
 	actions_core_deprecated.cmo \
diff --git a/generator/README b/generator/README
index 879a68c..2e4f49d 100644
--- a/generator/README
+++ b/generator/README
@@ -28,6 +28,7 @@ everything is exported.
 Some notable files in this directory:
 
   actions_*.ml        The libguestfs API.
+  proc_nr.ml          Procedure numbers associated with each API.
   structs.ml          Structures returned by the API.
   c.ml                Generate C API.
   <lang>.ml           Generate bindings for <lang>.
diff --git a/generator/XDR.ml b/generator/XDR.ml
index 64f8a2d..575be46 100644
--- a/generator/XDR.ml
+++ b/generator/XDR.ml
@@ -187,7 +187,7 @@ let generate_xdr () =
   pr "};\n";
   pr "\n";
 
-  pr "const GUESTFS_MAX_PROC_NR = %d;\n" max_proc_nr;
+  pr "const GUESTFS_MAX_PROC_NR = %d;\n" Proc_nr.max_proc_nr;
   pr "\n";
 
   pr "/* The remote procedure call protocol. */\n";
diff --git a/generator/actions.ml b/generator/actions.ml
index de61ecf..ab48404 100644
--- a/generator/actions.ml
+++ b/generator/actions.ml
@@ -108,37 +108,43 @@ let non_daemon_functions, daemon_functions =
     List.map make_camel_case_if_not_set daemon_functions in
   non_daemon_functions, daemon_functions
 
-(* Before we add the non_daemon_functions and daemon_functions to
- * a single list, verify the proc_nr field which should be the only
- * difference between them.  (Note more detailed checking is done
- * in checks.ml).
+(* Verify that no proc_nr field is set.  These are added from
+ * [proc_nr.ml] and must not be present in the [actions_*.ml] files.
  *)
 let () =
-  List.iter (
-    function
-    | { name = name; proc_nr = None } ->
-      failwithf "daemon function %s should have proc_nr = Some n > 0" name
-    | { name = name; proc_nr = Some n } when n <= 0 ->
-      failwithf "daemon function %s should have proc_nr = Some n > 0" name
-    | { proc_nr = Some _ } -> ()
-  ) daemon_functions;
-
-  List.iter (
-    function
-    | { name = name; proc_nr = Some _ } ->
-      failwithf "non-daemon function %s should have proc_nr = None" name
+  let check_no_proc_nr = function
     | { proc_nr = None } -> ()
-  ) non_daemon_functions
+    | { name = name; proc_nr = Some _ } ->
+       failwithf "definition of %s must not include proc_nr, use proc_nr.ml to define procedure numbers" name
+  in
+  List.iter check_no_proc_nr non_daemon_functions;
+  List.iter check_no_proc_nr daemon_functions
 
-(* This is used to generate the lib/MAX_PROC_NR file which
- * contains the maximum procedure number, a surrogate for the
- * ABI version number.  See lib/Makefile.am for the details.
+(* Now add proc_nr to all daemon functions using the mapping table
+ * from [proc_nr.ml].
  *)
-let max_proc_nr =
-  let proc_nrs = List.map (
-    function { proc_nr = Some n } -> n | { proc_nr = None } -> assert false
-  ) daemon_functions in
-  List.fold_left max 0 proc_nrs
+let daemon_functions =
+  let assoc =
+    let map = List.map (fun (nr, name) -> (name, nr)) Proc_nr.proc_nr in
+    fun name ->
+      try List.assoc name map
+      with Not_found ->
+        failwithf "no proc_nr listed for %s" name
+  in
+  List.map (
+    fun f -> { f with proc_nr = Some (assoc f.name) }
+  ) daemon_functions
+
+(* Check there are no entries in the proc_nr table which aren't
+ * associated with a daemon function.
+ *)
+let () =
+  List.iter (
+    fun (_, name) ->
+      if not (List.exists (fun { name = n } -> name = n) daemon_functions) then
+        failwithf "proc_nr entry for %s does not correspond to a daemon function"
+                  name
+  ) Proc_nr.proc_nr
 
 (* All functions. *)
 let actions = non_daemon_functions @ daemon_functions
diff --git a/generator/actions.mli b/generator/actions.mli
index 7ac57b6..9ee37ab 100644
--- a/generator/actions.mli
+++ b/generator/actions.mli
@@ -52,7 +52,3 @@ val is_documented : Types.action -> bool
 
 val test_functions : Types.action list
 (** Internal test functions used to test the language bindings. *)
-
-val max_proc_nr : int
-(** The largest procedure number used (also saved in [lib/MAX_PROC_NR] and
-    used as the minor version number of the shared library). *)
diff --git a/generator/actions_augeas.ml b/generator/actions_augeas.ml
index cc77c7f..5e905b2 100644
--- a/generator/actions_augeas.ml
+++ b/generator/actions_augeas.ml
@@ -26,7 +26,6 @@ let daemon_functions = [
   { defaults with
     name = "aug_init"; added = (0, 0, 7);
     style = RErr, [Pathname "root"; Int "flags"], [];
-    proc_nr = Some 16;
     tests = [
       InitBasicFS, Always, TestResultString (
         [["mkdir"; "/etc"];
@@ -91,7 +90,6 @@ To find out more about Augeas, see L<http://augeas.net/>." };
   { defaults with
     name = "aug_close"; added = (0, 0, 7);
     style = RErr, [], [];
-    proc_nr = Some 26;
     shortdesc = "close the current Augeas handle";
     longdesc = "\
 Close the current Augeas handle and free up any resources
@@ -102,7 +100,6 @@ Augeas functions." };
   { defaults with
     name = "aug_defvar"; added = (0, 0, 7);
     style = RInt "nrnodes", [String "name"; OptString "expr"], [];
-    proc_nr = Some 17;
     shortdesc = "define an Augeas variable";
     longdesc = "\
 Defines an Augeas variable C<name> whose value is the result
@@ -115,7 +112,6 @@ C<0> if C<expr> evaluates to something which is not a nodeset." };
   { defaults with
     name = "aug_defnode"; added = (0, 0, 7);
     style = RStruct ("nrnodescreated", "int_bool"), [String "name"; String "expr"; String "val"], [];
-    proc_nr = Some 18;
     shortdesc = "define an Augeas node";
     longdesc = "\
 Defines a variable C<name> whose value is the result of
@@ -132,7 +128,6 @@ if a node was created." };
   { defaults with
     name = "aug_get"; added = (0, 0, 7);
     style = RString "val", [String "augpath"], [];
-    proc_nr = Some 19;
     shortdesc = "look up the value of an Augeas path";
     longdesc = "\
 Look up the value associated with C<path>.  If C<path>
@@ -141,7 +136,6 @@ matches exactly one node, the C<value> is returned." };
   { defaults with
     name = "aug_set"; added = (0, 0, 7);
     style = RErr, [String "augpath"; String "val"], [];
-    proc_nr = Some 20;
     tests = [
       InitBasicFS, Always, TestResultString (
         [["mkdir"; "/etc"];
@@ -162,7 +156,6 @@ C<guestfs_aug_clear> call." };
   { defaults with
     name = "aug_insert"; added = (0, 0, 7);
     style = RErr, [String "augpath"; String "label"; Bool "before"], [];
-    proc_nr = Some 21;
     tests = [
       InitBasicFS, Always, TestResultString (
         [["mkdir"; "/etc"];
@@ -189,7 +182,6 @@ with a bracketed index C<[N]>." };
   { defaults with
     name = "aug_rm"; added = (0, 0, 7);
     style = RInt "nrnodes", [String "augpath"], [];
-    proc_nr = Some 22;
     shortdesc = "remove an Augeas path";
     longdesc = "\
 Remove C<path> and all of its children.
@@ -199,7 +191,6 @@ On success this returns the number of entries which were removed." };
   { defaults with
     name = "aug_mv"; added = (0, 0, 7);
     style = RErr, [String "src"; String "dest"], [];
-    proc_nr = Some 23;
     shortdesc = "move Augeas node";
     longdesc = "\
 Move the node C<src> to C<dest>.  C<src> must match exactly
@@ -208,7 +199,6 @@ one node.  C<dest> is overwritten if it exists." };
   { defaults with
     name = "aug_match"; added = (0, 0, 7);
     style = RStringList "matches", [String "augpath"], [];
-    proc_nr = Some 24;
     shortdesc = "return Augeas nodes which match augpath";
     longdesc = "\
 Returns a list of paths which match the path expression C<path>.
@@ -218,7 +208,6 @@ exactly one node in the current tree." };
   { defaults with
     name = "aug_save"; added = (0, 0, 7);
     style = RErr, [], [];
-    proc_nr = Some 25;
     shortdesc = "write all pending Augeas changes to disk";
     longdesc = "\
 This writes all pending changes to disk.
@@ -229,7 +218,6 @@ how files are saved." };
   { defaults with
     name = "aug_load"; added = (0, 0, 7);
     style = RErr, [], [];
-    proc_nr = Some 27;
     shortdesc = "load files into the tree";
     longdesc = "\
 Load files into the tree.
@@ -240,7 +228,6 @@ details." };
   { defaults with
     name = "aug_ls"; added = (0, 0, 8);
     style = RStringList "matches", [String "augpath"], [];
-    proc_nr = Some 28;
     tests = [
       InitBasicFS, Always, TestResult (
         [["mkdir"; "/etc"];
@@ -257,7 +244,6 @@ C<path/*> and sorting the resulting nodes into alphabetical order." };
   { defaults with
     name = "aug_clear"; added = (1, 3, 4);
     style = RErr, [String "augpath"], [];
-    proc_nr = Some 239;
     shortdesc = "clear Augeas path";
     longdesc = "\
 Set the value associated with C<path> to C<NULL>.  This
@@ -266,7 +252,6 @@ is the same as the L<augtool(1)> C<clear> command." };
   { defaults with
     name = "aug_transform"; added = (1, 35, 2);
     style = RErr, [String "lens"; String "file"], [ OBool "remove"];
-    proc_nr = Some 469;
     shortdesc = "add/remove an Augeas lens transformation";
     longdesc = "\
 Add an Augeas transformation for the specified C<lens> so it can
diff --git a/generator/actions_core.ml b/generator/actions_core.ml
index 124a337..66692a0 100644
--- a/generator/actions_core.ml
+++ b/generator/actions_core.ml
@@ -1760,7 +1760,6 @@ let daemon_functions = [
   { defaults with
     name = "mount"; added = (0, 0, 3);
     style = RErr, [Mountable "mountable"; String "mountpoint"], [];
-    proc_nr = Some 1;
     tests = [
       InitEmpty, Always, TestResultString (
         [["part_disk"; "/dev/sda"; "mbr"];
@@ -1796,7 +1795,6 @@ first parameter if you don't want any options)." };
   { defaults with
     name = "sync"; added = (0, 0, 3);
     style = RErr, [], [];
-    proc_nr = Some 2;
     tests = [
       InitEmpty, Always, TestRun [["sync"]], []
     ];
@@ -1811,7 +1809,6 @@ closing the handle." };
   { defaults with
     name = "touch"; added = (0, 0, 3);
     style = RErr, [Pathname "path"], [];
-    proc_nr = Some 3;
     tests = [
       InitScratchFS, Always, TestResultTrue (
         [["touch"; "/touch"];
@@ -1829,7 +1826,6 @@ file types such as directories, symbolic links, block special etc." };
   { defaults with
     name = "ll"; added = (0, 0, 4);
     style = RString "listing", [Pathname "directory"], [];
-    proc_nr = Some 5;
     test_excuse = "tricky to test because it depends on the exact format of the 'ls -l' command, which changed between Fedora 10 and Fedora 11";
     shortdesc = "list the files in a directory (long format)";
     longdesc = "\
@@ -1842,7 +1838,6 @@ is I<not> intended that you try to parse the output string." };
   { defaults with
     name = "list_devices"; added = (0, 0, 4);
     style = RStringList "devices", [], [];
-    proc_nr = Some 7;
     tests = [
       InitEmpty, Always, TestResult (
         [["list_devices"]],
@@ -1859,7 +1854,6 @@ See also C<guestfs_list_filesystems>." };
   { defaults with
     name = "list_partitions"; added = (0, 0, 4);
     style = RStringList "partitions", [], [];
-    proc_nr = Some 8;
     tests = [
       InitBasicFS, Always, TestResult (
         [["list_partitions"]],
@@ -1886,7 +1880,6 @@ See also C<guestfs_list_filesystems>." };
   { defaults with
     name = "pvs"; added = (0, 0, 4);
     style = RStringList "physvols", [], [];
-    proc_nr = Some 9;
     optional = Some "lvm2";
     tests = [
       InitBasicFSonLVM, Always, TestResult (
@@ -1915,7 +1908,6 @@ See also C<guestfs_pvs_full>." };
   { defaults with
     name = "vgs"; added = (0, 0, 4);
     style = RStringList "volgroups", [], [];
-    proc_nr = Some 10;
     optional = Some "lvm2";
     tests = [
       InitBasicFSonLVM, Always, TestResult (
@@ -1946,7 +1938,6 @@ See also C<guestfs_vgs_full>." };
   { defaults with
     name = "lvs"; added = (0, 0, 4);
     style = RStringList "logvols", [], [];
-    proc_nr = Some 11;
     optional = Some "lvm2";
     tests = [
       InitBasicFSonLVM, Always, TestResult (
@@ -1981,7 +1972,6 @@ See also C<guestfs_lvs_full>, C<guestfs_list_filesystems>." };
   { defaults with
     name = "pvs_full"; added = (0, 0, 4);
     style = RStructList ("physvols", "lvm_pv"), [], [];
-    proc_nr = Some 12;
     optional = Some "lvm2";
     shortdesc = "list the LVM physical volumes (PVs)";
     longdesc = "\
@@ -1991,7 +1981,6 @@ of the L<pvs(8)> command.  The \"full\" version includes all fields." };
   { defaults with
     name = "vgs_full"; added = (0, 0, 4);
     style = RStructList ("volgroups", "lvm_vg"), [], [];
-    proc_nr = Some 13;
     optional = Some "lvm2";
     shortdesc = "list the LVM volume groups (VGs)";
     longdesc = "\
@@ -2001,7 +1990,6 @@ of the L<vgs(8)> command.  The \"full\" version includes all fields." };
   { defaults with
     name = "lvs_full"; added = (0, 0, 4);
     style = RStructList ("logvols", "lvm_lv"), [], [];
-    proc_nr = Some 14;
     optional = Some "lvm2";
     shortdesc = "list the LVM logical volumes (LVs)";
     longdesc = "\
@@ -2011,7 +1999,6 @@ of the L<lvs(8)> command.  The \"full\" version includes all fields." };
   { defaults with
     name = "rm"; added = (0, 0, 8);
     style = RErr, [Pathname "path"], [];
-    proc_nr = Some 29;
     tests = [
       InitScratchFS, Always, TestRun
         [["mkdir"; "/rm"];
@@ -2030,7 +2017,6 @@ Remove the single file C<path>." };
   { defaults with
     name = "rmdir"; added = (0, 0, 8);
     style = RErr, [Pathname "path"], [];
-    proc_nr = Some 30;
     tests = [
       InitScratchFS, Always, TestRun
         [["mkdir"; "/rmdir"];
@@ -2049,7 +2035,6 @@ Remove the single directory C<path>." };
   { defaults with
     name = "rm_rf"; added = (0, 0, 8);
     style = RErr, [Pathname "path"], [];
-    proc_nr = Some 31;
     tests = [
       InitScratchFS, Always, TestResultFalse
         [["mkdir"; "/rm_rf"];
@@ -2067,7 +2052,6 @@ command." };
   { defaults with
     name = "mkdir"; added = (0, 0, 8);
     style = RErr, [Pathname "path"], [];
-    proc_nr = Some 32;
     tests = [
       InitScratchFS, Always, TestResultTrue
         [["mkdir"; "/mkdir"];
@@ -2082,7 +2066,6 @@ Create a directory named C<path>." };
   { defaults with
     name = "mkdir_p"; added = (0, 0, 8);
     style = RErr, [Pathname "path"], [];
-    proc_nr = Some 33;
     tests = [
       InitScratchFS, Always, TestResultTrue
         [["mkdir_p"; "/mkdir_p/foo/bar"];
@@ -2109,7 +2092,6 @@ as necessary.  This is like the C<mkdir -p> shell command." };
   { defaults with
     name = "chmod"; added = (0, 0, 8);
     style = RErr, [Int "mode"; Pathname "path"], [];
-    proc_nr = Some 34;
     shortdesc = "change file mode";
     longdesc = "\
 Change the mode (permissions) of C<path> to C<mode>.  Only
@@ -2124,7 +2106,6 @@ The mode actually set is affected by the umask." };
   { defaults with
     name = "chown"; added = (0, 0, 8);
     style = RErr, [Int "owner"; Int "group"; Pathname "path"], [];
-    proc_nr = Some 35;
     shortdesc = "change file owner and group";
     longdesc = "\
 Change the file owner to C<owner> and group to C<group>.
@@ -2136,7 +2117,6 @@ yourself (Augeas support makes this relatively easy)." };
   { defaults with
     name = "exists"; added = (0, 0, 8);
     style = RBool "existsflag", [Pathname "path"], [];
-    proc_nr = Some 36;
     tests = [
       InitISOFS, Always, TestResultTrue (
         [["exists"; "/empty"]]), [];
@@ -2153,7 +2133,6 @@ See also C<guestfs_is_file>, C<guestfs_is_dir>, C<guestfs_stat>." };
   { defaults with
     name = "is_file"; added = (0, 0, 8);
     style = RBool "fileflag", [Pathname "path"], [OBool "followsymlinks"];
-    proc_nr = Some 37;
     once_had_no_optargs = true;
     tests = [
       InitISOFS, Always, TestResultTrue (
@@ -2178,7 +2157,6 @@ See also C<guestfs_stat>." };
   { defaults with
     name = "is_dir"; added = (0, 0, 8);
     style = RBool "dirflag", [Pathname "path"], [OBool "followsymlinks"];
-    proc_nr = Some 38;
     once_had_no_optargs = true;
     tests = [
       InitISOFS, Always, TestResultFalse (
@@ -2201,7 +2179,6 @@ See also C<guestfs_stat>." };
   { defaults with
     name = "pvcreate"; added = (0, 0, 8);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 39;
     optional = Some "lvm2";
     tests = [
       InitEmpty, Always, TestResult (
@@ -2224,7 +2201,6 @@ as F</dev/sda1>." };
   { defaults with
     name = "vgcreate"; added = (0, 0, 8);
     style = RErr, [String "volgroup"; DeviceList "physvols"], [];
-    proc_nr = Some 40;
     optional = Some "lvm2";
     tests = [
       InitEmpty, Always, TestResult (
@@ -2257,7 +2233,6 @@ from the non-empty list of physical volumes C<physvols>." };
   { defaults with
     name = "lvcreate"; added = (0, 0, 8);
     style = RErr, [String "logvol"; String "volgroup"; Int "mbytes"], [];
-    proc_nr = Some 41;
     optional = Some "lvm2";
     tests = [
       InitEmpty, Always, TestResult (
@@ -2286,7 +2261,6 @@ on the volume group C<volgroup>, with C<size> megabytes." };
   { defaults with
     name = "write_file"; added = (0, 0, 8);
     style = RErr, [Pathname "path"; String "content"; Int "size"], [];
-    proc_nr = Some 44;
     protocol_limit_warning = true; deprecated_by = Some "write";
     (* Regression test for RHBZ#597135. *)
     tests = [
@@ -2309,7 +2283,6 @@ characters does I<not> work, even if the length is specified." };
   { defaults with
     name = "umount"; added = (0, 0, 8);
     style = RErr, [Dev_or_Path "pathordevice"], [OBool "force"; OBool "lazyunmount"];
-    proc_nr = Some 45;
     fish_alias = ["unmount"];
     once_had_no_optargs = true;
     tests = [
@@ -2334,7 +2307,6 @@ contains the filesystem." };
   { defaults with
     name = "mounts"; added = (0, 0, 8);
     style = RStringList "devices", [], [];
-    proc_nr = Some 46;
     tests = [
       InitScratchFS, Always, TestResult (
         [["mounts"]], "is_device_list (ret, 1, \"/dev/sdb1\")"), []
@@ -2351,7 +2323,6 @@ See also: C<guestfs_mountpoints>" };
   { defaults with
     name = "umount_all"; added = (0, 0, 8);
     style = RErr, [], [];
-    proc_nr = Some 47;
     fish_alias = ["unmount-all"];
     tests = [
       InitScratchFS, Always, TestResult (
@@ -2384,7 +2355,6 @@ Some internal mounts are not unmounted by this call." };
   { defaults with
     name = "lvm_remove_all"; added = (0, 0, 8);
     style = RErr, [], [];
-    proc_nr = Some 48;
     optional = Some "lvm2";
     shortdesc = "remove all LVM LVs, VGs and PVs";
     longdesc = "\
@@ -2394,7 +2364,6 @@ and physical volumes." };
   { defaults with
     name = "file"; added = (1, 9, 1);
     style = RString "description", [Dev_or_Path "path"], [];
-    proc_nr = Some 49;
     tests = [
       InitISOFS, Always, TestResultString (
         [["file"; "/empty"]], "empty"), [];
@@ -2429,7 +2398,6 @@ C<guestfs_is_file>, C<guestfs_is_blockdev> (etc), C<guestfs_is_zero>." };
   { defaults with
     name = "command"; added = (1, 9, 1);
     style = RString "output", [StringList "arguments"], [];
-    proc_nr = Some 50;
     protocol_limit_warning = true;
     tests = [
       InitScratchFS, IfNotCrossAppliance, TestResultString (
@@ -2533,7 +2501,6 @@ locations." };
   { defaults with
     name = "command_lines"; added = (1, 9, 1);
     style = RStringList "lines", [StringList "arguments"], [];
-    proc_nr = Some 51;
     protocol_limit_warning = true;
     tests = [
       InitScratchFS, IfNotCrossAppliance, TestResult (
@@ -2613,7 +2580,6 @@ See also: C<guestfs_sh_lines>" };
   { defaults with
     name = "statvfs"; added = (1, 9, 2);
     style = RStruct ("statbuf", "statvfs"), [Pathname "path"], [];
-    proc_nr = Some 54;
     tests = [
       InitISOFS, Always, TestResult (
         [["statvfs"; "/"]], "ret->namemax == 255"), []
@@ -2629,7 +2595,6 @@ This is the same as the L<statvfs(2)> system call." };
   { defaults with
     name = "tune2fs_l"; added = (1, 9, 2);
     style = RHashtable "superblock", [Device "device"], [];
-    proc_nr = Some 55;
     tests = [
       InitScratchFS, Always, TestResult (
         [["tune2fs_l"; "/dev/sdb1"]],
@@ -2649,7 +2614,6 @@ that libguestfs was built against, and the filesystem itself." };
   { defaults with
     name = "blockdev_setro"; added = (1, 9, 3);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 56;
     tests = [
       InitEmpty, Always, TestResultTrue (
         [["blockdev_setro"; "/dev/sda"];
@@ -2664,7 +2628,6 @@ This uses the L<blockdev(8)> command." };
   { defaults with
     name = "blockdev_setrw"; added = (1, 9, 3);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 57;
     tests = [
       InitEmpty, Always, TestResultFalse (
         [["blockdev_setrw"; "/dev/sda"];
@@ -2679,7 +2642,6 @@ This uses the L<blockdev(8)> command." };
   { defaults with
     name = "blockdev_getro"; added = (1, 9, 3);
     style = RBool "ro", [Device "device"], [];
-    proc_nr = Some 58;
     tests = [
       InitEmpty, Always, TestResultTrue (
         [["blockdev_setro"; "/dev/sda"];
@@ -2695,7 +2657,6 @@ This uses the L<blockdev(8)> command." };
   { defaults with
     name = "blockdev_getss"; added = (1, 9, 3);
     style = RInt "sectorsize", [Device "device"], [];
-    proc_nr = Some 59;
     tests = [
       InitEmpty, Always, TestResult (
         [["blockdev_getss"; "/dev/sda"]], "ret == 512"), []
@@ -2713,7 +2674,6 @@ This uses the L<blockdev(8)> command." };
   { defaults with
     name = "blockdev_getbsz"; added = (1, 9, 3);
     style = RInt "blocksize", [Device "device"], [];
-    proc_nr = Some 60;
     test_excuse = "cannot be tested because output differs depending on page size";
     shortdesc = "get blocksize of block device";
     longdesc = "\
@@ -2730,7 +2690,6 @@ This uses the L<blockdev(8)> command." };
   { defaults with
     name = "blockdev_getsz"; added = (1, 9, 3);
     style = RInt64 "sizeinsectors", [Device "device"], [];
-    proc_nr = Some 62;
     tests = [
       InitEmpty, Always, TestResult (
         [["blockdev_getsz"; "/dev/sda"]],
@@ -2750,7 +2709,6 @@ This uses the L<blockdev(8)> command." };
   { defaults with
     name = "blockdev_getsize64"; added = (1, 9, 3);
     style = RInt64 "sizeinbytes", [Device "device"], [];
-    proc_nr = Some 63;
     tests = [
       InitEmpty, Always, TestResult (
         [["blockdev_getsize64"; "/dev/sda"]],
@@ -2767,7 +2725,6 @@ This uses the L<blockdev(8)> command." };
   { defaults with
     name = "blockdev_flushbufs"; added = (1, 9, 3);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 64;
     tests = [
       InitEmpty, Always, TestRun
         [["blockdev_flushbufs"; "/dev/sda"]], []
@@ -2782,7 +2739,6 @@ This uses the L<blockdev(8)> command." };
   { defaults with
     name = "blockdev_rereadpt"; added = (1, 9, 3);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 65;
     tests = [
       InitEmpty, Always, TestRun
         [["blockdev_rereadpt"; "/dev/sda"]], []
@@ -2796,7 +2752,6 @@ This uses the L<blockdev(8)> command." };
   { defaults with
     name = "upload"; added = (1, 0, 2);
     style = RErr, [FileIn "filename"; Dev_or_Path "remotefilename"], [];
-    proc_nr = Some 66;
     progress = true; cancellable = true;
     tests = [
       InitScratchFS, Always, TestResultString (
@@ -2818,7 +2773,6 @@ See also C<guestfs_download>." };
   { defaults with
     name = "download"; added = (1, 0, 2);
     style = RErr, [Dev_or_Path "remotefilename"; FileOut "filename"], [];
-    proc_nr = Some 67;
     progress = true; cancellable = true;
     tests = [
       InitScratchFS, Always, TestResultString (
@@ -2842,7 +2796,6 @@ See also C<guestfs_upload>, C<guestfs_cat>." };
   { defaults with
     name = "checksum"; added = (1, 0, 2);
     style = RString "checksum", [String "csumtype"; Pathname "path"], [];
-    proc_nr = Some 68;
     tests = [
       InitISOFS, Always, TestResultString (
         [["checksum"; "crc"; "/known-3"]], "2891671662"), [];
@@ -2914,7 +2867,6 @@ To get the checksums for many files, use C<guestfs_checksums_out>." };
   { defaults with
     name = "tar_in"; added = (1, 0, 3);
     style = RErr, [FileIn "tarfile"; Pathname "directory"], [OString "compress"; OBool "xattrs"; OBool "selinux"; OBool "acls"];
-    proc_nr = Some 69;
     once_had_no_optargs = true;
     cancellable = true;
     tests = [
@@ -2963,7 +2915,6 @@ If set to true, POSIX ACLs are restored from the tar file.
   { defaults with
     name = "tar_out"; added = (1, 0, 3);
     style = RErr, [String "directory"; FileOut "tarfile"], [OString "compress"; OBool "numericowner"; OStringList "excludes"; OBool "xattrs"; OBool "selinux"; OBool "acls"];
-    proc_nr = Some 70;
     once_had_no_optargs = true;
     cancellable = true;
     shortdesc = "pack directory into tarfile";
@@ -3009,7 +2960,6 @@ If set to true, POSIX ACLs are saved in the output tar.
   { defaults with
     name = "mount_ro"; added = (1, 0, 10);
     style = RErr, [Mountable "mountable"; String "mountpoint"], [];
-    proc_nr = Some 73;
     tests = [
       InitBasicFS, Always, TestLastFail (
         [["umount"; "/"; "false"; "false"];
@@ -3029,7 +2979,6 @@ mounts the filesystem with the read-only (I<-o ro>) flag." };
   { defaults with
     name = "mount_options"; added = (1, 0, 10);
     style = RErr, [String "options"; Mountable "mountable"; String "mountpoint"], [];
-    proc_nr = Some 74;
     shortdesc = "mount a guest disk with mount options";
     longdesc = "\
 This is the same as the C<guestfs_mount> command, but it
@@ -3043,7 +2992,6 @@ the filesystem uses)." };
   { defaults with
     name = "mount_vfs"; added = (1, 0, 10);
     style = RErr, [String "options"; String "vfstype"; Mountable "mountable"; String "mountpoint"], [];
-    proc_nr = Some 75;
     shortdesc = "mount a guest disk with mount options and vfstype";
     longdesc = "\
 This is the same as the C<guestfs_mount> command, but it
@@ -3053,7 +3001,6 @@ as for the L<mount(8)> I<-o> and I<-t> flags." };
   { defaults with
     name = "lvremove"; added = (1, 0, 13);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 77;
     optional = Some "lvm2";
     tests = [
       InitEmpty, Always, TestResult (
@@ -3095,7 +3042,6 @@ the VG name, F</dev/VG>." };
   { defaults with
     name = "vgremove"; added = (1, 0, 13);
     style = RErr, [String "vgname"], [];
-    proc_nr = Some 78;
     optional = Some "lvm2";
     tests = [
       InitEmpty, Always, TestResult (
@@ -3127,7 +3073,6 @@ group (if any)." };
   { defaults with
     name = "pvremove"; added = (1, 0, 13);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 79;
     optional = Some "lvm2";
     tests = [
       InitEmpty, Always, TestResult (
@@ -3173,7 +3118,6 @@ to remove those first." };
   { defaults with
     name = "fsck"; added = (1, 0, 16);
     style = RInt "status", [String "fstype"; Device "device"], [];
-    proc_nr = Some 84;
     fish_output = Some FishOutputHexadecimal;
     tests = [
       InitBasicFS, Always, TestResult (
@@ -3217,7 +3161,6 @@ This command is entirely equivalent to running C<fsck -a -t fstype device>." };
   { defaults with
     name = "zero"; added = (1, 0, 16);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 85;
     progress = true;
     tests = [
       InitBasicFS, Always, TestRun (
@@ -3242,7 +3185,6 @@ C<guestfs_is_zero_device>" };
   { defaults with
     name = "grub_install"; added = (1, 0, 17);
     style = RErr, [Pathname "root"; Device "device"], [];
-    proc_nr = Some 86;
     optional = Some "grub";
     (* See:
      * https://bugzilla.redhat.com/show_bug.cgi?id=484986
@@ -3296,7 +3238,6 @@ replacing F</dev/vda> with the name of the installation device.
   { defaults with
     name = "cp"; added = (1, 0, 18);
     style = RErr, [Pathname "src"; Pathname "dest"], [];
-    proc_nr = Some 87;
     tests = [
       InitScratchFS, Always, TestResultString (
         [["mkdir"; "/cp"];
@@ -3323,7 +3264,6 @@ either a destination filename or destination directory." };
   { defaults with
     name = "cp_a"; added = (1, 0, 18);
     style = RErr, [Pathname "src"; Pathname "dest"], [];
-    proc_nr = Some 88;
     tests = [
       InitScratchFS, Always, TestResultString (
         [["mkdir"; "/cp_a1"];
@@ -3340,7 +3280,6 @@ recursively using the C<cp -a> command." };
   { defaults with
     name = "mv"; added = (1, 0, 18);
     style = RErr, [Pathname "src"; Pathname "dest"], [];
-    proc_nr = Some 89;
     tests = [
       InitScratchFS, Always, TestResultString (
         [["mkdir"; "/mv"];
@@ -3363,7 +3302,6 @@ See also: C<guestfs_rename>." };
   { defaults with
     name = "drop_caches"; added = (1, 0, 18);
     style = RErr, [Int "whattodrop"], [];
-    proc_nr = Some 90;
     tests = [
       InitEmpty, Always, TestRun (
         [["drop_caches"; "3"]]), []
@@ -3383,7 +3321,6 @@ so that the maximum guest memory is freed." };
   { defaults with
     name = "dmesg"; added = (1, 0, 18);
     style = RString "kmsgs", [], [];
-    proc_nr = Some 91;
     tests = [
       InitEmpty, Always, TestRun (
         [["dmesg"]]), []
@@ -3402,7 +3339,6 @@ running the program." };
   { defaults with
     name = "ping_daemon"; added = (1, 0, 18);
     style = RErr, [], [];
-    proc_nr = Some 92;
     tests = [
       InitEmpty, Always, TestRun (
         [["ping_daemon"]]), []
@@ -3417,7 +3353,6 @@ or attached block device(s) in any other way." };
   { defaults with
     name = "equal"; added = (1, 0, 18);
     style = RBool "equality", [Pathname "file1"; Pathname "file2"], [];
-    proc_nr = Some 93;
     tests = [
       InitScratchFS, Always, TestResultTrue (
         [["mkdir"; "/equal"];
@@ -3443,7 +3378,6 @@ The external L<cmp(1)> program is used for the comparison." };
   { defaults with
     name = "strings"; added = (1, 0, 22);
     style = RStringList "stringsout", [Pathname "path"], [];
-    proc_nr = Some 94;
     protocol_limit_warning = true;
     tests = [
       InitISOFS, Always, TestResult (
@@ -3468,7 +3402,6 @@ version of libguestfs, but see L<guestfs(3)/CVE-2014-8484>." };
   { defaults with
     name = "strings_e"; added = (1, 0, 22);
     style = RStringList "stringsout", [String "encoding"; Pathname "path"], [];
-    proc_nr = Some 95;
     protocol_limit_warning = true;
     tests = [
       InitISOFS, Always, TestResult (
@@ -3527,7 +3460,6 @@ version of libguestfs, but see L<guestfs(3)/CVE-2014-8484>." };
   { defaults with
     name = "hexdump"; added = (1, 0, 22);
     style = RString "dump", [Pathname "path"], [];
-    proc_nr = Some 96;
     protocol_limit_warning = true;
     tests = [
       InitISOFS, Always, TestResultString (
@@ -3549,7 +3481,6 @@ the human-readable, canonical hex dump of the file." };
   { defaults with
     name = "zerofree"; added = (1, 0, 26);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 97;
     optional = Some "zerofree";
     tests = [
       InitNone, Always, TestResultString (
@@ -3578,7 +3509,6 @@ or data on the filesystem." };
   { defaults with
     name = "pvresize"; added = (1, 0, 26);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 98;
     optional = Some "lvm2";
     shortdesc = "resize an LVM physical volume";
     longdesc = "\
@@ -3588,7 +3518,6 @@ volume to match the new size of the underlying device." };
   { defaults with
     name = "sfdisk_kernel_geometry"; added = (1, 0, 26);
     style = RString "partitions", [Device "device"], [];
-    proc_nr = Some 101;
     shortdesc = "display the kernel geometry";
     longdesc = "\
 This displays the kernel's idea of the geometry of C<device>.
@@ -3599,7 +3528,6 @@ be parsed." };
   { defaults with
     name = "sfdisk_disk_geometry"; added = (1, 0, 26);
     style = RString "partitions", [Device "device"], [];
-    proc_nr = Some 102;
     shortdesc = "display the disk geometry from the partition table";
     longdesc = "\
 This displays the disk geometry of C<device> read from the
@@ -3613,7 +3541,6 @@ be parsed." };
   { defaults with
     name = "vg_activate_all"; added = (1, 0, 26);
     style = RErr, [Bool "activate"], [];
-    proc_nr = Some 103;
     optional = Some "lvm2";
     shortdesc = "activate or deactivate all volume groups";
     longdesc = "\
@@ -3625,7 +3552,6 @@ This command is the same as running C<vgchange -a y|n>" };
   { defaults with
     name = "vg_activate"; added = (1, 0, 26);
     style = RErr, [Bool "activate"; StringList "volgroups"], [];
-    proc_nr = Some 104;
     optional = Some "lvm2";
     shortdesc = "activate or deactivate some volume groups";
     longdesc = "\
@@ -3640,7 +3566,6 @@ are activated or deactivated." };
   { defaults with
     name = "lvresize"; added = (1, 0, 27);
     style = RErr, [Device "device"; Int "mbytes"], [];
-    proc_nr = Some 105;
     optional = Some "lvm2";
     tests = [
       InitNone, Always, TestResultString (
@@ -3676,7 +3601,6 @@ is lost." };
   { defaults with
     name = "resize2fs"; added = (1, 0, 27);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 106;
     shortdesc = "resize an ext2, ext3 or ext4 filesystem";
     longdesc = "\
 This resizes an ext2, ext3 or ext4 filesystem to match the size of
@@ -3687,7 +3611,6 @@ See also L<guestfs(3)/RESIZE2FS ERRORS>." };
   { defaults with
     name = "sleep"; added = (1, 0, 41);
     style = RErr, [Int "secs"], [];
-    proc_nr = Some 109;
     tests = [
       InitNone, Always, TestRun (
         [["sleep"; "1"]]), []
@@ -3699,7 +3622,6 @@ Sleep for C<secs> seconds." };
   { defaults with
     name = "ntfs_3g_probe"; added = (1, 0, 43);
     style = RInt "status", [Bool "rw"; Device "device"], [];
-    proc_nr = Some 110;
     optional = Some "ntfs3g";
     tests = [
       InitNone, Always, TestResult (
@@ -3728,7 +3650,6 @@ L<ntfs-3g.probe(8)> manual page." };
   { defaults with
     name = "sh"; added = (1, 0, 50);
     style = RString "output", [String "command"], [];
-    proc_nr = Some 111;
     shortdesc = "run a command via the shell";
     longdesc = "\
 This call runs a command from the guest filesystem via the
@@ -3747,7 +3668,6 @@ All the provisos about C<guestfs_command> apply to this call." };
   { defaults with
     name = "sh_lines"; added = (1, 0, 50);
     style = RStringList "lines", [String "command"], [];
-    proc_nr = Some 112;
     shortdesc = "run a command via the shell returning lines";
     longdesc = "\
 This is the same as C<guestfs_sh>, but splits the result
@@ -3763,7 +3683,6 @@ See also: C<guestfs_command_lines>" };
      * hence no "."-relative names.
      *)
     style = RStringList "paths", [Pathname "pattern"], [OBool "directoryslash"];
-    proc_nr = Some 113;
     once_had_no_optargs = true;
     tests = [
       InitScratchFS, Always, TestResult (
@@ -3815,7 +3734,6 @@ C<guestfs_list_partitions> etc functions instead." };
   { defaults with
     name = "scrub_device"; added = (1, 0, 52);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 114;
     optional = Some "scrub";
     tests = [
       InitNone, Always, TestRun (	(* use /dev/sdc because it's smaller *)
@@ -3832,7 +3750,6 @@ manual page for more details." };
   { defaults with
     name = "scrub_file"; added = (1, 0, 52);
     style = RErr, [Pathname "file"], [];
-    proc_nr = Some 115;
     optional = Some "scrub";
     tests = [
       InitScratchFS, Always, TestRun (
@@ -3863,7 +3780,6 @@ manual page for more details." };
   { defaults with
     name = "scrub_freespace"; added = (1, 0, 52);
     style = RErr, [Pathname "dir"], [];
-    proc_nr = Some 116;
     optional = Some "scrub";
     tests = [] (* XXX needs testing *);
     shortdesc = "scrub (securely wipe) free space";
@@ -3880,7 +3796,6 @@ manual page for more details." };
   { defaults with
     name = "mkdtemp"; added = (1, 0, 54);
     style = RString "dir", [Pathname "tmpl"], [];
-    proc_nr = Some 117;
     tests = [
       InitScratchFS, Always, TestRun (
         [["mkdir"; "/mkdtemp"];
@@ -3910,7 +3825,6 @@ See also: L<mkdtemp(3)>" };
   { defaults with
     name = "wc_l"; added = (1, 0, 54);
     style = RInt "lines", [Pathname "path"], [];
-    proc_nr = Some 118;
     tests = [
       InitISOFS, Always, TestResult (
         [["wc_l"; "/10klines"]], "ret == 10000"), [];
@@ -3926,7 +3840,6 @@ C<wc -l> external command." };
   { defaults with
     name = "wc_w"; added = (1, 0, 54);
     style = RInt "words", [Pathname "path"], [];
-    proc_nr = Some 119;
     tests = [
       InitISOFS, Always, TestResult (
         [["wc_w"; "/10klines"]], "ret == 10000"), []
@@ -3939,7 +3852,6 @@ C<wc -w> external command." };
   { defaults with
     name = "wc_c"; added = (1, 0, 54);
     style = RInt "chars", [Pathname "path"], [];
-    proc_nr = Some 120;
     tests = [
       InitISOFS, Always, TestResult (
         [["wc_c"; "/100kallspaces"]], "ret == 102400"), []
@@ -3952,7 +3864,6 @@ C<wc -c> external command." };
   { defaults with
     name = "head"; added = (1, 0, 54);
     style = RStringList "lines", [Pathname "path"], [];
-    proc_nr = Some 121;
     protocol_limit_warning = true;
     tests = [
       InitISOFS, Always, TestResult (
@@ -3971,7 +3882,6 @@ a list of strings." };
   { defaults with
     name = "head_n"; added = (1, 0, 54);
     style = RStringList "lines", [Int "nrlines"; Pathname "path"], [];
-    proc_nr = Some 122;
     protocol_limit_warning = true;
     tests = [
       InitISOFS, Always, TestResult (
@@ -3997,7 +3907,6 @@ If the parameter C<nrlines> is zero, this returns an empty list." };
   { defaults with
     name = "tail"; added = (1, 0, 54);
     style = RStringList "lines", [Pathname "path"], [];
-    proc_nr = Some 123;
     protocol_limit_warning = true;
     tests = [
       InitISOFS, Always, TestResult (
@@ -4012,7 +3921,6 @@ a list of strings." };
   { defaults with
     name = "tail_n"; added = (1, 0, 54);
     style = RStringList "lines", [Int "nrlines"; Pathname "path"], [];
-    proc_nr = Some 124;
     protocol_limit_warning = true;
     tests = [
       InitISOFS, Always, TestResult (
@@ -4038,7 +3946,6 @@ If the parameter C<nrlines> is zero, this returns an empty list." };
   { defaults with
     name = "df"; added = (1, 0, 54);
     style = RString "output", [], [];
-    proc_nr = Some 125;
     test_excuse = "tricky to test because it depends on the exact format of the 'df' command and other imponderables";
     shortdesc = "report file system disk space usage";
     longdesc = "\
@@ -4051,7 +3958,6 @@ Use C<guestfs_statvfs> from programs." };
   { defaults with
     name = "df_h"; added = (1, 0, 54);
     style = RString "output", [], [];
-    proc_nr = Some 126;
     test_excuse = "tricky to test because it depends on the exact format of the 'df' command and other imponderables";
     shortdesc = "report file system disk space usage (human readable)";
     longdesc = "\
@@ -4065,7 +3971,6 @@ Use C<guestfs_statvfs> from programs." };
   { defaults with
     name = "du"; added = (1, 0, 54);
     style = RInt64 "sizekb", [Pathname "path"], [];
-    proc_nr = Some 127;
     progress = true;
     tests = [
       InitISOFS, Always, TestResult (
@@ -4086,7 +3991,6 @@ The result is the estimated size in I<kilobytes>
   { defaults with
     name = "initrd_list"; added = (1, 0, 54);
     style = RStringList "filenames", [Pathname "path"], [];
-    proc_nr = Some 128;
     tests = [
       InitISOFS, Always, TestResult (
         [["initrd_list"; "/initrd"]],
@@ -4107,7 +4011,6 @@ format (compressed cpio files)." };
   { defaults with
     name = "mount_loop"; added = (1, 0, 54);
     style = RErr, [Pathname "file"; Pathname "mountpoint"], [];
-    proc_nr = Some 129;
     shortdesc = "mount a file using the loop device";
     longdesc = "\
 This command lets you mount F<file> (a filesystem image
@@ -4117,7 +4020,6 @@ the command C<mount -o loop file mountpoint>." };
   { defaults with
     name = "mkswap"; added = (1, 0, 55);
     style = RErr, [Device "device"], [OString "label"; OString "uuid"];
-    proc_nr = Some 130;
     once_had_no_optargs = true;
     tests = [
       InitEmpty, Always, TestRun (
@@ -4145,7 +4047,6 @@ label and/or UUID of the new swap partition." };
   { defaults with
     name = "mknod"; added = (1, 0, 55);
     style = RErr, [Int "mode"; Int "devmajor"; Int "devminor"; Pathname "path"], [];
-    proc_nr = Some 133;
     optional = Some "mknod";
     tests = [
       InitScratchFS, Always, TestResult (
@@ -4181,7 +4082,6 @@ The mode actually set is affected by the umask." };
   { defaults with
     name = "mkfifo"; added = (1, 0, 55);
     style = RErr, [Int "mode"; Pathname "path"], [];
-    proc_nr = Some 134;
     optional = Some "mknod";
     tests = [
       InitScratchFS, Always, TestResult (
@@ -4205,7 +4105,6 @@ The mode actually set is affected by the umask." };
   { defaults with
     name = "mknod_b"; added = (1, 0, 55);
     style = RErr, [Int "mode"; Int "devmajor"; Int "devminor"; Pathname "path"], [];
-    proc_nr = Some 135;
     optional = Some "mknod";
     tests = [
       InitScratchFS, Always, TestResult (
@@ -4229,7 +4128,6 @@ The mode actually set is affected by the umask." };
   { defaults with
     name = "mknod_c"; added = (1, 0, 55);
     style = RErr, [Int "mode"; Int "devmajor"; Int "devminor"; Pathname "path"], [];
-    proc_nr = Some 136;
     optional = Some "mknod";
     tests = [
       InitScratchFS, Always, TestResult (
@@ -4253,7 +4151,6 @@ The mode actually set is affected by the umask." };
   { defaults with
     name = "umask"; added = (1, 0, 55);
     style = RInt "oldmask", [Int "mask"], [];
-    proc_nr = Some 137;
     fish_output = Some FishOutputOctal;
     tests = [
       InitEmpty, Always, TestResult (
@@ -4281,7 +4178,6 @@ This call returns the previous umask." };
   { defaults with
     name = "readdir"; added = (1, 0, 55);
     style = RStructList ("entries", "dirent"), [Pathname "dir"], [];
-    proc_nr = Some 138;
     protocol_limit_warning = true;
     shortdesc = "read directories entries";
     longdesc = "\
@@ -4342,7 +4238,6 @@ directory for human consumption, use C<guestfs_ll>." };
   { defaults with
     name = "getxattrs"; added = (1, 0, 59);
     style = RStructList ("xattrs", "xattr"), [Pathname "path"], [];
-    proc_nr = Some 141;
     optional = Some "linuxxattrs";
     shortdesc = "list extended attributes of a file or directory";
     longdesc = "\
@@ -4357,7 +4252,6 @@ See also: C<guestfs_lgetxattrs>, L<attr(5)>." };
   { defaults with
     name = "lgetxattrs"; added = (1, 0, 59);
     style = RStructList ("xattrs", "xattr"), [Pathname "path"], [];
-    proc_nr = Some 142;
     optional = Some "linuxxattrs";
     shortdesc = "list extended attributes of a file or directory";
     longdesc = "\
@@ -4370,7 +4264,6 @@ of the link itself." };
     style = RErr, [String "xattr";
                    String "val"; Int "vallen"; (* will be BufferIn *)
                    Pathname "path"], [];
-    proc_nr = Some 143;
     optional = Some "linuxxattrs";
     shortdesc = "set extended attribute of a file or directory";
     longdesc = "\
@@ -4385,7 +4278,6 @@ See also: C<guestfs_lsetxattr>, L<attr(5)>." };
     style = RErr, [String "xattr";
                    String "val"; Int "vallen"; (* will be BufferIn *)
                    Pathname "path"], [];
-    proc_nr = Some 144;
     optional = Some "linuxxattrs";
     shortdesc = "set extended attribute of a file or directory";
     longdesc = "\
@@ -4396,7 +4288,6 @@ of the link itself." };
   { defaults with
     name = "removexattr"; added = (1, 0, 59);
     style = RErr, [String "xattr"; Pathname "path"], [];
-    proc_nr = Some 145;
     optional = Some "linuxxattrs";
     shortdesc = "remove extended attribute of a file or directory";
     longdesc = "\
@@ -4408,7 +4299,6 @@ See also: C<guestfs_lremovexattr>, L<attr(5)>." };
   { defaults with
     name = "lremovexattr"; added = (1, 0, 59);
     style = RErr, [String "xattr"; Pathname "path"], [];
-    proc_nr = Some 146;
     optional = Some "linuxxattrs";
     shortdesc = "remove extended attribute of a file or directory";
     longdesc = "\
@@ -4419,7 +4309,6 @@ of the link itself." };
   { defaults with
     name = "mountpoints"; added = (1, 0, 62);
     style = RHashtable "mps", [], [];
-    proc_nr = Some 147;
     shortdesc = "show mountpoints";
     longdesc = "\
 This call is similar to C<guestfs_mounts>.  That call returns
@@ -4434,7 +4323,6 @@ device name to directory where the device is mounted." };
      * this function cannot use NEED_ROOT.
      *)
     style = RErr, [String "exemptpath"], [];
-    proc_nr = Some 148;
     shortdesc = "create a mountpoint";
     longdesc = "\
 C<guestfs_mkmountpoint> and C<guestfs_rmmountpoint> are
@@ -4479,7 +4367,6 @@ is closed which can also trigger these issues." };
   { defaults with
     name = "rmmountpoint"; added = (1, 0, 62);
     style = RErr, [String "exemptpath"], [];
-    proc_nr = Some 149;
     shortdesc = "remove a mountpoint";
     longdesc = "\
 This calls removes a mountpoint that was previously created
@@ -4489,7 +4376,6 @@ for full details." };
   { defaults with
     name = "grep"; added = (1, 0, 66);
     style = RStringList "lines", [String "regex"; Pathname "path"], [OBool "extended"; OBool "fixed"; OBool "insensitive"; OBool "compressed"];
-    proc_nr = Some 151;
     protocol_limit_warning = true; once_had_no_optargs = true;
     tests = [
       InitISOFS, Always, TestResult (
@@ -4569,7 +4455,6 @@ compress- or gzip-compressed.
   { defaults with
     name = "realpath"; added = (1, 0, 66);
     style = RString "rpath", [Pathname "path"], [];
-    proc_nr = Some 163;
     tests = [
       InitISOFS, Always, TestResultString (
         [["realpath"; "/../directory"]], "/directory"), []
@@ -4582,7 +4467,6 @@ returned path has no C<.>, C<..> or symbolic link path elements." };
   { defaults with
     name = "ln"; added = (1, 0, 66);
     style = RErr, [String "target"; Pathname "linkname"], [];
-    proc_nr = Some 164;
     tests = [
       InitScratchFS, Always, TestResult (
         [["mkdir"; "/ln"];
@@ -4597,7 +4481,6 @@ This command creates a hard link using the C<ln> command." };
   { defaults with
     name = "ln_f"; added = (1, 0, 66);
     style = RErr, [String "target"; Pathname "linkname"], [];
-    proc_nr = Some 165;
     tests = [
       InitScratchFS, Always, TestResult (
         [["mkdir"; "/ln_f"];
@@ -4614,7 +4497,6 @@ The I<-f> option removes the link (C<linkname>) if it exists already." };
   { defaults with
     name = "ln_s"; added = (1, 0, 66);
     style = RErr, [String "target"; Pathname "linkname"], [];
-    proc_nr = Some 166;
     tests = [
       InitScratchFS, Always, TestResult (
         [["mkdir"; "/ln_s"];
@@ -4630,7 +4512,6 @@ This command creates a symbolic link using the C<ln -s> command." };
   { defaults with
     name = "ln_sf"; added = (1, 0, 66);
     style = RErr, [String "target"; Pathname "linkname"], [];
-    proc_nr = Some 167;
     tests = [
       InitScratchFS, Always, TestResultString (
         [["mkdir_p"; "/ln_sf/b"];
@@ -4646,7 +4527,6 @@ The I<-f> option removes the link (C<linkname>) if it exists already." };
   { defaults with
     name = "readlink"; added = (1, 0, 66);
     style = RString "link", [Pathname "path"], [];
-    proc_nr = Some 168;
     shortdesc = "read the target of a symbolic link";
     longdesc = "\
 This command reads the target of a symbolic link." };
@@ -4654,7 +4534,6 @@ This command reads the target of a symbolic link." };
   { defaults with
     name = "swapon_device"; added = (1, 0, 66);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 170;
     tests = [
       InitPartition, Always, TestRun (
         [["mkswap"; "/dev/sda1"; "NOARG"; "NOARG"];
@@ -4678,7 +4557,6 @@ attach a new host device to the guest and swap on that." };
   { defaults with
     name = "swapoff_device"; added = (1, 0, 66);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 171;
     shortdesc = "disable swap on device";
     longdesc = "\
 This command disables the libguestfs appliance swap
@@ -4688,7 +4566,6 @@ See C<guestfs_swapon_device>." };
   { defaults with
     name = "swapon_file"; added = (1, 0, 66);
     style = RErr, [Pathname "file"], [];
-    proc_nr = Some 172;
     tests = [
       InitScratchFS, Always, TestRun (
         [["fallocate"; "/swapon_file"; "8388608"];
@@ -4705,7 +4582,6 @@ See C<guestfs_swapon_device> for other notes." };
   { defaults with
     name = "swapoff_file"; added = (1, 0, 66);
     style = RErr, [Pathname "file"], [];
-    proc_nr = Some 173;
     shortdesc = "disable swap on file";
     longdesc = "\
 This command disables the libguestfs appliance swap on file." };
@@ -4713,7 +4589,6 @@ This command disables the libguestfs appliance swap on file." };
   { defaults with
     name = "swapon_label"; added = (1, 0, 66);
     style = RErr, [String "label"], [];
-    proc_nr = Some 174;
     tests = [
       InitEmpty, Always, TestRun (
         [["part_disk"; "/dev/sda"; "mbr"];
@@ -4731,7 +4606,6 @@ See C<guestfs_swapon_device> for other notes." };
   { defaults with
     name = "swapoff_label"; added = (1, 0, 66);
     style = RErr, [String "label"], [];
-    proc_nr = Some 175;
     shortdesc = "disable swap on labeled swap partition";
     longdesc = "\
 This command disables the libguestfs appliance swap on
@@ -4740,7 +4614,6 @@ labeled swap partition." };
   { defaults with
     name = "swapon_uuid"; added = (1, 0, 66);
     style = RErr, [String "uuid"], [];
-    proc_nr = Some 176;
     optional = Some "linuxfsuuid";
     tests = [
         InitEmpty, Always, TestRun (
@@ -4756,7 +4629,6 @@ See C<guestfs_swapon_device> for other notes." };
   { defaults with
     name = "swapoff_uuid"; added = (1, 0, 66);
     style = RErr, [String "uuid"], [];
-    proc_nr = Some 177;
     optional = Some "linuxfsuuid";
     shortdesc = "disable swap on swap partition by UUID";
     longdesc = "\
@@ -4766,7 +4638,6 @@ with the given UUID." };
   { defaults with
     name = "mkswap_file"; added = (1, 0, 66);
     style = RErr, [Pathname "path"], [];
-    proc_nr = Some 178;
     tests = [
       InitScratchFS, Always, TestRun (
         [["fallocate"; "/mkswap_file"; "8388608"];
@@ -4783,7 +4654,6 @@ file.  To create the file itself, use something like C<guestfs_fallocate>." };
   { defaults with
     name = "inotify_init"; added = (1, 0, 66);
     style = RErr, [Int "maxevents"], [];
-    proc_nr = Some 179;
     optional = Some "inotify";
     tests = [
       InitISOFS, Always, TestRun (
@@ -4828,7 +4698,6 @@ per libguestfs instance." };
   { defaults with
     name = "inotify_add_watch"; added = (1, 0, 66);
     style = RInt64 "wd", [Pathname "path"; Int "mask"], [];
-    proc_nr = Some 180;
     optional = Some "inotify";
     tests = [
       InitScratchFS, Always, TestResult (
@@ -4855,7 +4724,6 @@ F</usr/include/sys/inotify.h>." };
   { defaults with
     name = "inotify_rm_watch"; added = (1, 0, 66);
     style = RErr, [Int(*XXX64*) "wd"], [];
-    proc_nr = Some 181;
     optional = Some "inotify";
     shortdesc = "remove an inotify watch";
     longdesc = "\
@@ -4865,7 +4733,6 @@ See C<guestfs_inotify_add_watch>." };
   { defaults with
     name = "inotify_read"; added = (1, 0, 66);
     style = RStructList ("events", "inotify_event"), [], [];
-    proc_nr = Some 182;
     optional = Some "inotify";
     shortdesc = "return list of inotify events";
     longdesc = "\
@@ -4883,7 +4750,6 @@ size and leave remaining events in the queue." };
   { defaults with
     name = "inotify_files"; added = (1, 0, 66);
     style = RStringList "paths", [], [];
-    proc_nr = Some 183;
     optional = Some "inotify";
     shortdesc = "return list of watched files that had events";
     longdesc = "\
@@ -4894,7 +4760,6 @@ touched.  The returned pathnames are sorted and deduplicated." };
   { defaults with
     name = "inotify_close"; added = (1, 0, 66);
     style = RErr, [], [];
-    proc_nr = Some 184;
     optional = Some "inotify";
     shortdesc = "close the inotify handle";
     longdesc = "\
@@ -4905,7 +4770,6 @@ away any pending events, and deallocates all resources." };
   { defaults with
     name = "modprobe"; added = (1, 0, 68);
     style = RErr, [String "modulename"], [];
-    proc_nr = Some 194;
     optional = Some "linuxmodules";
     tests = [
       InitNone, Always, TestRun [["modprobe"; "fat"]], []
@@ -4917,7 +4781,6 @@ This loads a kernel module in the appliance." };
   { defaults with
     name = "echo_daemon"; added = (1, 0, 69);
     style = RString "output", [StringList "words"], [];
-    proc_nr = Some 195;
     tests = [
       InitNone, Always, TestResultString (
         [["echo_daemon"; "This is a test"]], "This is a test"), [];
@@ -4936,7 +4799,6 @@ See also C<guestfs_ping_daemon>." };
   { defaults with
     name = "find0"; added = (1, 0, 74);
     style = RErr, [Pathname "directory"; FileOut "files"], [];
-    proc_nr = Some 196;
     cancellable = true;
     test_excuse = "there is a regression test for this";
     shortdesc = "find all files and directories, returning NUL-separated list";
@@ -4968,7 +4830,6 @@ The result list is not sorted.
   { defaults with
     name = "case_sensitive_path"; added = (1, 0, 75);
     style = RString "rpath", [Pathname "path"], [];
-    proc_nr = Some 197;
     tests = [
       InitISOFS, Always, TestResultString (
         [["case_sensitive_path"; "/DIRECTORY"]], "/directory"), [];
@@ -5053,7 +4914,6 @@ See also C<guestfs_realpath>." };
   { defaults with
     name = "vfs_type"; added = (1, 0, 75);
     style = RString "fstype", [Mountable "mountable"], [];
-    proc_nr = Some 198;
     tests = [
       InitScratchFS, Always, TestResultString (
         [["vfs_type"; "/dev/sdb1"]], "ext2"), []
@@ -5071,7 +4931,6 @@ For example a string such as C<ext3> or C<ntfs>." };
   { defaults with
     name = "truncate"; added = (1, 0, 77);
     style = RErr, [Pathname "path"], [];
-    proc_nr = Some 199;
     tests = [
       InitScratchFS, Always, TestResult (
         [["write"; "/truncate"; "some stuff so size is not zero"];
@@ -5086,7 +4945,6 @@ file must exist already." };
   { defaults with
     name = "truncate_size"; added = (1, 0, 77);
     style = RErr, [Pathname "path"; Int64 "size"], [];
-    proc_nr = Some 200;
     tests = [
       InitScratchFS, Always, TestResult (
         [["touch"; "/truncate_size"];
@@ -5107,7 +4965,6 @@ file of zeroes, use C<guestfs_fallocate64> instead." };
   { defaults with
     name = "utimens"; added = (1, 0, 77);
     style = RErr, [Pathname "path"; Int64 "atsecs"; Int64 "atnsecs"; Int64 "mtsecs"; Int64 "mtnsecs"], [];
-    proc_nr = Some 201;
     (* Test directories, named pipes etc (RHBZ#761451, RHBZ#761460) *)
     tests = [
       InitScratchFS, Always, TestResult (
@@ -5157,7 +5014,6 @@ C<*secs> field is ignored in this case)." };
   { defaults with
     name = "mkdir_mode"; added = (1, 0, 77);
     style = RErr, [Pathname "path"; Int "mode"], [];
-    proc_nr = Some 202;
     tests = [
       InitScratchFS, Always, TestResult (
         [["mkdir_mode"; "/mkdir_mode"; "0o111"];
@@ -5178,7 +5034,6 @@ See also C<guestfs_mkdir>, C<guestfs_umask>" };
   { defaults with
     name = "lchown"; added = (1, 0, 77);
     style = RErr, [Int "owner"; Int "group"; Pathname "path"], [];
-    proc_nr = Some 203;
     shortdesc = "change file owner and group";
     longdesc = "\
 Change the file owner to C<owner> and group to C<group>.
@@ -5192,7 +5047,6 @@ yourself (Augeas support makes this relatively easy)." };
   { defaults with
     name = "internal_lxattrlist"; added = (1, 19, 32);
     style = RStructList ("xattrs", "xattr"), [Pathname "path"; FilenameList "names"], [];
-    proc_nr = Some 205;
     visibility = VInternal;
     optional = Some "linuxxattrs";
     shortdesc = "lgetxattr on multiple files";
@@ -5222,7 +5076,6 @@ into smaller groups of names." };
   { defaults with
     name = "internal_readlinklist"; added = (1, 19, 32);
     style = RStringList "links", [Pathname "path"; FilenameList "names"], [];
-    proc_nr = Some 206;
     visibility = VInternal;
     shortdesc = "readlink on multiple files";
     longdesc = "\
@@ -5251,7 +5104,6 @@ into smaller groups of names." };
   { defaults with
     name = "pread"; added = (1, 0, 77);
     style = RBufferOut "content", [Pathname "path"; Int "count"; Int64 "offset"], [];
-    proc_nr = Some 207;
     protocol_limit_warning = true;
     tests = [
       InitISOFS, Always, TestResult (
@@ -5274,7 +5126,6 @@ See also C<guestfs_pwrite>, C<guestfs_pread_device>." };
   { defaults with
     name = "part_init"; added = (1, 0, 78);
     style = RErr, [Device "device"; String "parttype"], [];
-    proc_nr = Some 208;
     tests = [
       InitEmpty, Always, TestRun (
         [["part_init"; "/dev/sda"; "gpt"]]), []
@@ -5357,7 +5208,6 @@ Sun disk labels.
   { defaults with
     name = "part_add"; added = (1, 0, 78);
     style = RErr, [Device "device"; String "prlogex"; Int64 "startsect"; Int64 "endsect"], [];
-    proc_nr = Some 209;
     tests = [
       InitEmpty, Always, TestRun (
         [["part_init"; "/dev/sda"; "mbr"];
@@ -5393,7 +5243,6 @@ Use C<guestfs_part_disk> to do that." };
   { defaults with
     name = "part_disk"; added = (1, 0, 78);
     style = RErr, [Device "device"; String "parttype"], [];
-    proc_nr = Some 210;
     tests = [
       InitEmpty, Always, TestRun (
         [["part_disk"; "/dev/sda"; "mbr"]]), [];
@@ -5412,7 +5261,6 @@ but other possible values are described in C<guestfs_part_init>." };
   { defaults with
     name = "part_set_bootable"; added = (1, 0, 78);
     style = RErr, [Device "device"; Int "partnum"; Bool "bootable"], [];
-    proc_nr = Some 211;
     tests = [
       InitEmpty, Always, TestRun (
         [["part_disk"; "/dev/sda"; "mbr"];
@@ -5430,7 +5278,6 @@ no means universally recognized." };
   { defaults with
     name = "part_set_name"; added = (1, 0, 78);
     style = RErr, [Device "device"; Int "partnum"; String "name"], [];
-    proc_nr = Some 212;
     tests = [
       InitEmpty, Always, TestRun (
         [["part_disk"; "/dev/sda"; "gpt"];
@@ -5447,7 +5294,6 @@ table.  This works on C<gpt> but not on C<mbr> partitions." };
   { defaults with
     name = "part_list"; added = (1, 0, 78);
     style = RStructList ("partitions", "partition"), [Device "device"], [];
-    proc_nr = Some 213;
     tests = [] (* XXX Add a regression test for this. *);
     shortdesc = "list partitions on a device";
     longdesc = "\
@@ -5480,7 +5326,6 @@ Size of the partition in bytes.
   { defaults with
     name = "part_get_parttype"; added = (1, 0, 78);
     style = RString "parttype", [Device "device"], [];
-    proc_nr = Some 214;
     tests = [
       InitEmpty, Always, TestResultString (
         [["part_disk"; "/dev/sda"; "gpt"];
@@ -5499,7 +5344,6 @@ for a full list." };
   { defaults with
     name = "fill"; added = (1, 0, 79);
     style = RErr, [Int "c"; Int "len"; Pathname "path"], [];
-    proc_nr = Some 215;
     progress = true;
     tests = [
       InitScratchFS, Always, TestResult (
@@ -5521,7 +5365,6 @@ use C<guestfs_fill_pattern>." };
   { defaults with
     name = "filesize"; added = (1, 0, 82);
     style = RInt64 "size", [Pathname "file"], [];
-    proc_nr = Some 218;
     tests = [
       InitScratchFS, Always, TestResult (
         [["write"; "/filesize"; "hello, world"];
@@ -5538,7 +5381,6 @@ To get the size of block devices, use C<guestfs_blockdev_getsize64>." };
   { defaults with
     name = "lvrename"; added = (1, 0, 83);
     style = RErr, [String "logvol"; String "newlogvol"], [];
-    proc_nr = Some 219;
     tests = [
       InitBasicFSonLVM, Always, TestResult (
         [["lvrename"; "/dev/VG/LV"; "/dev/VG/LV2"];
@@ -5552,7 +5394,6 @@ Rename a logical volume C<logvol> with the new name C<newlogvol>." };
   { defaults with
     name = "vgrename"; added = (1, 0, 83);
     style = RErr, [String "volgroup"; String "newvolgroup"], [];
-    proc_nr = Some 220;
     tests = [
       InitBasicFSonLVM, Always, TestResult (
         [["umount"; "/"; "false"; "false"];
@@ -5570,7 +5411,6 @@ Rename a volume group C<volgroup> with the new name C<newvolgroup>." };
   { defaults with
     name = "initrd_cat"; added = (1, 0, 84);
     style = RBufferOut "content", [Pathname "initrdpath"; String "filename"], [];
-    proc_nr = Some 221;
     protocol_limit_warning = true;
     tests = [
       InitISOFS, Always, TestResult (
@@ -5594,7 +5434,6 @@ See also C<guestfs_initrd_list>." };
   { defaults with
     name = "pvuuid"; added = (1, 0, 87);
     style = RString "uuid", [Device "device"], [];
-    proc_nr = Some 222;
     shortdesc = "get the UUID of a physical volume";
     longdesc = "\
 This command returns the UUID of the LVM PV C<device>." };
@@ -5602,7 +5441,6 @@ This command returns the UUID of the LVM PV C<device>." };
   { defaults with
     name = "vguuid"; added = (1, 0, 87);
     style = RString "uuid", [String "vgname"], [];
-    proc_nr = Some 223;
     shortdesc = "get the UUID of a volume group";
     longdesc = "\
 This command returns the UUID of the LVM VG named C<vgname>." };
@@ -5610,7 +5448,6 @@ This command returns the UUID of the LVM VG named C<vgname>." };
   { defaults with
     name = "lvuuid"; added = (1, 0, 87);
     style = RString "uuid", [Device "device"], [];
-    proc_nr = Some 224;
     shortdesc = "get the UUID of a logical volume";
     longdesc = "\
 This command returns the UUID of the LVM LV C<device>." };
@@ -5618,7 +5455,6 @@ This command returns the UUID of the LVM LV C<device>." };
   { defaults with
     name = "vgpvuuids"; added = (1, 0, 87);
     style = RStringList "uuids", [String "vgname"], [];
-    proc_nr = Some 225;
     shortdesc = "get the PV UUIDs containing the volume group";
     longdesc = "\
 Given a VG called C<vgname>, this returns the UUIDs of all
@@ -5632,7 +5468,6 @@ See also C<guestfs_vglvuuids>." };
   { defaults with
     name = "vglvuuids"; added = (1, 0, 87);
     style = RStringList "uuids", [String "vgname"], [];
-    proc_nr = Some 226;
     shortdesc = "get the LV UUIDs of all LVs in the volume group";
     longdesc = "\
 Given a VG called C<vgname>, this returns the UUIDs of all
@@ -5646,7 +5481,6 @@ See also C<guestfs_vgpvuuids>." };
   { defaults with
     name = "copy_size"; added = (1, 0, 87);
     style = RErr, [Dev_or_Path "src"; Dev_or_Path "dest"; Int64 "size"], [];
-    proc_nr = Some 227;
     progress = true; deprecated_by = Some "copy_device_to_device";
     tests = [
       InitScratchFS, Always, TestResult (
@@ -5667,7 +5501,6 @@ is not large enough." };
   { defaults with
     name = "zero_device"; added = (1, 3, 1);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 228;
     progress = true;
     tests = [
       InitBasicFSonLVM, Always, TestRun (
@@ -5686,7 +5519,6 @@ or growing unnecessarily." };
   { defaults with
     name = "vgscan"; added = (1, 3, 2);
     style = RErr, [], [];
-    proc_nr = Some 232;
     tests = [
       InitEmpty, Always, TestRun (
         [["vgscan"]]), []
@@ -5699,7 +5531,6 @@ physical volumes, volume groups and logical volumes." };
   { defaults with
     name = "part_del"; added = (1, 3, 2);
     style = RErr, [Device "device"; Int "partnum"], [];
-    proc_nr = Some 233;
     tests = [
       InitEmpty, Always, TestRun (
         [["part_init"; "/dev/sda"; "mbr"];
@@ -5717,7 +5548,6 @@ it contains." };
   { defaults with
     name = "part_get_bootable"; added = (1, 3, 2);
     style = RBool "bootable", [Device "device"; Int "partnum"], [];
-    proc_nr = Some 234;
     tests = [
       InitEmpty, Always, TestResultTrue (
         [["part_init"; "/dev/sda"; "mbr"];
@@ -5735,7 +5565,6 @@ See also C<guestfs_part_set_bootable>." };
   { defaults with
     name = "part_get_mbr_id"; added = (1, 3, 2);
     style = RInt "idbyte", [Device "device"; Int "partnum"], [];
-    proc_nr = Some 235;
     fish_output = Some FishOutputHexadecimal;
     tests = [
       InitEmpty, Always, TestResult (
@@ -5756,7 +5585,6 @@ types (see C<guestfs_part_get_parttype>)." };
   { defaults with
     name = "part_set_mbr_id"; added = (1, 3, 2);
     style = RErr, [Device "device"; Int "partnum"; Int "idbyte"], [];
-    proc_nr = Some 236;
     shortdesc = "set the MBR type byte (ID byte) of a partition";
     longdesc = "\
 Sets the MBR type byte (also known as the ID byte) of
@@ -5772,7 +5600,6 @@ types (see C<guestfs_part_get_parttype>)." };
   { defaults with
     name = "checksum_device"; added = (1, 3, 2);
     style = RString "checksum", [String "csumtype"; Device "device"], [];
-    proc_nr = Some 237;
     tests = [
       InitISOFS, Always, TestResult (
         [["checksum_device"; "md5"; "/dev/sdd"]],
@@ -5787,7 +5614,6 @@ checksums supported see the C<guestfs_checksum> command." };
   { defaults with
     name = "lvresize_free"; added = (1, 3, 3);
     style = RErr, [Device "lv"; Int "percent"], [];
-    proc_nr = Some 238;
     optional = Some "lvm2";
     tests = [
       InitNone, Always, TestRun (
@@ -5808,7 +5634,6 @@ group." };
   { defaults with
     name = "get_umask"; added = (1, 3, 4);
     style = RInt "mask", [], [];
-    proc_nr = Some 240;
     fish_output = Some FishOutputOctal;
     tests = [
       InitEmpty, Always, TestResult (
@@ -5822,7 +5647,6 @@ unless it has been set by calling C<guestfs_umask>." };
   { defaults with
     name = "base64_in"; added = (1, 3, 5);
     style = RErr, [FileIn "base64file"; Pathname "filename"], [];
-    proc_nr = Some 242;
     cancellable = true;
     tests = [
       InitScratchFS, Always, TestResultString (
@@ -5837,7 +5661,6 @@ to F<filename>." };
   { defaults with
     name = "base64_out"; added = (1, 3, 5);
     style = RErr, [Pathname "filename"; FileOut "base64file"], [];
-    proc_nr = Some 243;
     cancellable = true;
     shortdesc = "download file and encode as base64";
     longdesc = "\
@@ -5847,7 +5670,6 @@ it out to local file C<base64file> encoded as base64." };
   { defaults with
     name = "checksums_out"; added = (1, 3, 7);
     style = RErr, [String "csumtype"; Pathname "directory"; FileOut "sumsfile"], [];
-    proc_nr = Some 244;
     cancellable = true;
     shortdesc = "compute MD5, SHAx or CRC checksum of files in a directory";
     longdesc = "\
@@ -5866,7 +5688,6 @@ coreutils info file." };
   { defaults with
     name = "fill_pattern"; added = (1, 3, 12);
     style = RErr, [String "pattern"; Int "len"; Pathname "path"], [];
-    proc_nr = Some 245;
     progress = true;
     tests = [
       InitScratchFS, Always, TestResult (
@@ -5884,7 +5705,6 @@ to ensure the length of the file is exactly C<len> bytes." };
   { defaults with
     name = "internal_write"; added = (1, 19, 32);
     style = RErr, [Pathname "path"; BufferIn "content"], [];
-    proc_nr = Some 246;
     visibility = VInternal;
     protocol_limit_warning = true;
     tests = [
@@ -5917,7 +5737,6 @@ See also C<guestfs_write_append>." };
   { defaults with
     name = "pwrite"; added = (1, 3, 14);
     style = RInt "nbytes", [Pathname "path"; BufferIn "content"; Int64 "offset"], [];
-    proc_nr = Some 247;
     protocol_limit_warning = true;
     tests = [
       InitScratchFS, Always, TestResultString (
@@ -5949,7 +5768,6 @@ See also C<guestfs_pread>, C<guestfs_pwrite_device>." };
   { defaults with
     name = "resize2fs_size"; added = (1, 3, 14);
     style = RErr, [Device "device"; Int64 "size"], [];
-    proc_nr = Some 248;
     shortdesc = "resize an ext2, ext3 or ext4 filesystem (with size)";
     longdesc = "\
 This command is the same as C<guestfs_resize2fs> except that it
@@ -5960,7 +5778,6 @@ See also L<guestfs(3)/RESIZE2FS ERRORS>." };
   { defaults with
     name = "pvresize_size"; added = (1, 3, 14);
     style = RErr, [Device "device"; Int64 "size"], [];
-    proc_nr = Some 249;
     optional = Some "lvm2";
     shortdesc = "resize an LVM physical volume (with size)";
     longdesc = "\
@@ -5970,7 +5787,6 @@ allows you to specify the new size (in bytes) explicitly." };
   { defaults with
     name = "ntfsresize_size"; added = (1, 3, 14);
     style = RErr, [Device "device"; Int64 "size"], [];
-    proc_nr = Some 250;
     optional = Some "ntfsprogs"; deprecated_by = Some "ntfsresize";
     shortdesc = "resize an NTFS filesystem (with size)";
     longdesc = "\
@@ -5980,7 +5796,6 @@ allows you to specify the new size (in bytes) explicitly." };
   { defaults with
     name = "available_all_groups"; added = (1, 3, 15);
     style = RStringList "groups", [], [];
-    proc_nr = Some 251;
     tests = [
       InitNone, Always, TestRun [["available_all_groups"]], []
     ];
@@ -5998,7 +5813,6 @@ and L<guestfs(3)/AVAILABILITY>." };
   { defaults with
     name = "fallocate64"; added = (1, 3, 17);
     style = RErr, [Pathname "path"; Int64 "len"], [];
-    proc_nr = Some 252;
     tests = [
       InitScratchFS, Always, TestResult (
         [["fallocate64"; "/fallocate64"; "1000000"];
@@ -6025,7 +5839,6 @@ a file in the host and attach it as a device." };
   { defaults with
     name = "vfs_label"; added = (1, 3, 18);
     style = RString "label", [Mountable "mountable"], [];
-    proc_nr = Some 253;
     tests = [
       InitBasicFS, Always, TestResultString (
         [["set_label"; "/dev/sda1"; "LTEST"];
@@ -6052,7 +5865,6 @@ To find a filesystem from the label, use C<guestfs_findfs_label>." };
     name = "vfs_uuid"; added = (1, 3, 18);
     style = RString "uuid", [Mountable "mountable"], [];
     fish_alias = ["get-uuid"];
-    proc_nr = Some 254;
     tests = [
         InitBasicFS, Always, TestResultString (
           [["set_e2uuid"; "/dev/sda1"; stable_uuid];
@@ -6069,7 +5881,6 @@ To find a filesystem from the UUID, use C<guestfs_findfs_uuid>." };
   { defaults with
     name = "lvm_set_filter"; added = (1, 5, 1);
     style = RErr, [DeviceList "devices"], [];
-    proc_nr = Some 255;
     optional = Some "lvm2";
     test_excuse = "cannot be tested with the current framework because the VG is being used by the mounted filesystem, so the 'vgchange -an' command we do first will fail";
     shortdesc = "set LVM device filter";
@@ -6100,7 +5911,6 @@ filtering out that VG." };
   { defaults with
     name = "lvm_clear_filter"; added = (1, 5, 1);
     style = RErr, [], [];
-    proc_nr = Some 256;
     test_excuse = "cannot be tested with the current framework because the VG is being used by the mounted filesystem, so the 'vgchange -an' command we do first will fail";
     shortdesc = "clear LVM device filter";
     longdesc = "\
@@ -6113,7 +5923,6 @@ group scan." };
   { defaults with
     name = "luks_open"; added = (1, 5, 1);
     style = RErr, [Device "device"; Key "key"; String "mapname"], [];
-    proc_nr = Some 257;
     optional = Some "luks";
     shortdesc = "open a LUKS-encrypted block device";
     longdesc = "\
@@ -6139,7 +5948,6 @@ devices." };
   { defaults with
     name = "luks_open_ro"; added = (1, 5, 1);
     style = RErr, [Device "device"; Key "key"; String "mapname"], [];
-    proc_nr = Some 258;
     optional = Some "luks";
     shortdesc = "open a LUKS-encrypted block device read-only";
     longdesc = "\
@@ -6149,7 +5957,6 @@ mapping is created." };
   { defaults with
     name = "luks_close"; added = (1, 5, 1);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 259;
     optional = Some "luks";
     shortdesc = "close a LUKS device";
     longdesc = "\
@@ -6162,7 +5969,6 @@ of the underlying block device." };
   { defaults with
     name = "luks_format"; added = (1, 5, 2);
     style = RErr, [Device "device"; Key "key"; Int "keyslot"], [];
-    proc_nr = Some 260;
     optional = Some "luks";
     shortdesc = "format a block device as a LUKS encrypted device";
     longdesc = "\
@@ -6174,7 +5980,6 @@ supports 8 key slots, numbered 0-7)." };
   { defaults with
     name = "luks_format_cipher"; added = (1, 5, 2);
     style = RErr, [Device "device"; Key "key"; Int "keyslot"; String "cipher"], [];
-    proc_nr = Some 261;
     optional = Some "luks";
     shortdesc = "format a block device as a LUKS encrypted device";
     longdesc = "\
@@ -6184,7 +5989,6 @@ it also allows you to set the C<cipher> used." };
   { defaults with
     name = "luks_add_key"; added = (1, 5, 2);
     style = RErr, [Device "device"; Key "key"; Key "newkey"; Int "keyslot"], [];
-    proc_nr = Some 262;
     optional = Some "luks";
     shortdesc = "add a key on a LUKS encrypted device";
     longdesc = "\
@@ -6200,7 +6004,6 @@ first to remove that key." };
   { defaults with
     name = "luks_kill_slot"; added = (1, 5, 2);
     style = RErr, [Device "device"; Key "key"; Int "keyslot"], [];
-    proc_nr = Some 263;
     optional = Some "luks";
     shortdesc = "remove a key from a LUKS encrypted device";
     longdesc = "\
@@ -6211,7 +6014,6 @@ I<other> keys." };
   { defaults with
     name = "is_lv"; added = (1, 5, 3);
     style = RBool "lvflag", [Mountable "mountable"], [];
-    proc_nr = Some 264;
     tests = [
       InitBasicFSonLVM, Always, TestResultTrue (
         [["is_lv"; "/dev/VG/LV"]]), [];
@@ -6226,7 +6028,6 @@ returns true iff this is the case." };
   { defaults with
     name = "findfs_uuid"; added = (1, 5, 3);
     style = RString "device", [String "uuid"], [];
-    proc_nr = Some 265;
     shortdesc = "find a filesystem by UUID";
     longdesc = "\
 This command searches the filesystems and returns the one
@@ -6238,7 +6039,6 @@ To find the UUID of a filesystem, use C<guestfs_vfs_uuid>." };
   { defaults with
     name = "findfs_label"; added = (1, 5, 3);
     style = RString "device", [String "label"], [];
-    proc_nr = Some 266;
     shortdesc = "find a filesystem by label";
     longdesc = "\
 This command searches the filesystems and returns the one
@@ -6250,7 +6050,6 @@ To find the label of a filesystem, use C<guestfs_vfs_label>." };
   { defaults with
     name = "is_chardev"; added = (1, 5, 10);
     style = RBool "flag", [Pathname "path"], [OBool "followsymlinks"];
-    proc_nr = Some 267;
     once_had_no_optargs = true;
     tests = [
       InitISOFS, Always, TestResultFalse (
@@ -6273,7 +6072,6 @@ See also C<guestfs_stat>." };
   { defaults with
     name = "is_blockdev"; added = (1, 5, 10);
     style = RBool "flag", [Pathname "path"], [OBool "followsymlinks"];
-    proc_nr = Some 268;
     once_had_no_optargs = true;
     tests = [
       InitISOFS, Always, TestResultFalse (
@@ -6300,7 +6098,6 @@ See also C<guestfs_stat>." };
   { defaults with
     name = "is_fifo"; added = (1, 5, 10);
     style = RBool "flag", [Pathname "path"], [OBool "followsymlinks"];
-    proc_nr = Some 269;
     once_had_no_optargs = true;
     tests = [
       InitISOFS, Always, TestResultFalse (
@@ -6323,7 +6120,6 @@ See also C<guestfs_stat>." };
   { defaults with
     name = "is_symlink"; added = (1, 5, 10);
     style = RBool "flag", [Pathname "path"], [];
-    proc_nr = Some 270;
     tests = [
       InitISOFS, Always, TestResultFalse (
         [["is_symlink"; "/directory"]]), [];
@@ -6340,7 +6136,6 @@ See also C<guestfs_stat>." };
   { defaults with
     name = "is_socket"; added = (1, 5, 10);
     style = RBool "flag", [Pathname "path"], [OBool "followsymlinks"];
-    proc_nr = Some 271;
     once_had_no_optargs = true;
     (* XXX Need a positive test for sockets. *)
     tests = [
@@ -6361,7 +6156,6 @@ See also C<guestfs_stat>." };
   { defaults with
     name = "part_to_dev"; added = (1, 5, 15);
     style = RString "device", [Device "partition"], [];
-    proc_nr = Some 272;
     tests = [
       InitPartition, Always, TestResultDevice (
         [["part_to_dev"; "/dev/sda1"]], "/dev/sda"), [];
@@ -6382,7 +6176,6 @@ See also C<guestfs_part_to_partnum>, C<guestfs_device_index>." };
   { defaults with
     name = "upload_offset"; added = (1, 5, 17);
     style = RErr, [FileIn "filename"; Dev_or_Path "remotefilename"; Int64 "offset"], [];
-    proc_nr = Some 273;
     progress = true; cancellable = true;
     tests =
       (let md5 = Digest.to_hex (Digest.file "COPYING.LIB") in [
@@ -6412,7 +6205,6 @@ See also C<guestfs_upload>, C<guestfs_pwrite>." };
   { defaults with
     name = "download_offset"; added = (1, 5, 17);
     style = RErr, [Dev_or_Path "remotefilename"; FileOut "filename"; Int64 "offset"; Int64 "size"], [];
-    proc_nr = Some 274;
     progress = true; cancellable = true;
     tests =
       (let md5 = Digest.to_hex (Digest.file "COPYING.LIB") in
@@ -6445,7 +6237,6 @@ See also C<guestfs_download>, C<guestfs_pread>." };
   { defaults with
     name = "pwrite_device"; added = (1, 5, 20);
     style = RInt "nbytes", [Device "device"; BufferIn "content"; Int64 "offset"], [];
-    proc_nr = Some 275;
     protocol_limit_warning = true;
     tests = [
       InitPartition, Always, TestResult (
@@ -6469,7 +6260,6 @@ See also C<guestfs_pwrite>." };
   { defaults with
     name = "pread_device"; added = (1, 5, 21);
     style = RBufferOut "content", [Device "device"; Int "count"; Int64 "offset"], [];
-    proc_nr = Some 276;
     protocol_limit_warning = true;
     tests = [
       InitEmpty, Always, TestResult (
@@ -6489,7 +6279,6 @@ See also C<guestfs_pread>." };
   { defaults with
     name = "lvm_canonical_lv_name"; added = (1, 5, 24);
     style = RString "lv", [Device "lvname"], [];
-    proc_nr = Some 277;
     tests = [
       InitBasicFSonLVM, IfAvailable "lvm2", TestResultString (
         [["lvm_canonical_lv_name"; "/dev/mapper/VG-LV"]], "/dev/VG/LV"), [];
@@ -6510,7 +6299,6 @@ See also C<guestfs_is_lv>, C<guestfs_canonical_device_name>." };
   { defaults with
     name = "mkfs"; added = (0, 0, 8);
     style = RErr, [String "fstype"; Device "device"], [OInt "blocksize"; OString "features"; OInt "inode"; OInt "sectorsize"; OString "label"];
-    proc_nr = Some 278;
     once_had_no_optargs = true;
     tests = [
       InitEmpty, Always, TestResultString (
@@ -6566,7 +6354,6 @@ which sets sector size for ufs filesystem.
   { defaults with
     name = "getxattr"; added = (1, 7, 24);
     style = RBufferOut "xattr", [Pathname "path"; String "name"], [];
-    proc_nr = Some 279;
     optional = Some "linuxxattrs";
     shortdesc = "get a single extended attribute";
     longdesc = "\
@@ -6589,7 +6376,6 @@ See also: C<guestfs_getxattrs>, C<guestfs_lgetxattr>, L<attr(5)>." };
   { defaults with
     name = "lgetxattr"; added = (1, 7, 24);
     style = RBufferOut "xattr", [Pathname "path"; String "name"], [];
-    proc_nr = Some 280;
     optional = Some "linuxxattrs";
     shortdesc = "get a single extended attribute";
     longdesc = "\
@@ -6612,7 +6398,6 @@ See also: C<guestfs_lgetxattrs>, C<guestfs_getxattr>, L<attr(5)>." };
   { defaults with
     name = "resize2fs_M"; added = (1, 9, 4);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 281;
     shortdesc = "resize an ext2, ext3 or ext4 filesystem to the minimum size";
     longdesc = "\
 This command is the same as C<guestfs_resize2fs>, but the filesystem
@@ -6629,7 +6414,6 @@ See also L<guestfs(3)/RESIZE2FS ERRORS>." };
   { defaults with
     name = "internal_autosync"; added = (1, 9, 7);
     style = RErr, [], [];
-    proc_nr = Some 282;
     visibility = VInternal;
     shortdesc = "internal autosync operation";
     longdesc = "\
@@ -6642,7 +6426,6 @@ handle is closed." };
   { defaults with
     name = "is_zero"; added = (1, 11, 8);
     style = RBool "zeroflag", [Pathname "path"], [];
-    proc_nr = Some 283;
     tests = [
       InitISOFS, Always, TestResultTrue (
         [["is_zero"; "/100kallzeroes"]]), [];
@@ -6657,7 +6440,6 @@ it contains all zero bytes." };
   { defaults with
     name = "is_zero_device"; added = (1, 11, 8);
     style = RBool "zeroflag", [Device "device"], [];
-    proc_nr = Some 284;
     tests = [
       InitBasicFS, Always, TestResultTrue (
         [["umount"; "/dev/sda1"; "false"; "false"];
@@ -6675,7 +6457,6 @@ Note that for large devices this can take a long time to run." };
   { defaults with
     name = "list_9p"; added = (1, 11, 12);
     style = RStringList "mounttags", [], [];
-    proc_nr = Some 285;
     shortdesc = "list 9p filesystems";
     longdesc = "\
 List all 9p filesystems attached to the guest.  A list of
@@ -6684,7 +6465,6 @@ mount tags is returned." };
   { defaults with
     name = "mount_9p"; added = (1, 11, 12);
     style = RErr, [String "mounttag"; String "mountpoint"], [OString "options"];
-    proc_nr = Some 286;
     camel_name = "Mount9P";
     shortdesc = "mount 9p filesystem";
     longdesc = "\
@@ -6698,7 +6478,6 @@ parameter." };
   { defaults with
     name = "list_dm_devices"; added = (1, 11, 15);
     style = RStringList "devices", [], [];
-    proc_nr = Some 287;
     shortdesc = "list device mapper devices";
     longdesc = "\
 List all device mapper devices.
@@ -6714,7 +6493,6 @@ volumes." };
     name = "ntfsresize"; added = (1, 3, 2);
     style = RErr, [Device "device"], [OInt64 "size"; OBool "force"];
     once_had_no_optargs = true;
-    proc_nr = Some 288;
     optional = Some "ntfsprogs"; camel_name = "NTFSResizeOpts";
     shortdesc = "resize an NTFS filesystem";
     longdesc = "\
@@ -6749,7 +6527,6 @@ See also L<ntfsresize(8)>." };
   { defaults with
     name = "btrfs_filesystem_resize"; added = (1, 11, 17);
     style = RErr, [Pathname "mountpoint"], [OInt64 "size"];
-    proc_nr = Some 289;
     optional = Some "btrfs"; camel_name = "BTRFSFilesystemResize";
     shortdesc = "resize a btrfs filesystem";
     longdesc = "\
@@ -6775,7 +6552,6 @@ See also L<btrfs(8)>." };
   { defaults with
     name = "internal_write_append"; added = (1, 19, 32);
     style = RErr, [Pathname "path"; BufferIn "content"], [];
-    proc_nr = Some 290;
     visibility = VInternal;
     protocol_limit_warning = true;
     tests = [
@@ -6796,7 +6572,6 @@ See also C<guestfs_write>." };
   { defaults with
     name = "compress_out"; added = (1, 13, 15);
     style = RErr, [String "ctype"; Pathname "file"; FileOut "zfile"], [OInt "level"];
-    proc_nr = Some 291;
     cancellable = true;
     shortdesc = "output compressed file";
     longdesc = "\
@@ -6816,7 +6591,6 @@ program being used." };
   { defaults with
     name = "compress_device_out"; added = (1, 13, 15);
     style = RErr, [String "ctype"; Device "device"; FileOut "zdevice"], [OInt "level"];
-    proc_nr = Some 292;
     cancellable = true;
     shortdesc = "output compressed device";
     longdesc = "\
@@ -6829,7 +6603,6 @@ as in C<guestfs_compress_out>." };
   { defaults with
     name = "part_to_partnum"; added = (1, 13, 25);
     style = RInt "partnum", [Device "partition"], [];
-    proc_nr = Some 293;
     tests = [
       InitPartition, Always, TestResult (
         [["part_to_partnum"; "/dev/sda1"]], "ret == 1"), [];
@@ -6849,7 +6622,6 @@ See also C<guestfs_part_to_dev>." };
   { defaults with
     name = "copy_device_to_device"; added = (1, 13, 25);
     style = RErr, [Device "src"; Device "dest"], [OInt64 "srcoffset"; OInt64 "destoffset"; OInt64 "size"; OBool "sparse"; OBool "append"];
-    proc_nr = Some 294;
     progress = true;
     shortdesc = "copy from source device to destination device";
     longdesc = "\
@@ -6886,7 +6658,6 @@ in incorrect copying." };
   { defaults with
     name = "copy_device_to_file"; added = (1, 13, 25);
     style = RErr, [Device "src"; Pathname "dest"], [OInt64 "srcoffset"; OInt64 "destoffset"; OInt64 "size"; OBool "sparse"; OBool "append"];
-    proc_nr = Some 295;
     progress = true;
     shortdesc = "copy from source device to destination file";
     longdesc = "\
@@ -6896,7 +6667,6 @@ of this call." };
   { defaults with
     name = "copy_file_to_device"; added = (1, 13, 25);
     style = RErr, [Pathname "src"; Device "dest"], [OInt64 "srcoffset"; OInt64 "destoffset"; OInt64 "size"; OBool "sparse"; OBool "append"];
-    proc_nr = Some 296;
     progress = true;
     shortdesc = "copy from source file to destination device";
     longdesc = "\
@@ -6906,7 +6676,6 @@ of this call." };
   { defaults with
     name = "copy_file_to_file"; added = (1, 13, 25);
     style = RErr, [Pathname "src"; Pathname "dest"], [OInt64 "srcoffset"; OInt64 "destoffset"; OInt64 "size"; OBool "sparse"; OBool "append"];
-    proc_nr = Some 297;
     progress = true;
     tests = [
       InitScratchFS, Always, TestResult (
@@ -6945,7 +6714,6 @@ moving functions." };
   { defaults with
     name = "tune2fs"; added = (1, 15, 4);
     style = RErr, [Device "device"], [OBool "force"; OInt "maxmountcount"; OInt "mountcount"; OString "errorbehavior"; OInt64 "group"; OInt "intervalbetweenchecks"; OInt "reservedblockspercentage"; OString "lastmounteddirectory"; OInt64 "reservedblockscount"; OInt64 "user"];
-    proc_nr = Some 298;
     camel_name = "Tune2FS";
     tests = [
       InitScratchFS, Always, TestResult (
@@ -7047,7 +6815,6 @@ works, see the L<tune2fs(8)> man page." };
   { defaults with
     name = "md_create"; added = (1, 15, 6);
     style = RErr, [String "name"; DeviceList "devices"], [OInt64 "missingbitmap"; OInt "nrdevices"; OInt "spare"; OInt64 "chunk"; OString "level"];
-    proc_nr = Some 299;
     optional = Some "mdadm"; camel_name = "MDCreate";
     shortdesc = "create a Linux md (RAID) device";
     longdesc = "\
@@ -7108,7 +6875,6 @@ If not set, this defaults to C<raid1>.
   { defaults with
     name = "list_md_devices"; added = (1, 15, 4);
     style = RStringList "devices", [], [];
-    proc_nr = Some 300;
     shortdesc = "list Linux md (RAID) devices";
     longdesc = "\
 List all Linux md devices." };
@@ -7116,7 +6882,6 @@ List all Linux md devices." };
   { defaults with
     name = "md_detail"; added = (1, 15, 6);
     style = RHashtable "info", [Device "md"], [];
-    proc_nr = Some 301;
     optional = Some "mdadm";
     shortdesc = "obtain metadata for an MD device";
     longdesc = "\
@@ -7151,7 +6916,6 @@ The name of the MD device.
   { defaults with
     name = "md_stop"; added = (1, 15, 6);
     style = RErr, [Device "md"], [];
-    proc_nr = Some 302;
     optional = Some "mdadm";
     shortdesc = "stop a Linux md (RAID) device";
     longdesc = "\
@@ -7161,7 +6925,6 @@ device is stopped, but it is not destroyed or zeroed." };
   { defaults with
     name = "blkid"; added = (1, 15, 9);
     style = RHashtable "info", [Device "device"], [];
-    proc_nr = Some 303;
     tests = [
       InitScratchFS, Always, TestResult (
         [["blkid"; "/dev/sdb1"]],
@@ -7204,7 +6967,6 @@ The usage of this device, for example C<filesystem> or C<raid>.
   { defaults with
     name = "e2fsck"; added = (1, 15, 17);
     style = RErr, [Device "device"], [OBool "correct"; OBool "forceall"];
-    proc_nr = Some 304;
     shortdesc = "check an ext2/ext3 filesystem";
     longdesc = "\
 This runs the ext2/ext3 filesystem checker on C<device>.
@@ -7232,7 +6994,6 @@ This option may not be specified at the same time as the C<correct> option.
   { defaults with
     name = "wipefs"; added = (1, 17, 6);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 306;
     optional = Some "wipefs";
     tests = [
       InitBasicFSonLVM, Always, TestRun (
@@ -7253,7 +7014,6 @@ device." };
   { defaults with
     name = "ntfsfix"; added = (1, 17, 9);
     style = RErr, [Device "device"], [OBool "clearbadsectors"];
-    proc_nr = Some 307;
     optional = Some "ntfs3g";
     tests = [
       InitPartition, Always, TestRun (
@@ -7275,7 +7035,6 @@ This is useful after cloning a disk with bad sectors to a new disk." };
   { defaults with
     name = "ntfsclone_out"; added = (1, 17, 9);
     style = RErr, [Device "device"; FileOut "backupfile"], [OBool "metadataonly"; OBool "rescue"; OBool "ignorefscheck"; OBool "preservetimestamps"; OBool "force"];
-    proc_nr = Some 308;
     optional = Some "ntfs3g"; cancellable = true;
     test_excuse = "tested in tests/ntfsclone";
     shortdesc = "save NTFS to backup file";
@@ -7298,7 +7057,6 @@ libguestfs device." };
   { defaults with
     name = "ntfsclone_in"; added = (1, 17, 9);
     style = RErr, [FileIn "backupfile"; Device "device"], [];
-    proc_nr = Some 309;
     optional = Some "ntfs3g"; cancellable = true;
     test_excuse = "tested in tests/ntfsclone";
     shortdesc = "restore NTFS from backup file";
@@ -7310,7 +7068,6 @@ any existing contents of this device." };
   { defaults with
     name = "set_label"; added = (1, 17, 9);
     style = RErr, [Mountable "mountable"; String "label"], [];
-    proc_nr = Some 310;
     tests = [
       InitBasicFS, Always, TestResultString (
         [["set_label"; "/dev/sda1"; "testlabel"];
@@ -7371,7 +7128,6 @@ To read the label on a filesystem, call C<guestfs_vfs_label>." };
   { defaults with
     name = "zero_free_space"; added = (1, 17, 18);
     style = RErr, [Pathname "directory"], [];
-    proc_nr = Some 311;
     progress = true;
     tests = [
       InitScratchFS, Always, TestRun (
@@ -7392,7 +7148,6 @@ or after calling this, depending on your requirements." };
   { defaults with
     name = "lvcreate_free"; added = (1, 17, 18);
     style = RErr, [String "logvol"; String "volgroup"; Int "percent"], [];
-    proc_nr = Some 312;
     optional = Some "lvm2";
     tests = [
       InitEmpty, Always, TestResult (
@@ -7416,7 +7171,6 @@ this will create the largest possible LV." };
   { defaults with
     name = "isoinfo_device"; added = (1, 17, 19);
     style = RStruct ("isodata", "isoinfo"), [Device "device"], [];
-    proc_nr = Some 313;
     tests = [
       InitNone, Always, TestResult (
         [["isoinfo_device"; "/dev/sdd"]],
@@ -7443,7 +7197,6 @@ L<http://wiki.osdev.org/ISO_9660#The_Primary_Volume_Descriptor>" };
   { defaults with
     name = "isoinfo"; added = (1, 17, 19);
     style = RStruct ("isodata", "isoinfo"), [Pathname "isofile"], [];
-    proc_nr = Some 314;
     shortdesc = "get ISO information from primary volume descriptor of ISO file";
     longdesc = "\
 This is the same as C<guestfs_isoinfo_device> except that it
@@ -7455,7 +7208,6 @@ you would call C<guestfs_isoinfo_device>." };
   { defaults with
     name = "vgmeta"; added = (1, 17, 20);
     style = RBufferOut "metadata", [String "vgname"], [];
-    proc_nr = Some 315;
     optional = Some "lvm2";
     shortdesc = "get volume group metadata";
     longdesc = "\
@@ -7468,7 +7220,6 @@ subject to change at any time, and is provided for information only." };
   { defaults with
     name = "md_stat"; added = (1, 17, 21);
     style = RStructList ("devices", "mdstat"), [Device "md"], [];
-    proc_nr = Some 316;
     optional = Some "mdadm";
     shortdesc = "get underlying devices from an MD device";
     longdesc = "\
@@ -7520,7 +7271,6 @@ replacement
   { defaults with
     name = "mkfs_btrfs"; added = (1, 17, 25);
     style = RErr, [DeviceList "devices"], [OInt64 "allocstart"; OInt64 "bytecount"; OString "datatype"; OInt "leafsize"; OString "label"; OString "metadata"; OInt "nodesize"; OInt "sectorsize"];
-    proc_nr = Some 317;
     optional = Some "btrfs";
     tests = [
       InitEmpty, Always, TestRun (
@@ -7540,7 +7290,6 @@ To create general filesystems, use C<guestfs_mkfs>." };
   { defaults with
     name = "get_e2attrs"; added = (1, 17, 31);
     style = RString "attrs", [Pathname "file"], [];
-    proc_nr = Some 318;
     tests = [
       InitScratchFS, Always, TestResultString (
         [["touch"; "/e2attrs1"];
@@ -7689,7 +7438,6 @@ Don't confuse these attributes with extended attributes
   { defaults with
     name = "set_e2attrs"; added = (1, 17, 31);
     style = RErr, [Pathname "file"; String "attrs"], [OBool "clear"];
-    proc_nr = Some 319;
     shortdesc = "set ext2 file attributes of a file";
     longdesc = "\
 This sets or clears the file attributes C<attrs>
@@ -7715,7 +7463,6 @@ types will result in an error." };
   { defaults with
     name = "get_e2generation"; added = (1, 17, 31);
     style = RInt64 "generation", [Pathname "file"], [];
-    proc_nr = Some 320;
     tests = [
       InitScratchFS, Always, TestResult (
         [["touch"; "/e2generation"];
@@ -7737,7 +7484,6 @@ See C<guestfs_set_e2generation>." };
   { defaults with
     name = "set_e2generation"; added = (1, 17, 31);
     style = RErr, [Pathname "file"; Int64 "generation"], [];
-    proc_nr = Some 321;
     shortdesc = "set ext2 file generation of a file";
     longdesc = "\
 This sets the ext2 file generation of a file.
@@ -7747,7 +7493,6 @@ See C<guestfs_get_e2generation>." };
   { defaults with
     name = "btrfs_subvolume_snapshot"; added = (1, 17, 35);
     style = RErr, [Pathname "source"; Pathname "dest"], [OBool "ro"; OString "qgroupid"];
-    proc_nr = Some 322;
     once_had_no_optargs = true;
     optional = Some "btrfs"; camel_name = "BTRFSSubvolumeSnapshot";
     tests = [
@@ -7774,7 +7519,6 @@ newly created snapshot will be added to." };
   { defaults with
     name = "btrfs_subvolume_delete"; added = (1, 17, 35);
     style = RErr, [Pathname "subvolume"], [];
-    proc_nr = Some 323;
     optional = Some "btrfs"; camel_name = "BTRFSSubvolumeDelete";
     tests = [
       InitPartition, Always, TestRun (
@@ -7790,7 +7534,6 @@ Delete the named btrfs subvolume or snapshot." };
   { defaults with
     name = "btrfs_subvolume_create"; added = (1, 17, 35);
     style = RErr, [Pathname "dest"], [OString "qgroupid"];
-    proc_nr = Some 324;
     once_had_no_optargs = true;
     optional = Some "btrfs"; camel_name = "BTRFSSubvolumeCreate";
     shortdesc = "create a btrfs subvolume";
@@ -7803,7 +7546,6 @@ created subvolume will be added to." };
   { defaults with
     name = "btrfs_subvolume_list"; added = (1, 17, 35);
     style = RStructList ("subvolumes", "btrfssubvolume"), [Mountable_or_Path "fs"], [];
-    proc_nr = Some 325;
     optional = Some "btrfs"; camel_name = "BTRFSSubvolumeList";
     test_excuse = "tested in tests/btrfs";
     shortdesc = "list btrfs snapshots and subvolumes";
@@ -7814,7 +7556,6 @@ which is mounted at C<fs>." };
   { defaults with
     name = "btrfs_subvolume_set_default"; added = (1, 17, 35);
     style = RErr, [Int64 "id"; Pathname "fs"], [];
-    proc_nr = Some 326;
     optional = Some "btrfs"; camel_name = "BTRFSSubvolumeSetDefault";
     test_excuse = "tested in tests/btrfs";
     shortdesc = "set default btrfs subvolume";
@@ -7826,7 +7567,6 @@ get a list of subvolumes." };
   { defaults with
     name = "btrfs_filesystem_sync"; added = (1, 17, 35);
     style = RErr, [Pathname "fs"], [];
-    proc_nr = Some 327;
     optional = Some "btrfs"; camel_name = "BTRFSFilesystemSync";
     tests = [
       InitPartition, Always, TestRun (
@@ -7844,7 +7584,6 @@ Force sync on the btrfs filesystem mounted at C<fs>." };
     name = "btrfs_filesystem_balance"; added = (1, 17, 35);
     style = RErr, [Pathname "fs"], [];
     fish_alias = ["btrfs-balance"];
-    proc_nr = Some 328;
     optional = Some "btrfs"; camel_name = "BTRFSFilesystemBalance";
     shortdesc = "balance a btrfs filesystem";
     longdesc = "\
@@ -7854,7 +7593,6 @@ across the underlying devices." };
   { defaults with
     name = "btrfs_device_add"; added = (1, 17, 35);
     style = RErr, [DeviceList "devices"; Pathname "fs"], [];
-    proc_nr = Some 329;
     optional = Some "btrfs"; camel_name = "BTRFSDeviceAdd";
     test_excuse = "test disk isn't large enough to test this thoroughly, so there is an external test in 'tests/btrfs' directory";
     shortdesc = "add devices to a btrfs filesystem";
@@ -7865,7 +7603,6 @@ mounted at C<fs>.  If C<devices> is an empty list, this does nothing." };
   { defaults with
     name = "btrfs_device_delete"; added = (1, 17, 35);
     style = RErr, [DeviceList "devices"; Pathname "fs"], [];
-    proc_nr = Some 330;
     optional = Some "btrfs"; camel_name = "BTRFSDeviceDelete";
     test_excuse = "test disk isn't large enough to test this thoroughly, so there is an external test in 'tests/btrfs' directory.";
     shortdesc = "remove devices from a btrfs filesystem";
@@ -7876,7 +7613,6 @@ If C<devices> is an empty list, this does nothing." };
   { defaults with
     name = "btrfs_set_seeding"; added = (1, 17, 43);
     style = RErr, [Device "device"; Bool "seeding"], [];
-    proc_nr = Some 331;
     optional = Some "btrfs";
     tests = [
       InitPartition, Always, TestRun (
@@ -7892,7 +7628,6 @@ a btrfs filesystem." };
   { defaults with
     name = "btrfs_fsck"; added = (1, 17, 43);
     style = RErr, [Device "device"], [OInt64 "superblock"; OBool "repair"];
-    proc_nr = Some 332;
     optional = Some "btrfs";
     tests = [
       InitPartition, Always, TestRun (
@@ -7907,7 +7642,6 @@ filesystem is stored." };
   { defaults with
     name = "filesystem_available"; added = (1, 19, 5);
     style = RBool "fsavail", [String "filesystem"], [];
-    proc_nr = Some 333;
     shortdesc = "check if filesystem is available";
     longdesc = "\
 Check whether libguestfs supports the named filesystem.
@@ -7929,7 +7663,6 @@ L<guestfs(3)/AVAILABILITY>." };
   { defaults with
     name = "fstrim"; added = (1, 19, 6);
     style = RErr, [Pathname "mountpoint"], [OInt64 "offset"; OInt64 "length"; OInt64 "minimumfreeextent"];
-    proc_nr = Some 334;
     optional = Some "fstrim";
     shortdesc = "trim free space in a filesystem";
     longdesc = "\
@@ -7958,7 +7691,6 @@ instead of, or after calling C<guestfs_zero_free_space>." };
   { defaults with
     name = "device_index"; added = (1, 19, 7);
     style = RInt "index", [Device "device"], [];
-    proc_nr = Some 335;
     tests = [
       InitEmpty, Always, TestResult (
         [["device_index"; "/dev/sda"]], "ret == 0"), []
@@ -7976,7 +7708,6 @@ See also C<guestfs_list_devices>, C<guestfs_part_to_dev>." };
   { defaults with
     name = "nr_devices"; added = (1, 19, 15);
     style = RInt "nrdisks", [], [];
-    proc_nr = Some 336;
     tests = [
       InitEmpty, Always, TestResult (
         [["nr_devices"]], "ret == 4"), []
@@ -7993,7 +7724,6 @@ call C<guestfs_max_disks>." };
   { defaults with
     name = "xfs_info"; added = (1, 19, 21);
     style = RStruct ("info", "xfsinfo"), [Dev_or_Path "pathordevice"], [];
-    proc_nr = Some 337;
     optional = Some "xfs";
     tests = [
       InitEmpty, Always, TestResult (
@@ -8014,7 +7744,6 @@ string." };
   { defaults with
     name = "pvchange_uuid"; added = (1, 19, 26);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 338;
     optional = Some "lvm2";
     tests = [
       InitEmpty, Always, TestRun (
@@ -8029,7 +7758,6 @@ Generate a new random UUID for the physical volume C<device>." };
   { defaults with
     name = "pvchange_uuid_all"; added = (1, 19, 26);
     style = RErr, [], [];
-    proc_nr = Some 339;
     optional = Some "lvm2";
     tests = [
       InitEmpty, Always, TestRun (
@@ -8044,7 +7772,6 @@ Generate new random UUIDs for all physical volumes." };
   { defaults with
     name = "vgchange_uuid"; added = (1, 19, 26);
     style = RErr, [String "vg"], [];
-    proc_nr = Some 340;
     optional = Some "lvm2";
     tests = [
       InitEmpty, Always, TestRun (
@@ -8060,7 +7787,6 @@ Generate a new random UUID for the volume group C<vg>." };
   { defaults with
     name = "vgchange_uuid_all"; added = (1, 19, 26);
     style = RErr, [], [];
-    proc_nr = Some 341;
     optional = Some "lvm2";
     tests = [
       InitEmpty, Always, TestRun (
@@ -8076,7 +7802,6 @@ Generate new random UUIDs for all volume groups." };
   { defaults with
     name = "utsname"; added = (1, 19, 27);
     style = RStruct ("uts", "utsname"), [], [];
-    proc_nr = Some 342;
     tests = [
       InitEmpty, Always, TestRun (
         [["utsname"]]), []
@@ -8090,7 +7815,6 @@ in the returned structure is defined by the API." };
   { defaults with
     name = "xfs_growfs"; added = (1, 19, 28);
     style = RErr, [Pathname "path"], [OBool "datasec"; OBool "logsec"; OBool "rtsec"; OInt64 "datasize"; OInt64 "logsize"; OInt64 "rtsize"; OInt64 "rtextsize"; OInt "maxpct"];
-    proc_nr = Some 343;
     optional = Some "xfs";
     tests = [
       InitEmpty, Always, TestResult (
@@ -8115,7 +7839,6 @@ string." };
   { defaults with
     name = "rsync"; added = (1, 19, 29);
     style = RErr, [Pathname "src"; Pathname "dest"], [OBool "archive"; OBool "deletedest"];
-    proc_nr = Some 344;
     optional = Some "rsync";
     test_excuse = "tests are in tests/rsync";
     shortdesc = "synchronize the contents of two directories";
@@ -8146,7 +7869,6 @@ Delete files at the destination that do not exist at the source.
   { defaults with
     name = "rsync_in"; added = (1, 19, 29);
     style = RErr, [String "remote"; Pathname "dest"], [OBool "archive"; OBool "deletedest"];
-    proc_nr = Some 345;
     optional = Some "rsync";
     test_excuse = "tests are in tests/rsync";
     shortdesc = "synchronize host or remote filesystem with filesystem";
@@ -8172,7 +7894,6 @@ The optional arguments are the same as those of C<guestfs_rsync>." };
   { defaults with
     name = "rsync_out"; added = (1, 19, 29);
     style = RErr, [Pathname "src"; String "remote"], [OBool "archive"; OBool "deletedest"];
-    proc_nr = Some 346;
     optional = Some "rsync";
     test_excuse = "tests are in tests/rsync";
     shortdesc = "synchronize filesystem with host or remote filesystem";
@@ -8205,7 +7926,6 @@ command (see L<guestfish(1)/glob>), for example:
   { defaults with
     name = "ls0"; added = (1, 19, 32);
     style = RErr, [Pathname "dir"; FileOut "filenames"], [];
-    proc_nr = Some 347;
     shortdesc = "get list of files in a directory";
     longdesc = "\
 This specialized command is used to get a listing of
@@ -8219,7 +7939,6 @@ C<.> and C<..> are not returned.  The filenames are not sorted." };
   { defaults with
     name = "fill_dir"; added = (1, 19, 32);
     style = RErr, [Pathname "dir"; Int "nr"], [];
-    proc_nr = Some 348;
     shortdesc = "fill a directory with empty files";
     longdesc = "\
 This function, useful for testing filesystems, creates C<nr>
@@ -8230,7 +7949,6 @@ with zeroes)." };
   { defaults with
     name = "xfs_admin"; added = (1, 19, 33);
     style = RErr, [Device "device"], [OBool "extunwritten"; OBool "imgfile"; OBool "v2log"; OBool "projid32bit"; OBool "lazycounter"; OString "label"; OString "uuid"];
-    proc_nr = Some 349;
     optional = Some "xfs";
     tests = [
         InitEmpty, Always, TestResult (
@@ -8265,7 +7983,6 @@ C<guestfs_xfs_growfs> calls." };
   { defaults with
     name = "xfs_repair"; added = (1, 19, 36);
     style = RInt "status", [Dev_or_Path "device"], [OBool "forcelogzero"; OBool "nomodify"; OBool "noprefetch"; OBool "forcegeometry"; OInt64 "maxmem"; OInt64 "ihashsize"; OInt64 "bhashsize"; OInt64 "agstride"; OString "logdev"; OString "rtdev"];
-    proc_nr = Some 366;
     optional = Some "xfs";
     tests = [
       InitEmpty, Always, TestRun (
@@ -8293,7 +8010,6 @@ detected (returns C<1>) or was not detected (returns C<0>)." };
   { defaults with
     name = "rm_f"; added = (1, 19, 42);
     style = RErr, [Pathname "path"], [];
-    proc_nr = Some 367;
     tests = [
       InitScratchFS, Always, TestResultFalse
         [["mkdir"; "/rm_f"];
@@ -8320,7 +8036,6 @@ or C<guestfs_rm_rf> to remove directories recursively." };
   { defaults with
     name = "mke2fs"; added = (1, 19, 44);
     style = RErr, [Device "device"], [OInt64 "blockscount"; OInt64 "blocksize"; OInt64 "fragsize"; OInt64 "blockspergroup"; OInt64 "numberofgroups"; OInt64 "bytesperinode"; OInt64 "inodesize"; OInt64 "journalsize"; OInt64 "numberofinodes"; OInt64 "stridesize"; OInt64 "stripewidth"; OInt64 "maxonlineresize"; OInt "reservedblockspercentage"; OInt "mmpupdateinterval"; OString "journaldevice"; OString "label"; OString "lastmounteddir"; OString "creatoros"; OString "fstype"; OString "usagetype"; OString "uuid"; OBool "forcecreate"; OBool "writesbandgrouponly"; OBool "lazyitableinit"; OBool "lazyjournalinit"; OBool "testfs"; OBool "discard"; OBool "quotatype";  OBool "extent"; OBool "filetype"; OBool "flexbg"; OBool "hasjournal"; OBool "journaldev"; OBool "largefile"; OBool "quota"; OBool "resizeinode"; OBool "sparsesuper"; OBool "uninitbg"];
-    proc_nr = Some 368;
     tests = [
          InitEmpty, Always, TestResultString (
            [["part_init"; "/dev/sda"; "mbr"];
@@ -8406,7 +8121,6 @@ silently create an ext2 filesystem instead." };
   { defaults with
     name = "list_disk_labels"; added = (1, 19, 49);
     style = RHashtable "labels", [], [];
-    proc_nr = Some 369;
     tests = [
       (* The test disks have no labels, so we can be sure there are
        * no labels.  See in tests/disk-labels/ for tests checking
@@ -8434,7 +8148,6 @@ are the full raw block device and partition names
   { defaults with
     name = "internal_hot_add_drive"; added = (1, 19, 49);
     style = RErr, [String "label"], [];
-    proc_nr = Some 370;
     visibility = VInternal;
     shortdesc = "internal hotplugging operation";
     longdesc = "\
@@ -8443,7 +8156,6 @@ This function is used internally when hotplugging drives." };
   { defaults with
     name = "internal_hot_remove_drive_precheck"; added = (1, 19, 49);
     style = RErr, [String "label"], [];
-    proc_nr = Some 371;
     visibility = VInternal;
     shortdesc = "internal hotplugging operation";
     longdesc = "\
@@ -8452,7 +8164,6 @@ This function is used internally when hotplugging drives." };
   { defaults with
     name = "internal_hot_remove_drive"; added = (1, 19, 49);
     style = RErr, [String "label"], [];
-    proc_nr = Some 372;
     visibility = VInternal;
     shortdesc = "internal hotplugging operation";
     longdesc = "\
@@ -8461,7 +8172,6 @@ This function is used internally when hotplugging drives." };
   { defaults with
     name = "mktemp"; added = (1, 19, 53);
     style = RString "path", [Pathname "tmpl"], [OString "suffix"];
-    proc_nr = Some 373;
     tests = [
       InitScratchFS, Always, TestRun (
         [["mkdir"; "/mktemp"];
@@ -8495,7 +8205,6 @@ See also: C<guestfs_mkdtemp>." };
   { defaults with
     name = "mklost_and_found"; added = (1, 19, 56);
     style = RErr, [Pathname "mountpoint"], [];
-    proc_nr = Some 374;
     tests = [
       InitBasicFS, Always, TestRun (
         [["rm_rf"; "/lost+found"];
@@ -8510,7 +8219,6 @@ which we try to create the C<lost+found> directory." };
   { defaults with
     name = "acl_get_file"; added = (1, 19, 63);
     style = RString "acl", [Pathname "path"; String "acltype"], [];
-    proc_nr = Some 375;
     optional = Some "acl";
     shortdesc = "get the POSIX ACL attached to a file";
     longdesc = "\
@@ -8536,7 +8244,6 @@ C<path> is a directory.
   { defaults with
     name = "acl_set_file"; added = (1, 19, 63);
     style = RErr, [Pathname "path"; String "acltype"; String "acl"], [];
-    proc_nr = Some 376;
     optional = Some "acl";
     tests = [
       InitScratchFS, Always, TestRun (
@@ -8603,7 +8310,6 @@ guest, use the Augeas functions (see C<guestfs_aug_init>)." };
   { defaults with
     name = "acl_delete_def_file"; added = (1, 19, 63);
     style = RErr, [Pathname "dir"], [];
-    proc_nr = Some 377;
     optional = Some "acl";
     tests = [
       (* Documentation for libacl says this should fail, but it doesn't.
@@ -8625,7 +8331,6 @@ attached to directory C<dir>." };
   { defaults with
     name = "cap_get_file"; added = (1, 19, 63);
     style = RString "cap", [Pathname "path"], [];
-    proc_nr = Some 378;
     optional = Some "linuxcaps";
     shortdesc = "get the Linux capabilities attached to a file";
     longdesc = "\
@@ -8637,7 +8342,6 @@ If no capabilities are attached to a file, an empty string is returned." };
   { defaults with
     name = "cap_set_file"; added = (1, 19, 63);
     style = RErr, [Pathname "path"; String "cap"], [];
-    proc_nr = Some 379;
     optional = Some "linuxcaps";
     tests = [
       InitScratchFS, Always, TestResultString (
@@ -8654,7 +8358,6 @@ The capabilities set C<cap> should be passed in text form
   { defaults with
     name = "list_ldm_volumes"; added = (1, 20, 0);
     style = RStringList "devices", [], [];
-    proc_nr = Some 380;
     optional = Some "ldm";
     shortdesc = "list all Windows dynamic disk volumes";
     longdesc = "\
@@ -8665,7 +8368,6 @@ device names." };
   { defaults with
     name = "list_ldm_partitions"; added = (1, 20, 0);
     style = RStringList "devices", [], [];
-    proc_nr = Some 381;
     optional = Some "ldm";
     shortdesc = "list all Windows dynamic disk partitions";
     longdesc = "\
@@ -8676,7 +8378,6 @@ device names." };
   { defaults with
     name = "ldmtool_create_all"; added = (1, 20, 0);
     style = RErr, [], [];
-    proc_nr = Some 382;
     optional = Some "ldm";
     shortdesc = "scan and create Windows dynamic disk volumes";
     longdesc = "\
@@ -8695,7 +8396,6 @@ hotplugged disks or have just created a Windows dynamic disk." };
   { defaults with
     name = "ldmtool_remove_all"; added = (1, 20, 0);
     style = RErr, [], [];
-    proc_nr = Some 383;
     optional = Some "ldm";
     shortdesc = "remove all Windows dynamic disk volumes";
     longdesc = "\
@@ -8706,7 +8406,6 @@ volumes" };
   { defaults with
     name = "ldmtool_scan"; added = (1, 20, 0);
     style = RStringList "guids", [], [];
-    proc_nr = Some 384;
     optional = Some "ldm";
     shortdesc = "scan for Windows dynamic disks";
     longdesc = "\
@@ -8720,7 +8419,6 @@ block devices, call C<guestfs_ldmtool_scan_devices> instead." };
   { defaults with
     name = "ldmtool_scan_devices"; added = (1, 20, 0);
     style = RStringList "guids", [DeviceList "devices"], [];
-    proc_nr = Some 385;
     optional = Some "ldm";
     shortdesc = "scan for Windows dynamic disks";
     longdesc = "\
@@ -8734,7 +8432,6 @@ scanned.  If this list is empty, all block devices are scanned." };
   { defaults with
     name = "ldmtool_diskgroup_name"; added = (1, 20, 0);
     style = RString "name", [String "diskgroup"], [];
-    proc_nr = Some 386;
     optional = Some "ldm";
     shortdesc = "return the name of a Windows dynamic disk group";
     longdesc = "\
@@ -8745,7 +8442,6 @@ the list returned by C<guestfs_ldmtool_scan>." };
   { defaults with
     name = "ldmtool_diskgroup_volumes"; added = (1, 20, 0);
     style = RStringList "volumes", [String "diskgroup"], [];
-    proc_nr = Some 387;
     optional = Some "ldm";
     shortdesc = "return the volumes in a Windows dynamic disk group";
     longdesc = "\
@@ -8756,7 +8452,6 @@ the list returned by C<guestfs_ldmtool_scan>." };
   { defaults with
     name = "ldmtool_diskgroup_disks"; added = (1, 20, 0);
     style = RStringList "disks", [String "diskgroup"], [];
-    proc_nr = Some 388;
     optional = Some "ldm";
     shortdesc = "return the disks in a Windows dynamic disk group";
     longdesc = "\
@@ -8767,7 +8462,6 @@ the list returned by C<guestfs_ldmtool_scan>." };
   { defaults with
     name = "ldmtool_volume_type"; added = (1, 20, 0);
     style = RString "voltype", [String "diskgroup"; String "volume"], [];
-    proc_nr = Some 389;
     optional = Some "ldm";
     shortdesc = "return the type of a Windows dynamic disk volume";
     longdesc = "\
@@ -8781,7 +8475,6 @@ Other types may also be returned." };
   { defaults with
     name = "ldmtool_volume_hint"; added = (1, 20, 0);
     style = RString "hint", [String "diskgroup"; String "volume"], [];
-    proc_nr = Some 390;
     optional = Some "ldm";
     shortdesc = "return the hint field of a Windows dynamic disk volume";
     longdesc = "\
@@ -8793,7 +8486,6 @@ not always, the name of a Windows drive, eg. C<E:>." };
   { defaults with
     name = "ldmtool_volume_partitions"; added = (1, 20, 0);
     style = RStringList "partitions", [String "diskgroup"; String "volume"], [];
-    proc_nr = Some 391;
     optional = Some "ldm";
     shortdesc = "return the partitions in a Windows dynamic disk volume";
     longdesc = "\
@@ -8803,7 +8495,6 @@ group with GUID C<diskgroup>." };
   { defaults with
     name = "part_set_gpt_type"; added = (1, 21, 1);
     style = RErr, [Device "device"; Int "partnum"; GUID "guid"], [];
-    proc_nr = Some 392;
     optional = Some "gdisk";
     tests = [
       InitGPT, Always, TestLastFail (
@@ -8826,7 +8517,6 @@ for a useful list of type GUIDs." };
   { defaults with
     name = "part_get_gpt_type"; added = (1, 21, 1);
     style = RString "guid", [Device "device"; Int "partnum"], [];
-    proc_nr = Some 393;
     optional = Some "gdisk";
     tests = [
       InitGPT, Always, TestResultString (
@@ -8844,7 +8534,6 @@ for other partition types." };
   { defaults with
     name = "rename"; added = (1, 21, 5);
     style = RErr, [Pathname "oldpath"; Pathname "newpath"], [];
-    proc_nr = Some 394;
     tests = [
       InitScratchFS, Always, TestResultFalse (
         [["mkdir"; "/rename"];
@@ -8861,7 +8550,6 @@ you are better to use C<guestfs_mv> instead." };
   { defaults with
     name = "is_whole_device"; added = (1, 21, 9);
     style = RBool "flag", [Device "device"], [];
-    proc_nr = Some 395;
     tests = [
       InitEmpty, Always, TestResultTrue (
         [["is_whole_device"; "/dev/sda"]]), [];
@@ -8879,7 +8567,6 @@ device. That is, not a partition or a logical device." };
     name = "internal_parse_mountable"; added = (1, 21, 11);
     style = RStruct ("mountable", "internal_mountable"), [Mountable "mountable"], [];
     visibility = VInternal;
-    proc_nr = Some 396;
     shortdesc = "parse a mountable string";
     longdesc = "\
 Parse a mountable string." };
@@ -8887,7 +8574,6 @@ Parse a mountable string." };
   { defaults with
     name = "internal_rhbz914931"; added = (1, 21, 14);
     style = RErr, [FileIn "filename"; Int "count"], [];
-    proc_nr = Some 397;
     visibility = VInternal;
     cancellable = true;
     shortdesc = "used only to test rhbz914931 (internal use only)";
@@ -8898,7 +8584,6 @@ deliberately crashes guestfsd." };
   { defaults with
     name = "syslinux"; added = (1, 21, 27);
     style = RErr, [Device "device"], [OString "directory"];
-    proc_nr = Some 399;
     optional = Some "syslinux";
     shortdesc = "install the SYSLINUX bootloader";
     longdesc = "\
@@ -8935,7 +8620,6 @@ See also C<guestfs_extlinux>." };
   { defaults with
     name = "extlinux"; added = (1, 21, 27);
     style = RErr, [Pathname "directory"], [];
-    proc_nr = Some 400;
     optional = Some "extlinux";
     shortdesc = "install the SYSLINUX bootloader on an ext2/3/4 or btrfs filesystem";
     longdesc = "\
@@ -8963,7 +8647,6 @@ See also C<guestfs_syslinux>." };
   { defaults with
     name = "cp_r"; added = (1, 21, 38);
     style = RErr, [Pathname "src"; Pathname "dest"], [];
-    proc_nr = Some 401;
     tests = [
       InitScratchFS, Always, TestResultString (
         [["mkdir"; "/cp_r1"];
@@ -8985,7 +8668,6 @@ writing to DOS FAT filesystems)." };
   { defaults with
     name = "remount"; added = (1, 23, 2);
     style = RErr, [Pathname "mountpoint"], [OBool "rw"];
-    proc_nr = Some 402;
     tests = [
       InitScratchFS, Always, TestLastFail (
         [["remount"; "/"; "false"];
@@ -9007,7 +8689,6 @@ parameter.  In future we may allow other flags to be adjusted." };
   { defaults with
     name = "set_uuid"; added = (1, 23, 10);
     style = RErr, [Device "device"; String "uuid"], [];
-    proc_nr = Some 403;
     tests = [
         InitBasicFS, Always, TestResultString (
           [["set_uuid"; "/dev/sda1"; stable_uuid];
@@ -9027,7 +8708,6 @@ To read the UUID on a filesystem, call C<guestfs_vfs_uuid>." };
   { defaults with
     name = "journal_open"; added = (1, 23, 11);
     style = RErr, [Pathname "directory"], [];
-    proc_nr = Some 404;
     optional = Some "journal";
     test_excuse = "tests in tests/journal subdirectory";
     shortdesc = "open the systemd journal";
@@ -9044,7 +8724,6 @@ handle by calling C<guestfs_journal_close>." };
   { defaults with
     name = "journal_close"; added = (1, 23, 11);
     style = RErr, [], [];
-    proc_nr = Some 405;
     optional = Some "journal";
     test_excuse = "tests in tests/journal subdirectory";
     shortdesc = "close the systemd journal";
@@ -9054,7 +8733,6 @@ Close the journal handle." };
   { defaults with
     name = "journal_next"; added = (1, 23, 11);
     style = RBool "more", [], [];
-    proc_nr = Some 406;
     optional = Some "journal";
     test_excuse = "tests in tests/journal subdirectory";
     shortdesc = "move to the next journal entry";
@@ -9071,7 +8749,6 @@ have reached the end of the journal." };
   { defaults with
     name = "journal_skip"; added = (1, 23, 11);
     style = RInt64 "rskip", [Int64 "skip"], [];
-    proc_nr = Some 407;
     optional = Some "journal";
     test_excuse = "tests in tests/journal subdirectory";
     shortdesc = "skip forwards or backwards in the journal";
@@ -9087,7 +8764,6 @@ the start of the journal." };
   { defaults with
     name = "internal_journal_get"; added = (1, 23, 11);
     style = RErr, [FileOut "filename"], [];
-    proc_nr = Some 408;
     visibility = VInternal;
     optional = Some "journal";
     test_excuse = "tests in tests/journal subdirectory";
@@ -9098,7 +8774,6 @@ This function is used internally when reading the journal." };
   { defaults with
     name = "journal_get_data_threshold"; added = (1, 23, 11);
     style = RInt64 "threshold", [], [];
-    proc_nr = Some 409;
     optional = Some "journal";
     test_excuse = "tests in tests/journal subdirectory";
     shortdesc = "get the data threshold for reading journal entries";
@@ -9113,7 +8788,6 @@ See also C<guestfs_journal_set_data_threshold>." };
   { defaults with
     name = "journal_set_data_threshold"; added = (1, 23, 11);
     style = RErr, [Int64 "threshold"], [];
-    proc_nr = Some 410;
     optional = Some "journal";
     test_excuse = "tests in tests/journal subdirectory";
     shortdesc = "set the data threshold for reading journal entries";
@@ -9128,7 +8802,6 @@ See also C<guestfs_journal_get_data_threshold>." };
   { defaults with
     name = "aug_setm"; added = (1, 23, 14);
     style = RInt "nodes", [String "base"; OptString "sub"; String "val"], [];
-    proc_nr = Some 411;
     tests = [
       InitBasicFS, Always, TestResultString (
         [["mkdir"; "/etc"];
@@ -9151,7 +8824,6 @@ This returns the number of nodes modified." };
   { defaults with
     name = "aug_label"; added = (1, 23, 14);
     style = RString "label", [String "augpath"], [];
-    proc_nr = Some 412;
     tests = [
       InitBasicFS, Always, TestResultString (
         [["mkdir"; "/etc"];
@@ -9168,7 +8840,6 @@ this function returns an error." };
   { defaults with
     name = "internal_upload"; added = (1, 23, 30);
     style = RErr, [FileIn "filename"; String "tmpname"; Int "mode"], [];
-    proc_nr = Some 413;
     visibility = VInternal;
     cancellable = true;
     shortdesc = "upload a file to the appliance (internal use only)";
@@ -9178,7 +8849,6 @@ This function is used internally when setting up the appliance." };
   { defaults with
     name = "internal_exit"; added = (1, 23, 30);
     style = RErr, [], [];
-    proc_nr = Some 414;
     (* Really VInternal, but we need to use it from the Perl bindings. XXX *)
     visibility = VDebug;
     cancellable = true;
@@ -9189,7 +8859,6 @@ This function is used internally when testing the appliance." };
   { defaults with
     name = "copy_attributes"; added = (1, 25, 21);
     style = RErr, [Pathname "src"; Pathname "dest"], [OBool "all"; OBool "mode"; OBool "xattributes"; OBool "ownership"];
-    proc_nr = Some 415;
     shortdesc = "copy the attributes of a path (file/directory) to another";
     longdesc = "\
 Copy the attributes of a path (which can be a file or a directory)
@@ -9227,7 +8896,6 @@ enables all the other flags, if they are not specified already.
   { defaults with
     name = "part_get_name"; added = (1, 25, 33);
     style = RString "name", [Device "device"; Int "partnum"], [];
-    proc_nr = Some 416;
     shortdesc = "get partition name";
     longdesc = "\
 This gets the partition name on partition numbered C<partnum> on
@@ -9239,7 +8907,6 @@ table.  This works on C<gpt> but not on C<mbr> partitions." };
   { defaults with
     name = "blkdiscard"; added = (1, 25, 44);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 417;
     optional = Some "blkdiscard";
     shortdesc = "discard all blocks on a device";
     longdesc = "\
@@ -9255,7 +8922,6 @@ C<guestfs_add_drive_opts>)." };
   { defaults with
     name = "blkdiscardzeroes"; added = (1, 25, 44);
     style = RBool "zeroes", [Device "device"], [];
-    proc_nr = Some 418;
     optional = Some "blkdiscardzeroes";
     shortdesc = "return true if discarded blocks are read as zeroes";
     longdesc = "\
@@ -9269,7 +8935,6 @@ read as stale or random data." };
   { defaults with
     name = "cpio_out"; added = (1, 27, 9);
     style = RErr, [String "directory"; FileOut "cpiofile"], [OString "format"];
-    proc_nr = Some 419;
     cancellable = true;
     shortdesc = "pack directory into cpio file";
     longdesc = "\
@@ -9297,7 +8962,6 @@ New (SVR4) portable format with a checksum.
   { defaults with
     name = "journal_get_realtime_usec"; added = (1, 27, 18);
     style = RInt64 "usec", [], [];
-    proc_nr = Some 420;
     optional = Some "journal";
     test_excuse = "tests in tests/journal subdirectory";
     shortdesc = "get the timestamp of the current journal entry";
@@ -9307,7 +8971,6 @@ Get the realtime (wallclock) timestamp of the current journal entry." };
   { defaults with
     name = "statns"; added = (1, 27, 53);
     style = RStruct ("statbuf", "statns"), [Pathname "path"], [];
-    proc_nr = Some 421;
     tests = [
       InitISOFS, Always, TestResult (
         [["statns"; "/empty"]], "ret->st_size == 0"), []
@@ -9321,7 +8984,6 @@ This is the same as the L<stat(2)> system call." };
   { defaults with
     name = "lstatns"; added = (1, 27, 53);
     style = RStruct ("statbuf", "statns"), [Pathname "path"], [];
-    proc_nr = Some 422;
     tests = [
       InitISOFS, Always, TestResult (
         [["lstatns"; "/empty"]], "ret->st_size == 0"), []
@@ -9339,7 +9001,6 @@ This is the same as the L<lstat(2)> system call." };
   { defaults with
     name = "internal_lstatnslist"; added = (1, 27, 53);
     style = RStructList ("statbufs", "statns"), [Pathname "path"; FilenameList "names"], [];
-    proc_nr = Some 423;
     visibility = VInternal;
     shortdesc = "lstat on multiple files";
     longdesc = "\
@@ -9348,7 +9009,6 @@ This is the internal call which implements C<guestfs_lstatnslist>." };
   { defaults with
     name = "blockdev_setra"; added = (1, 29, 10);
     style = RErr, [Device "device"; Int "sectors"], [];
-    proc_nr = Some 424;
     tests = [
       InitEmpty, Always, TestRun (
         [["blockdev_setra"; "/dev/sda"; "1024" ]]), []
@@ -9362,7 +9022,6 @@ This uses the L<blockdev(8)> command." };
   { defaults with
     name = "btrfs_subvolume_get_default"; added = (1, 29, 17);
     style = RInt64 "id", [Mountable_or_Path "fs"], [];
-    proc_nr = Some 425;
     optional = Some "btrfs"; camel_name = "BTRFSSubvolumeGetDefault";
     tests = [
       InitPartition, Always, TestResult (
@@ -9380,7 +9039,6 @@ Get the default subvolume or snapshot of a filesystem mounted at C<mountpoint>."
   { defaults with
     name = "btrfs_subvolume_show"; added = (1, 29, 17);
     style = RHashtable "btrfssubvolumeinfo", [Pathname "subvolume"], [];
-    proc_nr = Some 426;
     optional = Some "btrfs"; camel_name = "BTRFSSubvolumeShow";
     tests = [
       InitPartition, Always, TestRun (
@@ -9401,7 +9059,6 @@ Return detailed information of the subvolume." };
   { defaults with
     name = "btrfs_quota_enable"; added = (1, 29, 17);
     style = RErr, [Mountable_or_Path "fs"; Bool "enable"], [];
-    proc_nr = Some 427;
     optional = Some "btrfs"; camel_name = "BTRFSQuotaEnable";
     tests = [
       InitPartition, Always, TestRun (
@@ -9426,7 +9083,6 @@ Enable or disable subvolume quota support for filesystem which contains C<path>.
   { defaults with
     name = "btrfs_quota_rescan"; added = (1, 29, 17);
     style = RErr, [Mountable_or_Path "fs"], [];
-    proc_nr = Some 428;
     optional = Some "btrfs"; camel_name = "BTRFSQuotaRescan";
     tests = [
       InitPartition, Always, TestRun (
@@ -9447,7 +9103,6 @@ Trash all qgroup numbers and scan the metadata again with the current config." }
   { defaults with
     name = "btrfs_qgroup_limit"; added = (1, 29, 17);
     style = RErr, [Pathname "subvolume"; Int64 "size"], [];
-    proc_nr = Some 429;
     optional = Some "btrfs"; camel_name = "BTRFSQgroupLimit";
     tests = [
       InitPartition, Always, TestRun (
@@ -9469,7 +9124,6 @@ can have suffix of G, M, or K. " };
   { defaults with
     name = "btrfs_qgroup_create"; added = (1, 29, 17);
     style = RErr, [String "qgroupid"; Pathname "subvolume"], [];
-    proc_nr = Some 430;
     optional = Some "btrfs"; camel_name = "BTRFSQgroupCreate";
     tests = [
       InitPartition, Always, TestRun (
@@ -9486,7 +9140,6 @@ Create a quota group (qgroup) for subvolume at C<subvolume>." };
   { defaults with
     name = "btrfs_qgroup_destroy"; added = (1, 29, 17);
     style = RErr, [String "qgroupid"; Pathname "subvolume"], [];
-    proc_nr = Some 431;
     optional = Some "btrfs"; camel_name = "BTRFSQgroupDestroy";
     tests = [
       InitPartition, Always, TestRun (
@@ -9504,7 +9157,6 @@ Destroy a quota group." };
   { defaults with
     name = "btrfs_qgroup_show"; added = (1, 29, 17);
     style = RStructList ("qgroups", "btrfsqgroup"), [Pathname "path"], [];
-    proc_nr = Some 432;
     tests = [
       InitPartition, Always, TestRun (
         [["mkfs_btrfs"; "/dev/sda1"; ""; ""; "NOARG"; ""; "NOARG"; "NOARG"; ""; ""];
@@ -9523,7 +9175,6 @@ usages." };
   { defaults with
     name = "btrfs_qgroup_assign"; added = (1, 29, 17);
     style = RErr, [String "src"; String "dst"; Pathname "path"], [];
-    proc_nr = Some 433;
     optional = Some "btrfs"; camel_name = "BTRFSQgroupAssign";
     tests = [
       InitPartition, Always, TestRun (
@@ -9542,7 +9193,6 @@ several qgroups into a parent qgroup to share common limit." };
   { defaults with
     name = "btrfs_qgroup_remove"; added = (1, 29, 17);
     style = RErr, [String "src"; String "dst"; Pathname "path"], [];
-    proc_nr = Some 434;
     optional = Some "btrfs"; camel_name = "BTRFSQgroupRemove";
     tests = [
       InitPartition, Always, TestRun (
@@ -9561,7 +9211,6 @@ Remove qgroup C<src> from the parent qgroup C<dst>." };
   { defaults with
     name = "btrfs_scrub_start"; added = (1, 29, 22);
     style = RErr, [Pathname "path"], [];
-    proc_nr = Some 435;
     optional = Some "btrfs"; camel_name = "BTRFSScrubStart";
     tests = [
       InitPartition, Always, TestRun (
@@ -9578,7 +9227,6 @@ corrupt data." };
   { defaults with
     name = "btrfs_scrub_cancel"; added = (1, 29, 22);
     style = RErr, [Pathname "path"], [];
-    proc_nr = Some 436;
     optional = Some "btrfs"; camel_name = "BTRFSScrubCancel";
     test_excuse = "test disk isn't large enough that btrfs_scrub_start completes before we can cancel it";
     shortdesc = "cancel a running scrub";
@@ -9588,7 +9236,6 @@ Cancel a running scrub on a btrfs filesystem." };
   { defaults with
     name = "btrfs_scrub_resume"; added = (1, 29, 22);
     style = RErr, [Pathname "path"], [];
-    proc_nr = Some 437;
     optional = Some "btrfs"; camel_name = "BTRFSScrubResume";
     test_excuse = "test disk isn't large enough that btrfs_scrub_start completes before we can cancel and resume it";
     shortdesc = "resume a previously canceled or interrupted scrub";
@@ -9598,7 +9245,6 @@ Resume a previously canceled or interrupted scrub on a btrfs filesystem." };
 { defaults with
     name = "btrfs_balance_pause"; added = (1, 29, 22);
     style = RErr, [Pathname "path"], [];
-    proc_nr = Some 438;
     optional = Some "btrfs"; camel_name = "BTRFSBalancePause";
     test_excuse = "test disk isn't large enough to test this thoroughly";
     shortdesc = "pause a running balance";
@@ -9608,7 +9254,6 @@ Pause a running balance on a btrfs filesystem." };
 { defaults with
     name = "btrfs_balance_cancel"; added = (1, 29, 22);
     style = RErr, [Pathname "path"], [];
-    proc_nr = Some 439;
     optional = Some "btrfs"; camel_name = "BTRFSBalanceCancel";
     test_excuse = "test disk isn't large enough that btrfs_balance completes before we can cancel it";
     shortdesc = "cancel a running or paused balance";
@@ -9618,7 +9263,6 @@ Cancel a running balance on a btrfs filesystem." };
 { defaults with
     name = "btrfs_balance_resume"; added = (1, 29, 22);
     style = RErr, [Pathname "path"], [];
-    proc_nr = Some 440;
     optional = Some "btrfs"; camel_name = "BTRFSBalanceResume";
     test_excuse = "test disk isn't large enough that btrfs_balance completes before we can pause and resume it";
     shortdesc = "resume a paused balance";
@@ -9628,7 +9272,6 @@ Resume a paused balance on a btrfs filesystem." };
   { defaults with
     name = "btrfs_filesystem_defragment"; added = (1, 29, 22);
     style = RErr, [Pathname "path"], [OBool "flush"; OString "compress"];
-    proc_nr = Some 443;
     optional = Some "btrfs"; camel_name = "BTRFSFilesystemDefragment";
     tests = [
       InitPartition, Always, TestRun (
@@ -9648,7 +9291,6 @@ Defragment a file or directory on a btrfs filesystem. compress is one of zlib or
   { defaults with
     name = "btrfs_rescue_chunk_recover"; added = (1, 29, 22);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 444;
     optional = Some "btrfs"; camel_name = "BTRFSRescueChunkRecover";
     tests = [
       InitPartition, Always, TestRun (
@@ -9662,7 +9304,6 @@ Recover the chunk tree of btrfs filesystem by scanning the devices one by one."
   { defaults with
     name = "btrfs_rescue_super_recover"; added = (1, 29, 22);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 445;
     optional = Some "btrfs"; camel_name = "BTRFSRescueSuperRecover";
     tests = [
       InitPartition, Always, TestRun (
@@ -9676,7 +9317,6 @@ Recover bad superblocks from good copies." };
   { defaults with
     name = "part_set_gpt_guid"; added = (1, 29, 25);
     style = RErr, [Device "device"; Int "partnum"; GUID "guid"], [];
-    proc_nr = Some 446;
     optional = Some "gdisk";
     tests = [
       InitGPT, Always, TestLastFail (
@@ -9696,7 +9336,6 @@ valid GUID." };
   { defaults with
     name = "part_get_gpt_guid"; added = (1, 29, 25);
     style = RString "guid", [Device "device"; Int "partnum"], [];
-    proc_nr = Some 447;
     optional = Some "gdisk";
     tests = [
       InitGPT, Always, TestResultString (
@@ -9712,7 +9351,6 @@ Return the GUID of numbered GPT partition C<partnum>." };
 { defaults with
     name = "btrfs_balance_status"; added = (1, 29, 26);
     style = RStruct ("status", "btrfsbalance"), [Pathname "path"], [];
-    proc_nr = Some 448;
     optional = Some "btrfs"; camel_name = "BTRFSBalanceStatus";
     test_excuse = "test disk isn't large enough that btrfs_balance completes before we can get its status";
     shortdesc = "show the status of a running or paused balance";
@@ -9722,7 +9360,6 @@ Show the status of a running or paused balance on a btrfs filesystem." };
   { defaults with
     name = "btrfs_scrub_status"; added = (1, 29, 26);
     style = RStruct ("status", "btrfsscrub"), [Pathname "path"], [];
-    proc_nr = Some 449;
     optional = Some "btrfs"; camel_name = "BTRFSScrubStatus";
     tests = [
       InitPartition, Always, TestRun (
@@ -9738,7 +9375,6 @@ Show status of running or finished scrub on a btrfs filesystem." };
   { defaults with
     name = "btrfstune_seeding"; added = (1, 29, 29);
     style = RErr, [Device "device"; Bool "seeding"], [];
-    proc_nr = Some 450;
     optional = Some "btrfs"; camel_name = "BTRFSTuneSeeding";
     tests = [
       InitPartition, Always, TestRun (
@@ -9755,7 +9391,6 @@ so that you can use it to build other filesystems." };
   { defaults with
     name = "btrfstune_enable_extended_inode_refs"; added = (1, 29, 29);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 451;
     optional = Some "btrfs"; camel_name = "BTRFSTuneEnableExtendedInodeRefs";
     tests = [
       InitPartition, Always, TestRun (
@@ -9770,7 +9405,6 @@ This will Enable extended inode refs." };
   { defaults with
     name = "btrfstune_enable_skinny_metadata_extent_refs"; added = (1, 29, 29);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 452;
     optional = Some "btrfs"; camel_name = "BTRFSTuneEnableSkinnyMetadataExtentRefs";
     tests = [
       InitPartition, Always, TestRun (
@@ -9785,7 +9419,6 @@ This enable skinny metadata extent refs." };
   { defaults with
     name = "btrfs_image"; added = (1, 29, 32);
     style = RErr, [DeviceList "source"; Pathname "image"], [OInt "compresslevel"];
-    proc_nr = Some 453;
     optional = Some "btrfs"; camel_name = "BTRFSImage";
     tests = [
       InitEmpty, Always, TestRun (
@@ -9807,7 +9440,6 @@ All data will be zeroed, but metadata and the like is preserved." };
   { defaults with
     name = "part_get_mbr_part_type"; added = (1, 29, 32);
     style = RString "partitiontype", [Device "device"; Int "partnum"], [];
-    proc_nr = Some 454;
     tests = [
       InitEmpty, Always, TestResultString (
         [["part_init"; "/dev/sda"; "mbr"];
@@ -9833,7 +9465,6 @@ It returns C<primary>, C<logical>, or C<extended>." };
   { defaults with
     name = "btrfs_replace"; added = (1, 29, 48);
     style = RErr, [Device "srcdev"; Device "targetdev"; Pathname "mntpoint"], [];
-    proc_nr = Some 455;
     optional = Some "btrfs"; camel_name = "BTRFSReplace";
     test_excuse = "put the test in 'tests/btrfs' directory";
     shortdesc = "replace a btrfs managed device with another device";
@@ -9849,7 +9480,6 @@ which are currently mounted are never allowed to be used as the C<targetdev>." }
   { defaults with
     name = "set_uuid_random"; added = (1, 29, 50);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 456;
     tests = [
         InitBasicFS, Always, TestRun (
             [["set_uuid_random"; "/dev/sda1"]]), [];
@@ -9868,7 +9498,6 @@ To read the UUID on a filesystem, call C<guestfs_vfs_uuid>." };
   { defaults with
     name = "vfs_minimum_size"; added = (1, 31, 18);
     style = RInt64 "sizeinbytes", [Mountable "mountable"], [];
-    proc_nr = Some 457;
     tests = [
       InitBasicFS, Always, TestRun (
         [["vfs_minimum_size"; "/dev/sda1"]]), [];
@@ -9897,7 +9526,6 @@ See also L<ntfsresize(8)>, L<resize2fs(8)>, L<btrfs(8)>, L<xfs_info(8)>." };
   { defaults with
     name = "internal_feature_available"; added = (1, 31, 25);
     style = RInt "result", [String "group"], [];
-    proc_nr = Some 458;
     visibility = VInternal;
     shortdesc = "test availability of some parts of the API";
     longdesc = "\
@@ -9906,7 +9534,6 @@ This is the internal call which implements C<guestfs_feature_available>." };
   { defaults with
     name = "part_set_disk_guid"; added = (1, 33, 2);
     style = RErr, [Device "device"; GUID "guid"], [];
-    proc_nr = Some 459;
     optional = Some "gdisk";
     tests = [
       InitGPT, Always, TestLastFail (
@@ -9926,7 +9553,6 @@ or if C<guid> is not a valid GUID." };
   { defaults with
     name = "part_get_disk_guid"; added = (1, 33, 2);
     style = RString "guid", [Device "device"], [];
-    proc_nr = Some 460;
     optional = Some "gdisk";
     tests = [
       InitGPT, Always, TestResultString (
@@ -9943,7 +9569,6 @@ Behaviour is undefined for other partition types." };
   { defaults with
     name = "part_set_disk_guid_random"; added = (1, 33, 2);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 461;
     optional = Some "gdisk";
     tests = [
       InitGPT, Always, TestRun (
@@ -9958,7 +9583,6 @@ Return an error if the partition table of C<device> isn't GPT." };
   { defaults with
     name = "part_expand_gpt"; added = (1, 33, 2);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 462;
     optional = Some "gdisk";
     shortdesc = "move backup GPT header to the end of the disk";
     longdesc = "\
@@ -9972,7 +9596,6 @@ See also L<sgdisk(8)>." };
   { defaults with
     name = "ntfscat_i"; added = (1, 33, 14);
     style = RErr, [Mountable "device"; Int64 "inode"; FileOut "filename"], [];
-    proc_nr = Some 463;
     progress = true; cancellable = true;
     shortdesc = "download a file to the local machine given its inode";
     longdesc = "\
@@ -9988,7 +9611,6 @@ otherwise the call will fail." };
   { defaults with
     name = "download_inode"; added = (1, 33, 14);
     style = RErr, [Mountable "device"; Int64 "inode"; FileOut "filename"], [];
-    proc_nr = Some 464;
     optional = Some "sleuthkit";
     progress = true; cancellable = true;
     shortdesc = "download a file to the local machine given its inode";
@@ -10003,7 +9625,6 @@ The command is capable of downloading deleted or inaccessible files." };
   { defaults with
     name = "btrfs_filesystem_show"; added = (1, 33, 29);
     style = RStringList "devices", [Device "device"], [];
-    proc_nr = Some 465;
     optional = Some "btrfs"; camel_name = "BTRFSFilesystemsShow";
     tests = [
       InitScratchFS, Always, TestLastFail (
@@ -10030,7 +9651,6 @@ fails and the C<errno> is set to C<ENODEV>." };
   { defaults with
     name = "selinux_relabel"; added = (1, 33, 43);
     style = RErr, [String "specfile"; Pathname "path"], [OBool "force"];
-    proc_nr = Some 467;
     optional = Some "selinuxrelabel";
     test_excuse = "tests are in the tests/relabel directory";
     shortdesc = "relabel parts of the filesystem";
@@ -10053,7 +9673,6 @@ user, role and range parts of the file context is changed." };
   { defaults with
     name = "mksquashfs"; added = (1, 35, 25);
     style = RErr, [Pathname "path"; FileOut "filename"], [OString "compress"; OStringList "excludes"];
-    proc_nr = Some 471;
     optional = Some "squashfs";
     cancellable = true;
     shortdesc = "create a squashfs filesystem";
diff --git a/generator/actions_core_deprecated.ml b/generator/actions_core_deprecated.ml
index 5c1a275..3c9b890 100644
--- a/generator/actions_core_deprecated.ml
+++ b/generator/actions_core_deprecated.ml
@@ -113,7 +113,6 @@ let daemon_functions = [
     style = RErr, [Device "device";
                    Int "cyls"; Int "heads"; Int "sectors";
                    StringList "lines"], [];
-    proc_nr = Some 43;
     deprecated_by = Some "part_add";
     shortdesc = "create partitions on a block device";
     longdesc = "\
@@ -143,7 +142,6 @@ C<guestfs_part_init>" };
   { defaults with
     name = "blockdev_setbsz"; added = (1, 9, 3);
     style = RErr, [Device "device"; Int "blocksize"], [];
-    proc_nr = Some 61;
     deprecated_by = Some "mkfs";
     shortdesc = "set blocksize of block device";
     longdesc = "\
@@ -156,7 +154,6 @@ C<blocksize> option of C<guestfs_mkfs>." };
   { defaults with
     name = "tgz_in"; added = (1, 0, 3);
     style = RErr, [FileIn "tarball"; Pathname "directory"], [];
-    proc_nr = Some 71;
     deprecated_by = Some "tar_in";
     cancellable = true;
     tests = [
@@ -173,7 +170,6 @@ I<gzip compressed> tar file) into F<directory>." };
   { defaults with
     name = "tgz_out"; added = (1, 0, 3);
     style = RErr, [Pathname "directory"; FileOut "tarball"], [];
-    proc_nr = Some 72;
     deprecated_by = Some "tar_out";
     cancellable = true;
     shortdesc = "pack directory into compressed tarball";
@@ -184,7 +180,6 @@ it to local file C<tarball>." };
   { defaults with
     name = "set_e2label"; added = (1, 0, 15);
     style = RErr, [Device "device"; String "label"], [];
-    proc_nr = Some 80;
     deprecated_by = Some "set_label";
     tests = [
       InitBasicFS, Always, TestResultString (
@@ -203,7 +198,6 @@ to return the existing label on a filesystem." };
   { defaults with
     name = "get_e2label"; added = (1, 0, 15);
     style = RString "label", [Device "device"], [];
-    proc_nr = Some 81;
     deprecated_by = Some "vfs_label";
     shortdesc = "get the ext2/3/4 filesystem label";
     longdesc = "\
@@ -213,7 +207,6 @@ C<device>." };
   { defaults with
     name = "set_e2uuid"; added = (1, 0, 15);
     style = RErr, [Device "device"; String "uuid"], [];
-    proc_nr = Some 82;
     deprecated_by = Some "set_uuid";
     tests = [
         InitBasicFS, Always, TestResultString (
@@ -242,7 +235,6 @@ of a filesystem." };
   { defaults with
     name = "get_e2uuid"; added = (1, 0, 15);
     style = RString "uuid", [Device "device"], [];
-    proc_nr = Some 83;
     deprecated_by = Some "vfs_uuid";
     tests = [
       (* We can't predict what UUID will be, so just check
@@ -261,7 +253,6 @@ C<device>." };
     style = RErr, [Device "device"; Int "partnum";
                    Int "cyls"; Int "heads"; Int "sectors";
                    String "line"], [];
-    proc_nr = Some 99;
     deprecated_by = Some "part_add";
     shortdesc = "modify a single partition on a block device";
     longdesc = "\
@@ -276,7 +267,6 @@ See also: C<guestfs_part_add>" };
   { defaults with
     name = "sfdisk_l"; added = (1, 0, 26);
     style = RString "partitions", [Device "device"], [];
-    proc_nr = Some 100;
     deprecated_by = Some "part_list";
     shortdesc = "display the partition table";
     longdesc = "\
@@ -289,7 +279,6 @@ See also: C<guestfs_part_list>" };
   { defaults with
     name = "e2fsck_f"; added = (1, 0, 29);
     style = RErr, [Device "device"], [];
-    proc_nr = Some 108;
     deprecated_by = Some "e2fsck";
     shortdesc = "check an ext2/ext3 filesystem";
     longdesc = "\
@@ -300,7 +289,6 @@ even if the filesystem appears to be clean (I<-f>)." };
   { defaults with
     name = "mkswap_L"; added = (1, 0, 55);
     style = RErr, [String "label"; Device "device"], [];
-    proc_nr = Some 131;
     deprecated_by = Some "mkswap";
     tests = [
       InitEmpty, Always, TestRun (
@@ -318,7 +306,6 @@ a limitation of the kernel or swap tools." };
   { defaults with
     name = "mkswap_U"; added = (1, 0, 55);
     style = RErr, [String "uuid"; Device "device"], [];
-    proc_nr = Some 132;
     deprecated_by = Some "mkswap";
     optional = Some "linuxfsuuid";
     tests = [
@@ -333,7 +320,6 @@ Create a swap partition on C<device> with UUID C<uuid>." };
   { defaults with
     name = "sfdiskM"; added = (1, 0, 55);
     style = RErr, [Device "device"; StringList "lines"], [];
-    proc_nr = Some 139;
     deprecated_by = Some "part_add";
     shortdesc = "create partitions on a block device";
     longdesc = "\
@@ -349,7 +335,6 @@ and C<guestfs_part_disk>" };
   { defaults with
     name = "zfile"; added = (1, 0, 59);
     style = RString "description", [String "meth"; Pathname "path"], [];
-    proc_nr = Some 140;
     deprecated_by = Some "file";
     shortdesc = "determine file type inside a compressed file";
     longdesc = "\
@@ -364,7 +349,6 @@ process compressed files." };
   { defaults with
     name = "egrep"; added = (1, 0, 66);
     style = RStringList "lines", [String "regex"; Pathname "path"], [];
-    proc_nr = Some 152;
     protocol_limit_warning = true;
     deprecated_by = Some "grep";
     tests = [
@@ -380,7 +364,6 @@ matching lines." };
   { defaults with
     name = "fgrep"; added = (1, 0, 66);
     style = RStringList "lines", [String "pattern"; Pathname "path"], [];
-    proc_nr = Some 153;
     protocol_limit_warning = true;
     deprecated_by = Some "grep";
     tests = [
@@ -396,7 +379,6 @@ matching lines." };
   { defaults with
     name = "grepi"; added = (1, 0, 66);
     style = RStringList "lines", [String "regex"; Pathname "path"], [];
-    proc_nr = Some 154;
     protocol_limit_warning = true;
     deprecated_by = Some "grep";
     tests = [
@@ -412,7 +394,6 @@ matching lines." };
   { defaults with
     name = "egrepi"; added = (1, 0, 66);
     style = RStringList "lines", [String "regex"; Pathname "path"], [];
-    proc_nr = Some 155;
     protocol_limit_warning = true;
     deprecated_by = Some "grep";
     tests = [
@@ -428,7 +409,6 @@ matching lines." };
   { defaults with
     name = "fgrepi"; added = (1, 0, 66);
     style = RStringList "lines", [String "pattern"; Pathname "path"], [];
-    proc_nr = Some 156;
     protocol_limit_warning = true;
     deprecated_by = Some "grep";
     tests = [
@@ -444,7 +424,6 @@ matching lines." };
   { defaults with
     name = "zgrep"; added = (1, 0, 66);
     style = RStringList "lines", [String "regex"; Pathname "path"], [];
-    proc_nr = Some 157;
     protocol_limit_warning = true;
     deprecated_by = Some "grep";
     tests = [
@@ -460,7 +439,6 @@ matching lines." };
   { defaults with
     name = "zegrep"; added = (1, 0, 66);
     style = RStringList "lines", [String "regex"; Pathname "path"], [];
-    proc_nr = Some 158;
     protocol_limit_warning = true;
     deprecated_by = Some "grep";
     tests = [
@@ -476,7 +454,6 @@ matching lines." };
   { defaults with
     name = "zfgrep"; added = (1, 0, 66);
     style = RStringList "lines", [String "pattern"; Pathname "path"], [];
-    proc_nr = Some 159;
     protocol_limit_warning = true;
     deprecated_by = Some "grep";
     tests = [
@@ -492,7 +469,7 @@ matching lines." };
   { defaults with
     name = "zgrepi"; added = (1, 0, 66);
     style = RStringList "lines", [String "regex"; Pathname "path"], [];
-    proc_nr = Some 160;
+
     protocol_limit_warning = true;
     deprecated_by = Some "grep";
     tests = [
@@ -508,7 +485,6 @@ matching lines." };
   { defaults with
     name = "zegrepi"; added = (1, 0, 66);
     style = RStringList "lines", [String "regex"; Pathname "path"], [];
-    proc_nr = Some 161;
     protocol_limit_warning = true;
     deprecated_by = Some "grep";
     tests = [
@@ -524,7 +500,6 @@ matching lines." };
   { defaults with
     name = "zfgrepi"; added = (1, 0, 66);
     style = RStringList "lines", [String "pattern"; Pathname "path"], [];
-    proc_nr = Some 162;
     protocol_limit_warning = true;
     deprecated_by = Some "grep";
     tests = [
@@ -540,7 +515,6 @@ matching lines." };
   { defaults with
     name = "fallocate"; added = (1, 0, 66);
     style = RErr, [Pathname "path"; Int "len"], [];
-    proc_nr = Some 169;
     deprecated_by = Some "fallocate64";
     tests = [
       InitScratchFS, Always, TestResult (
@@ -560,7 +534,6 @@ attaches it as a device." };
   { defaults with
     name = "setcon"; added = (1, 0, 67);
     style = RErr, [String "context"], [];
-    proc_nr = Some 185;
     optional = Some "selinux";
     deprecated_by = Some "selinux_relabel";
     shortdesc = "set SELinux security context";
@@ -573,7 +546,6 @@ See the documentation about SELINUX in L<guestfs(3)>." };
   { defaults with
     name = "getcon"; added = (1, 0, 67);
     style = RString "context", [], [];
-    proc_nr = Some 186;
     optional = Some "selinux";
     deprecated_by = Some "selinux_relabel";
     shortdesc = "get SELinux security context";
@@ -586,7 +558,6 @@ and C<guestfs_setcon>" };
   { defaults with
     name = "mkfs_b"; added = (1, 0, 68);
     style = RErr, [String "fstype"; Int "blocksize"; Device "device"], [];
-    proc_nr = Some 187;
     deprecated_by = Some "mkfs";
     tests = [
       InitEmpty, Always, TestResultString (
@@ -624,7 +595,6 @@ the requested cluster size." };
   { defaults with
     name = "mke2journal"; added = (1, 0, 68);
     style = RErr, [Int "blocksize"; Device "device"], [];
-    proc_nr = Some 188;
     deprecated_by = Some "mke2fs";
     tests = [
       InitEmpty, Always, TestResultString (
@@ -647,7 +617,6 @@ to the command:
   { defaults with
     name = "mke2journal_L"; added = (1, 0, 68);
     style = RErr, [Int "blocksize"; String "label"; Device "device"], [];
-    proc_nr = Some 189;
     deprecated_by = Some "mke2fs";
     tests = [
       InitEmpty, Always, TestResultString (
@@ -667,7 +636,6 @@ This creates an ext2 external journal on C<device> with label C<label>." };
   { defaults with
     name = "mke2journal_U"; added = (1, 0, 68);
     style = RErr, [Int "blocksize"; String "uuid"; Device "device"], [];
-    proc_nr = Some 190;
     deprecated_by = Some "mke2fs";
     optional = Some "linuxfsuuid";
     tests = [
@@ -688,7 +656,6 @@ This creates an ext2 external journal on C<device> with UUID C<uuid>." };
   { defaults with
     name = "mke2fs_J"; added = (1, 0, 68);
     style = RErr, [String "fstype"; Int "blocksize"; Device "device"; Device "journal"], [];
-    proc_nr = Some 191;
     deprecated_by = Some "mke2fs";
     shortdesc = "make ext2/3/4 filesystem with external journal";
     longdesc = "\
@@ -703,7 +670,6 @@ See also C<guestfs_mke2journal>." };
   { defaults with
     name = "mke2fs_JL"; added = (1, 0, 68);
     style = RErr, [String "fstype"; Int "blocksize"; Device "device"; String "label"], [];
-    proc_nr = Some 192;
     deprecated_by = Some "mke2fs";
     shortdesc = "make ext2/3/4 filesystem with external journal";
     longdesc = "\
@@ -715,7 +681,6 @@ See also C<guestfs_mke2journal_L>." };
   { defaults with
     name = "mke2fs_JU"; added = (1, 0, 68);
     style = RErr, [String "fstype"; Int "blocksize"; Device "device"; String "uuid"], [];
-    proc_nr = Some 193;
     deprecated_by = Some "mke2fs";
     optional = Some "linuxfsuuid";
     shortdesc = "make ext2/3/4 filesystem with external journal";
@@ -728,7 +693,6 @@ See also C<guestfs_mke2journal_U>." };
   { defaults with
     name = "dd"; added = (1, 0, 80);
     style = RErr, [Dev_or_Path "src"; Dev_or_Path "dest"], [];
-    proc_nr = Some 217;
     deprecated_by = Some "copy_device_to_device";
     tests = [
       InitScratchFS, Always, TestResult (
@@ -753,7 +717,6 @@ This command cannot do partial copies
   { defaults with
     name = "txz_in"; added = (1, 3, 2);
     style = RErr, [FileIn "tarball"; Pathname "directory"], [];
-    proc_nr = Some 229;
     deprecated_by = Some "tar_in";
     optional = Some "xz"; cancellable = true;
     tests = [
@@ -770,7 +733,6 @@ I<xz compressed> tar file) into F<directory>." };
   { defaults with
     name = "txz_out"; added = (1, 3, 2);
     style = RErr, [Pathname "directory"; FileOut "tarball"], [];
-    proc_nr = Some 230;
     deprecated_by = Some "tar_out";
     optional = Some "xz"; cancellable = true;
     shortdesc = "pack directory into compressed tarball";
@@ -781,7 +743,6 @@ it to local file C<tarball> (as an xz compressed tar archive)." };
   { defaults with
     name = "llz"; added = (1, 17, 6);
     style = RString "listing", [Pathname "directory"], [];
-    proc_nr = Some 305;
     deprecated_by = Some "lgetxattrs";
     shortdesc = "list the files in a directory (long format with SELinux contexts)";
     longdesc = "\
diff --git a/generator/actions_debug.ml b/generator/actions_debug.ml
index 6c5970b..6a62d04 100644
--- a/generator/actions_debug.ml
+++ b/generator/actions_debug.ml
@@ -39,7 +39,6 @@ let daemon_functions = [
   { defaults with
     name = "debug"; added = (1, 0, 11);
     style = RString "result", [String "subcmd"; StringList "extraargs"], [];
-    proc_nr = Some 76;
     visibility = VDebug;
     shortdesc = "debugging and internals";
     longdesc = "\
@@ -54,7 +53,6 @@ to find out what you can do." };
   { defaults with
     name = "debug_upload"; added = (1, 3, 5);
     style = RErr, [FileIn "filename"; String "tmpname"; Int "mode"], [];
-    proc_nr = Some 241;
     visibility = VDebug;
     cancellable = true;
     shortdesc = "upload a file to the appliance (internal use only)";
diff --git a/generator/actions_hivex.ml b/generator/actions_hivex.ml
index d6e0f99..9f14e2e 100644
--- a/generator/actions_hivex.ml
+++ b/generator/actions_hivex.ml
@@ -45,7 +45,6 @@ let daemon_functions = [
   { defaults with
     name = "hivex_open"; added = (1, 19, 35);
     style = RErr, [Pathname "filename"], [OBool "verbose"; OBool "debug"; OBool "write"; OBool "unsafe"];
-    proc_nr = Some 350;
     optional = Some "hivex";
     tests = [
       InitScratchFS, Always, TestRun (
@@ -67,7 +66,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
   { defaults with
     name = "hivex_close"; added = (1, 19, 35);
     style = RErr, [], [];
-    proc_nr = Some 351;
     optional = Some "hivex";
     shortdesc = "close the current hivex handle";
     longdesc = "\
@@ -78,7 +76,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
   { defaults with
     name = "hivex_root"; added = (1, 19, 35);
     style = RInt64 "nodeh", [], [];
-    proc_nr = Some 352;
     optional = Some "hivex";
     shortdesc = "return the root node of the hive";
     longdesc = "\
@@ -89,7 +86,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
   { defaults with
     name = "hivex_node_name"; added = (1, 19, 35);
     style = RString "name", [Int64 "nodeh"], [];
-    proc_nr = Some 353;
     optional = Some "hivex";
     shortdesc = "return the name of the node";
     longdesc = "\
@@ -100,7 +96,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
   { defaults with
     name = "hivex_node_children"; added = (1, 19, 35);
     style = RStructList ("nodehs", "hivex_node"), [Int64 "nodeh"], [];
-    proc_nr = Some 354;
     optional = Some "hivex";
     shortdesc = "return list of nodes which are subkeys of node";
     longdesc = "\
@@ -111,7 +106,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
   { defaults with
     name = "hivex_node_get_child"; added = (1, 19, 35);
     style = RInt64 "child", [Int64 "nodeh"; String "name"], [];
-    proc_nr = Some 355;
     optional = Some "hivex";
     shortdesc = "return the named child of node";
     longdesc = "\
@@ -123,7 +117,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
   { defaults with
     name = "hivex_node_parent"; added = (1, 19, 35);
     style = RInt64 "parent", [Int64 "nodeh"], [];
-    proc_nr = Some 356;
     optional = Some "hivex";
     shortdesc = "return the parent of node";
     longdesc = "\
@@ -134,7 +127,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
   { defaults with
     name = "hivex_node_values"; added = (1, 19, 35);
     style = RStructList ("valuehs", "hivex_value"), [Int64 "nodeh"], [];
-    proc_nr = Some 357;
     optional = Some "hivex";
     shortdesc = "return list of values attached to node";
     longdesc = "\
@@ -145,7 +137,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
   { defaults with
     name = "hivex_node_get_value"; added = (1, 19, 35);
     style = RInt64 "valueh", [Int64 "nodeh"; String "key"], [];
-    proc_nr = Some 358;
     optional = Some "hivex";
     shortdesc = "return the named value";
     longdesc = "\
@@ -158,7 +149,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
   { defaults with
     name = "hivex_value_key"; added = (1, 19, 35);
     style = RString "key", [Int64 "valueh"], [];
-    proc_nr = Some 359;
     optional = Some "hivex";
     shortdesc = "return the key field from the (key, datatype, data) tuple";
     longdesc = "\
@@ -169,7 +159,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
   { defaults with
     name = "hivex_value_type"; added = (1, 19, 35);
     style = RInt64 "datatype", [Int64 "valueh"], [];
-    proc_nr = Some 360;
     optional = Some "hivex";
     shortdesc = "return the data type from the (key, datatype, data) tuple";
     longdesc = "\
@@ -180,7 +169,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
   { defaults with
     name = "hivex_value_value"; added = (1, 19, 35);
     style = RBufferOut "databuf", [Int64 "valueh"], [];
-    proc_nr = Some 361;
     optional = Some "hivex";
     shortdesc = "return the data field from the (key, datatype, data) tuple";
     longdesc = "\
@@ -193,7 +181,6 @@ See also: C<guestfs_hivex_value_utf8>." };
   { defaults with
     name = "hivex_commit"; added = (1, 19, 35);
     style = RErr, [OptString "filename"], [];
-    proc_nr = Some 362;
     optional = Some "hivex";
     tests = [
       InitScratchFS, Always, TestRun (
@@ -220,7 +207,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
   { defaults with
     name = "hivex_node_add_child"; added = (1, 19, 35);
     style = RInt64 "nodeh", [Int64 "parent"; String "name"], [];
-    proc_nr = Some 363;
     optional = Some "hivex";
     shortdesc = "add a child node";
     longdesc = "\
@@ -231,7 +217,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
   { defaults with
     name = "hivex_node_delete_child"; added = (1, 19, 35);
     style = RErr, [Int64 "nodeh"], [];
-    proc_nr = Some 364;
     optional = Some "hivex";
     shortdesc = "delete a node (recursively)";
     longdesc = "\
@@ -242,7 +227,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
   { defaults with
     name = "hivex_node_set_value"; added = (1, 19, 35);
     style = RErr, [Int64 "nodeh"; String "key"; Int64 "t"; BufferIn "val"], [];
-    proc_nr = Some 365;
     optional = Some "hivex";
     shortdesc = "set or replace a single value in a node";
     longdesc = "\
diff --git a/generator/actions_tsk.ml b/generator/actions_tsk.ml
index cde1c58..911f974 100644
--- a/generator/actions_tsk.ml
+++ b/generator/actions_tsk.ml
@@ -189,7 +189,6 @@ let daemon_functions = [
   { defaults with
     name = "internal_filesystem_walk"; added = (1, 33, 39);
     style = RErr, [Mountable "device"; FileOut "filename"], [];
-    proc_nr = Some 466;
     visibility = VInternal;
     optional = Some "libtsk";
     shortdesc = "walk through the filesystem content";
@@ -198,7 +197,6 @@ let daemon_functions = [
   { defaults with
     name = "download_blocks"; added = (1, 33, 45);
     style = RErr, [Mountable "device"; Int64 "start"; Int64 "stop"; FileOut "filename"], [OBool "unallocated"];
-    proc_nr = Some 468;
     optional = Some "sleuthkit";
     progress = true; cancellable = true;
     shortdesc = "download the given data units from the disk";
@@ -222,7 +220,6 @@ which data units have not been overwritten yet." };
   { defaults with
     name = "internal_find_inode"; added = (1, 35, 6);
     style = RErr, [Mountable "device"; Int64 "inode"; FileOut "filename";], [];
-    proc_nr = Some 470;
     visibility = VInternal;
     optional = Some "libtsk";
     shortdesc = "search the entries associated to the given inode";
diff --git a/generator/c.ml b/generator/c.ml
index 9251abc..1cb0880 100644
--- a/generator/c.ml
+++ b/generator/c.ml
@@ -2367,4 +2367,4 @@ and generate_linker_script () =
   pr "};\n"
 
 and generate_max_proc_nr () =
-  pr "%d\n" max_proc_nr
+  pr "%d\n" Proc_nr.max_proc_nr
diff --git a/generator/checks.ml b/generator/checks.ml
index 516264d..63536e5 100644
--- a/generator/checks.ml
+++ b/generator/checks.ml
@@ -173,26 +173,6 @@ let () =
         failwithf "long description of %s should begin with uppercase." name
   ) (actions @ fish_commands);
 
-  (* Check proc_nrs don't overlap. *)
-  let proc_nrs =
-    List.map (
-      function
-      | { name = name; proc_nr = Some proc_nr } -> (name, proc_nr)
-      | _ -> assert false
-    ) (actions |> daemon_functions) in
-  let proc_nrs =
-    List.sort (fun (_,nr1) (_,nr2) -> compare nr1 nr2) proc_nrs in
-  let rec loop = function
-    | [] -> ()
-    | [_] -> ()
-    | (name1,nr1) :: ((name2,nr2) :: _ as rest) when nr1 < nr2 ->
-        loop rest
-    | (name1,nr1) :: (name2,nr2) :: _ ->
-        failwithf "%s and %s have conflicting procedure numbers (%d, %d)"
-          name1 name2 nr1 nr2
-  in
-  loop proc_nrs;
-
   (* Check flags. *)
   List.iter (
     fun ({ name = name; style = ret, _, _ } as f) ->
diff --git a/generator/proc_nr.ml b/generator/proc_nr.ml
new file mode 100644
index 0000000..b3be319
--- /dev/null
+++ b/generator/proc_nr.ml
@@ -0,0 +1,515 @@
+(* libguestfs
+ * Copyright (C) 2009-2017 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *)
+
+(* Please read generator/README first. *)
+
+(* Each daemon function must have a unique procedure number.  Add
+ * new functions at the end.
+ *)
+let proc_nr = [
+1, "mount";
+2, "sync";
+3, "touch";
+5, "ll";
+7, "list_devices";
+8, "list_partitions";
+9, "pvs";
+10, "vgs";
+11, "lvs";
+12, "pvs_full";
+13, "vgs_full";
+14, "lvs_full";
+16, "aug_init";
+17, "aug_defvar";
+18, "aug_defnode";
+19, "aug_get";
+20, "aug_set";
+21, "aug_insert";
+22, "aug_rm";
+23, "aug_mv";
+24, "aug_match";
+25, "aug_save";
+26, "aug_close";
+27, "aug_load";
+28, "aug_ls";
+29, "rm";
+30, "rmdir";
+31, "rm_rf";
+32, "mkdir";
+33, "mkdir_p";
+34, "chmod";
+35, "chown";
+36, "exists";
+37, "is_file";
+38, "is_dir";
+39, "pvcreate";
+40, "vgcreate";
+41, "lvcreate";
+43, "sfdisk";
+44, "write_file";
+45, "umount";
+46, "mounts";
+47, "umount_all";
+48, "lvm_remove_all";
+49, "file";
+50, "command";
+51, "command_lines";
+54, "statvfs";
+55, "tune2fs_l";
+56, "blockdev_setro";
+57, "blockdev_setrw";
+58, "blockdev_getro";
+59, "blockdev_getss";
+60, "blockdev_getbsz";
+61, "blockdev_setbsz";
+62, "blockdev_getsz";
+63, "blockdev_getsize64";
+64, "blockdev_flushbufs";
+65, "blockdev_rereadpt";
+66, "upload";
+67, "download";
+68, "checksum";
+69, "tar_in";
+70, "tar_out";
+71, "tgz_in";
+72, "tgz_out";
+73, "mount_ro";
+74, "mount_options";
+75, "mount_vfs";
+76, "debug";
+77, "lvremove";
+78, "vgremove";
+79, "pvremove";
+80, "set_e2label";
+81, "get_e2label";
+82, "set_e2uuid";
+83, "get_e2uuid";
+84, "fsck";
+85, "zero";
+86, "grub_install";
+87, "cp";
+88, "cp_a";
+89, "mv";
+90, "drop_caches";
+91, "dmesg";
+92, "ping_daemon";
+93, "equal";
+94, "strings";
+95, "strings_e";
+96, "hexdump";
+97, "zerofree";
+98, "pvresize";
+99, "sfdisk_N";
+100, "sfdisk_l";
+101, "sfdisk_kernel_geometry";
+102, "sfdisk_disk_geometry";
+103, "vg_activate_all";
+104, "vg_activate";
+105, "lvresize";
+106, "resize2fs";
+108, "e2fsck_f";
+109, "sleep";
+110, "ntfs_3g_probe";
+111, "sh";
+112, "sh_lines";
+113, "glob_expand";
+114, "scrub_device";
+115, "scrub_file";
+116, "scrub_freespace";
+117, "mkdtemp";
+118, "wc_l";
+119, "wc_w";
+120, "wc_c";
+121, "head";
+122, "head_n";
+123, "tail";
+124, "tail_n";
+125, "df";
+126, "df_h";
+127, "du";
+128, "initrd_list";
+129, "mount_loop";
+130, "mkswap";
+131, "mkswap_L";
+132, "mkswap_U";
+133, "mknod";
+134, "mkfifo";
+135, "mknod_b";
+136, "mknod_c";
+137, "umask";
+138, "readdir";
+139, "sfdiskM";
+140, "zfile";
+141, "getxattrs";
+142, "lgetxattrs";
+143, "setxattr";
+144, "lsetxattr";
+145, "removexattr";
+146, "lremovexattr";
+147, "mountpoints";
+148, "mkmountpoint";
+149, "rmmountpoint";
+151, "grep";
+152, "egrep";
+153, "fgrep";
+154, "grepi";
+155, "egrepi";
+156, "fgrepi";
+157, "zgrep";
+158, "zegrep";
+159, "zfgrep";
+160, "zgrepi";
+161, "zegrepi";
+162, "zfgrepi";
+163, "realpath";
+164, "ln";
+165, "ln_f";
+166, "ln_s";
+167, "ln_sf";
+168, "readlink";
+169, "fallocate";
+170, "swapon_device";
+171, "swapoff_device";
+172, "swapon_file";
+173, "swapoff_file";
+174, "swapon_label";
+175, "swapoff_label";
+176, "swapon_uuid";
+177, "swapoff_uuid";
+178, "mkswap_file";
+179, "inotify_init";
+180, "inotify_add_watch";
+181, "inotify_rm_watch";
+182, "inotify_read";
+183, "inotify_files";
+184, "inotify_close";
+185, "setcon";
+186, "getcon";
+187, "mkfs_b";
+188, "mke2journal";
+189, "mke2journal_L";
+190, "mke2journal_U";
+191, "mke2fs_J";
+192, "mke2fs_JL";
+193, "mke2fs_JU";
+194, "modprobe";
+195, "echo_daemon";
+196, "find0";
+197, "case_sensitive_path";
+198, "vfs_type";
+199, "truncate";
+200, "truncate_size";
+201, "utimens";
+202, "mkdir_mode";
+203, "lchown";
+205, "internal_lxattrlist";
+206, "internal_readlinklist";
+207, "pread";
+208, "part_init";
+209, "part_add";
+210, "part_disk";
+211, "part_set_bootable";
+212, "part_set_name";
+213, "part_list";
+214, "part_get_parttype";
+215, "fill";
+217, "dd";
+218, "filesize";
+219, "lvrename";
+220, "vgrename";
+221, "initrd_cat";
+222, "pvuuid";
+223, "vguuid";
+224, "lvuuid";
+225, "vgpvuuids";
+226, "vglvuuids";
+227, "copy_size";
+228, "zero_device";
+229, "txz_in";
+230, "txz_out";
+232, "vgscan";
+233, "part_del";
+234, "part_get_bootable";
+235, "part_get_mbr_id";
+236, "part_set_mbr_id";
+237, "checksum_device";
+238, "lvresize_free";
+239, "aug_clear";
+240, "get_umask";
+241, "debug_upload";
+242, "base64_in";
+243, "base64_out";
+244, "checksums_out";
+245, "fill_pattern";
+246, "internal_write";
+247, "pwrite";
+248, "resize2fs_size";
+249, "pvresize_size";
+250, "ntfsresize_size";
+251, "available_all_groups";
+252, "fallocate64";
+253, "vfs_label";
+254, "vfs_uuid";
+255, "lvm_set_filter";
+256, "lvm_clear_filter";
+257, "luks_open";
+258, "luks_open_ro";
+259, "luks_close";
+260, "luks_format";
+261, "luks_format_cipher";
+262, "luks_add_key";
+263, "luks_kill_slot";
+264, "is_lv";
+265, "findfs_uuid";
+266, "findfs_label";
+267, "is_chardev";
+268, "is_blockdev";
+269, "is_fifo";
+270, "is_symlink";
+271, "is_socket";
+272, "part_to_dev";
+273, "upload_offset";
+274, "download_offset";
+275, "pwrite_device";
+276, "pread_device";
+277, "lvm_canonical_lv_name";
+278, "mkfs";
+279, "getxattr";
+280, "lgetxattr";
+281, "resize2fs_M";
+282, "internal_autosync";
+283, "is_zero";
+284, "is_zero_device";
+285, "list_9p";
+286, "mount_9p";
+287, "list_dm_devices";
+288, "ntfsresize";
+289, "btrfs_filesystem_resize";
+290, "internal_write_append";
+291, "compress_out";
+292, "compress_device_out";
+293, "part_to_partnum";
+294, "copy_device_to_device";
+295, "copy_device_to_file";
+296, "copy_file_to_device";
+297, "copy_file_to_file";
+298, "tune2fs";
+299, "md_create";
+300, "list_md_devices";
+301, "md_detail";
+302, "md_stop";
+303, "blkid";
+304, "e2fsck";
+305, "llz";
+306, "wipefs";
+307, "ntfsfix";
+308, "ntfsclone_out";
+309, "ntfsclone_in";
+310, "set_label";
+311, "zero_free_space";
+312, "lvcreate_free";
+313, "isoinfo_device";
+314, "isoinfo";
+315, "vgmeta";
+316, "md_stat";
+317, "mkfs_btrfs";
+318, "get_e2attrs";
+319, "set_e2attrs";
+320, "get_e2generation";
+321, "set_e2generation";
+322, "btrfs_subvolume_snapshot";
+323, "btrfs_subvolume_delete";
+324, "btrfs_subvolume_create";
+325, "btrfs_subvolume_list";
+326, "btrfs_subvolume_set_default";
+327, "btrfs_filesystem_sync";
+328, "btrfs_filesystem_balance";
+329, "btrfs_device_add";
+330, "btrfs_device_delete";
+331, "btrfs_set_seeding";
+332, "btrfs_fsck";
+333, "filesystem_available";
+334, "fstrim";
+335, "device_index";
+336, "nr_devices";
+337, "xfs_info";
+338, "pvchange_uuid";
+339, "pvchange_uuid_all";
+340, "vgchange_uuid";
+341, "vgchange_uuid_all";
+342, "utsname";
+343, "xfs_growfs";
+344, "rsync";
+345, "rsync_in";
+346, "rsync_out";
+347, "ls0";
+348, "fill_dir";
+349, "xfs_admin";
+350, "hivex_open";
+351, "hivex_close";
+352, "hivex_root";
+353, "hivex_node_name";
+354, "hivex_node_children";
+355, "hivex_node_get_child";
+356, "hivex_node_parent";
+357, "hivex_node_values";
+358, "hivex_node_get_value";
+359, "hivex_value_key";
+360, "hivex_value_type";
+361, "hivex_value_value";
+362, "hivex_commit";
+363, "hivex_node_add_child";
+364, "hivex_node_delete_child";
+365, "hivex_node_set_value";
+366, "xfs_repair";
+367, "rm_f";
+368, "mke2fs";
+369, "list_disk_labels";
+370, "internal_hot_add_drive";
+371, "internal_hot_remove_drive_precheck";
+372, "internal_hot_remove_drive";
+373, "mktemp";
+374, "mklost_and_found";
+375, "acl_get_file";
+376, "acl_set_file";
+377, "acl_delete_def_file";
+378, "cap_get_file";
+379, "cap_set_file";
+380, "list_ldm_volumes";
+381, "list_ldm_partitions";
+382, "ldmtool_create_all";
+383, "ldmtool_remove_all";
+384, "ldmtool_scan";
+385, "ldmtool_scan_devices";
+386, "ldmtool_diskgroup_name";
+387, "ldmtool_diskgroup_volumes";
+388, "ldmtool_diskgroup_disks";
+389, "ldmtool_volume_type";
+390, "ldmtool_volume_hint";
+391, "ldmtool_volume_partitions";
+392, "part_set_gpt_type";
+393, "part_get_gpt_type";
+394, "rename";
+395, "is_whole_device";
+396, "internal_parse_mountable";
+397, "internal_rhbz914931";
+399, "syslinux";
+400, "extlinux";
+401, "cp_r";
+402, "remount";
+403, "set_uuid";
+404, "journal_open";
+405, "journal_close";
+406, "journal_next";
+407, "journal_skip";
+408, "internal_journal_get";
+409, "journal_get_data_threshold";
+410, "journal_set_data_threshold";
+411, "aug_setm";
+412, "aug_label";
+413, "internal_upload";
+414, "internal_exit";
+415, "copy_attributes";
+416, "part_get_name";
+417, "blkdiscard";
+418, "blkdiscardzeroes";
+419, "cpio_out";
+420, "journal_get_realtime_usec";
+421, "statns";
+422, "lstatns";
+423, "internal_lstatnslist";
+424, "blockdev_setra";
+425, "btrfs_subvolume_get_default";
+426, "btrfs_subvolume_show";
+427, "btrfs_quota_enable";
+428, "btrfs_quota_rescan";
+429, "btrfs_qgroup_limit";
+430, "btrfs_qgroup_create";
+431, "btrfs_qgroup_destroy";
+432, "btrfs_qgroup_show";
+433, "btrfs_qgroup_assign";
+434, "btrfs_qgroup_remove";
+435, "btrfs_scrub_start";
+436, "btrfs_scrub_cancel";
+437, "btrfs_scrub_resume";
+438, "btrfs_balance_pause";
+439, "btrfs_balance_cancel";
+440, "btrfs_balance_resume";
+443, "btrfs_filesystem_defragment";
+444, "btrfs_rescue_chunk_recover";
+445, "btrfs_rescue_super_recover";
+446, "part_set_gpt_guid";
+447, "part_get_gpt_guid";
+448, "btrfs_balance_status";
+449, "btrfs_scrub_status";
+450, "btrfstune_seeding";
+451, "btrfstune_enable_extended_inode_refs";
+452, "btrfstune_enable_skinny_metadata_extent_refs";
+453, "btrfs_image";
+454, "part_get_mbr_part_type";
+455, "btrfs_replace";
+456, "set_uuid_random";
+457, "vfs_minimum_size";
+458, "internal_feature_available";
+459, "part_set_disk_guid";
+460, "part_get_disk_guid";
+461, "part_set_disk_guid_random";
+462, "part_expand_gpt";
+463, "ntfscat_i";
+464, "download_inode";
+465, "btrfs_filesystem_show";
+466, "internal_filesystem_walk";
+467, "selinux_relabel";
+468, "download_blocks";
+469, "aug_transform";
+470, "internal_find_inode";
+471, "mksquashfs";
+]
+
+(* End of list.  If adding a new entry, add it at the end of the list
+ * above.  Do not modify anything below this line.
+ *----------------------------------------------------------------------
+ *)
+
+let max_proc_nr =
+  (* Checks the list of procedure numbers is monotonically increasing,
+   * which guarantees there are no duplicates.
+   *)
+  let v = ref (fst (List.hd proc_nr) - 1) in
+  List.iter (
+    fun (v', _) ->
+      if !v >= v' then
+        failwith "proc_nr.ml: list of procedure numbers is not monotonically increasing";
+      v := v'
+  ) proc_nr;
+
+  (* This is used to generate the lib/MAX_PROC_NR file which
+   * contains the maximum procedure number, a surrogate for the
+   * ABI version number.  See lib/Makefile.am for the details.
+   *)
+  !v
+
+let () =
+  (* Check there are no duplicate names. *)
+  let h = Hashtbl.create (List.length proc_nr) in
+  List.iter (
+    fun (_, name) ->
+      if Hashtbl.mem h name then
+        failwith "proc_nr.ml: duplicate name in procedure table";
+      Hashtbl.add h name true
+  ) proc_nr
diff --git a/generator/proc_nr.mli b/generator/proc_nr.mli
new file mode 100644
index 0000000..85849f6
--- /dev/null
+++ b/generator/proc_nr.mli
@@ -0,0 +1,25 @@
+(* libguestfs
+ * Copyright (C) 2009-2017 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *)
+
+val proc_nr : (int * string) list
+(** The mapping of function names to procedure numbers, used for
+    daemon functions only. *)
+
+val max_proc_nr : int
+(** The largest procedure number used (also saved in [lib/MAX_PROC_NR] and
+    used as the minor version number of the shared library). *)
-- 
2.9.3


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]