Merge IP-TTL-255-patch, fixing #13 Set multicast IP TTL to 255 in case a receiver demands an unrouted packet; minor non-functional tweaks.

This commit is contained in:
df
2020-07-23 16:21:18 +01:00
parent ed03a6098d
commit 8f15f5873b
2 changed files with 16 additions and 6 deletions

View File

@@ -1,6 +1,7 @@
# #
# Makefile for tinysvcmdns # Makefile for tinysvcmdns
# #
CPPFLAGS += -DPTHREAD_CREATE_DETACHED_SUPPORTED
CFLAGS += -Wall -pedantic -std=gnu99 CFLAGS += -Wall -pedantic -std=gnu99
CFLAGS += -g CFLAGS += -g

21
mdnsd.c
View File

@@ -511,20 +511,27 @@ static int create_recv_sock(int domain)
} }
int on = 1; int on = 1;
if ((r = setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof(on))) < 0) { if ((r = setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on))) < 0) {
close(sd); close(sd);
log_message(LOG_ERR, "recv setsockopt(SO_REUSEADDR): %s\n", strerror(errno)); log_message(LOG_ERR, "recv setsockopt(SO_REUSEADDR): %s\n", strerror(errno));
return r; return r;
} }
#if !defined(WIN32) && defined(SO_REUSEPORT) #if !defined(WIN32) && defined(SO_REUSEPORT)
if (!getsockopt(sd, SOL_SOCKET, SO_REUSEPORT,(char*) &on, &addrlen)) { if (!getsockopt(sd, SOL_SOCKET, SO_REUSEPORT, &on, &addrlen)) {
if ((r = setsockopt(sd, SOL_SOCKET, SO_REUSEPORT,(char*) &on, sizeof(on))) < 0) { if ((r = setsockopt(sd, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on))) < 0) {
log_message(LOG_ERR, "recv setsockopt(SO_REUSEPORT): %d; %s\n", r, strerror(errno)); log_message(LOG_ERR, "recv setsockopt(SO_REUSEPORT): %d; %s\n", r, strerror(errno));
} }
} }
#endif #endif
// (issue #5 Tinysvcmdns invisible from chrome app mdns-browser)
// TTL -> 255 in case receivers demand it (unrouted pkt)
int ttl = 255;
if ((r = setsockopt(sd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl))) < 0) {
log_message(LOG_ERR, "recv setsockopt(IP_MULTICAST_IP): %s", strerror(errno));
return r;
}
/* bind to an address */ /* bind to an address */
struct sockaddr_in serveraddr = {0}; struct sockaddr_in serveraddr = {0};
@@ -539,7 +546,7 @@ static int create_recv_sock(int domain)
DECL_ZERO_STRUCT(mreq, ip_mreq); DECL_ZERO_STRUCT(mreq, ip_mreq);
mreq.imr_interface.s_addr = htonl(INADDR_ANY); mreq.imr_interface.s_addr = htonl(INADDR_ANY);
mreq.imr_multiaddr.s_addr = inet_addr(addr); mreq.imr_multiaddr.s_addr = inet_addr(addr);
if ((r = setsockopt(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) &mreq, sizeof(mreq))) < 0) { if ((r = setsockopt(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq))) < 0) {
close(sd); close(sd);
log_message(LOG_ERR, "recv setsockopt(IP_ADD_MEMBERSHIP): %s\n", strerror(errno)); log_message(LOG_ERR, "recv setsockopt(IP_ADD_MEMBERSHIP): %s\n", strerror(errno));
return r; return r;
@@ -552,7 +559,7 @@ static int create_recv_sock(int domain)
// disable loopback // disable loopback
int flag = 0; int flag = 0;
#endif #endif
if ((r = setsockopt(sd, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&flag, sizeof(flag))) < 0) { if ((r = setsockopt(sd, IPPROTO_IP, IP_MULTICAST_LOOP, &flag, sizeof(flag))) < 0) {
close(sd); close(sd);
log_message(LOG_ERR, "recv setsockopt(IP_MULTICAST_LOOP): %s\n", strerror(errno)); log_message(LOG_ERR, "recv setsockopt(IP_MULTICAST_LOOP): %s\n", strerror(errno));
return r; return r;
@@ -560,7 +567,7 @@ static int create_recv_sock(int domain)
#ifdef IP_PKTINFO #ifdef IP_PKTINFO
if ((r = setsockopt(sd, SOL_IP, IP_PKTINFO, (char *) &on, sizeof(on))) < 0) { if ((r = setsockopt(sd, SOL_IP, IP_PKTINFO, &on, sizeof(on))) < 0) {
close(sd); close(sd);
log_message(LOG_ERR, "recv setsockopt(IP_PKTINFO): %s\n", strerror(errno)); log_message(LOG_ERR, "recv setsockopt(IP_PKTINFO): %s\n", strerror(errno));
return r; return r;
@@ -1636,6 +1643,7 @@ static const char * flags(int sd, const char * name)
} }
*/ */
#ifndef HAVE_NETLIB_GET_IPV4ADDR
int netlib_get_ipv4addr(const char *ifname, struct in_addr *addr) { int netlib_get_ipv4addr(const char *ifname, struct in_addr *addr) {
int result = -1; int result = -1;
int sd; int sd;
@@ -1669,6 +1677,7 @@ int netlib_get_ipv4addr(const char *ifname, struct in_addr *addr) {
close(sd); close(sd);
return result; return result;
} }
#endif
static int mdnsd_set_host_info_by_netif(struct mdnsd *svr, const char *hostname, const char *netif_nameOrAddress) static int mdnsd_set_host_info_by_netif(struct mdnsd *svr, const char *hostname, const char *netif_nameOrAddress)
{ {