[Pkg-ocaml-maint-commits] [ocaml-ipaddr] 04/10: Imported Upstream version 2.3.0

Stéphane Glondu glondu at moszumanska.debian.org
Thu Jun 26 13:48:14 UTC 2014


This is an automated email from the git hooks/post-receive script.

glondu pushed a commit to branch master
in repository ocaml-ipaddr.

commit 724757d50901c3aa3b22387bc0d343085bb83462
Author: Stephane Glondu <steph at glondu.net>
Date:   Thu Jun 26 15:02:17 2014 +0200

    Imported Upstream version 2.3.0
---
 CHANGES                 |  5 +++++
 _oasis                  |  2 +-
 lib/META                |  8 ++++----
 lib/ipaddr.ml           | 11 +++++++++++
 lib/ipaddr.mli          |  7 +++++++
 lib_test/test_ipaddr.ml | 33 ++++++++++++++++++++++++++++++++-
 setup.ml                |  6 +++---
 7 files changed, 63 insertions(+), 9 deletions(-)

diff --git a/CHANGES b/CHANGES
index cf2ccf2..4474190 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,8 @@
+2.3.0 (2014-02-05):
+* Add `Ipaddr.V4.Prefix.of_netmask` for conversion from an
+  address/netmask to prefix
+* Add `Ipaddr.V4.Prefix.netmask` to generate a netmask address from a prefix
+
 2.2.0 (2014-01-27):
 * Add an [Ipaddr_unix] module to convert to-and-from the standard library.
 * Add a toplevel pretty printer in the `ipaddr.top` package.
diff --git a/_oasis b/_oasis
index 0d4cef2..3ea1f03 100644
--- a/_oasis
+++ b/_oasis
@@ -1,6 +1,6 @@
 OASISFormat: 0.3
 Name:        ipaddr
-Version:     2.2.0
+Version:     2.3.0
 Synopsis:    A library for manipulation of IP (and MAC) address representations
 Authors:     David Sheets, Anil Madhavapeddy, Hugo Heuzard
 License:     ISC
diff --git a/lib/META b/lib/META
index 1c39024..85fdbd5 100644
--- a/lib/META
+++ b/lib/META
@@ -1,6 +1,6 @@
 # OASIS_START
-# DO NOT EDIT (digest: 958d37e3e4912bb1de77a8fb8718d800)
-version = "2.2.0"
+# DO NOT EDIT (digest: 54a6da91096efa40acc6dbee5b581fb0)
+version = "2.3.0"
 description =
 "A library for manipulation of IP (and MAC) address representations"
 archive(byte) = "ipaddr.cma"
@@ -9,7 +9,7 @@ archive(native) = "ipaddr.cmxa"
 archive(native, plugin) = "ipaddr.cmxs"
 exists_if = "ipaddr.cma"
 package "unix" (
- version = "2.2.0"
+ version = "2.3.0"
  description =
  "A library for manipulation of IP (and MAC) address representations"
  requires = "unix ipaddr"
@@ -21,7 +21,7 @@ package "unix" (
 )
 
 package "top" (
- version = "2.2.0"
+ version = "2.3.0"
  description = "Toplevel printers for IP addresses"
  requires = "ipaddr"
  archive(byte) = "ipaddr_top.cma"
diff --git a/lib/ipaddr.ml b/lib/ipaddr.ml
index a3101fd..a5599ae 100644
--- a/lib/ipaddr.ml
+++ b/lib/ipaddr.ml
@@ -231,6 +231,16 @@ module V4 = struct
 
     let of_address_string s = try Some (of_address_string_exn s) with _ -> None
 
+    let of_netmask nm addr =
+      let rec find_greatest_one bits i =
+        if bits = 0_l then i-1 else find_greatest_one (bits >|> 1) (i+1)
+      in
+      let one = nm &&& (Int32.neg nm) in
+      let sz = 32 - (find_greatest_one one (if one = 0_l then 33 else 0)) in
+      if nm <> (mask sz)
+      then raise (Parse_error ("invalid netmask",to_string nm))
+      else make sz addr
+
     let to_buffer buf (pre,sz) = Printf.bprintf buf "%a/%d" to_buffer pre sz
 
     let to_string subnet =
@@ -274,6 +284,7 @@ module V4 = struct
     let broadcast (pre,sz) = pre ||| (0x0_FF_FF_FF_FF_l >|> sz)
     let network (pre,sz) = pre
     let bits (pre,sz) = sz
+    let netmask subnet = mask (bits subnet)
   end
 
   (* TODO: this could be optimized with something trie-like *)
diff --git a/lib/ipaddr.mli b/lib/ipaddr.mli
index 4188d93..3cacaed 100644
--- a/lib/ipaddr.mli
+++ b/lib/ipaddr.mli
@@ -173,6 +173,10 @@ module V4 : sig
         raising an exception. *)
     val of_address_string : string -> (t * addr) option
 
+    (** [of_netmask netmask addr] is the subnet prefix of [addr] with netmask
+        [netmask]. *)
+    val of_netmask : addr -> addr -> t
+
     (** [to_address_string prefix addr] is the network address
         constructed from [prefix] and [addr]. *)
     val to_address_string : t -> addr -> string
@@ -226,6 +230,9 @@ module V4 : sig
     (** [network subnet] is the address for [subnet]. *)
     val network : t -> addr
 
+    (** [netmask subnet] is the netmask for [subnet]. *)
+    val netmask : t -> addr
+
     (** [bits subnet] is the bit size of the [subnet] prefix. *)
     val bits : t -> int
 
diff --git a/lib_test/test_ipaddr.ml b/lib_test/test_ipaddr.ml
index b3ae637..7d833d3 100644
--- a/lib_test/test_ipaddr.ml
+++ b/lib_test/test_ipaddr.ml
@@ -170,6 +170,36 @@ module Test_v4 = struct
       assert_equal ~msg (V4.Prefix.bits subnet) bits
     ) pairs
 
+  let test_prefix_netmask () =
+    let nets = [
+      "192.168.0.1/32","255.255.255.255";
+      "192.168.0.1/31","255.255.255.254";
+      "192.168.0.1/1", "128.0.0.0";
+      "192.168.0.1/0", "0.0.0.0";
+    ] in
+    List.iter (fun (net_str,nm_str) ->
+      let prefix, v4 = V4.Prefix.of_address_string_exn net_str in
+      let nm = V4.Prefix.netmask prefix in
+      let nnm_str = V4.to_string nm in
+      let msg = Printf.sprintf "netmask %s <> %s" nnm_str nm_str in
+      assert_equal ~msg nnm_str nm_str;
+      let prefix = V4.Prefix.of_netmask nm v4 in
+      let nns = V4.Prefix.to_address_string prefix v4 in
+      let msg = Printf.sprintf "%s is %s under netmask iso" net_str nns in
+      assert_equal ~msg net_str nns
+    ) nets
+
+  let test_prefix_netmask_bad () =
+    let bad_masks = [
+      error "127.255.255.255" "invalid netmask";
+      error "255.255.254.128" "invalid netmask";
+    ] in
+    List.iter (fun (nm_str,exn) ->
+      let nm = V4.of_string_exn nm_str in
+      let addr = V4.of_string_exn "192.168.0.1" in
+      assert_raises ~msg:nm_str exn (fun () -> V4.Prefix.of_netmask nm addr)
+    ) bad_masks
+
   let test_scope () =
     let ip = V4.of_string_exn in
     (*let is subnet addr = V4.Prefix.(mem addr subnet) in*)
@@ -248,6 +278,8 @@ module Test_v4 = struct
     "network_address_rt"   >:: test_network_address_rt;
     "prefix_broadcast"     >:: test_prefix_broadcast;
     "prefix_bits"          >:: test_prefix_bits;
+    "prefix_netmask"       >:: test_prefix_netmask;
+    "prefix_netmask_bad"   >:: test_prefix_netmask_bad;
     "scope"                >:: test_scope;
     "map"                  >:: test_map;
     "prefix_map"           >:: test_prefix_map;
@@ -551,7 +583,6 @@ let test_map () =
 
 let test_prefix_mem () =
   let ip = of_string_exn in
-  let v4net = Prefix.v4_of_v6 in
   let ships = [
     ip "192.168.0.1",     V4 V4.Prefix.private_192,                   true;
     ip "192.168.0.1",     Prefix.of_string_exn "::ffff:0:0/96",       true;
diff --git a/setup.ml b/setup.ml
index 5fafb11..2f0be8b 100644
--- a/setup.ml
+++ b/setup.ml
@@ -1,7 +1,7 @@
 (* setup.ml generated for the first time by OASIS v0.4.1 *)
 
 (* OASIS_START *)
-(* DO NOT EDIT (digest: 2064a96eb9de6b7991f512d5fa478005) *)
+(* DO NOT EDIT (digest: c325a9786532b5c6c1e0901ab0ff21f8) *)
 (*
    Regenerated by OASIS v0.4.1
    Visit http://oasis.forge.ocamlcore.org for more information and
@@ -6730,7 +6730,7 @@ let setup_t =
           alpha_features = [];
           beta_features = [];
           name = "ipaddr";
-          version = "2.2.0";
+          version = "2.3.0";
           license =
             OASISLicense.DEP5License
               (OASISLicense.DEP5Unit
@@ -6938,7 +6938,7 @@ let setup_t =
        };
      oasis_fn = Some "_oasis";
      oasis_version = "0.4.1";
-     oasis_digest = Some "vz\180\151\174:\136\164H\128{((Q\000V";
+     oasis_digest = Some ";\2189o(\023=QX '_\2342\162\197";
      oasis_exec = None;
      oasis_setup_args = [];
      setup_update = false

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ocaml-maint/packages/ocaml-ipaddr.git



More information about the Pkg-ocaml-maint-commits mailing list