1290001Sglebius
2290001Sglebius#include "config.h"
3290001Sglebius#include "ntp.h"
4290001Sglebius#include "ntp_stdlib.h"
5290001Sglebius#include "sockaddrtest.h"
6290001Sglebius
7290001Sglebiussockaddr_u
8290001SglebiusCreateSockaddr4(const char* address, unsigned int port) {
9290001Sglebius	sockaddr_u s;
10290001Sglebius	s.sa4.sin_family = AF_INET;
11290001Sglebius	s.sa4.sin_addr.s_addr = inet_addr(address);
12290001Sglebius	SET_PORT(&s, port);
13290001Sglebius
14290001Sglebius	return s;
15290001Sglebius}
16290001Sglebius
17290001Sglebius
18290001Sglebiusint
19290001SglebiusIsEqual(const sockaddr_u expected, const sockaddr_u actual) {
20290001Sglebius	struct in_addr in;
21290001Sglebius	struct in6_addr in6;
22290001Sglebius
23290001Sglebius	if (expected.sa.sa_family != actual.sa.sa_family) {
24290001Sglebius		printf("Expected sa_family: %d but got: %d", expected.sa.sa_family, actual.sa.sa_family);
25290001Sglebius		return FALSE;
26290001Sglebius	}
27290001Sglebius
28290001Sglebius	if (actual.sa.sa_family == AF_INET) { // IPv4
29290001Sglebius		if (expected.sa4.sin_port == actual.sa4.sin_port &&
30290001Sglebius			memcmp(&expected.sa4.sin_addr, &actual.sa4.sin_addr,
31290001Sglebius				   sizeof( in )) == 0) {
32290001Sglebius			return TRUE;
33290001Sglebius		} else {
34290001Sglebius			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));
35290001Sglebius			return FALSE;
36290001Sglebius		}
37290001Sglebius	} else if (actual.sa.sa_family == AF_INET6) { //IPv6
38290001Sglebius		if (expected.sa6.sin6_port == actual.sa6.sin6_port &&
39290001Sglebius			memcmp(&expected.sa6.sin6_addr, &actual.sa6.sin6_addr,
40290001Sglebius				   sizeof(in6)) == 0) {
41290001Sglebius			return TRUE;
42290001Sglebius		} else {
43290001Sglebius			printf("IPv6 comparision failed");
44290001Sglebius			return FALSE;
45290001Sglebius		}
46290001Sglebius	} else { // Unknown family
47290001Sglebius		printf("Unknown sa_family: %d",actual.sa.sa_family);
48290001Sglebius		return FALSE;
49290001Sglebius	}
50290001Sglebius}
51290001Sglebius
52