sockaddrtest.c revision 290001
1
2#include "config.h"
3#include "ntp.h"
4#include "ntp_stdlib.h"
5#include "sockaddrtest.h"
6
7sockaddr_u
8CreateSockaddr4(const char* address, unsigned int port) {
9	sockaddr_u s;
10	s.sa4.sin_family = AF_INET;
11	s.sa4.sin_addr.s_addr = inet_addr(address);
12	SET_PORT(&s, port);
13
14	return s;
15}
16
17
18int
19IsEqual(const sockaddr_u expected, const sockaddr_u actual) {
20	struct in_addr in;
21	struct in6_addr in6;
22
23	if (expected.sa.sa_family != actual.sa.sa_family) {
24		printf("Expected sa_family: %d but got: %d", expected.sa.sa_family, 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			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));
35			return FALSE;
36		}
37	} else if (actual.sa.sa_family == AF_INET6) { //IPv6
38		if (expected.sa6.sin6_port == actual.sa6.sin6_port &&
39			memcmp(&expected.sa6.sin6_addr, &actual.sa6.sin6_addr,
40				   sizeof(in6)) == 0) {
41			return TRUE;
42		} else {
43			printf("IPv6 comparision failed");
44			return FALSE;
45		}
46	} else { // Unknown family
47		printf("Unknown sa_family: %d",actual.sa.sa_family);
48		return FALSE;
49	}
50}
51
52