minios: Automatically set IP from XenStore information
PATCH 1/1 minios: Automatically set IP from XenStore information
minios: Automatically set IP from XenStore information
Signed-off-by Samuel Thibault <[email protected]>
extras/mini-os/Makefile +1 -1
@@ -100,7 +100,7 @@ LDLIBS += -lc endif -ifneq ($(caml)-$(qemu)-$(CDIR)-$(lwip),--y) +ifneq ($(caml)-$(qemu)-$(CDIR)-$(lwip),---y) OBJS := $(filter-out daytime.o, $(OBJS)) endif
extras/mini-os/daytime.c +7 -4
@@ -15,16 +15,19 @@void run_server (void *p) {struct ip_addr listenaddr = {0 }; -struct ip_addr ipaddr = {htonl (0x0a000001 ) }; -struct ip_addr netmask = {htonl (0xff000000 ) }; -struct ip_addr gw = {0 };struct netconn *listener;struct netconn *session;struct timeval tv;err_t rc;start_networking (); -networking_set_addr (&ipaddr, &netmask, &gw); + +if (0 ) { +struct ip_addr ipaddr = {htonl (0x0a000001 ) }; +struct ip_addr netmask = {htonl (0xff000000 ) }; +struct ip_addr gw = {0 }; +networking_set_addr (&ipaddr, &netmask, &gw); + }tprintk ("Opening connection\n" );
extras/mini-os/include/netfront.h +1 -1
@@ -3,7 +3,7 @@#include <lwip/netif.h> #endif struct netfront_dev ; -struct netfront_dev *init_netfront (char *nodename,void (*netif_rx)(unsigned char *data,int len),unsigned char rawmac[6 ]); +struct netfront_dev *init_netfront (char *nodename,void (*netif_rx)(unsigned char *data,int len),unsigned char rawmac[6 ],char **ip);void netfront_xmit (struct netfront_dev *dev,unsigned char * data,int len);void shutdown_netfront (struct netfront_dev *dev);#ifdef HAVE_LIBC
extras/mini-os/kernel.c +1 -1
@@ -87,7 +87,7 @@static void netfront_thread (void *p) { -init_netfront (NULL ,NULL ,NULL ); +init_netfront (NULL ,NULL ,NULL ,NULL ); }static struct blkfront_dev *blk_dev;
extras/mini-os/lwip-net.c +16 -1
@@ -339,10 +339,25 @@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" );
extras/mini-os/netfront.c +7 -2
@@ -259,7 +259,7 @@ }#endif -struct netfront_dev *init_netfront (char *nodename,void (*thenetif_rx)(unsigned char * data,int len),unsigned char rawmac[6 ]) +struct netfront_dev *init_netfront (char *nodename,void (*thenetif_rx)(unsigned char * data,int len),unsigned char rawmac[6 ],char **ip) {xenbus_transaction_t xbt;char * err;
@@ -402,6 +402,11 @@xenbus_wait_for_value (path,"4" );xenbus_unwatch_path (XBT_NIL , path); + +if (ip) { +snprintf (path,sizeof (path),"%s/ip" , dev->backend); +xenbus_read (XBT_NIL , path, ip); + } }printk ("**************************\n" );
@@ -427,7 +432,7 @@int netfront_tap_open (char *nodename) {struct netfront_dev *dev; - dev =init_netfront (nodename,NETIF_SELECT_RX ,NULL ); + dev =init_netfront (nodename,NETIF_SELECT_RX ,NULL ,NULL );if (!dev) {printk ("TAP open failed\n" ); errno =EIO ;
Oops, sorry, it was against the stubdom tree, here is a fixed version (basically the same, without Makefile change)
minios: Automatically set IP from XenStore information
Signed-off-by Samuel Thibault <[email protected]>
extras/mini-os/daytime.c +7 -4
@@ -15,16 +15,19 @@void run_server (void *p) {struct ip_addr listenaddr = {0 }; -struct ip_addr ipaddr = {htonl (0x0a000001 ) }; -struct ip_addr netmask = {htonl (0xff000000 ) }; -struct ip_addr gw = {0 };struct netconn *listener;struct netconn *session;struct timeval tv;err_t rc;start_networking (); -networking_set_addr (&ipaddr, &netmask, &gw); + +if (0 ) { +struct ip_addr ipaddr = {htonl (0x0a000001 ) }; +struct ip_addr netmask = {htonl (0xff000000 ) }; +struct ip_addr gw = {0 }; +networking_set_addr (&ipaddr, &netmask, &gw); + }tprintk ("Opening connection\n" );
extras/mini-os/include/netfront.h +1 -1
@@ -3,7 +3,7 @@#include <lwip/netif.h> #endif struct netfront_dev ; -struct netfront_dev *init_netfront (char *nodename,void (*netif_rx)(unsigned char *data,int len),unsigned char rawmac[6 ]); +struct netfront_dev *init_netfront (char *nodename,void (*netif_rx)(unsigned char *data,int len),unsigned char rawmac[6 ],char **ip);void netfront_xmit (struct netfront_dev *dev,unsigned char * data,int len);void shutdown_netfront (struct netfront_dev *dev);#ifdef HAVE_LIBC
extras/mini-os/kernel.c +1 -1
@@ -87,7 +87,7 @@static void netfront_thread (void *p) { -init_netfront (NULL ,NULL ,NULL ); +init_netfront (NULL ,NULL ,NULL ,NULL ); }static struct blkfront_dev *blk_dev;
extras/mini-os/lwip-net.c +16 -1
@@ -339,10 +339,25 @@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" );
extras/mini-os/netfront.c +7 -2
@@ -259,7 +259,7 @@ }#endif -struct netfront_dev *init_netfront (char *nodename,void (*thenetif_rx)(unsigned char * data,int len),unsigned char rawmac[6 ]) +struct netfront_dev *init_netfront (char *nodename,void (*thenetif_rx)(unsigned char * data,int len),unsigned char rawmac[6 ],char **ip) {xenbus_transaction_t xbt;char * err;
@@ -402,6 +402,11 @@xenbus_wait_for_value (path,"4" );xenbus_unwatch_path (XBT_NIL , path); + +if (ip) { +snprintf (path,sizeof (path),"%s/ip" , dev->backend); +xenbus_read (XBT_NIL , path, ip); + } }printk ("**************************\n" );
@@ -427,7 +432,7 @@int netfront_tap_open (char *nodename) {struct netfront_dev *dev; - dev =init_netfront (nodename,NETIF_SELECT_RX ,NULL ); + dev =init_netfront (nodename,NETIF_SELECT_RX ,NULL ,NULL );if (!dev) {printk ("TAP open failed\n" ); errno =EIO ;