From e367eb44969b00cac910c8eb14e7b3ce3ee0cc91 Mon Sep 17 00:00:00 2001 From: Fredrik Gustafsson Date: Mon, 19 Nov 2012 17:54:08 +0100 Subject: Exported ipv4address and ipv6address functions to inet module, changed and made testcases --- lib/kernel/src/inet.erl | 22 +++++++++++++++++++++- lib/kernel/src/inet_parse.erl | 13 ++++++++++++- lib/kernel/test/inet_SUITE.erl | 13 ++++++++----- 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/lib/kernel/src/inet.erl b/lib/kernel/src/inet.erl index 1a03424f88..133cc523fa 100644 --- a/lib/kernel/src/inet.erl +++ b/lib/kernel/src/inet.erl @@ -30,7 +30,9 @@ ifget/3, ifget/2, ifset/3, ifset/2, getstat/1, getstat/2, ip/1, stats/0, options/0, - pushf/3, popf/1, close/1, gethostname/0, gethostname/1]). + pushf/3, popf/1, close/1, gethostname/0, gethostname/1, + ipv4_address/1, ipv6_address/1, ipv4strict_address/1, + ipv6strict_address/1, parse_address/1, parse_strict_address/1]). -export([connect_options/2, listen_options/2, udp_options/2, sctp_options/2]). @@ -527,6 +529,24 @@ getservbyname(Name, Protocol) when is_atom(Name) -> Error -> Error end. +ipv4_address(Addr) -> + inet_parse:ipv4_address(Addr). + +ipv6_address(Addr) -> + inet_parse:ipv6_address(Addr). + +ipv4strict_address(Addr) -> + inet_parse:ipv4strict_address(Addr). + +ipv6strict_address(Addr) -> + inet_parse:ipv6strict_address(Addr). + +parse_address(Addr) -> + inet_parse:address(Addr). + +parse_strict_address(Addr) -> + inet_parse:strict_address(Addr). + %% Return a list of available options options() -> [ diff --git a/lib/kernel/src/inet_parse.erl b/lib/kernel/src/inet_parse.erl index 65edddcb46..98390d1dcc 100644 --- a/lib/kernel/src/inet_parse.erl +++ b/lib/kernel/src/inet_parse.erl @@ -37,7 +37,7 @@ -export([ipv4_address/1, ipv6_address/1]). -export([ipv4strict_address/1, ipv6strict_address/1]). --export([address/1]). +-export([address/1, strict_address/1]). -export([visible_string/1, domain/1]). -export([ntoa/1, dots/1]). -export([split_line/1]). @@ -472,6 +472,17 @@ address(Cs) when is_list(Cs) -> address(_) -> {error, einval}. +%%Parse ipv4 strict address or ipv6 strict address +strict_address(Cs) when is_list(Cs) -> + case ipv4strict_address(Cs) of + {ok,IP} -> + {ok,IP}; + _ -> + ipv6strict_address(Cs) + end; +strict_address(Cs) -> + {error, einval}. + %% %% Parse IPv4 address: %% d1.d2.d3.d4 diff --git a/lib/kernel/test/inet_SUITE.erl b/lib/kernel/test/inet_SUITE.erl index 7241b093d0..d70df1efe6 100644 --- a/lib/kernel/test/inet_SUITE.erl +++ b/lib/kernel/test/inet_SUITE.erl @@ -37,7 +37,8 @@ gethostnative_soft_restart/0, gethostnative_soft_restart/1, gethostnative_debug_level/0, gethostnative_debug_level/1, getif/1, - getif_ifr_name_overflow/1,getservbyname_overflow/1, getifaddrs/1]). + getif_ifr_name_overflow/1,getservbyname_overflow/1, getifaddrs/1, + parse_strict_address/1]). -export([get_hosts/1, get_ipv6_hosts/1, parse_hosts/1, parse_address/1, kill_gethost/0, parallell_gethost/0]). @@ -52,7 +53,7 @@ all() -> t_gethostnative, gethostnative_parallell, cname_loop, gethostnative_debug_level, gethostnative_soft_restart, getif, getif_ifr_name_overflow, getservbyname_overflow, - getifaddrs]. + getifaddrs, parse_strict_address]. groups() -> [{parse, [], [parse_hosts, parse_address]}]. @@ -599,14 +600,16 @@ t_parse_address(Func, []) -> ok; t_parse_address(Func, [{Addr,String}|L]) -> io:format("~p = ~p.~n", [Addr,String]), - {ok,Addr} = inet_parse:Func(String), + {ok,Addr} = inet:Func(String), t_parse_address(Func, L); t_parse_address(Func, [String|L]) -> io:format("~p.~n", [String]), - {error,einval} = inet_parse:Func(String), + {error,einval} = inet:Func(String), t_parse_address(Func, L). - +parse_strict_address(Config) when is_list(Config) -> + {ok, Ipv4} = inet:parse_strict_address("127.0.0.1"), + {ok, Ipv6} = inet:parse_strict_address("c11:0c22:5c33:c440:55c0:c66c:77:0088"). t_gethostnative(suite) ->[]; t_gethostnative(doc) ->[]; -- cgit v1.2.3 From e082a9bd5b08c5b8b95a3592c7bf2b449655bcb2 Mon Sep 17 00:00:00 2001 From: Fredrik Gustafsson Date: Tue, 20 Nov 2012 10:07:11 +0100 Subject: Added specs and doc --- lib/kernel/doc/src/inet.xml | 43 ++++++++++++++++++++++++++++++++++++++++++- lib/kernel/src/inet.erl | 24 ++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/lib/kernel/doc/src/inet.xml b/lib/kernel/doc/src/inet.xml index b727960d96..c6e9242a4f 100644 --- a/lib/kernel/doc/src/inet.xml +++ b/lib/kernel/doc/src/inet.xml @@ -371,7 +371,48 @@ fe80::204:acff:fe17:bf38 - + + + Parse an IPv4 address + +

Returns a ipv4 address tuple

+
+
+ + + Parse an IPv4 address strict. + +

Returns a ipv4 address tuple

+
+
+ + + Parse an IPv6 address + +

Returns a ipv6 address tuple

+
+
+ + + Parse an IPv6 address strict. + +

Returns a ipv4 address tuple

+
+
+ + + Parse an IPv4 or IPv6 address. + +

Returns a ipv4 or ipv6 address tuple

+
+
+ + + Parse an IPv4 or IPv6 address strict. + +

Returns a ipv4 or ipv6 address tuple

+
+
Return the address and port for the other end of a connection diff --git a/lib/kernel/src/inet.erl b/lib/kernel/src/inet.erl index 133cc523fa..e6f6a28896 100644 --- a/lib/kernel/src/inet.erl +++ b/lib/kernel/src/inet.erl @@ -529,21 +529,45 @@ getservbyname(Name, Protocol) when is_atom(Name) -> Error -> Error end. +-spec ipv4_address(Address) -> + {ok, IPv4Address} | {error, einval} when + Address :: string(), + IPv4Address :: ip_address(). ipv4_address(Addr) -> inet_parse:ipv4_address(Addr). +-spec ipv6_address(Address) -> + {ok, IPv6Address} | {error, einval} when + Address :: string(), + IPv6Address :: ip_address(). ipv6_address(Addr) -> inet_parse:ipv6_address(Addr). +-spec ipv4strict_address(Address) -> + {ok, IPv4Address} | {error, einval} when + Address :: string(), + IPv4Address :: ip_address(). ipv4strict_address(Addr) -> inet_parse:ipv4strict_address(Addr). +-spec ipv6strict_address(Address) -> + {ok, IPv6Address} | {error, einval} when + Address :: string(), + IPv6Address :: ip_address(). ipv6strict_address(Addr) -> inet_parse:ipv6strict_address(Addr). +-spec parse_address(Address) -> + {ok, IPAddress} | {error, einval} when + Address :: string(), + IPAddress :: ip_address(). parse_address(Addr) -> inet_parse:address(Addr). +-spec parse_strict_address(Address) -> + {ok, IPAddress} | {error, einval} when + Address :: string(), + IPAddress :: ip_address(). parse_strict_address(Addr) -> inet_parse:strict_address(Addr). -- cgit v1.2.3 From 9f3141274edd21cffcf371cca553eef56a65df8d Mon Sep 17 00:00:00 2001 From: Fredrik Gustafsson Date: Wed, 21 Nov 2012 17:13:29 +0100 Subject: Changes to function names, tests and docs of inet --- lib/kernel/doc/src/inet.xml | 20 +++++++++++--------- lib/kernel/src/inet.erl | 20 ++++++++++---------- lib/kernel/test/inet_SUITE.erl | 8 ++++---- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/lib/kernel/doc/src/inet.xml b/lib/kernel/doc/src/inet.xml index c6e9242a4f..330a188ab8 100644 --- a/lib/kernel/doc/src/inet.xml +++ b/lib/kernel/doc/src/inet.xml @@ -372,45 +372,47 @@ fe80::204:acff:fe17:bf38 - + Parse an IPv4 address

Returns a ipv4 address tuple

- + Parse an IPv4 address strict. -

Returns a ipv4 address tuple

+

Parses an IPv4 address and returns a ipv4 address tuple. Must contain four fields.

- + Parse an IPv6 address -

Returns a ipv6 address tuple

+

Parses an IPv6 address and returns a ipv6 address tuple. + If an IPv4 address is passed, an IPv4-mapped IPv6 address is returned.

- + Parse an IPv6 address strict. -

Returns a ipv4 address tuple

+

Parses an IPv6 address and returns a ipv6 address tuple. + Does not accept IPv4 adresses.

Parse an IPv4 or IPv6 address. -

Returns a ipv4 or ipv6 address tuple

+

Parses an IPv4 or IPv6 address and returns a ipv4 or ipv6 address tuple. Accepts a shortened IPv4 address.

Parse an IPv4 or IPv6 address strict. -

Returns a ipv4 or ipv6 address tuple

+

Parses an IPv4 or IPv6 address and returns a ipv4 or ipv6 address tuple. Does not accept a shortened IPv4 address.

diff --git a/lib/kernel/src/inet.erl b/lib/kernel/src/inet.erl index e6f6a28896..767b1c6bfd 100644 --- a/lib/kernel/src/inet.erl +++ b/lib/kernel/src/inet.erl @@ -31,8 +31,8 @@ getstat/1, getstat/2, ip/1, stats/0, options/0, pushf/3, popf/1, close/1, gethostname/0, gethostname/1, - ipv4_address/1, ipv6_address/1, ipv4strict_address/1, - ipv6strict_address/1, parse_address/1, parse_strict_address/1]). + parse_ipv4_address/1, parse_ipv6_address/1, parse_ipv4strict_address/1, + parse_ipv6strict_address/1, parse_address/1, parse_strict_address/1]). -export([connect_options/2, listen_options/2, udp_options/2, sctp_options/2]). @@ -529,32 +529,32 @@ getservbyname(Name, Protocol) when is_atom(Name) -> Error -> Error end. --spec ipv4_address(Address) -> +-spec parse_ipv4_address(Address) -> {ok, IPv4Address} | {error, einval} when Address :: string(), IPv4Address :: ip_address(). -ipv4_address(Addr) -> +parse_ipv4_address(Addr) -> inet_parse:ipv4_address(Addr). --spec ipv6_address(Address) -> +-spec parse_ipv6_address(Address) -> {ok, IPv6Address} | {error, einval} when Address :: string(), IPv6Address :: ip_address(). -ipv6_address(Addr) -> +parse_ipv6_address(Addr) -> inet_parse:ipv6_address(Addr). --spec ipv4strict_address(Address) -> +-spec parse_ipv4strict_address(Address) -> {ok, IPv4Address} | {error, einval} when Address :: string(), IPv4Address :: ip_address(). -ipv4strict_address(Addr) -> +parse_ipv4strict_address(Addr) -> inet_parse:ipv4strict_address(Addr). --spec ipv6strict_address(Address) -> +-spec parse_ipv6strict_address(Address) -> {ok, IPv6Address} | {error, einval} when Address :: string(), IPv6Address :: ip_address(). -ipv6strict_address(Addr) -> +parse_ipv6strict_address(Addr) -> inet_parse:ipv6strict_address(Addr). -spec parse_address(Address) -> diff --git a/lib/kernel/test/inet_SUITE.erl b/lib/kernel/test/inet_SUITE.erl index d70df1efe6..d28e9a207d 100644 --- a/lib/kernel/test/inet_SUITE.erl +++ b/lib/kernel/test/inet_SUITE.erl @@ -583,16 +583,16 @@ parse_address(Config) when is_list(Config) -> "fe80::198.168.0.", "fec0::fFfF:127.0.0.1."], t_parse_address - (ipv6_address, + (parse_ipv6_address, V6Strict++V6Sloppy++V6Err++V4Err), t_parse_address - (ipv6strict_address, + (parse_ipv6strict_address, V6Strict++V6Err++V4Err++[S || {_,S} <- V6Sloppy]), t_parse_address - (ipv4_address, + (parse_ipv4_address, V4Strict++V4Sloppy++V4Err++V6Err++[S || {_,S} <- V6Strict]), t_parse_address - (ipv4strict_address, + (parse_ipv4strict_address, V4Strict++V4Err++V6Err++[S || {_,S} <- V4Sloppy++V6Strict]). t_parse_address(Func, []) -> -- cgit v1.2.3 From 0c0146130522ae0ba5057394cedf76fa46a5d8bf Mon Sep 17 00:00:00 2001 From: Fredrik Gustafsson Date: Thu, 22 Nov 2012 11:52:19 +0100 Subject: Documentation changes inet --- lib/kernel/doc/src/inet.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/kernel/doc/src/inet.xml b/lib/kernel/doc/src/inet.xml index 330a188ab8..eff1d07735 100644 --- a/lib/kernel/doc/src/inet.xml +++ b/lib/kernel/doc/src/inet.xml @@ -375,29 +375,29 @@ fe80::204:acff:fe17:bf38 Parse an IPv4 address -

Returns a ipv4 address tuple

+

Parses an IPv4 address string and returns an ip4_address().

Parse an IPv4 address strict. -

Parses an IPv4 address and returns a ipv4 address tuple. Must contain four fields.

+

Parses an IPv4 address string containing four fields and returns a ip4_address().

Parse an IPv6 address -

Parses an IPv6 address and returns a ipv6 address tuple. - If an IPv4 address is passed, an IPv4-mapped IPv6 address is returned.

+

Parses an IPv6 address string and returns a ip6_address(). + If an IPv4 address string is passed, an IPv4-mapped IPv6 address is returned.

Parse an IPv6 address strict. -

Parses an IPv6 address and returns a ipv6 address tuple. +

Parses an IPv6 address string and returns a ip6_address(). Does not accept IPv4 adresses.

@@ -405,14 +405,14 @@ fe80::204:acff:fe17:bf38 Parse an IPv4 or IPv6 address. -

Parses an IPv4 or IPv6 address and returns a ipv4 or ipv6 address tuple. Accepts a shortened IPv4 address.

+

Parses an IPv4 or IPv6 address string and returns a ip4_address() or ip6_address(). Accepts a shortened IPv4 address string.

Parse an IPv4 or IPv6 address strict. -

Parses an IPv4 or IPv6 address and returns a ipv4 or ipv6 address tuple. Does not accept a shortened IPv4 address.

+

Parses an IPv4 or IPv6 address string and returns an ip4_address() or ip6_address(). Does not accept a shortened IPv4 address string.

-- cgit v1.2.3 From dbe3c2c9a76c631b98be020b932150ecbe4dd074 Mon Sep 17 00:00:00 2001 From: Fredrik Gustafsson Date: Fri, 23 Nov 2012 10:19:37 +0100 Subject: Inet doc clarifications --- lib/kernel/doc/src/inet.xml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/kernel/doc/src/inet.xml b/lib/kernel/doc/src/inet.xml index eff1d07735..6e9e67b9c9 100644 --- a/lib/kernel/doc/src/inet.xml +++ b/lib/kernel/doc/src/inet.xml @@ -375,21 +375,22 @@ fe80::204:acff:fe17:bf38 Parse an IPv4 address -

Parses an IPv4 address string and returns an ip4_address().

+

Parses an IPv4 address string and returns an ip4_address(). + Accepts a shortened IPv4 shortened address string.

Parse an IPv4 address strict. -

Parses an IPv4 address string containing four fields and returns a ip4_address().

+

Parses an IPv4 address string containing four fields, i.e not shortened, and returns an ip4_address().

Parse an IPv6 address -

Parses an IPv6 address string and returns a ip6_address(). +

Parses an IPv6 address string and returns an ip6_address(). If an IPv4 address string is passed, an IPv4-mapped IPv6 address is returned.

@@ -397,7 +398,7 @@ fe80::204:acff:fe17:bf38 Parse an IPv6 address strict. -

Parses an IPv6 address string and returns a ip6_address(). +

Parses an IPv6 address string and returns an ip6_address(). Does not accept IPv4 adresses.

@@ -405,7 +406,7 @@ fe80::204:acff:fe17:bf38 Parse an IPv4 or IPv6 address. -

Parses an IPv4 or IPv6 address string and returns a ip4_address() or ip6_address(). Accepts a shortened IPv4 address string.

+

Parses an IPv4 or IPv6 address string and returns an ip4_address() or ip6_address(). Accepts a shortened IPv4 address string.

-- cgit v1.2.3