From 82150b0e24d576205e483a72059f9c2344af0ec3 Mon Sep 17 00:00:00 2001 From: Casper Andersson Date: Thu, 23 May 2024 14:58:19 +0200 Subject: [PATCH] link: Add function to unset carrier request When fetching from the kernel this flag seems to be set and when making a change request this persists. Since it's only internal variables we need a function to unset it from the outside. ndo_carrier_change in the kernel should only be implemented by non-hardware interfaces. For hardware interfaces (e.g. physical ports) it will be EOPNOTSUPP. Allow unsetting it to not get an error. Signed-off-by: Casper Andersson --- include/netlink/route/link.h | 1 + lib/route/link.c | 11 +++++++++++ libnl-route-3.sym | 1 + 3 files changed, 13 insertions(+) diff --git a/include/netlink/route/link.h b/include/netlink/route/link.h index aaa15d2c6..db58ac023 100644 --- a/include/netlink/route/link.h +++ b/include/netlink/route/link.h @@ -199,6 +199,7 @@ extern int rtnl_link_get_master(struct rtnl_link *); extern void rtnl_link_set_carrier(struct rtnl_link *, uint8_t); extern uint8_t rtnl_link_get_carrier(struct rtnl_link *); +extern void rtnl_link_unset_carrier_request_flag(struct rtnl_link *); extern int rtnl_link_get_carrier_changes(struct rtnl_link *, uint32_t *); diff --git a/lib/route/link.c b/lib/route/link.c index 15436d8dd..cd0082af0 100644 --- a/lib/route/link.c +++ b/lib/route/link.c @@ -2433,6 +2433,17 @@ uint8_t rtnl_link_get_carrier(struct rtnl_link *link) return link->l_carrier; } +/** + * Unset carrier request of link object + * @arg link Link object + * + * @see rtnl_link_set_carrier() + */ +void rtnl_link_unset_carrier_request_flag(struct rtnl_link *link) +{ + link->ce_mask &= ~LINK_ATTR_CARRIER; +} + /** * Return carrier on/off changes of link object * @arg link Link object diff --git a/libnl-route-3.sym b/libnl-route-3.sym index 1b65c5214..305ba30d5 100644 --- a/libnl-route-3.sym +++ b/libnl-route-3.sym @@ -1358,4 +1358,5 @@ global: rtnl_interlink_set_net_id; rtnl_flower_set_ip_ttl; rtnl_flower_get_ip_ttl; + rtnl_link_unset_carrier_request_flag; } libnl_3_6;