aboutsummaryrefslogtreecommitdiffstats
path: root/extras/mini-os/lwip-net.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-03-19 16:20:14 +0000
committerKeir Fraser <keir.fraser@citrix.com>2008-03-19 16:20:14 +0000
commitdf4e524d8dd89f83a848e2641b3d2bcbb07807d9 (patch)
tree3afdc4cfaaa549f32778395f5edac611fa2f13cf /extras/mini-os/lwip-net.c
parent6fef410021e2f5384a46aca3b6f49a507d331420 (diff)
downloadxen-df4e524d8dd89f83a848e2641b3d2bcbb07807d9.tar.gz
xen-df4e524d8dd89f83a848e2641b3d2bcbb07807d9.tar.bz2
xen-df4e524d8dd89f83a848e2641b3d2bcbb07807d9.zip
minios: Automatically set IP from XenStore information
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Diffstat (limited to 'extras/mini-os/lwip-net.c')
-rw-r--r--extras/mini-os/lwip-net.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/extras/mini-os/lwip-net.c b/extras/mini-os/lwip-net.c
index 1983d23431..da4f1fd209 100644
--- a/extras/mini-os/lwip-net.c
+++ b/extras/mini-os/lwip-net.c
@@ -339,10 +339,25 @@ void start_networking(void)
struct ip_addr ipaddr = { htonl(IF_IPADDR) };
struct ip_addr netmask = { htonl(IF_NETMASK) };
struct ip_addr gw = { 0 };
+ char *ip;
tprintk("Waiting for network.\n");
- dev = init_netfront(NULL, NULL, rawmac);
+ dev = init_netfront(NULL, NULL, rawmac, &ip);
+
+ if (ip) {
+ ipaddr.addr = inet_addr(ip);
+ if (IN_CLASSA(ntohl(ipaddr.addr)))
+ netmask.addr = htonl(IN_CLASSA_NET);
+ else if (IN_CLASSB(ntohl(ipaddr.addr)))
+ netmask.addr = htonl(IN_CLASSB_NET);
+ else if (IN_CLASSC(ntohl(ipaddr.addr)))
+ netmask.addr = htonl(IN_CLASSC_NET);
+ else
+ tprintk("Strange IP %s, leaving netmask to 0.\n", ip);
+ }
+ tprintk("IP %x netmask %x gateway %x.\n",
+ ntohl(ipaddr.addr), ntohl(netmask.addr), ntohl(gw.addr));
tprintk("TCP/IP bringup begins.\n");