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