From: Yu Watanabe Date: Mon, 18 Feb 2019 05:41:43 +0000 (+0900) Subject: sysctl-util: add sysctl_read_ip_property() X-Git-Tag: v242-rc1~269^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a6b3b0aace152b77682d68d99b3e41580c955efb;p=thirdparty%2Fsystemd.git sysctl-util: add sysctl_read_ip_property() --- diff --git a/src/shared/sysctl-util.c b/src/shared/sysctl-util.c index 82f557eb31e..9be4055b376 100644 --- a/src/shared/sysctl-util.c +++ b/src/shared/sysctl-util.c @@ -85,3 +85,25 @@ int sysctl_read(const char *property, char **content) { p = strjoina("/proc/sys/", property); return read_full_file(p, content, NULL); } + +int sysctl_read_ip_property(int af, const char *ifname, const char *property, char **ret) { + _cleanup_free_ char *value = NULL; + const char *p; + int r; + + assert(IN_SET(af, AF_INET, AF_INET6)); + assert(property); + + p = strjoina("/proc/sys/net/ipv", af == AF_INET ? "4" : "6", + ifname ? "/conf/" : "", strempty(ifname), + property[0] == '/' ? "" : "/", property); + + r = read_one_line_file(p, &value); + if (r < 0) + return r; + + if (ret) + *ret = TAKE_PTR(value); + + return r; +} diff --git a/src/shared/sysctl-util.h b/src/shared/sysctl-util.h index 940118c2589..d50c6e43816 100644 --- a/src/shared/sysctl-util.h +++ b/src/shared/sysctl-util.h @@ -12,6 +12,7 @@ char *sysctl_normalize(char *s); int sysctl_read(const char *property, char **value); int sysctl_write(const char *property, const char *value); +int sysctl_read_ip_property(int af, const char *ifname, const char *property, char **ret); int sysctl_write_ip_property(int af, const char *ifname, const char *property, const char *value); static inline int sysctl_write_ip_property_boolean(int af, const char *ifname, const char *property, bool value) { return sysctl_write_ip_property(af, ifname, property, one_zero(value));