[PATCH 2/3] um: vector: Eliminate the dependency on uml_net

Anton Ivanov anton.ivanov at cambridgegreys.com
Sat May 3 06:26:11 PDT 2025


On 03/05/2025 06:17, Tiwei Bie wrote:
> The only dependency on uml_net (i.e., the legacy network transport
> infrastructure) is the call to uml_net_setup_etheraddr(). Implement
> it inside vector to eliminate the uml_net dependency completely. It
> will allow us to remove uml_net in the next step.
> 
> Signed-off-by: Tiwei Bie <tiwei.btw at antgroup.com>
> ---
>   arch/um/drivers/Kconfig       |  1 -
>   arch/um/drivers/vector_kern.c | 52 +++++++++++++++++++++++++++++++++--
>   2 files changed, 50 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/um/drivers/Kconfig b/arch/um/drivers/Kconfig
> index 5bf4f0f3fd01..2067e37d6b63 100644
> --- a/arch/um/drivers/Kconfig
> +++ b/arch/um/drivers/Kconfig
> @@ -145,7 +145,6 @@ config UML_NET
>   
>   config UML_NET_VECTOR
>   	bool "Vector I/O high performance network devices"
> -	depends on UML_NET
>   	select MAY_HAVE_RUNTIME_DEPS
>   	help
>   	  This User-Mode Linux network driver uses multi-message send
> diff --git a/arch/um/drivers/vector_kern.c b/arch/um/drivers/vector_kern.c
> index b97bb52dd562..0d5c96897fa0 100644
> --- a/arch/um/drivers/vector_kern.c
> +++ b/arch/um/drivers/vector_kern.c
> @@ -27,7 +27,6 @@
>   #include <init.h>
>   #include <irq_kern.h>
>   #include <irq_user.h>
> -#include <net_kern.h>
>   #include <os.h>
>   #include "mconsole_kern.h"
>   #include "vector_user.h"
> @@ -1539,7 +1538,56 @@ static void vector_timer_expire(struct timer_list *t)
>   	napi_schedule(&vp->napi);
>   }
>   
> +static void vector_setup_etheraddr(struct net_device *dev, char *str)
> +{
> +	u8 addr[ETH_ALEN];
> +	char *end;
> +	int i;
>   
> +	if (str == NULL)
> +		goto random;
> +
> +	for (i = 0; i < 6; i++) {
> +		addr[i] = simple_strtoul(str, &end, 16);
> +		if ((end == str) ||
> +		   ((*end != ':') && (*end != ',') && (*end != '\0'))) {
> +			printk(KERN_ERR
> +			       "setup_etheraddr: failed to parse '%s' "
> +			       "as an ethernet address\n", str);
> +			goto random;
> +		}
> +		str = end + 1;
> +	}
> +	if (is_multicast_ether_addr(addr)) {
> +		printk(KERN_ERR
> +		       "Attempt to assign a multicast ethernet address to a "
> +		       "device disallowed\n");
> +		goto random;
> +	}
> +	if (!is_valid_ether_addr(addr)) {
> +		printk(KERN_ERR
> +		       "Attempt to assign an invalid ethernet address to a "
> +		       "device disallowed\n");
> +		goto random;
> +	}
> +	if (!is_local_ether_addr(addr)) {
> +		printk(KERN_WARNING
> +		       "Warning: Assigning a globally valid ethernet "
> +		       "address to a device\n");
> +		printk(KERN_WARNING "You should set the 2nd rightmost bit in "
> +		       "the first byte of the MAC,\n");
> +		printk(KERN_WARNING "i.e. %02x:%02x:%02x:%02x:%02x:%02x\n",
> +		       addr[0] | 0x02, addr[1], addr[2], addr[3], addr[4],
> +		       addr[5]);
> +	}
> +	eth_hw_addr_set(dev, addr);
> +	return;
> +
> +random:
> +	printk(KERN_INFO
> +	       "Choosing a random ethernet address for device %s\n", dev->name);
> +	eth_hw_addr_random(dev);
> +}
>   
>   static void vector_eth_configure(
>   		int n,
> @@ -1574,7 +1622,7 @@ static void vector_eth_configure(
>   	 * and fail.
>   	 */
>   	snprintf(dev->name, sizeof(dev->name), "vec%d", n);
> -	uml_net_setup_etheraddr(dev, uml_vector_fetch_arg(def, "mac"));
> +	vector_setup_etheraddr(dev, uml_vector_fetch_arg(def, "mac"));
>   	vp = netdev_priv(dev);
>   
>   	/* sysfs register */


Acked-By: Anton Ivanov <anton.ivanov at cambridgegreys.com>

I think it is time - it has been marked obsolete for 5 years.
-- 
Anton R. Ivanov
Cambridgegreys Limited. Registered in England. Company Number 10273661
https://www.cambridgegreys.com/



More information about the linux-um mailing list