diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2017-11-17 21:47:40 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2017-12-01 12:33:33 +0100 |
commit | 46f7781d361b2b4768c0a56c4fd6a9b11fe4157c (patch) | |
tree | 44e95caa85e5398cf42ef067e2c7228c24a3c637 | |
parent | 48a58879d18a21007cb7d6863c1bd569a54a5c03 (diff) | |
download | barebox-46f7781d361b2b4768c0a56c4fd6a9b11fe4157c.tar.gz barebox-46f7781d361b2b4768c0a56c4fd6a9b11fe4157c.tar.xz |
net: Use a single gateway
There is not much point in having a network device specific
gateway. If barebox really is part of such a complicated network
in which it needs multiple gateways, then we probably need a
real routing table. Until this happens, a single gateway should
be enough.
This introduces global.net.gateway which holds the gateway ip. The
previously used device specific <ethx>.gateway variables still exist,
but are only aliases for the single gateway.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | include/net.h | 2 | ||||
-rw-r--r-- | net/eth.c | 3 | ||||
-rw-r--r-- | net/ifup.c | 4 | ||||
-rw-r--r-- | net/net.c | 13 |
4 files changed, 15 insertions, 7 deletions
diff --git a/include/net.h b/include/net.h index 06390732fb..95fa828e84 100644 --- a/include/net.h +++ b/include/net.h @@ -59,7 +59,6 @@ struct eth_device { IPaddr_t ipaddr; IPaddr_t netmask; - IPaddr_t gateway; char ethaddr[6]; char *bootarg; }; @@ -224,6 +223,7 @@ void net_set_nameserver(IPaddr_t ip); void net_set_domainname(const char *name); IPaddr_t net_get_ip(void); IPaddr_t net_get_serverip(void); +IPaddr_t net_get_gateway(void); IPaddr_t net_get_nameserver(void); const char *net_get_domainname(void); @@ -349,6 +349,7 @@ late_initcall(eth_register_of_fixup); #endif extern IPaddr_t net_serverip; +extern IPaddr_t net_gateway; int eth_register(struct eth_device *edev) { @@ -382,7 +383,7 @@ int eth_register(struct eth_device *edev) dev_add_param_ip(dev, "ipaddr", NULL, NULL, &edev->ipaddr, edev); dev_add_param_ip(dev, "serverip", NULL, NULL, &net_serverip, edev); - dev_add_param_ip(dev, "gateway", NULL, NULL, &edev->gateway, edev); + dev_add_param_ip(dev, "gateway", NULL, NULL, &net_gateway, edev); dev_add_param_ip(dev, "netmask", NULL, NULL, &edev->netmask, edev); dev_add_param_mac(dev, "ethaddr", eth_param_set_ethaddr, NULL, edev->ethaddr, edev); diff --git a/net/ifup.c b/net/ifup.c index 2d1feeb74a..c3ea1b6a45 100644 --- a/net/ifup.c +++ b/net/ifup.c @@ -113,6 +113,7 @@ int ifup(const char *name, unsigned flags) } else if (!strcmp(ip, "static")) { char *bootarg; IPaddr_t serverip; + IPaddr_t gateway; for (i = 0; i < ARRAY_SIZE(vars); i++) { ret = eth_set_param(dev, vars[i]); @@ -121,11 +122,12 @@ int ifup(const char *name, unsigned flags) } serverip = net_get_serverip(); + gateway = net_get_gateway(); bootarg = basprintf("ip=%pI4:%pI4:%pI4:%pI4:::", &edev->ipaddr, &serverip, - &edev->gateway, + &gateway, &edev->netmask); dev_set_param(dev, "linux.bootargs", bootarg); free(bootarg); @@ -45,6 +45,7 @@ unsigned char *NetRxPackets[PKTBUFSRX]; /* Receive packets */ static unsigned int net_ip_id; IPaddr_t net_serverip; +IPaddr_t net_gateway; static IPaddr_t net_nameserver; static char *net_domainname; @@ -184,10 +185,10 @@ static int arp_request(IPaddr_t dest, unsigned char *ether) memset(arp->ar_data + 10, 0, 6); /* dest ET addr = 0 */ if ((dest & edev->netmask) != (edev->ipaddr & edev->netmask)) { - if (!edev->gateway) + if (!net_gateway) arp_wait_ip = dest; else - arp_wait_ip = edev->gateway; + arp_wait_ip = net_gateway; } else { arp_wait_ip = dest; } @@ -284,9 +285,12 @@ void net_set_netmask(IPaddr_t nm) void net_set_gateway(IPaddr_t gw) { - struct eth_device *edev = eth_get_current(); + net_gateway = gw; +} - edev->gateway = gw; +IPaddr_t net_get_gateway(void) +{ + return net_gateway; } static LIST_HEAD(connection_list); @@ -614,6 +618,7 @@ static int net_init(void) globalvar_add_simple_ip("net.nameserver", &net_nameserver); globalvar_add_simple_string("net.domainname", &net_domainname); globalvar_add_simple_ip("net.server", &net_serverip); + globalvar_add_simple_ip("net.gateway", &net_gateway); return 0; } |