RFR: 8272215: Add InetAddress methods for parsing IP address literals [v4]

Aleksei Efimov aefimov at openjdk.org
Mon Oct 23 16:54:52 UTC 2023


> ### Summary 
> 
> The changes in this PR add new API to `java.net.InetAddress`, `java.net.Inet4Address`, and
>  `java.net.Inet6Address` classes to parse IP address literals:
>  ```
> method public static java.net.InetAddress java.net.InetAddress.ofLiteral(java.lang.String)
> method public static java.net.Inet4Address java.net.Inet4Address.ofLiteral(java.lang.String)
> method public static java.net.InetAddress java.net.Inet6Address.ofLiteral(java.lang.String)
> ``` 
> 
> ### How new methods differ from existing ones
> 
> These methods differ from `InetAddress.getByName` and `InetAddress.getAllByName` in the following ways:
> 1. If a string supplied is not an address literal it is not forwarded to the system-wide resolver, but IllegalArgumentException is thrown instead. The system-wide resolver is never called from these new methods.
> 2. No reverse lookup is performed to resolve a hostname for the supplied address literal - the `InetAddress[46 ]` instances returned by the new `ofLiteral` API has no hostname set.
> 3. Each `ofLiteral` static method returns addresses of its class only. It gives the ability to check if an IP address literal is of a specific address type. 
> 
> ### The list of noteworthy changes
> - `IPv4-mapped IPv6 address` and `IPv4-compatible IPv6 addresses` require some special handling in the new API to implement all supported IP address types.  
> - All address literal parsing code has been moved from `InetAddress.getAllByName` to address type-specific `Inet4Address.parseAddressString` and `Inet6Address.parseAddressString` methods.
> - The text with scoped IPv6 addresses architecture draft IETF file has been replaced from `[draft-ietf-ipngwg-scoping-arch-04.txt]` to reference `RFC 4007: IPv6 Scoped Address Architecture`. The "RFC 4007" has been also added as `@ spec` into Inet6Address class-level Javadoc.
> 
> ### Testing 
> 
> `jdk-tier1`, `jdk-tier2`, and `jdk-tier3` test sets show no failure with the changes.
> 
> `java/net` JCK tests are failing with new methods added failure (CSR is planned for this change):
> 
> Added Methods
> -------------
> 
> java.net.Inet4Address:                  method public static java.net.Inet4Address java.net.Inet4Address.ofLiteral(java.lang.String)
> java.net.Inet6Address:                  method public static java.net.InetAddress java.net.Inet6Address.ofLiteral(java.lang.String)
> java.net.InetAddress:                   method public static java.net.InetAddress java.net.InetAddress.ofLiteral(java.lang.String)

Aleksei Efimov has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains 12 additional commits since the last revision:

 - Merge branch 'master' into JDK-8272215_API_parse_IP_literals
 - add Inet6Address##input doc section for better sections separation
 - representations -> representation, add format section links, modify headings
 - improve the ambiguous term readability according to Daniel comments
 - test update: run IPv6-scoped address with wrong scope-id test case only with at least 2 NI
 - Moving snippets to class-level docs per Michael suggestion, associated doc changes
 - Daniel suggestions
 - Merge branch 'master' into JDK-8272215_API_parse_IP_literals
 - update javadoc of internal utility methods.
 - updates for Inet6Address.ofLiteral return type, javadoc and the regression test
 - ... and 2 more: https://git.openjdk.org/jdk/compare/69ae3083...9523fbfc

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/15775/files
  - new: https://git.openjdk.org/jdk/pull/15775/files/6b3702ba..9523fbfc

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=15775&range=03
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=15775&range=02-03

  Stats: 24916 lines in 905 files changed: 15992 ins; 4652 del; 4272 mod
  Patch: https://git.openjdk.org/jdk/pull/15775.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/15775/head:pull/15775

PR: https://git.openjdk.org/jdk/pull/15775


More information about the net-dev mailing list