Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8255264: Support for identifying the full range of IPv4 localhost addresses on Windows #1523

Closed
wants to merge 1 commit into from

Conversation

@macarte
Copy link
Contributor

@macarte macarte commented Nov 30, 2020

Modified Windows specific loopback macros to support full range of loopback addresses, commit message includes unit test data as there's no gtest's for java libraries (only hotspot compiler)

This is an expansion on the original fix for 8250521: Configure initial RTO to use minimal retry for loopback connections on Windows

IPV4 loopback addresses are defined as 127.0.0.0/8 the CIDR translates to a range of 127.0.0.0 to
127.255.255.255 inclusive.

The previous macro implementation only identified 127.0.0.1 and ::1 as loopback addresses, this is corrected in this change

Note that as IPV6 is defined as ::1/128 only ::1 is a valid loopback address


Progress

  • Change must not contain extraneous whitespace
  • Commit message must refer to an issue
  • Change must be properly reviewed

Issue

  • JDK-8255264: Support for identifying the full range of IPv4 localhost addresses on Windows

Reviewers

Download

$ git fetch https://git.openjdk.java.net/jdk pull/1523/head:pull/1523
$ git checkout pull/1523

@macarte

This comment has been minimized.

Copy link
Owner Author

@macarte macarte commented on deeae3d Nov 28, 2020

The following code was used to test the new and updated macros (IS_LOOPBACK_ADDRESS, IN4_IS_ADDR_NETLONG_LOOPBACK and IN6_IS_ADDR_V4MAPPED_LOOPBACK)

static unsigned long sa4_positive_test_data[] = {
    0x7F000000, 
    0x7F000001, 
    0x7F000100, 
    0x7F010000, 
    0x7FFFFFFF
};

static unsigned long sa4_negative_test_data[] = {
    0x00000000,	
    0x7eFFFFFE,	
    0x7eFFFFFF,	
    0x80000000,	
    0x80000001,	
    0xFFFFFFFF
};

static unsigned short sa6_v4mapped_positive_test_data[][8] = {
    {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0x007F, 0x0000},
    {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0x007F, 0x0001},
    {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0x007F, 0x0100},
    {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0x017F, 0x0000},
    {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFF7F, 0xFFFF}
};

static unsigned short sa6_v4mapped_negative_test_data[][8] = {
    {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0x0000, 0x0000},
    {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFF7E, 0xFEFF},
    {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFF7E, 0xFFFF},
    {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x007F, 0x0100},
    {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFEFF, 0x007F, 0x0100},
    {0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0xFFFF, 0x007F, 0x0100},
    {0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xFFFF, 0x007F, 0x0100},
    {0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0xFFFF, 0x007F, 0x0100},
    {0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0xFFFF, 0x007F, 0x0100},
    {0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0x007F, 0x0100},
    {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x007F, 0x0100},
    {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0x0080, 0x0000},
    {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0x0080, 0x0100},
    {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF}
};

static unsigned long sa6_positive_test_data[][4] = {
    {0x00000000, 0x00000000, 0x00000000, 1}
};

static unsigned long sa6_negative_test_data[][4] = {
    {0x00000000, 0x00000000, 0x00000000, 0},
    {0x00000000, 0x00000000, 0x00000001, 1},
    {0x00000000, 0x00000001, 0x00000000, 1},
    {0x00000001, 0x00000000, 0x00000000, 1},
    {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF}
};

#define RUN_SA_LOOPBACK_TESTS(DATA,SET_SA,TEST) \
    for (int t = 0, c = sizeof(DATA) / sizeof(DATA[0]); t < c; t++) \
    {                                                               \
        SET_SA(&sa, DATA[t]);                                       \
        EXPECT_EQ(TEST, true) << "expected \\" << #TEST << "\" to be \"true\""; \
    }                                                               \

static SOCKETADDRESS* set_sa4(SOCKETADDRESS* sa, unsigned long data)
{
	sa->sa.sa_family = AF_INET;
	sa->sa4.sin_addr.s_addr = ntohl(data);
	return sa;
}

static SOCKETADDRESS* set_sa6_vmapped_loopback(SOCKETADDRESS* sa, unsigned short data[8])
{
	sa->sa.sa_family = AF_INET6;
	sa->sa6.sin6_addr.s6_words[0] = data[0];
	sa->sa6.sin6_addr.s6_words[1] = data[1];
	sa->sa6.sin6_addr.s6_words[2] = data[2];
	sa->sa6.sin6_addr.s6_words[3] = data[3];
	sa->sa6.sin6_addr.s6_words[4] = data[4];
	sa->sa6.sin6_addr.s6_words[5] = data[5];
	sa->sa6.sin6_addr.s6_words[6] = data[6];
	sa->sa6.sin6_addr.s6_words[7] = data[7];
	return sa;
}

static SOCKETADDRESS* set_sa6_loopback(SOCKETADDRESS* sa, unsigned long data[4])
{
	sa->sa.sa_family = AF_INET6;
	((unsigned long*)&(sa->sa6.sin6_addr))[0] = data[0];
	((unsigned long*)&(sa->sa6.sin6_addr))[1] = data[1];
	((unsigned long*)&(sa->sa6.sin6_addr))[2] = data[2];
	((unsigned long*)&(sa->sa6.sin6_addr))[3] = ntohl(data[3]);
	return sa;
}

// Test that IN4_IS_ADDR_NETLONG_LOOPBACK correctly identifies loopback addresses
TEST_VM(os_windows, IN4_IS_ADDR_NETLONG_LOOPBACK) {
  RUN_SA_LOOPBACK_TESTS(sa4_positive_test_data, set_sa4, IN4_IS_ADDR_NETLONG_LOOPBACK(ntohl(sa.sa4.sin_addr.s_addr)))
  RUN_SA_LOOPBACK_TESTS(sa4_negative_test_data, set_sa4, !IN4_IS_ADDR_NETLONG_LOOPBACK(ntohl(sa.sa4.sin_addr.s_addr)))
}

// Test that IN6_IS_ADDR_V4MAPPED_LOOPBACK correctly identifies loopback addresses
TEST_VM(os_windows, IN6_IS_ADDR_V4MAPPED_LOOPBACK) {
  SOCKETADDRESS sa;
  RUN_SA_LOOPBACK_TESTS(sa6_v4mapped_positive_test_data, set_sa6_vmapped_loopback, IN6_IS_ADDR_V4MAPPED_LOOPBACK(&(sa.sa6.sin6_addr)))
  RUN_SA_LOOPBACK_TESTS(sa6_v4mapped_negative_test_data, set_sa6_vmapped_loopback, !IN6_IS_ADDR_V4MAPPED_LOOPBACK(&(sa.sa6.sin6_addr)))
}

// Test that IS_LOOPBACK_ADDRESS correctly identifies loopback addresses
TEST_VM(os_windows, IS_LOOPBACK_ADDRESS) {
  SOCKETADDRESS sa;
  RUN_SA_LOOPBACK_TESTS(sa4_positive_test_data,          set_sa4,                  IS_LOOPBACK_ADDRESS(&sa))
  RUN_SA_LOOPBACK_TESTS(sa4_negative_test_data,          set_sa4,                  !IS_LOOPBACK_ADDRESS(&sa))
  RUN_SA_LOOPBACK_TESTS(sa6_v4mapped_positive_test_data, set_sa6_vmapped_loopback, IS_LOOPBACK_ADDRESS(&sa))
  RUN_SA_LOOPBACK_TESTS(sa6_v4mapped_negative_test_data, set_sa6_vmapped_loopback, !IS_LOOPBACK_ADDRESS(&sa))
  RUN_SA_LOOPBACK_TESTS(sa6_positive_test_data,          set_sa6_loopback,         IS_LOOPBACK_ADDRESS(&sa))
  RUN_SA_LOOPBACK_TESTS(sa6_negative_test_data,          set_sa6_loopback,         !IS_LOOPBACK_ADDRESS(&sa))
}
@bridgekeeper bridgekeeper bot added the oca label Nov 30, 2020
@bridgekeeper
Copy link

@bridgekeeper bridgekeeper bot commented Nov 30, 2020

Hi @macarte, welcome to this OpenJDK project and thanks for contributing!

We do not recognize you as Contributor and need to ensure you have signed the Oracle Contributor Agreement (OCA). If you have not signed the OCA, please follow the instructions. Please fill in your GitHub username in the "Username" field of the application. Once you have signed the OCA, please let us know by writing /signed in a comment in this pull request.

If you already are an OpenJDK Author, Committer or Reviewer, please click here to open a new issue so that we can record that fact. Please use "Add GitHub user macarte" as summary for the issue.

If you are contributing this work on behalf of your employer and your employer has signed the OCA, please let us know by writing /covered in a comment in this pull request.

@macarte
Copy link
Contributor Author

@macarte macarte commented Nov 30, 2020

/covered

@openjdk
Copy link

@openjdk openjdk bot commented Nov 30, 2020

@macarte The following label will be automatically applied to this pull request:

  • net

When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing list. If you would like to change these labels, use the /label pull request command.

@openjdk openjdk bot added the net label Nov 30, 2020
@bridgekeeper
Copy link

@bridgekeeper bridgekeeper bot commented Nov 30, 2020

Thank you! Please allow for a few business days to verify that your employer has signed the OCA. Also, please note that pull requests that are pending an OCA check will not usually be evaluated, so your patience is appreciated!

@mlbridge
Copy link

@mlbridge mlbridge bot commented Dec 1, 2020

Webrevs

@mlbridge
Copy link

@mlbridge mlbridge bot commented Dec 8, 2020

Mailing list message from Mat Carter on net-dev:

Have an RFR needing a sponsor and review - this is related to Nikola's prior work on JDK-8250521: Configure initial RTO to use minimal retry for loopback connections on Windows

Thanks in advance
Mat Carter

Sent from Outlook

From: net-dev <net-dev-retn at openjdk.java.net> on behalf of Mat Carter <github.com+54955201+macarte at openjdk.java.net>
Sent: Tuesday, December 1, 2020 8:45 AM
To: net-dev at openjdk.java.net <net-dev at openjdk.java.net>
Subject: RFR: 8255264: Support for identifying the full range of IPv4 localhost addresses on Windows
?
Modified Windows specific loopback macros to support full range of loopback addresses, commit message includes unit test data as there's no gtest's for java libraries (only hotspot compiler)

This is an expansion on the original fix for 8250521: Configure initial RTO to use minimal retry for loopback connections on Windows

IPV4 loopback addresses are defined as 127.0.0.0/8 the CIDR translates to a range of 127.0.0.0 to
127.255.255.255 inclusive.

The previous macro implementation only identified 127.0.0.1 and ::1 as loopback addresses, this is corrected in this change

Note that as IPV6 is defined as ::1/128 only ::1 is a valid loopback address

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

Commit messages:
?- 8255264: Support for identifying the full range of IPv4 localhost addresses on Windows

Changes: https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.openjdk.java.net%2Fjdk%2Fpull%2F1523%2Ffiles&amp;data=04%7C01%7Cmatthew.carter%40microsoft.com%7C064ac0511f8d456a8f0108d89618859e%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637424379353506711%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=E6vGW2cv%2F8xbbwQ7LXAHnNJlCMz%2FDYuE2mf7Cb4XL%2F8%3D&amp;reserved=0
?Webrev: https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwebrevs.openjdk.java.net%2F%3Frepo%3Djdk%26pr%3D1523%26range%3D00&amp;data=04%7C01%7Cmatthew.carter%40microsoft.com%7C064ac0511f8d456a8f0108d89618859e%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637424379353506711%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=3zrfHSmoebfb6frkKY2hiPvFmE2fwfWD0JTSKP0GySU%3D&amp;reserved=0
? Issue: https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugs.openjdk.java.net%2Fbrowse%2FJDK-8255264&amp;data=04%7C01%7Cmatthew.carter%40microsoft.com%7C064ac0511f8d456a8f0108d89618859e%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637424379353506711%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=nARpDuRflecA48G4BuWoDTXLE1eq9oM%2BExoEnnaPfEM%3D&amp;reserved=0
? Stats: 17 lines in 1 file changed: 6 ins; 0 del; 11 mod
? Patch: https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.openjdk.java.net%2Fjdk%2Fpull%2F1523.diff&amp;data=04%7C01%7Cmatthew.carter%40microsoft.com%7C064ac0511f8d456a8f0108d89618859e%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637424379353506711%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=Sij9ITYHDondJDDG2SGfxMCuu84rDAncUWPiKQP3YdY%3D&amp;reserved=0
? Fetch: git fetch https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.openjdk.java.net%2Fjdk&amp;data=04%7C01%7Cmatthew.carter%40microsoft.com%7C064ac0511f8d456a8f0108d89618859e%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637424379353506711%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=EL%2BrIjy0g%2FQtORAa2bSNQQvJJ%2Fv9vB%2FJjReuUy5e798%3D&amp;reserved=0 pull/1523/head:pull/1523

PR: https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.openjdk.java.net%2Fjdk%2Fpull%2F1523&amp;data=04%7C01%7Cmatthew.carter%40microsoft.com%7C064ac0511f8d456a8f0108d89618859e%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637424379353506711%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=tDt7IKZIie43WPEiWvVEiqoGBvIg6erjxbqLw%2BqUzAg%3D&amp;reserved=0

Copy link
Contributor

@AlanBateman AlanBateman left a comment

Looks good.

@openjdk
Copy link

@openjdk openjdk bot commented Dec 23, 2020

@macarte This change now passes all automated pre-integration checks.

ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details.

After integration, the commit message for the final commit will be:

8255264: Support for identifying the full range of IPv4 localhost addresses on Windows

Reviewed-by: alanb

You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed.

At the time when this comment was updated there had been 406 new commits pushed to the master branch:

  • 91244cc: 8258557: Deproblemlist fixed problemlisted test
  • 2445735: 8258837: Remove JVM option DisableStartThread
  • a4e082e: 8253368: TLS connection always receives close_notify exception
  • 4ea8851: 8257928: Test image build failure with clang-10 due to -Wmisleading-indentation
  • f2bad3a: Merge
  • 61e5e39: 8258832: ProblemList com/sun/jdi/AfterThreadDeathTest.java on Linux-X64
  • eabc903: 8258827: ProblemList Naming/DefaultRegistryPort.java and Naming/legalRegistryNames/LegalRegistryNames.java on Windows
  • 88dd6a9: 8258802: ProblemList TestJstatdDefaults.java, TestJstatdRmiPort.java, and TestJstatdServer.java
  • 772addf: 8258790: C2: Crash on empty macro node list
  • 8da7c58: 8258443: doclint should be service-loaded with system class loader
  • ... and 396 more: https://git.openjdk.java.net/jdk/compare/65137ff02c015891a2e1ecb9da03919f0a675cf2...master

As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details.

As you do not have Committer status in this project an existing Committer must agree to sponsor your change. Possible candidates are the reviewers of this PR (@AlanBateman) but any other Committer may sponsor as well.

➡️ To flag this PR as ready for integration with the above commit message, type /integrate in a new comment. (Afterwards, your sponsor types /sponsor in a new comment to perform the integration).

@openjdk openjdk bot added the ready label Dec 23, 2020
@macarte
Copy link
Contributor Author

@macarte macarte commented Dec 23, 2020

Thanks for the review Alan

/integrate

@openjdk openjdk bot added the sponsor label Dec 23, 2020
@openjdk
Copy link

@openjdk openjdk bot commented Dec 23, 2020

@macarte
Your change (at version deeae3d) is now ready to be sponsored by a Committer.

@AlanBateman
Copy link
Contributor

@AlanBateman AlanBateman commented Jan 6, 2021

/sponsor

@openjdk openjdk bot closed this Jan 6, 2021
@openjdk
Copy link

@openjdk openjdk bot commented Jan 6, 2021

@AlanBateman @macarte Since your change was applied there have been 460 commits pushed to the master branch:

  • 8a05d60: 8259042: Inconsistent use of general primitives loops
  • e3b9da1: 8259287: AbstractCompiler marks const in wrong position for is_c1/is_c2/is_jvmci
  • 32538b5: 8193942: Regression automated test '/open/test/jdk/javax/swing/JFrame/8175301/ScaledFrameBackgroundTest.java' fails
  • 52d3fee: 8258813: [TESTBUG] Fix incorrect Vector API test output message
  • 8b45497: 8259037: livenmethods cannot find hsdis library
  • 7d76966: 8255757: Javac emits duplicate pool entries on array::clone
  • cf9908b: 8258937: Remove JVM IgnoreRewrites flag
  • 4d3d599: 8259223: Simplify boolean expression in the SunJSSE provider
  • 1b60acd: 8259252: Shenandoah: Shenandoah build failed on AArch64 after JDK-8258459
  • 7ddc2b5: 8258852: Arrays.asList() for single item could be replaced with List.of()
  • ... and 450 more: https://git.openjdk.java.net/jdk/compare/65137ff02c015891a2e1ecb9da03919f0a675cf2...master

Your commit was automatically rebased without conflicts.

Pushed as commit 7e01bc9.

💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
2 participants