chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
dhcp-network: allow UDP socket to listen on any address
[elogind.git]
/
src
/
libsystemd-network
/
dhcp-network.c
diff --git
a/src/libsystemd-network/dhcp-network.c
b/src/libsystemd-network/dhcp-network.c
index dd26ef3e002df3ad5531eb084bb00ffdb59fb76a..6fac80e8731f73a66c2cf471b061deed2ef2780c 100644
(file)
--- a/
src/libsystemd-network/dhcp-network.c
+++ b/
src/libsystemd-network/dhcp-network.c
@@
-68,7
+68,7
@@
int dhcp_network_bind_raw_socket(int index, union sockaddr_union *link,
.filter = filter
};
_cleanup_close_ int s = -1;
.filter = filter
};
_cleanup_close_ int s = -1;
- int r, on
e
= 1;
+ int r, on = 1;
assert(index > 0);
assert(link);
assert(index > 0);
assert(link);
@@
-77,7
+77,7
@@
int dhcp_network_bind_raw_socket(int index, union sockaddr_union *link,
if (s < 0)
return -errno;
if (s < 0)
return -errno;
- r = setsockopt (s, SOL_PACKET, PACKET_AUXDATA, &on
e, sizeof(one
));
+ r = setsockopt (s, SOL_PACKET, PACKET_AUXDATA, &on
, sizeof(on
));
if (r < 0)
return -errno;
if (r < 0)
return -errno;
@@
-117,6
+117,17
@@
int dhcp_network_bind_udp_socket(be32_t address, uint16_t port) {
r = setsockopt(s, IPPROTO_IP, IP_TOS, &tos, sizeof(tos));
if (r < 0)
return -errno;
r = setsockopt(s, IPPROTO_IP, IP_TOS, &tos, sizeof(tos));
if (r < 0)
return -errno;
+ if (address == INADDR_ANY) {
+ int on = 1;
+
+ r = setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
+ if (r < 0)
+ return -errno;
+
+ r = setsockopt(s, IPPROTO_IP, IP_PKTINFO, &on, sizeof(on));
+ if (r < 0)
+ return -errno;
+ }
r = bind(s, &src.sa, sizeof(src.in));
if (r < 0)
r = bind(s, &src.sa, sizeof(src.in));
if (r < 0)