From ac7b6bcb7ef5abe5d5f6b2a64453080b7994a6eb Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Tue, 28 Nov 2017 10:56:30 +0100 Subject: net: Add linuxdevname property When you have a static network environment but more than one network device on your machine it is necessary to provide the parameter to the ip parameter at kernel cmd line. The device name assigned by Linux cannot in general be predicted as it depends on driver bind order. This patch introduces a new property linux.devname to eth devices. The value is added to bootargs per interface and can be changed in env/network/INTF Based on patch by Gavin Schenk . Signed-off-by: Sascha Hauer --- net/ifup.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'net/ifup.c') diff --git a/net/ifup.c b/net/ifup.c index dc41c47f24..827c5c03d1 100644 --- a/net/ifup.c +++ b/net/ifup.c @@ -72,11 +72,12 @@ static int source_env_network(struct eth_device *edev) "serverip", "ethaddr", "ip", + "linuxdevname", }; IPaddr_t ipaddr, netmask, gateway, serverip; unsigned char ethaddr[6]; char *file, *cmd; - const char *ethaddrstr, *modestr; + const char *ethaddrstr, *modestr, *linuxdevname; int ret, mode, ethaddr_valid = 0, i; struct stat s; @@ -107,6 +108,7 @@ static int source_env_network(struct eth_device *edev) netmask = getenv_ip("netmask"); gateway = getenv_ip("gateway"); serverip = getenv_ip("serverip"); + linuxdevname = getenv("linuxdevname"); ethaddrstr = getenv("ethaddr"); if (ethaddrstr && *ethaddrstr) { ret = string_to_ethaddr(ethaddrstr, ethaddr); @@ -149,6 +151,11 @@ static int source_env_network(struct eth_device *edev) net_set_serverip(serverip); } + if (linuxdevname) { + free(edev->linuxdevname); + edev->linuxdevname = xstrdup(linuxdevname); + } + ret = 0; out: @@ -169,11 +176,12 @@ static void set_linux_bootarg(struct eth_device *edev) serverip = net_get_serverip(); gateway = net_get_gateway(); - bootarg = basprintf("ip=%pI4:%pI4:%pI4:%pI4:::", + bootarg = basprintf("ip=%pI4:%pI4:%pI4:%pI4::%s:", &edev->ipaddr, &serverip, &gateway, - &edev->netmask); + &edev->netmask, + edev->linuxdevname ? edev->linuxdevname : ""); dev_set_param(&edev->dev, "linux.bootargs", bootarg); free(bootarg); } else if (edev->global_mode == ETH_MODE_DHCP) { -- cgit v1.2.3