1 /* $NetBSD: netof.c,v 1.2 2020/05/25 20:47:36 christos Exp $ */ 2 3 #include "config.h" 4 5 #include "ntp_stdlib.h" 6 #include "ntp_calendar.h" 7 8 #include "unity.h" 9 10 #include "sockaddrtest.h" 11 12 13 void setUp(void); 14 void test_ClassBAddress(void); 15 void test_ClassCAddress(void); 16 void test_ClassAAddress(void); 17 void test_IPv6Address(void); 18 19 20 void 21 setUp(void) 22 { 23 init_lib(); 24 25 return; 26 } 27 28 29 void 30 test_ClassBAddress(void) 31 { 32 sockaddr_u input = CreateSockaddr4("172.16.2.1", NTP_PORT); 33 sockaddr_u expected = CreateSockaddr4("172.16.0.0", NTP_PORT); 34 35 sockaddr_u* actual = netof(&input); 36 37 TEST_ASSERT_TRUE(actual != NULL); 38 TEST_ASSERT_TRUE(IsEqual(expected, *actual)); 39 40 return; 41 } 42 43 void 44 test_ClassCAddress(void) 45 { 46 sockaddr_u input = CreateSockaddr4("192.0.2.255", NTP_PORT); 47 sockaddr_u expected = CreateSockaddr4("192.0.2.0", NTP_PORT); 48 49 sockaddr_u* actual = netof(&input); 50 51 TEST_ASSERT_TRUE(actual != NULL); 52 TEST_ASSERT_TRUE(IsEqual(expected, *actual)); 53 54 return; 55 } 56 57 58 void 59 test_ClassAAddress(void) 60 { 61 /* Class A addresses are assumed to be classless, 62 * thus the same address should be returned. 63 */ 64 sockaddr_u input = CreateSockaddr4("10.20.30.40", NTP_PORT); 65 sockaddr_u expected = CreateSockaddr4("10.20.30.40", NTP_PORT); 66 67 sockaddr_u* actual = netof(&input); 68 69 TEST_ASSERT_TRUE(actual != NULL); 70 TEST_ASSERT_TRUE(IsEqual(expected, *actual)); 71 72 return; 73 } 74 75 void 76 test_IPv6Address(void) 77 { 78 /* IPv6 addresses are assumed to have 64-bit host- and 64-bit network parts. */ 79 const struct in6_addr input_address = { { { 80 0x20, 0x01, 0x0d, 0xb8, 81 0x85, 0xa3, 0x08, 0xd3, 82 0x13, 0x19, 0x8a, 0x2e, 83 0x03, 0x70, 0x73, 0x34 84 } } }; // 2001:0db8:85a3:08d3:1319:8a2e:0370:7334 85 86 const struct in6_addr expected_address = { { { 87 0x20, 0x01, 0x0d, 0xb8, 88 0x85, 0xa3, 0x08, 0xd3, 89 0x00, 0x00, 0x00, 0x00, 90 0x00, 0x00, 0x00, 0x00 91 } } }; // 2001:0db8:85a3:08d3:0000:0000:0000:0000 92 93 sockaddr_u input; 94 input.sa6.sin6_family = AF_INET6; 95 input.sa6.sin6_addr = input_address; 96 SET_PORT(&input, 3000); 97 98 sockaddr_u expected; 99 expected.sa6.sin6_family = AF_INET6; 100 expected.sa6.sin6_addr = expected_address; 101 SET_PORT(&expected, 3000); 102 103 sockaddr_u* actual = netof(&input); 104 105 TEST_ASSERT_TRUE(actual != NULL); 106 TEST_ASSERT_TRUE(IsEqual(expected, *actual)); 107 108 return; 109 } 110