Autoselect ipv4/ipv6
Signed-off-by: Adrien Gallouët <adrien@gallouet.fr>
This commit is contained in:
14
mud.c
14
mud.c
@@ -29,6 +29,12 @@
|
|||||||
#define MSG_CONFIRM 0
|
#define MSG_CONFIRM 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined __linux__
|
||||||
|
#define MUD_V4V6 1
|
||||||
|
#else
|
||||||
|
#define MUD_V4V6 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined IP_PKTINFO
|
#if defined IP_PKTINFO
|
||||||
#define MUD_PKTINFO IP_PKTINFO
|
#define MUD_PKTINFO IP_PKTINFO
|
||||||
#define MUD_PKTINFO_SRC(X) &((struct in_pktinfo *)(X))->ipi_addr
|
#define MUD_PKTINFO_SRC(X) &((struct in_pktinfo *)(X))->ipi_addr
|
||||||
@@ -776,7 +782,7 @@ mud_set_aes(struct mud *mud)
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct mud *
|
struct mud *
|
||||||
mud_create(struct sockaddr *addr, int v4, int v6)
|
mud_create(struct sockaddr *addr)
|
||||||
{
|
{
|
||||||
if (!addr)
|
if (!addr)
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -786,14 +792,19 @@ mud_create(struct sockaddr *addr, int v4, int v6)
|
|||||||
if (now >> 48)
|
if (now >> 48)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
int v4, v6;
|
||||||
socklen_t addrlen = 0;
|
socklen_t addrlen = 0;
|
||||||
|
|
||||||
switch (addr->sa_family) {
|
switch (addr->sa_family) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
addrlen = sizeof(struct sockaddr_in);
|
addrlen = sizeof(struct sockaddr_in);
|
||||||
|
v4 = 1;
|
||||||
|
v6 = 0;
|
||||||
break;
|
break;
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
addrlen = sizeof(struct sockaddr_in6);
|
addrlen = sizeof(struct sockaddr_in6);
|
||||||
|
v4 = MUD_V4V6;
|
||||||
|
v6 = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -808,7 +819,6 @@ mud_create(struct sockaddr *addr, int v4, int v6)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
memset(mud, 0, sizeof(struct mud));
|
memset(mud, 0, sizeof(struct mud));
|
||||||
|
|
||||||
mud->fd = socket(addr->sa_family, SOCK_DGRAM, IPPROTO_UDP);
|
mud->fd = socket(addr->sa_family, SOCK_DGRAM, IPPROTO_UDP);
|
||||||
|
|
||||||
if ((mud->fd == -1) ||
|
if ((mud->fd == -1) ||
|
||||||
|
|||||||
2
mud.h
2
mud.h
@@ -5,7 +5,7 @@
|
|||||||
struct mud;
|
struct mud;
|
||||||
struct sockaddr;
|
struct sockaddr;
|
||||||
|
|
||||||
struct mud *mud_create (struct sockaddr *, int, int);
|
struct mud *mud_create (struct sockaddr *);
|
||||||
void mud_delete (struct mud *);
|
void mud_delete (struct mud *);
|
||||||
|
|
||||||
int mud_get_fd (struct mud *);
|
int mud_get_fd (struct mud *);
|
||||||
|
|||||||
Reference in New Issue
Block a user