xref: /netbsd-src/external/bsd/ntp/dist/tests/libntp/sockaddrtest.c (revision 946379e7b37692fc43f68eb0d1c10daa0a7f3b6c)
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