mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-19 05:37:54 +00:00
74 lines
2.2 KiB
Diff
74 lines
2.2 KiB
Diff
|
This patch makes the boot DHCP re-connectable.
|
||
|
|
||
|
diff --git src/linux/net/ipv4/ipconfig.c src/linux/net/ipv4/ipconfig.c
|
||
|
index c56b6fe6f..cdb9cd83e 100644
|
||
|
--- src/linux/net/ipv4/ipconfig.c
|
||
|
+++ src/linux/net/ipv4/ipconfig.c
|
||
|
@@ -130,7 +130,7 @@ int ic_proto_enabled __initdata = 0
|
||
|
static int ic_host_name_set __initdata; /* Host name set by us? */
|
||
|
|
||
|
__be32 ic_myaddr = NONE; /* My IP address */
|
||
|
-static __be32 ic_netmask = NONE; /* Netmask for local subnet */
|
||
|
+__be32 ic_netmask = NONE; /* Netmask for local subnet */
|
||
|
__be32 ic_gateway = NONE; /* Gateway IP address */
|
||
|
|
||
|
#ifdef IPCONFIG_DYNAMIC
|
||
|
@@ -156,7 +156,7 @@ static int ic_proto_used; /* Protocol used, if any */
|
||
|
#else
|
||
|
#define ic_proto_used 0
|
||
|
#endif
|
||
|
-static __be32 ic_nameservers[CONF_NAMESERVERS_MAX]; /* DNS Server IP addresses */
|
||
|
+__be32 ic_nameservers[CONF_NAMESERVERS_MAX]; /* DNS Server IP addresses */
|
||
|
static __be32 ic_ntp_servers[CONF_NTP_SERVERS_MAX]; /* NTP server IP addresses */
|
||
|
static u8 ic_domain[64]; /* DNS (not NIS) domain name */
|
||
|
|
||
|
@@ -431,6 +431,33 @@ static int __init ic_setup_routes(void)
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
+static int __init ic_delete_routes(void)
|
||
|
+{
|
||
|
+ /* No need to delete device routes, only the default route... */
|
||
|
+
|
||
|
+ if (ic_gateway != NONE) {
|
||
|
+ struct rtentry rm;
|
||
|
+ int err;
|
||
|
+
|
||
|
+ memset(&rm, 0, sizeof(rm));
|
||
|
+ if ((ic_gateway ^ ic_myaddr) & ic_netmask) {
|
||
|
+ pr_err("IP-Config: Gateway not on directly connected network\n");
|
||
|
+ return -1;
|
||
|
+ }
|
||
|
+ set_sockaddr((struct sockaddr_in *) &rm.rt_dst, 0, 0);
|
||
|
+ set_sockaddr((struct sockaddr_in *) &rm.rt_genmask, 0, 0);
|
||
|
+ set_sockaddr((struct sockaddr_in *) &rm.rt_gateway, ic_gateway, 0);
|
||
|
+ rm.rt_flags = RTF_UP | RTF_GATEWAY;
|
||
|
+ if ((err = ip_rt_ioctl(&init_net, SIOCDELRT, &rm)) < 0) {
|
||
|
+ pr_err("IP-Config: Cannot delete default route (%d)\n",
|
||
|
+ err);
|
||
|
+ return -1;
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ return 0;
|
||
|
+}
|
||
|
+
|
||
|
/*
|
||
|
* Fill in default values for all missing parameters.
|
||
|
*/
|
||
|
@@ -1725,6 +1752,14 @@ static int __init ip_auto_config_setup(char *addrs)
|
||
|
ic_set_manually = 1;
|
||
|
ic_enable = 1;
|
||
|
|
||
|
+ ic_delete_routes();
|
||
|
+
|
||
|
+ ic_myaddr = NONE;
|
||
|
+ ic_netmask = NONE;
|
||
|
+ ic_gateway = NONE;
|
||
|
+ ic_servaddr = NONE;
|
||
|
+ ic_got_reply = 0;
|
||
|
+
|
||
|
/*
|
||
|
* If any dhcp, bootp etc options are set, leave autoconfig on
|
||
|
* and skip the below static IP processing.
|