From e691af4e9774d5422338b14424c083df1dc58369 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Tue, 26 Mar 2024 16:17:11 +0100 Subject: [PATCH] pc_nic_drv: basic rtnetlink for lock/unlock and netdev_run_todo() --- repos/pc/src/drivers/nic/pc/dummies.c | 37 ---------------- repos/pc/src/drivers/nic/pc/rtnetlink.c | 58 +++++++++++++++++++++++++ repos/pc/src/drivers/nic/pc/target.inc | 1 + 3 files changed, 59 insertions(+), 37 deletions(-) create mode 100644 repos/pc/src/drivers/nic/pc/rtnetlink.c diff --git a/repos/pc/src/drivers/nic/pc/dummies.c b/repos/pc/src/drivers/nic/pc/dummies.c index f0c497c675..e7d623850d 100644 --- a/repos/pc/src/drivers/nic/pc/dummies.c +++ b/repos/pc/src/drivers/nic/pc/dummies.c @@ -128,43 +128,6 @@ EXPORT_SYMBOL_GPL(bpf_master_redirect_enabled_key); DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_sibling_map); EXPORT_PER_CPU_SYMBOL(cpu_sibling_map); -#include - -void rtnl_register(int protocol,int msgtype,rtnl_doit_func doit,rtnl_dumpit_func dumpit,unsigned int flags) -{ - lx_emul_trace(__func__); -} - -#include - -int rtnl_lock_killable(void) -{ - lx_emul_trace(__func__); - return 0; -} - -#include - -int rtnl_is_locked(void) -{ - lx_emul_trace(__func__); - return 0; -} - -#include - -void rtnl_lock(void) -{ - lx_emul_trace(__func__); -} - -#include - -void rtnl_unlock(void) -{ - lx_emul_trace(__func__); -} - #include int __init dev_proc_init(void) diff --git a/repos/pc/src/drivers/nic/pc/rtnetlink.c b/repos/pc/src/drivers/nic/pc/rtnetlink.c new file mode 100644 index 0000000000..78c956d90d --- /dev/null +++ b/repos/pc/src/drivers/nic/pc/rtnetlink.c @@ -0,0 +1,58 @@ +/* + * \brief Basic RTNETLINK implementation with lock/unlock and netdev_run_todo() + * \author Christian Helmuth + * \date 2024-03-26 + */ + +/* + * Copyright (C) 2024 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include + +#include +#include + +#include <../net/core/dev.h> + + +static DEFINE_MUTEX(rtnl_mutex); + +void rtnl_register(int protocol,int msgtype,rtnl_doit_func doit,rtnl_dumpit_func dumpit,unsigned int flags) +{ +} + + +int rtnl_lock_killable(void) +{ + return mutex_lock_killable(&rtnl_mutex); +} + + +int rtnl_is_locked(void) +{ + return mutex_is_locked(&rtnl_mutex); +} + + +void rtnl_lock(void) +{ + mutex_lock(&rtnl_mutex); +} + + +void __rtnl_unlock(void) +{ + WARN_ON(!list_empty(&net_todo_list)); + + mutex_unlock(&rtnl_mutex); +} + + +void rtnl_unlock(void) +{ + netdev_run_todo(); +} diff --git a/repos/pc/src/drivers/nic/pc/target.inc b/repos/pc/src/drivers/nic/pc/target.inc index 8e45f4ff39..4c5430f0a5 100644 --- a/repos/pc/src/drivers/nic/pc/target.inc +++ b/repos/pc/src/drivers/nic/pc/target.inc @@ -7,6 +7,7 @@ SRC_C += dummies.c SRC_C += lx_emul.c SRC_C += lx_emul/common_dummies.c SRC_C += lx_user.c +SRC_C += rtnetlink.c vpath %.c $(REP_DIR)/src/lib/pc vpath %.cc $(REP_DIR)/src/lib/pc