#include "headers.h"
#include "Settings.hpp"
+#include <net/if.h>
#ifdef __cplusplus
extern "C" {
#endif
-/* ------------------------------------------------------------------- */
- void SockAddr_localAddr( thread_Settings *inSettings );
- void SockAddr_remoteAddr( thread_Settings *inSettings );
- void SockAddr_setHostname( const char* inHostname,
- iperf_sockaddr *inSockAddr,
- int isIPv6 ); // DNS lookup
- void SockAddr_getHostname( iperf_sockaddr *inSockAddr,
- char* outHostname,
- size_t len ); // reverse DNS lookup
- void SockAddr_getHostAddress( iperf_sockaddr *inSockAddr,
- char* outAddress,
- size_t len ); // dotted decimal
+static inline bool SockAddr_isIPv6(const struct sockaddr_storage *ss)
+{
+ return ss->ss_family == AF_INET6;
+}
- void SockAddr_setPort( iperf_sockaddr *inSockAddr, unsigned short inPort );
- void SockAddr_setPortAny( iperf_sockaddr *inSockAddr );
- unsigned short SockAddr_getPort( iperf_sockaddr *inSockAddr );
+static inline int SockAddr_isMulticast(const struct sockaddr *sa)
+{
+ if (sa->sa_family == AF_INET6)
+ return IN6_IS_ADDR_MULTICAST(&(((struct sockaddr_in6 *)sa)->sin6_addr));
- void SockAddr_setAddressAny( iperf_sockaddr *inSockAddr );
+ // IPv4 multicast: 224.0.0.0 to 239.255.255.255 (e0.00.00.00 to ef.ff.ff.ff)
+ return sa->sa_family == AF_INET &&
+ (ntohl(((struct sockaddr_in *)sa)->sin_addr.s_addr) >> 28) == 0xe;
+}
- // return pointer to the struct in_addr
- struct in_addr* SockAddr_get_in_addr( iperf_sockaddr *inSockAddr );
-#ifdef HAVE_IPV6
- // return pointer to the struct in_addr
- struct in6_addr* SockAddr_get_in6_addr( iperf_sockaddr *inSockAddr );
-#endif
- // return the sizeof the addess structure (struct sockaddr_in)
- Socklen_t SockAddr_get_sizeof_sockaddr( iperf_sockaddr *inSockAddr );
-
- int SockAddr_isMulticast( iperf_sockaddr *inSockAddr );
-
- int SockAddr_isIPv6( iperf_sockaddr *inSockAddr );
+int SockAddr_Hostare_Equal(struct sockaddr_storage *first, struct sockaddr_storage *second);
+int SockAddr_are_Equal(struct sockaddr_storage *first, struct sockaddr_storage *second);
- int SockAddr_are_Equal( struct sockaddr *first, struct sockaddr *second );
- int SockAddr_Hostare_Equal( struct sockaddr *first, struct sockaddr *second );
+int SockAddr_port(struct sockaddr_storage *ss);
+const char *SockAddr_name(struct sockaddr_storage *ss, char *hbuf, size_t hbuflen);
- void SockAddr_zeroAddress( iperf_sockaddr *inSockAddr );
#ifdef __cplusplus
} /* end extern "C" */
#endif