From: Yu Watanabe Date: Mon, 18 Feb 2019 05:41:43 +0000 (+0900) Subject: sysctl-util: add sysctl_read_ip_property() X-Git-Tag: archive/raspbian/241-7_deb10u5+rpi1^2~49 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=802a1b37972030d66aae6f8b3cc16599ce680b96;p=systemd.git sysctl-util: add sysctl_read_ip_property() (cherry picked from commit a6b3b0aace152b77682d68d99b3e41580c955efb) Gbp-Pq: Name sysctl-util-add-sysctl_read_ip_property.patch --- diff --git a/src/shared/sysctl-util.c b/src/shared/sysctl-util.c index 480e6c38..ba894899 100644 --- a/src/shared/sysctl-util.c +++ b/src/shared/sysctl-util.c @@ -69,3 +69,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 fd7c78b2..22f52f84 100644 --- a/src/shared/sysctl-util.h +++ b/src/shared/sysctl-util.h @@ -5,3 +5,4 @@ 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);