summaryrefslogtreecommitdiffstats
path: root/contrib/ntp/tests/libntp/sockaddrtest.h
blob: f9a9fde41ee8f94a8f095d288c8fa5252035163e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#ifndef TESTS_SOCKADDRTEST_H
#define TESTS_SOCKADDRTEST_H

#include "ntp.h"
#include "ntp_stdlib.h"

sockaddr_u CreateSockaddr4(const char* address, unsigned int port) {
	sockaddr_u s;
	s.sa4.sin_family = AF_INET;
	s.sa4.sin_addr.s_addr = inet_addr(address);
	SET_PORT(&s, port);

	return s;
}

int IsEqual(const sockaddr_u expected, const sockaddr_u actual) {
	struct in_addr in;
	struct in6_addr in6;

	if (expected.sa.sa_family != actual.sa.sa_family) {
		//<< "Expected sa_family: " << expected.sa.sa_family
		//<< " but got: " << actual.sa.sa_family;
		return FALSE;
	}

	if (actual.sa.sa_family == AF_INET) { // IPv4
		if (expected.sa4.sin_port == actual.sa4.sin_port &&
			memcmp(&expected.sa4.sin_addr, &actual.sa4.sin_addr,
				   sizeof( in )) == 0) {
			return TRUE;
		} else {
			//<< "IPv4 comparision failed, expected: "
			//<< expected.sa4.sin_addr.s_addr
			//<< "(" << socktoa(&expected) << ") but was: "
			//<< actual.sa4.sin_addr.s_addr "(" << socktoa(&actual) << ")";
			return FALSE;
		}
	} else if (actual.sa.sa_family == AF_INET6) { //IPv6
		if (expected.sa6.sin6_port == actual.sa6.sin6_port &&
			memcmp(&expected.sa6.sin6_addr, &actual.sa6.sin6_addr,
				   sizeof(in6)) == 0) {
			return TRUE;
		} else {
			printf("IPv6 comparision failed");
			return FALSE;
		}
	} else { // Unknown family
		printf("Unknown sa_family: ");// << actual.sa.sa_family;
		return FALSE;
	}
}


#endif // TESTS_SOCKADDRTEST_H



OpenPOWER on IntegriCloud