Merge pull request #192 from mikebrady/public-ipv6

Public ipv6
This commit is contained in:
Mike Brady
2015-12-30 09:43:25 +00:00
3 changed files with 29 additions and 7 deletions
+6 -1
View File
@@ -2,7 +2,6 @@
#define _COMMON_H
#include <stdint.h>
#include <endian.h>
#include <sys/socket.h>
#include <libconfig.h>
@@ -33,6 +32,12 @@
#define SAFAMILY sa_family
#endif
enum endian_type {
SS_LITTLE_ENDIAN = 0,
SS_PDP_ENDIAN,
SS_BIG_ENDIAN,
} endian_type;
enum stuffing_type {
ST_basic = 0,
ST_soxr,
+17
View File
@@ -41,6 +41,10 @@
#include "player.h"
#include "rtp.h"
#if defined(__linux__)
#include <linux/in6.h>
#endif
typedef struct {
uint32_t seconds;
uint32_t fraction;
@@ -524,6 +528,19 @@ static int bind_port(SOCKADDR *remote, int *sock) {
die("failed to get usable addrinfo?! %s.", gai_strerror(ret));
*sock = socket(remote->SAFAMILY, SOCK_DGRAM, IPPROTO_UDP);
#if defined(__linux__)
#ifdef AF_INET6
// now, if we are on IPv6, prefer a public ipv6 address
if (remote->SAFAMILY==AF_INET6) {
int value = IPV6_PREFER_SRC_PUBLIC;
ret = setsockopt(*sock, IPPROTO_IPV6, IPV6_ADDR_PREFERENCES, &value, sizeof(value));
if (ret<0)
die("error: could not select a preference for public IPv6 address");
}
#endif
#endif
ret = bind(*sock, info->ai_addr, info->ai_addrlen);
freeaddrinfo(info);
+6 -6
View File
@@ -655,11 +655,11 @@ int main(int argc, char **argv) {
xn.arr[3] = 0x11; /* Highest-address byte */
if (xn.u32==0x11223344)
endianness = __LITTLE_ENDIAN;
endianness = SS_LITTLE_ENDIAN;
else if (xn.u32==0x33441122)
endianness = __PDP_ENDIAN;
endianness = SS_PDP_ENDIAN;
else if (xn.u32==0x44332211)
endianness = __BIG_ENDIAN;
endianness = SS_BIG_ENDIAN;
else die("Can not recognise the endianness of the processor.");
strcpy(configuration_file_path, "/etc/");
@@ -854,13 +854,13 @@ int main(int argc, char **argv) {
daemon_log(LOG_NOTICE, "startup");
switch (endianness) {
case __LITTLE_ENDIAN:
case SS_LITTLE_ENDIAN:
debug(2,"The processor is running little-endian.");
break;
case __BIG_ENDIAN:
case SS_BIG_ENDIAN:
debug(2,"The processor is running big-endian.");
break;
case __PDP_ENDIAN:
case SS_PDP_ENDIAN:
debug(2,"The processor is running pdp-endian.");
break;
}