Split non-TCP portions of the stack out into ip.[ch].
authorMichael Brown <mcb30@etherboot.org>
Fri, 24 Mar 2006 17:22:09 +0000 (17:22 +0000)
committerMichael Brown <mcb30@etherboot.org>
Fri, 24 Mar 2006 17:22:09 +0000 (17:22 +0000)
Added set_ipaddr().

src/include/gpxe/ip.h [new file with mode: 0644]
src/include/gpxe/tcp.h
src/proto/ip.c [new file with mode: 0644]
src/proto/tcp.c
src/proto/uip/uipopt.h

diff --git a/src/include/gpxe/ip.h b/src/include/gpxe/ip.h
new file mode 100644 (file)
index 0000000..3a97168
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef _IP_H
+#define _IP_H
+
+/** @file
+ *
+ * IP protocol
+ *
+ * This file defines the gPXE IP API.
+ *
+ */
+
+#include <gpxe/in.h>
+
+extern void set_ipaddr ( struct in_addr address );
+extern void init_tcpip ( void );
+extern void run_tcpip ( void );
+
+#endif /* _IP_H */
index c661114..cb275f8 100644 (file)
@@ -96,7 +96,5 @@ extern int tcp_connect ( struct tcp_connection *conn );
 extern void tcp_send ( struct tcp_connection *conn, const void *data,
                       size_t len );
 extern void tcp_close ( struct tcp_connection *conn );
-extern void init_tcpip ( void );
-extern void run_tcpip ( void );
 
 #endif /* _TCP_H */
diff --git a/src/proto/ip.c b/src/proto/ip.c
new file mode 100644 (file)
index 0000000..3f46377
--- /dev/null
@@ -0,0 +1,109 @@
+#include <string.h>
+#include <stdint.h>
+#include <byteswap.h>
+#include <gpxe/in.h>
+#include <gpxe/ip.h>
+#include "uip/uip.h"
+#include "uip/uip_arp.h"
+
+/** @file
+ *
+ * IP protocol
+ *
+ * The gPXE IP stack is currently implemented on top of the uIP
+ * protocol stack.  This file provides wrappers around uIP so that
+ * higher-level protocol implementations do not need to talk directly
+ * to uIP (which has a somewhat baroque API).
+ *
+ */
+
+/**
+ * Set IP address
+ *
+ */
+void set_ipaddr ( struct in_addr address ) {
+       union {
+               struct in_addr address;
+               uint16_t uip_address[2];
+       } u;
+
+       u.address = address;
+       uip_sethostaddr ( u.uip_address );
+}
+
+/**
+ * Initialise TCP/IP stack
+ *
+ */
+void init_tcpip ( void ) {
+       uip_init();
+       uip_arp_init();
+}
+
+#define UIP_HLEN ( 40 + UIP_LLH_LEN )
+
+/**
+ * Transmit TCP data
+ *
+ * This is a wrapper around netdev_transmit().  It gathers up the
+ * packet produced by uIP, and then passes it to netdev_transmit() as
+ * a single buffer.
+ */
+static void uip_transmit ( void ) {
+       uip_arp_out();
+       if ( uip_len > UIP_HLEN ) {
+               memcpy ( uip_buf + UIP_HLEN, ( void * ) uip_appdata,
+                        uip_len - UIP_HLEN );
+       }
+       netdev_transmit ( uip_buf, uip_len );
+       uip_len = 0;
+}
+
+/**
+ * Run the TCP/IP stack
+ *
+ * Call this function in a loop in order to allow TCP/IP processing to
+ * take place.  This call takes the stack through a single iteration;
+ * it will typically be used in a loop such as
+ *
+ * @code
+ *
+ * struct tcp_connection *my_connection;
+ * ...
+ * tcp_connect ( my_connection );
+ * while ( ! my_connection->finished ) {
+ *   run_tcpip();
+ * }
+ *
+ * @endcode
+ *
+ * where @c my_connection->finished is set by one of the connection's
+ * #tcp_operations methods to indicate completion.
+ */
+void run_tcpip ( void ) {
+       void *data;
+       size_t len;
+       uint16_t type;
+       int i;
+       
+       if ( netdev_poll ( 1, &data, &len ) ) {
+               /* We have data */
+               memcpy ( uip_buf, data, len );
+               uip_len = len;
+               type = ntohs ( *( ( uint16_t * ) ( uip_buf + 12 ) ) );
+               if ( type == UIP_ETHTYPE_ARP ) {
+                       uip_arp_arpin();
+               } else {
+                       uip_arp_ipin();
+                       uip_input();
+               }
+               if ( uip_len > 0 )
+                       uip_transmit();
+       } else {
+               for ( i = 0 ; i < UIP_CONNS ; i++ ) {
+                       uip_periodic ( i );
+                       if ( uip_len > 0 )
+                               uip_transmit();
+               }
+       }
+}
index 8c73201..e12fff7 100644 (file)
  *
  */
 
-/**
- * Initialise TCP/IP stack
- *
- */
-void init_tcpip ( void ) {
-       uip_init();
-       uip_arp_init();
-}
-
-#define UIP_HLEN ( 40 + UIP_LLH_LEN )
-
-/**
- * Transmit TCP data
- *
- * This is a wrapper around netdev_transmit().  It gathers up the
- * packet produced by uIP, and then passes it to netdev_transmit() as
- * a single buffer.
- */
-static void uip_transmit ( void ) {
-       uip_arp_out();
-       if ( uip_len > UIP_HLEN ) {
-               memcpy ( uip_buf + UIP_HLEN, ( void * ) uip_appdata,
-                        uip_len - UIP_HLEN );
-       }
-       netdev_transmit ( uip_buf, uip_len );
-       uip_len = 0;
-}
-
-/**
- * Run the TCP/IP stack
- *
- * Call this function in a loop in order to allow TCP/IP processing to
- * take place.  This call takes the stack through a single iteration;
- * it will typically be used in a loop such as
- *
- * @code
- *
- * struct tcp_connection *my_connection;
- * ...
- * tcp_connect ( my_connection );
- * while ( ! my_connection->finished ) {
- *   run_tcpip();
- * }
- *
- * @endcode
- *
- * where @c my_connection->finished is set by one of the connection's
- * #tcp_operations methods to indicate completion.
- */
-void run_tcpip ( void ) {
-       void *data;
-       size_t len;
-       uint16_t type;
-       int i;
-       
-       if ( netdev_poll ( 1, &data, &len ) ) {
-               /* We have data */
-               memcpy ( uip_buf, data, len );
-               uip_len = len;
-               type = ntohs ( *( ( uint16_t * ) ( uip_buf + 12 ) ) );
-               if ( type == UIP_ETHTYPE_ARP ) {
-                       uip_arp_arpin();
-               } else {
-                       uip_arp_ipin();
-                       uip_input();
-               }
-               if ( uip_len > 0 )
-                       uip_transmit();
-       } else {
-               for ( i = 0 ; i < UIP_CONNS ; i++ ) {
-                       uip_periodic ( i );
-                       if ( uip_len > 0 )
-                               uip_transmit();
-               }
-       }
-}
-
 /**
  * Open a TCP connection
  *
index 15070a7..811284e 100644 (file)
@@ -114,7 +114,7 @@ typedef unsigned short uip_stats_t;
  *
  * \hideinitializer
  */
-#define UIP_FIXEDADDR    1
+#define UIP_FIXEDADDR    0
 
 /**
  * Ping IP address asignment.
@@ -130,42 +130,42 @@ typedef unsigned short uip_stats_t;
  */
 #define UIP_PINGADDRCONF 0
 
-#define UIP_IPADDR0     192 /**< The first octet of the IP address of
+#define UIP_IPADDR0     0   /**< The first octet of the IP address of
                               this uIP node, if UIP_FIXEDADDR is
                               1. \hideinitializer */
-#define UIP_IPADDR1     168 /**< The second octet of the IP address of
+#define UIP_IPADDR1     0   /**< The second octet of the IP address of
                               this uIP node, if UIP_FIXEDADDR is
                               1. \hideinitializer */
 #define UIP_IPADDR2     0   /**< The third octet of the IP address of
                               this uIP node, if UIP_FIXEDADDR is
                               1. \hideinitializer */
-#define UIP_IPADDR3     2   /**< The fourth octet of the IP address of
+#define UIP_IPADDR3     0   /**< The fourth octet of the IP address of
                               this uIP node, if UIP_FIXEDADDR is
                               1. \hideinitializer */
 
-#define UIP_NETMASK0    255 /**< The first octet of the netmask of
+#define UIP_NETMASK0    0   /**< The first octet of the netmask of
                               this uIP node, if UIP_FIXEDADDR is
                               1. \hideinitializer */
-#define UIP_NETMASK1    255 /**< The second octet of the netmask of
+#define UIP_NETMASK1    0   /**< The second octet of the netmask of
                               this uIP node, if UIP_FIXEDADDR is
                               1. \hideinitializer */
-#define UIP_NETMASK2    255 /**< The third octet of the netmask of
+#define UIP_NETMASK2    0   /**< The third octet of the netmask of
                               this uIP node, if UIP_FIXEDADDR is
                               1. \hideinitializer */
 #define UIP_NETMASK3    0   /**< The fourth octet of the netmask of
                               this uIP node, if UIP_FIXEDADDR is
                               1. \hideinitializer */
 
-#define UIP_DRIPADDR0   192 /**< The first octet of the IP address of
+#define UIP_DRIPADDR0   0   /**< The first octet of the IP address of
                               the default router, if UIP_FIXEDADDR is
                               1. \hideinitializer */
-#define UIP_DRIPADDR1   168 /**< The second octet of the IP address of
+#define UIP_DRIPADDR1   0   /**< The second octet of the IP address of
                               the default router, if UIP_FIXEDADDR is
                               1. \hideinitializer */
 #define UIP_DRIPADDR2   0   /**< The third octet of the IP address of
                               the default router, if UIP_FIXEDADDR is
                               1. \hideinitializer */
-#define UIP_DRIPADDR3   1   /**< The fourth octet of the IP address of
+#define UIP_DRIPADDR3   0   /**< The fourth octet of the IP address of
                               the default router, if UIP_FIXEDADDR is
                               1. \hideinitializer */