mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-24 21:34:08 +03:00
socket-util: add helper for checking if IPv6 is enabled
This commit is contained in:
parent
571ec995fe
commit
83e03c4fc2
@ -31,6 +31,7 @@
|
|||||||
#include "string-table.h"
|
#include "string-table.h"
|
||||||
#include "string-util.h"
|
#include "string-util.h"
|
||||||
#include "strv.h"
|
#include "strv.h"
|
||||||
|
#include "sysctl-util.h"
|
||||||
#include "user-util.h"
|
#include "user-util.h"
|
||||||
#include "utf8.h"
|
#include "utf8.h"
|
||||||
|
|
||||||
@ -296,6 +297,31 @@ bool socket_ipv6_is_supported(void) {
|
|||||||
return cached;
|
return cached;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool socket_ipv6_is_enabled(void) {
|
||||||
|
_cleanup_free_ char *v;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
/* Much like socket_ipv6_is_supported(), but also checks that the sysctl that disables IPv6 on all
|
||||||
|
* interfaces isn't turned on */
|
||||||
|
|
||||||
|
if (!socket_ipv6_is_supported())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
r = sysctl_read_ip_property(AF_INET6, "all", "disable_ipv6", &v);
|
||||||
|
if (r < 0) {
|
||||||
|
log_debug_errno(r, "Unexpected error reading 'net.ipv6.conf.all.disable_ipv6' sysctl: %m");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
r = parse_boolean(v);
|
||||||
|
if (r < 0) {
|
||||||
|
log_debug_errno(r, "Failed to pare 'net.ipv6.conf.all.disable_ipv6' sysctl: %m");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return !r;
|
||||||
|
}
|
||||||
|
|
||||||
bool socket_address_matches_fd(const SocketAddress *a, int fd) {
|
bool socket_address_matches_fd(const SocketAddress *a, int fd) {
|
||||||
SocketAddress b;
|
SocketAddress b;
|
||||||
socklen_t solen;
|
socklen_t solen;
|
||||||
|
@ -101,6 +101,7 @@ bool socket_address_equal(const SocketAddress *a, const SocketAddress *b) _pure_
|
|||||||
const char* socket_address_get_path(const SocketAddress *a);
|
const char* socket_address_get_path(const SocketAddress *a);
|
||||||
|
|
||||||
bool socket_ipv6_is_supported(void);
|
bool socket_ipv6_is_supported(void);
|
||||||
|
bool socket_ipv6_is_enabled(void);
|
||||||
|
|
||||||
int sockaddr_port(const struct sockaddr *_sa, unsigned *port);
|
int sockaddr_port(const struct sockaddr *_sa, unsigned *port);
|
||||||
const union in_addr_union *sockaddr_in_addr(const struct sockaddr *sa);
|
const union in_addr_union *sockaddr_in_addr(const struct sockaddr *sa);
|
||||||
|
@ -504,6 +504,11 @@ static void test_flush_accept(void) {
|
|||||||
assert_se(flush_accept(listen_seqpacket) >= 0);
|
assert_se(flush_accept(listen_seqpacket) >= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_ipv6_enabled(void) {
|
||||||
|
log_info("IPv6 supported: %s", yes_no(socket_ipv6_is_supported()));
|
||||||
|
log_info("IPv6 enabled: %s", yes_no(socket_ipv6_is_enabled()));
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
test_setup_logging(LOG_DEBUG);
|
test_setup_logging(LOG_DEBUG);
|
||||||
|
|
||||||
@ -519,6 +524,7 @@ int main(int argc, char *argv[]) {
|
|||||||
test_send_nodata_nofd();
|
test_send_nodata_nofd();
|
||||||
test_send_emptydata();
|
test_send_emptydata();
|
||||||
test_flush_accept();
|
test_flush_accept();
|
||||||
|
test_ipv6_enabled();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user