aboutsummaryrefslogtreecommitdiff
path: root/sys/netlink
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2023-04-28 13:30:36 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2023-04-28 13:35:58 +0000
commit9e79038c502433f077b4d3b5bb1c0838329f1ebc (patch)
tree5e14d7ccc799d8e6b74eba7ae37de9f066c57c26 /sys/netlink
parent4f6a5e1d6ce39e968bd01c9a3a299a3a419a480e (diff)
downloadsrc-9e79038c502433f077b4d3b5bb1c0838329f1ebc.tar.gz
src-9e79038c502433f077b4d3b5bb1c0838329f1ebc.zip
netlink: fix netlink interface operations when netlink is loaded as a module.
This change completes 089104e0e01f. MFC after: 2 weeks
Diffstat (limited to 'sys/netlink')
-rw-r--r--sys/netlink/netlink_module.c2
-rw-r--r--sys/netlink/route/iface_drivers.c5
-rw-r--r--sys/netlink/route/route_var.h22
3 files changed, 27 insertions, 2 deletions
diff --git a/sys/netlink/netlink_module.c b/sys/netlink/netlink_module.c
index 051eb0cb120b..31faf1d003d9 100644
--- a/sys/netlink/netlink_module.c
+++ b/sys/netlink/netlink_module.c
@@ -187,6 +187,8 @@ const static struct nl_function_wrapper nl_module = {
.nlmsg_get_group_writer = _nlmsg_get_group_writer,
.nlmsg_get_chain_writer = _nlmsg_get_chain_writer,
.nlmsg_end_dump = _nlmsg_end_dump,
+ .nl_modify_ifp_generic = _nl_modify_ifp_generic,
+ .nl_store_ifp_cookie = _nl_store_ifp_cookie,
};
#endif
diff --git a/sys/netlink/route/iface_drivers.c b/sys/netlink/route/iface_drivers.c
index 17fbc1000d23..6f6adc323be6 100644
--- a/sys/netlink/route/iface_drivers.c
+++ b/sys/netlink/route/iface_drivers.c
@@ -25,6 +25,7 @@
* SUCH DAMAGE.
*/
+#include "opt_netlink.h"
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include "opt_inet.h"
@@ -64,7 +65,7 @@ _DECLARE_DEBUG(LOG_DEBUG);
* such as state, mtu or description.
*/
int
-nl_modify_ifp_generic(struct ifnet *ifp, struct nl_parsed_link *lattrs,
+_nl_modify_ifp_generic(struct ifnet *ifp, struct nl_parsed_link *lattrs,
const struct nlattr_bmask *bm, struct nl_pstate *npt)
{
int error;
@@ -118,7 +119,7 @@ nl_modify_ifp_generic(struct ifnet *ifp, struct nl_parsed_link *lattrs,
* IFLA_IFNAME(string)
*/
void
-nl_store_ifp_cookie(struct nl_pstate *npt, struct ifnet *ifp)
+_nl_store_ifp_cookie(struct nl_pstate *npt, struct ifnet *ifp)
{
int ifname_len = strlen(if_name(ifp));
uint32_t ifindex = (uint32_t)ifp->if_index;
diff --git a/sys/netlink/route/route_var.h b/sys/netlink/route/route_var.h
index cbcc71e9ac21..7b83a533fdc2 100644
--- a/sys/netlink/route/route_var.h
+++ b/sys/netlink/route/route_var.h
@@ -77,9 +77,31 @@ struct nl_parsed_link {
uint32_t ifi_change;
};
+#if defined(NETLINK) || defined(NETLINK_MODULE)
+/* Provide optimized calls to the functions inside the same linking unit */
+
+int _nl_modify_ifp_generic(struct ifnet *ifp, struct nl_parsed_link *lattrs,
+ const struct nlattr_bmask *bm, struct nl_pstate *npt);
+void _nl_store_ifp_cookie(struct nl_pstate *npt, struct ifnet *ifp);
+
+static inline int
+nl_modify_ifp_generic(struct ifnet *ifp, struct nl_parsed_link *lattrs,
+ const struct nlattr_bmask *bm, struct nl_pstate *npt)
+{
+ return (_nl_modify_ifp_generic(ifp, lattrs, bm, npt));
+}
+
+static inline void
+nl_store_ifp_cookie(struct nl_pstate *npt, struct ifnet *ifp)
+{
+ _nl_store_ifp_cookie(npt, ifp);
+}
+#else
+/* Provide access to the functions via netlink_glue.c */
int nl_modify_ifp_generic(struct ifnet *ifp, struct nl_parsed_link *lattrs,
const struct nlattr_bmask *bm, struct nl_pstate *npt);
void nl_store_ifp_cookie(struct nl_pstate *npt, struct ifnet *ifp);
+#endif /* defined(NETLINK) || defined(NETLINK_MODULE) */
typedef int rtnl_iface_create_f(struct nl_parsed_link *lattrs,