1 /* $NetBSD: sockaddrtest.h,v 1.3 2015/07/10 14:20:36 christos Exp $ */ 2 3 #ifndef TESTS_SOCKADDRTEST_H 4 #define TESTS_SOCKADDRTEST_H 5 6 #include "ntp.h" 7 #include "ntp_stdlib.h" 8 9 sockaddr_u CreateSockaddr4(const char* address, unsigned int port) { 10 sockaddr_u s; 11 s.sa4.sin_family = AF_INET; 12 s.sa4.sin_addr.s_addr = inet_addr(address); 13 SET_PORT(&s, port); 14 15 return s; 16 } 17 18 int IsEqual(const sockaddr_u expected, const sockaddr_u actual) { 19 struct in_addr in; 20 struct in6_addr in6; 21 22 if (expected.sa.sa_family != actual.sa.sa_family) { 23 //<< "Expected sa_family: " << expected.sa.sa_family 24 //<< " but got: " << actual.sa.sa_family; 25 return FALSE; 26 } 27 28 if (actual.sa.sa_family == AF_INET) { // IPv4 29 if (expected.sa4.sin_port == actual.sa4.sin_port && 30 memcmp(&expected.sa4.sin_addr, &actual.sa4.sin_addr, 31 sizeof( in )) == 0) { 32 return TRUE; 33 } else { 34 //<< "IPv4 comparision failed, expected: " 35 //<< expected.sa4.sin_addr.s_addr 36 //<< "(" << socktoa(&expected) << ") but was: " 37 //<< actual.sa4.sin_addr.s_addr "(" << socktoa(&actual) << ")"; 38 return FALSE; 39 } 40 } else if (actual.sa.sa_family == AF_INET6) { //IPv6 41 if (expected.sa6.sin6_port == actual.sa6.sin6_port && 42 memcmp(&expected.sa6.sin6_addr, &actual.sa6.sin6_addr, 43 sizeof(in6)) == 0) { 44 return TRUE; 45 } else { 46 printf("IPv6 comparision failed"); 47 return FALSE; 48 } 49 } else { // Unknown family 50 printf("Unknown sa_family: ");// << actual.sa.sa_family; 51 return FALSE; 52 } 53 } 54 55 56 #endif // TESTS_SOCKADDRTEST_H 57 58 59 60