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