Hi Tiwel, On Sat, 3 May 2025 at 07:17, Tiwei Bie <tiwei....@antgroup.com> 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....@antgroup.com>
Thanks for your patch! > --- 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 pr_err() (and friends, everywhere) > + "setup_etheraddr: failed to parse '%s' " > + "as an ethernet address\n", str); Please don't split error messages, as it makes it harder to grep for them (everywhere) > + goto random; > + } > + str = end + 1; > + } Can this use mac_pton()? > + 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]); Perhaps make a copy of addr[] with the bit set, so you can use %pM? > + } > + eth_hw_addr_set(dev, addr); > + return; Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds