1/* $NetBSD: sockaddrtest.c,v 1.3 2022/10/09 21:41:04 christos Exp $ */ 2 3 4#include "config.h" 5#include "ntp.h" 6#include "ntp_stdlib.h" 7#include "sockaddrtest.h" 8 9sockaddr_u 10CreateSockaddr4(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 20int 21IsEqual(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 char buf[4][32]; 37 strlcpy(buf[0], inet_ntoa(expected.sa4.sin_addr), sizeof(buf[0])); 38 strlcpy(buf[1], socktoa(&expected) , sizeof(buf[1])); 39 strlcpy(buf[2], inet_ntoa(actual.sa4.sin_addr) , sizeof(buf[2])); 40 strlcpy(buf[3], socktoa(&actual) , sizeof(buf[3])); 41 printf("IPv4 comparision failed, expected: %s(%s) but was: %s(%s)", 42 buf[0], buf[1], buf[2], buf[3]); 43 return FALSE; 44 } 45 } else if (actual.sa.sa_family == AF_INET6) { //IPv6 46 if ( expected.sa6.sin6_port == actual.sa6.sin6_port 47 && expected.sa6.sin6_scope_id == actual.sa6.sin6_scope_id 48 && memcmp(&expected.sa6.sin6_addr, &actual.sa6.sin6_addr, 49 sizeof(in6)) == 0) { 50 return TRUE; 51 } else { 52 printf("IPv6 comparision failed"); 53 return FALSE; 54 } 55 } else { // Unknown family 56 printf("Unknown sa_family: %d",actual.sa.sa_family); 57 return FALSE; 58 } 59} 60 61