diff options
author | Abdurrahman Hussain <abdurrahman@hussain.rocks> | 2023-03-29 02:41:39 (GMT) |
---|---|---|
committer | Abdurrahman Hussain <fib@cisco.com> | 2023-03-29 19:32:19 (GMT) |
commit | d83c6d54f2cb59d5a2c1e4b75058339f63e930e9 (patch) | |
tree | 938a42fc6aebe6e26250b6cfb76c2442d3c934ba | |
parent | cbafad9ddf24caef5230fef715d34f0539603be0 (diff) | |
download | libnl-d83c6d54f2cb59d5a2c1e4b75058339f63e930e9.zip libnl-d83c6d54f2cb59d5a2c1e4b75058339f63e930e9.tar.gz libnl-d83c6d54f2cb59d5a2c1e4b75058339f63e930e9.tar.bz2 |
route/link: add accessor API for IPv6 DEVCONF
Signed-off-by: Abdurrahman Hussain <abdurrahman@hussain.rocks>
-rw-r--r-- | include/netlink/route/link/inet6.h | 8 | ||||
-rw-r--r-- | lib/route/link/inet6.c | 58 | ||||
-rw-r--r-- | libnl-route-3.sym | 2 |
3 files changed, 68 insertions, 0 deletions
diff --git a/include/netlink/route/link/inet6.h b/include/netlink/route/link/inet6.h index cf257ca..4a9355a 100644 --- a/include/netlink/route/link/inet6.h +++ b/include/netlink/route/link/inet6.h @@ -36,6 +36,14 @@ extern int rtnl_link_inet6_get_flags(struct rtnl_link *, extern int rtnl_link_inet6_set_flags(struct rtnl_link *, uint32_t); +extern int rtnl_link_inet6_get_conf(struct rtnl_link *, + const unsigned int, + uint32_t *); + +extern int rtnl_link_inet6_set_conf(struct rtnl_link *, + const unsigned int, + uint32_t); + /* Link Flags Translations */ extern char * rtnl_link_inet6_flags2str(int, char *, size_t); extern int rtnl_link_inet6_str2flags(const char *); diff --git a/lib/route/link/inet6.c b/lib/route/link/inet6.c index afcbbce..280bf54 100644 --- a/lib/route/link/inet6.c +++ b/lib/route/link/inet6.c @@ -689,6 +689,64 @@ int rtnl_link_inet6_set_addr_gen_mode(struct rtnl_link *link, uint8_t mode) return 0; } +/** + * Get value of a ipv6 link configuration setting + * @arg link Link object + * @arg cfgid Configuration identifier + * @arg res Result pointer + * + * Stores the value of the specified configuration setting in the provided + * result pointer. + * + * @return 0 on success or a negative error code. + * @return -NLE_RANGE cfgid is out of range, 0..DEVCONF_MAX + * @return -NLE_NOATTR configuration setting not available + */ +int rtnl_link_inet6_get_conf(struct rtnl_link *link, const unsigned int cfgid, + uint32_t *res) +{ + struct inet6_data *id; + + if (cfgid >= DEVCONF_MAX) + return -NLE_RANGE; + + if (!(id = rtnl_link_af_data(link, &inet6_ops))) + return -NLE_NOATTR; + + *res = id->i6_conf[cfgid]; + + return 0; +} + +/** + * Change value of a ipv6 link configuration setting + * @arg link Link object + * @arg cfgid Configuration identifier + * @arg value New value + * + * Changes the value in the per link ipv6 configuration array. + * + * @return 0 on success or a negative error code. + * @return -NLE_RANGE cfgid is out of range, 0..DEVCONF_MAX + * @return -NLE_NOMEM memory allocation failed + */ +int rtnl_link_inet6_set_conf(struct rtnl_link *link, const unsigned int cfgid, + uint32_t value) +{ + struct inet6_data *id; + + if (!(id = rtnl_link_af_alloc(link, &inet6_ops))) + return -NLE_NOMEM; + + if (cfgid >= DEVCONF_MAX) + return -NLE_RANGE; + + id->i6_conf[cfgid] = value; + + return 0; +} + + static void __init inet6_init(void) { rtnl_link_af_register(&inet6_ops); diff --git a/libnl-route-3.sym b/libnl-route-3.sym index 5e37acf..e82349e 100644 --- a/libnl-route-3.sym +++ b/libnl-route-3.sym @@ -322,6 +322,8 @@ global: rtnl_link_inet_devconf2str; rtnl_link_inet_get_conf; rtnl_link_inet_set_conf; + rtnl_link_inet6_get_conf; + rtnl_link_inet6_set_conf; rtnl_link_inet_str2devconf; rtnl_link_info_parse; rtnl_link_ip6_tnl_add; |