Browse Source

(Redoing check-in lost by SourceForge's failure.)

Moved to net/
tags/v0.9.3
Michael Brown 18 years ago
parent
commit
8a229a16f6
7 changed files with 0 additions and 3643 deletions
  1. 0
    133
      src/proto/hello.c
  2. 0
    164
      src/proto/tcp.c
  3. 0
    1501
      src/proto/uip/uip.c
  4. 0
    1060
      src/proto/uip/uip.h
  5. 0
    83
      src/proto/uip/uip_arch.c
  6. 0
    130
      src/proto/uip/uip_arch.h
  7. 0
    572
      src/proto/uip/uipopt.h

+ 0
- 133
src/proto/hello.c View File

@@ -1,133 +0,0 @@
1
-#include <stddef.h>
2
-#include <string.h>
3
-#include <vsprintf.h>
4
-#include <assert.h>
5
-#include <gpxe/hello.h>
6
-
7
-/** @file
8
- *
9
- * "Hello world" TCP protocol
10
- *
11
- * This file implements a trivial TCP-based protocol.  It connects to
12
- * the server specified in hello_request::tcp and transmits a single
13
- * message (hello_request::message).  Any data received from the
14
- * server will be passed to the callback function,
15
- * hello_request::callback(), and once the connection has been closed,
16
- * hello_request::complete will be set to 1.
17
- *
18
- * To use this code, do something like:
19
- *
20
- * @code
21
- *
22
- *   static void my_callback ( char *data, size_t len ) {
23
- *     ... process data ...
24
- *   }
25
- *
26
- *   struct hello_request hello = {
27
- *     .message = "hello world!",
28
- *     .callback = my_callback,
29
- *   };
30
- *
31
- *   hello.sin.sin_addr.s_addr = ... server IP address ...
32
- *   hello.sin.sin_port = ... server port ...
33
- *
34
- *   hello_connect ( &hello );
35
- *   while ( ! hello.completed ) {
36
- *     run_tcpip();
37
- *   }
38
- *
39
- * @endcode
40
- *
41
- * It's worth noting that this trivial protocol would be entirely
42
- * adequate to implement a TCP-based version of TFTP; just use "RRQ
43
- * <filename>" as the message.  Now, if only an appropriate server
44
- * existed...
45
- */
46
-
47
-static inline struct hello_request *
48
-tcp_to_hello ( struct tcp_connection *conn ) {
49
-	return container_of ( conn, struct hello_request, tcp );
50
-}
51
-
52
-static void hello_aborted ( struct tcp_connection *conn ) {
53
-	struct hello_request *hello = tcp_to_hello ( conn );
54
-
55
-	printf ( "Connection aborted\n" );
56
-	hello->complete = 1;
57
-}
58
-
59
-static void hello_timedout ( struct tcp_connection *conn ) {
60
-	struct hello_request *hello = tcp_to_hello ( conn );
61
-
62
-	printf ( "Connection timed out\n" );
63
-	hello->complete = 1;
64
-}
65
-
66
-static void hello_closed ( struct tcp_connection *conn ) {
67
-	struct hello_request *hello = tcp_to_hello ( conn );
68
-
69
-	hello->complete = 1;
70
-}
71
-
72
-static void hello_connected ( struct tcp_connection *conn ) {
73
-	struct hello_request *hello = tcp_to_hello ( conn );
74
-
75
-	hello->remaining = strlen ( hello->message );
76
-	hello->state = HELLO_SENDING_MESSAGE;
77
-}
78
-
79
-static void hello_acked ( struct tcp_connection *conn, size_t len ) {
80
-	struct hello_request *hello = tcp_to_hello ( conn );
81
-	
82
-	hello->message += len;
83
-	hello->remaining -= len;
84
-	if ( hello->remaining == 0 ) {
85
-		switch ( hello->state ) {
86
-		case HELLO_SENDING_MESSAGE:
87
-			hello->message = "\r\n";
88
-			hello->remaining = 2;
89
-			hello->state = HELLO_SENDING_ENDL;
90
-			break;
91
-		case HELLO_SENDING_ENDL:
92
-			/* Nothing to do once we've finished sending
93
-			 * the end-of-line indicator.
94
-			 */
95
-			break;
96
-		default:
97
-			assert ( 0 );
98
-		}
99
-	}
100
-}
101
-
102
-static void hello_newdata ( struct tcp_connection *conn, void *data,
103
-			    size_t len ) {
104
-	struct hello_request *hello = tcp_to_hello ( conn );
105
-
106
-	hello->callback ( data, len );
107
-}
108
-
109
-static void hello_senddata ( struct tcp_connection *conn ) {
110
-	struct hello_request *hello = tcp_to_hello ( conn );
111
-
112
-	tcp_send ( conn, hello->message, hello->remaining );
113
-}
114
-
115
-static struct tcp_operations hello_tcp_operations = {
116
-	.aborted	= hello_aborted,
117
-	.timedout	= hello_timedout,
118
-	.closed		= hello_closed,
119
-	.connected	= hello_connected,
120
-	.acked		= hello_acked,
121
-	.newdata	= hello_newdata,
122
-	.senddata	= hello_senddata,
123
-};
124
-
125
-/**
126
- * Initiate a "hello world" connection
127
- *
128
- * @v hello	"Hello world" request
129
- */
130
-int hello_connect ( struct hello_request *hello ) {
131
-	hello->tcp.tcp_op = &hello_tcp_operations;
132
-	return tcp_connect ( &hello->tcp );
133
-}

+ 0
- 164
src/proto/tcp.c View File

@@ -1,164 +0,0 @@
1
-#include <string.h>
2
-#include <assert.h>
3
-#include <byteswap.h>
4
-#include <gpxe/tcp.h>
5
-#include "uip/uip.h"
6
-
7
-/** @file
8
- *
9
- * TCP protocol
10
- *
11
- * The gPXE TCP stack is currently implemented on top of the uIP
12
- * protocol stack.  This file provides wrappers around uIP so that
13
- * higher-level protocol implementations do not need to talk directly
14
- * to uIP (which has a somewhat baroque API).
15
- *
16
- * Basic operation is to create a #tcp_connection structure, call
17
- * tcp_connect() and then call run_tcpip() in a loop until the
18
- * operation has completed.  The TCP stack will call the various
19
- * methods defined in the #tcp_operations structure in order to send
20
- * and receive data.
21
- *
22
- * See hello.c for a trivial example of a TCP protocol using this
23
- * API.
24
- *
25
- */
26
-
27
-/**
28
- * TCP transmit buffer
29
- *
30
- * When a tcp_operations::senddata() method is called, it is
31
- * guaranteed to be able to use this buffer as temporary space for
32
- * constructing the data to be sent.  For example, code such as
33
- *
34
- * @code
35
- *
36
- *     static void my_senddata ( struct tcp_connection *conn ) {
37
- *         int len;
38
- *
39
- *         len = snprintf ( tcp_buffer, tcp_buflen, "FETCH %s\r\n", filename );
40
- *         tcp_send ( conn, tcp_buffer + already_sent, len - already_sent );
41
- *     }
42
- *
43
- * @endcode
44
- *
45
- * is allowed, and is probably the best way to deal with
46
- * variably-sized data.
47
- *
48
- * Note that you cannot use this simple mechanism if you want to be
49
- * able to construct single data blocks of more than #tcp_buflen
50
- * bytes.
51
- */
52
-void *tcp_buffer = uip_buf + ( 40 + UIP_LLH_LEN );
53
-
54
-/** Size of #tcp_buffer */
55
-size_t tcp_buflen = UIP_BUFSIZE - ( 40 + UIP_LLH_LEN );
56
-
57
-/**
58
- * Open a TCP connection
59
- *
60
- * @v conn	TCP connection
61
- * @ret 0	Success
62
- * @ret <0	Failure
63
- * 
64
- * This sets up a new TCP connection to the remote host specified in
65
- * tcp_connection::sin.  The actual SYN packet will not be sent out
66
- * until run_tcpip() is called for the first time.
67
- *
68
- * @todo Use linked lists instead of a static buffer, and thereby
69
- *       remove the only potential failure case, giving this function
70
- *       a void return type.
71
- */
72
-int tcp_connect ( struct tcp_connection *conn ) {
73
-	struct uip_conn *uip_conn;
74
-	u16_t ipaddr[2];
75
-
76
-	assert ( conn->sin.sin_addr.s_addr != 0 );
77
-	assert ( conn->sin.sin_port != 0 );
78
-	assert ( conn->tcp_op != NULL );
79
-	assert ( sizeof ( uip_conn->appstate ) == sizeof ( conn ) );
80
-
81
-	* ( ( uint32_t * ) ipaddr ) = conn->sin.sin_addr.s_addr;
82
-	uip_conn = uip_connect ( ipaddr, conn->sin.sin_port );
83
-	if ( ! uip_conn )
84
-		return -1;
85
-
86
-	*( ( void ** ) uip_conn->appstate ) = conn;
87
-	return 0;
88
-}
89
-
90
-/**
91
- * Send data via a TCP connection
92
- *
93
- * @v conn	TCP connection
94
- * @v data	Data to send
95
- * @v len	Length of data
96
- *
97
- * Data will be automatically limited to the current TCP window size.
98
- *
99
- * If retransmission is required, the connection's
100
- * tcp_operations::senddata() method will be called again in order to
101
- * regenerate the data.
102
- */
103
-void tcp_send ( struct tcp_connection *conn __unused,
104
-		const void *data, size_t len ) {
105
-
106
-	assert ( conn = *( ( void ** ) uip_conn->appstate ) );
107
-
108
-	if ( len > tcp_buflen )
109
-		len = tcp_buflen;
110
-	memmove ( tcp_buffer, data, len );
111
-
112
-	uip_send ( tcp_buffer, len );
113
-}
114
-
115
-/**
116
- * Close a TCP connection
117
- *
118
- * @v conn	TCP connection
119
- */
120
-void tcp_close ( struct tcp_connection *conn __unused ) {
121
-	assert ( conn = *( ( void ** ) uip_conn->appstate ) );
122
-	uip_close();
123
-}
124
-
125
-/**
126
- * uIP TCP application call interface
127
- *
128
- * This is the entry point of gPXE from the point of view of the uIP
129
- * protocol stack.  This function calls the appropriate methods from
130
- * the connection's @tcp_operations table in order to process received
131
- * data, transmit new data etc.
132
- */
133
-void uip_tcp_appcall ( void ) {
134
-	struct tcp_connection *conn = *( ( void ** ) uip_conn->appstate );
135
-	struct tcp_operations *op = conn->tcp_op;
136
-
137
-	assert ( conn->tcp_op->closed != NULL );
138
-	assert ( conn->tcp_op->connected != NULL );
139
-	assert ( conn->tcp_op->acked != NULL );
140
-	assert ( conn->tcp_op->newdata != NULL );
141
-	assert ( conn->tcp_op->senddata != NULL );
142
-
143
-	if ( uip_aborted() && op->aborted ) /* optional method */
144
-		op->aborted ( conn );
145
-	if ( uip_timedout() && op->timedout ) /* optional method */
146
-		op->timedout ( conn );
147
-	if ( uip_closed() && op->closed ) /* optional method */
148
-		op->closed ( conn );
149
-	if ( uip_connected() )
150
-		op->connected ( conn );
151
-	if ( uip_acked() )
152
-		op->acked ( conn, uip_conn->len );
153
-	if ( uip_newdata() )
154
-		op->newdata ( conn, ( void * ) uip_appdata, uip_len );
155
-	if ( uip_rexmit() || uip_newdata() || uip_acked() ||
156
-	     uip_connected() || uip_poll() )
157
-		op->senddata ( conn );
158
-}
159
-
160
-/* Present here to allow everything to link.  Will go into separate
161
- * udp.c file
162
- */
163
-void uip_udp_appcall ( void ) {
164
-}

+ 0
- 1501
src/proto/uip/uip.c
File diff suppressed because it is too large
View File


+ 0
- 1060
src/proto/uip/uip.h
File diff suppressed because it is too large
View File


+ 0
- 83
src/proto/uip/uip_arch.c View File

@@ -1,83 +0,0 @@
1
-#include <stdint.h>
2
-#include <byteswap.h>
3
-#include "uip_arch.h"
4
-#include "uip.h"
5
-
6
-volatile u8_t uip_acc32[4];
7
-
8
-void uip_add32 ( u8_t *op32, u16_t op16 ) {
9
-	* ( ( uint32_t * ) uip_acc32 ) =
10
-		htonl ( ntohl ( *( ( uint32_t * ) op32 ) )  + op16 );
11
-}
12
-
13
-#define BUF ((uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN])
14
-#define IP_PROTO_TCP    6
15
-
16
-u16_t uip_chksum(u16_t *sdata, u16_t len) {
17
-  u16_t acc;
18
-  
19
-  for(acc = 0; len > 1; len -= 2) {
20
-    acc += *sdata;
21
-    if(acc < *sdata) {
22
-      /* Overflow, so we add the carry to acc (i.e., increase by
23
-         one). */
24
-      ++acc;
25
-    }
26
-    ++sdata;
27
-  }
28
-
29
-  /* add up any odd byte */
30
-  if(len == 1) {
31
-    acc += htons(((u16_t)(*(u8_t *)sdata)) << 8);
32
-    if(acc < htons(((u16_t)(*(u8_t *)sdata)) << 8)) {
33
-      ++acc;
34
-    }
35
-  }
36
-
37
-  return acc;
38
-}
39
-
40
-u16_t uip_ipchksum(void) {
41
-  return uip_chksum((u16_t *)&uip_buf[UIP_LLH_LEN], 20);
42
-}
43
-
44
-u16_t uip_tcpchksum(void) {
45
-  u16_t hsum, sum;
46
-
47
-  
48
-  /* Compute the checksum of the TCP header. */
49
-  hsum = uip_chksum((u16_t *)&uip_buf[20 + UIP_LLH_LEN], 20);
50
-
51
-  /* Compute the checksum of the data in the TCP packet and add it to
52
-     the TCP header checksum. */
53
-  sum = uip_chksum((u16_t *)uip_appdata,
54
-		   (u16_t)(((((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - 40)));
55
-
56
-  if((sum += hsum) < hsum) {
57
-    ++sum;
58
-  }
59
-  
60
-  if((sum += BUF->srcipaddr[0]) < BUF->srcipaddr[0]) {
61
-    ++sum;
62
-  }
63
-  if((sum += BUF->srcipaddr[1]) < BUF->srcipaddr[1]) {
64
-    ++sum;
65
-  }
66
-  if((sum += BUF->destipaddr[0]) < BUF->destipaddr[0]) {
67
-    ++sum;
68
-  }
69
-  if((sum += BUF->destipaddr[1]) < BUF->destipaddr[1]) {
70
-    ++sum;
71
-  }
72
-  if((sum += (u16_t)htons((u16_t)IP_PROTO_TCP)) < (u16_t)htons((u16_t)IP_PROTO_TCP)) {
73
-    ++sum;
74
-  }
75
-
76
-  hsum = (u16_t)htons((((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - 20);
77
-  
78
-  if((sum += hsum) < hsum) {
79
-    ++sum;
80
-  }
81
-  
82
-  return sum;
83
-}

+ 0
- 130
src/proto/uip/uip_arch.h View File

@@ -1,130 +0,0 @@
1
-/**
2
- * \defgroup uiparch Architecture specific uIP functions
3
- * @{
4
- *
5
- * The functions in the architecture specific module implement the IP
6
- * check sum and 32-bit additions.
7
- *
8
- * The IP checksum calculation is the most computationally expensive
9
- * operation in the TCP/IP stack and it therefore pays off to
10
- * implement this in efficient assembler. The purpose of the uip-arch
11
- * module is to let the checksum functions to be implemented in
12
- * architecture specific assembler.
13
- *
14
- */
15
-
16
-/**
17
- * \file
18
- * Declarations of architecture specific functions.
19
- * \author Adam Dunkels <adam@dunkels.com>
20
- */
21
-
22
-/*
23
- * Copyright (c) 2001, Adam Dunkels.
24
- * All rights reserved. 
25
- *
26
- * Redistribution and use in source and binary forms, with or without 
27
- * modification, are permitted provided that the following conditions 
28
- * are met: 
29
- * 1. Redistributions of source code must retain the above copyright 
30
- *    notice, this list of conditions and the following disclaimer. 
31
- * 2. Redistributions in binary form must reproduce the above copyright 
32
- *    notice, this list of conditions and the following disclaimer in the 
33
- *    documentation and/or other materials provided with the distribution. 
34
- * 3. The name of the author may not be used to endorse or promote
35
- *    products derived from this software without specific prior
36
- *    written permission.  
37
- *
38
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
39
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
40
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
41
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
42
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
43
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
44
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
45
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
46
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
47
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
48
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
49
- *
50
- * This file is part of the uIP TCP/IP stack.
51
- *
52
- * $Id$
53
- *
54
- */
55
-
56
-#ifndef __UIP_ARCH_H__
57
-#define __UIP_ARCH_H__
58
-
59
-#include "uip.h"
60
-
61
-/**
62
- * Carry out a 32-bit addition.
63
- *
64
- * Because not all architectures for which uIP is intended has native
65
- * 32-bit arithmetic, uIP uses an external C function for doing the
66
- * required 32-bit additions in the TCP protocol processing. This
67
- * function should add the two arguments and place the result in the
68
- * global variable uip_acc32.
69
- *
70
- * \note The 32-bit integer pointed to by the op32 parameter and the
71
- * result in the uip_acc32 variable are in network byte order (big
72
- * endian).
73
- *
74
- * \param op32 A pointer to a 4-byte array representing a 32-bit
75
- * integer in network byte order (big endian).
76
- *
77
- * \param op16 A 16-bit integer in host byte order.
78
- */
79
-void uip_add32(u8_t *op32, u16_t op16);
80
-
81
-/**
82
- * Calculate the Internet checksum over a buffer.
83
- *
84
- * The Internet checksum is the one's complement of the one's
85
- * complement sum of all 16-bit words in the buffer.
86
- *
87
- * See RFC1071.
88
- *
89
- * \note This function is not called in the current version of uIP,
90
- * but future versions might make use of it.
91
- *
92
- * \param buf A pointer to the buffer over which the checksum is to be
93
- * computed.
94
- *
95
- * \param len The length of the buffer over which the checksum is to
96
- * be computed.
97
- *
98
- * \return The Internet checksum of the buffer.
99
- */
100
-u16_t uip_chksum(u16_t *buf, u16_t len);
101
-
102
-/**
103
- * Calculate the IP header checksum of the packet header in uip_buf.
104
- *
105
- * The IP header checksum is the Internet checksum of the 20 bytes of
106
- * the IP header.
107
- *
108
- * \return The IP header checksum of the IP header in the uip_buf
109
- * buffer.
110
- */
111
-u16_t uip_ipchksum(void);
112
-
113
-/**
114
- * Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
115
- *
116
- * The TCP checksum is the Internet checksum of data contents of the
117
- * TCP segment, and a pseudo-header as defined in RFC793.
118
- *
119
- * \note The uip_appdata pointer that points to the packet data may
120
- * point anywhere in memory, so it is not possible to simply calculate
121
- * the Internet checksum of the contents of the uip_buf buffer.
122
- *
123
- * \return The TCP checksum of the TCP segment in uip_buf and pointed
124
- * to by uip_appdata.
125
- */
126
-u16_t uip_tcpchksum(void);
127
-
128
-/** @} */
129
-
130
-#endif /* __UIP_ARCH_H__ */

+ 0
- 572
src/proto/uip/uipopt.h View File

@@ -1,572 +0,0 @@
1
-/**
2
- * \defgroup uipopt Configuration options for uIP
3
- * @{
4
- *
5
- * uIP is configured using the per-project configuration file
6
- * "uipopt.h". This file contains all compile-time options for uIP and
7
- * should be tweaked to match each specific project. The uIP
8
- * distribution contains a documented example "uipopt.h" that can be
9
- * copied and modified for each project.
10
- */
11
-
12
-/**
13
- * \file
14
- * Configuration options for uIP.
15
- * \author Adam Dunkels <adam@dunkels.com>
16
- *
17
- * This file is used for tweaking various configuration options for
18
- * uIP. You should make a copy of this file into one of your project's
19
- * directories instead of editing this example "uipopt.h" file that
20
- * comes with the uIP distribution.
21
- */
22
-
23
-/*
24
- * Copyright (c) 2001-2003, Adam Dunkels.
25
- * All rights reserved. 
26
- *
27
- * Redistribution and use in source and binary forms, with or without 
28
- * modification, are permitted provided that the following conditions 
29
- * are met: 
30
- * 1. Redistributions of source code must retain the above copyright 
31
- *    notice, this list of conditions and the following disclaimer. 
32
- * 2. Redistributions in binary form must reproduce the above copyright 
33
- *    notice, this list of conditions and the following disclaimer in the 
34
- *    documentation and/or other materials provided with the distribution. 
35
- * 3. The name of the author may not be used to endorse or promote
36
- *    products derived from this software without specific prior
37
- *    written permission.  
38
- *
39
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
40
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
41
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
42
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
43
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
44
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
45
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
46
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
47
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
48
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
49
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
50
- *
51
- * This file is part of the uIP TCP/IP stack.
52
- *
53
- * $Id$
54
- *
55
- */
56
-
57
-#ifndef __UIPOPT_H__
58
-#define __UIPOPT_H__
59
-
60
-/*------------------------------------------------------------------------------*/
61
-/**
62
- * \defgroup uipopttypedef uIP type definitions
63
- * @{
64
- */
65
-
66
-/**
67
- * The 8-bit unsigned data type.
68
- *
69
- * This may have to be tweaked for your particular compiler. "unsigned
70
- * char" works for most compilers.
71
- */
72
-typedef unsigned char u8_t;
73
-
74
-/**
75
- * The 16-bit unsigned data type.
76
- *
77
- * This may have to be tweaked for your particular compiler. "unsigned
78
- * short" works for most compilers.
79
- */
80
-typedef unsigned short u16_t;
81
-
82
-/**
83
- * The statistics data type.
84
- *
85
- * This datatype determines how high the statistics counters are able
86
- * to count.
87
- */
88
-typedef unsigned short uip_stats_t;
89
-
90
-/** @} */
91
-
92
-/*------------------------------------------------------------------------------*/
93
-
94
-/**
95
- * \defgroup uipoptstaticconf Static configuration options
96
- * @{
97
- *
98
- * These configuration options can be used for setting the IP address
99
- * settings statically, but only if UIP_FIXEDADDR is set to 1. The
100
- * configuration options for a specific node includes IP address,
101
- * netmask and default router as well as the Ethernet address. The
102
- * netmask, default router and Ethernet address are appliciable only
103
- * if uIP should be run over Ethernet.
104
- *
105
- * All of these should be changed to suit your project.
106
-*/
107
-
108
-/**
109
- * Determines if uIP should use a fixed IP address or not.
110
- *
111
- * If uIP should use a fixed IP address, the settings are set in the
112
- * uipopt.h file. If not, the macros uip_sethostaddr(),
113
- * uip_setdraddr() and uip_setnetmask() should be used instead.
114
- *
115
- * \hideinitializer
116
- */
117
-#define UIP_FIXEDADDR    0
118
-
119
-/**
120
- * Ping IP address asignment.
121
- *
122
- * uIP uses a "ping" packets for setting its own IP address if this
123
- * option is set. If so, uIP will start with an empty IP address and
124
- * the destination IP address of the first incoming "ping" (ICMP echo)
125
- * packet will be used for setting the hosts IP address.
126
- *
127
- * \note This works only if UIP_FIXEDADDR is 0.
128
- *
129
- * \hideinitializer
130
- */
131
-#define UIP_PINGADDRCONF 0
132
-
133
-#define UIP_IPADDR0     0   /**< The first octet of the IP address of
134
-			       this uIP node, if UIP_FIXEDADDR is
135
-			       1. \hideinitializer */
136
-#define UIP_IPADDR1     0   /**< The second octet of the IP address of
137
-			       this uIP node, if UIP_FIXEDADDR is
138
-			       1. \hideinitializer */
139
-#define UIP_IPADDR2     0   /**< The third octet of the IP address of
140
-			       this uIP node, if UIP_FIXEDADDR is
141
-			       1. \hideinitializer */
142
-#define UIP_IPADDR3     0   /**< The fourth octet of the IP address of
143
-			       this uIP node, if UIP_FIXEDADDR is
144
-			       1. \hideinitializer */
145
-
146
-#define UIP_NETMASK0    0   /**< The first octet of the netmask of
147
-			       this uIP node, if UIP_FIXEDADDR is
148
-			       1. \hideinitializer */
149
-#define UIP_NETMASK1    0   /**< The second octet of the netmask of
150
-			       this uIP node, if UIP_FIXEDADDR is
151
-			       1. \hideinitializer */
152
-#define UIP_NETMASK2    0   /**< The third octet of the netmask of
153
-			       this uIP node, if UIP_FIXEDADDR is
154
-			       1. \hideinitializer */
155
-#define UIP_NETMASK3    0   /**< The fourth octet of the netmask of
156
-			       this uIP node, if UIP_FIXEDADDR is
157
-			       1. \hideinitializer */
158
-
159
-#define UIP_DRIPADDR0   0   /**< The first octet of the IP address of
160
-			       the default router, if UIP_FIXEDADDR is
161
-			       1. \hideinitializer */
162
-#define UIP_DRIPADDR1   0   /**< The second octet of the IP address of
163
-			       the default router, if UIP_FIXEDADDR is
164
-			       1. \hideinitializer */
165
-#define UIP_DRIPADDR2   0   /**< The third octet of the IP address of
166
-			       the default router, if UIP_FIXEDADDR is
167
-			       1. \hideinitializer */
168
-#define UIP_DRIPADDR3   0   /**< The fourth octet of the IP address of
169
-			       the default router, if UIP_FIXEDADDR is
170
-			       1. \hideinitializer */
171
-
172
-/**
173
- * Specifies if the uIP ARP module should be compiled with a fixed
174
- * Ethernet MAC address or not.
175
- *
176
- * If this configuration option is 0, the macro uip_setethaddr() can
177
- * be used to specify the Ethernet address at run-time.
178
- *
179
- * \hideinitializer
180
- */
181
-#define UIP_FIXEDETHADDR 0
182
-
183
-#define UIP_ETHADDR0    0x00  /**< The first octet of the Ethernet
184
-				 address if UIP_FIXEDETHADDR is
185
-				 1. \hideinitializer */
186
-#define UIP_ETHADDR1    0xbd  /**< The second octet of the Ethernet
187
-				 address if UIP_FIXEDETHADDR is
188
-				 1. \hideinitializer */
189
-#define UIP_ETHADDR2    0x3b  /**< The third octet of the Ethernet
190
-				 address if UIP_FIXEDETHADDR is
191
-				 1. \hideinitializer */
192
-#define UIP_ETHADDR3    0x33  /**< The fourth octet of the Ethernet
193
-				 address if UIP_FIXEDETHADDR is
194
-				 1. \hideinitializer */
195
-#define UIP_ETHADDR4    0x05  /**< The fifth octet of the Ethernet
196
-				 address if UIP_FIXEDETHADDR is
197
-				 1. \hideinitializer */
198
-#define UIP_ETHADDR5    0x71  /**< The sixth octet of the Ethernet
199
-				 address if UIP_FIXEDETHADDR is
200
-				 1. \hideinitializer */
201
-
202
-/** @} */
203
-/*------------------------------------------------------------------------------*/
204
-/**
205
- * \defgroup uipoptip IP configuration options
206
- * @{
207
- *
208
- */
209
-/**
210
- * The IP TTL (time to live) of IP packets sent by uIP.
211
- *
212
- * This should normally not be changed.
213
- */
214
-#define UIP_TTL         255
215
-
216
-/**
217
- * Turn on support for IP packet reassembly.
218
- *
219
- * uIP supports reassembly of fragmented IP packets. This features
220
- * requires an additonal amount of RAM to hold the reassembly buffer
221
- * and the reassembly code size is approximately 700 bytes.  The
222
- * reassembly buffer is of the same size as the uip_buf buffer
223
- * (configured by UIP_BUFSIZE).
224
- *
225
- * \note IP packet reassembly is not heavily tested.
226
- *
227
- * \hideinitializer
228
- */
229
-#define UIP_REASSEMBLY 0
230
-
231
-/**
232
- * The maximum time an IP fragment should wait in the reassembly
233
- * buffer before it is dropped.
234
- *
235
- */
236
-#define UIP_REASS_MAXAGE 40
237
-
238
-/** @} */
239
-
240
-/*------------------------------------------------------------------------------*/
241
-/**
242
- * \defgroup uipoptudp UDP configuration options
243
- * @{
244
- *
245
- * \note The UDP support in uIP is still not entirely complete; there
246
- * is no support for sending or receiving broadcast or multicast
247
- * packets, but it works well enough to support a number of vital
248
- * applications such as DNS queries, though
249
- */
250
-
251
-/**
252
- * Toggles wether UDP support should be compiled in or not.
253
- *
254
- * \hideinitializer
255
- */
256
-#define UIP_UDP           1
257
-
258
-/**
259
- * Toggles if UDP checksums should be used or not.
260
- *
261
- * \note Support for UDP checksums is currently not included in uIP,
262
- * so this option has no function.
263
- *
264
- * \hideinitializer
265
- */
266
-#define UIP_UDP_CHECKSUMS 0
267
-
268
-/**
269
- * The maximum amount of concurrent UDP connections.
270
- *
271
- * \hideinitializer
272
- */
273
-#define UIP_UDP_CONNS    10
274
-
275
-/**
276
- * The name of the function that should be called when UDP datagrams arrive.
277
- *
278
- * \hideinitializer
279
- */
280
-extern void uip_udp_appcall ( void );
281
-#define UIP_UDP_APPCALL  uip_udp_appcall
282
-
283
-/** @} */
284
-/*------------------------------------------------------------------------------*/
285
-/**
286
- * \defgroup uipopttcp TCP configuration options
287
- * @{
288
- */
289
-
290
-/**
291
- * Determines if support for opening connections from uIP should be
292
- * compiled in.
293
- *
294
- * If the applications that are running on top of uIP for this project
295
- * do not need to open outgoing TCP connections, this configration
296
- * option can be turned off to reduce the code size of uIP.
297
- *
298
- * \hideinitializer
299
- */
300
-#define UIP_ACTIVE_OPEN 1
301
-
302
-/**
303
- * The maximum number of simultaneously open TCP connections.
304
- *
305
- * Since the TCP connections are statically allocated, turning this
306
- * configuration knob down results in less RAM used. Each TCP
307
- * connection requires approximatly 30 bytes of memory.
308
- *
309
- * \hideinitializer
310
- */
311
-#define UIP_CONNS       10
312
-
313
-/**
314
- * The maximum number of simultaneously listening TCP ports.
315
- *
316
- * Each listening TCP port requires 2 bytes of memory.
317
- *
318
- * \hideinitializer
319
- */
320
-#define UIP_LISTENPORTS 10
321
-
322
-/**
323
- * The size of the advertised receiver's window.
324
- *
325
- * Should be set low (i.e., to the size of the uip_buf buffer) is the
326
- * application is slow to process incoming data, or high (32768 bytes)
327
- * if the application processes data quickly.
328
- *
329
- * \hideinitializer
330
- */
331
-#define UIP_RECEIVE_WINDOW   32768
332
-
333
-/**
334
- * Determines if support for TCP urgent data notification should be
335
- * compiled in.
336
- *
337
- * Urgent data (out-of-band data) is a rarely used TCP feature that
338
- * very seldom would be required.
339
- *
340
- * \hideinitializer
341
- */
342
-#define UIP_URGDATA      1
343
-
344
-/**
345
- * The initial retransmission timeout counted in timer pulses.
346
- *
347
- * This should not be changed.
348
- */
349
-#define UIP_RTO         3
350
-
351
-/**
352
- * The maximum number of times a segment should be retransmitted
353
- * before the connection should be aborted.
354
- *
355
- * This should not be changed.
356
- */
357
-#define UIP_MAXRTX      8
358
-
359
-/**
360
- * The maximum number of times a SYN segment should be retransmitted
361
- * before a connection request should be deemed to have been
362
- * unsuccessful.
363
- *
364
- * This should not need to be changed.
365
- */
366
-#define UIP_MAXSYNRTX      3
367
-
368
-/**
369
- * The TCP maximum segment size.
370
- *
371
- * This is should not be to set to more than UIP_BUFSIZE - UIP_LLH_LEN - 40.
372
- */
373
-#define UIP_TCP_MSS     (UIP_BUFSIZE - UIP_LLH_LEN - 40)
374
-
375
-/**
376
- * How long a connection should stay in the TIME_WAIT state.
377
- *
378
- * This configiration option has no real implication, and it should be
379
- * left untouched.
380
- */ 
381
-#define UIP_TIME_WAIT_TIMEOUT 120
382
-
383
-
384
-/** @} */
385
-/*------------------------------------------------------------------------------*/
386
-/**
387
- * \defgroup uipoptarp ARP configuration options
388
- * @{
389
- */
390
-
391
-/**
392
- * The size of the ARP table.
393
- *
394
- * This option should be set to a larger value if this uIP node will
395
- * have many connections from the local network.
396
- *
397
- * \hideinitializer
398
- */
399
-#define UIP_ARPTAB_SIZE 8
400
-
401
-/**
402
- * The maxium age of ARP table entries measured in 10ths of seconds.
403
- *
404
- * An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD
405
- * default).
406
- */
407
-#define UIP_ARP_MAXAGE 120
408
-
409
-/** @} */
410
-
411
-/*------------------------------------------------------------------------------*/
412
-
413
-/**
414
- * \defgroup uipoptgeneral General configuration options
415
- * @{
416
- */
417
-
418
-/**
419
- * The size of the uIP packet buffer.
420
- *
421
- * The uIP packet buffer should not be smaller than 60 bytes, and does
422
- * not need to be larger than 1500 bytes. Lower size results in lower
423
- * TCP throughput, larger size results in higher TCP throughput.
424
- *
425
- * \hideinitializer
426
- */
427
-#define UIP_BUFSIZE     1500
428
-
429
-
430
-/**
431
- * Determines if statistics support should be compiled in.
432
- *
433
- * The statistics is useful for debugging and to show the user.
434
- *
435
- * \hideinitializer
436
- */
437
-#define UIP_STATISTICS  0
438
-
439
-/**
440
- * Determines if logging of certain events should be compiled in.
441
- *
442
- * This is useful mostly for debugging. The function uip_log()
443
- * must be implemented to suit the architecture of the project, if
444
- * logging is turned on.
445
- *
446
- * \hideinitializer
447
- */
448
-#define UIP_LOGGING     0
449
-
450
-/**
451
- * Print out a uIP log message.
452
- *
453
- * This function must be implemented by the module that uses uIP, and
454
- * is called by uIP whenever a log message is generated.
455
- */
456
-void uip_log(char *msg);
457
-
458
-/**
459
- * The link level header length.
460
- *
461
- * This is the offset into the uip_buf where the IP header can be
462
- * found. For Ethernet, this should be set to 14. For SLIP, this
463
- * should be set to 0.
464
- *
465
- * \hideinitializer
466
- */
467
-#define UIP_LLH_LEN     0
468
-
469
-
470
-/** @} */
471
-/*------------------------------------------------------------------------------*/
472
-/**
473
- * \defgroup uipoptcpu CPU architecture configuration
474
- * @{
475
- *
476
- * The CPU architecture configuration is where the endianess of the
477
- * CPU on which uIP is to be run is specified. Most CPUs today are
478
- * little endian, and the most notable exception are the Motorolas
479
- * which are big endian. The BYTE_ORDER macro should be changed to
480
- * reflect the CPU architecture on which uIP is to be run.
481
- */
482
-#ifndef LITTLE_ENDIAN
483
-#define LITTLE_ENDIAN  3412
484
-#endif /* LITTLE_ENDIAN */
485
-#ifndef BIG_ENDIAN
486
-#define BIG_ENDIAN     1234
487
-#endif /* BIGE_ENDIAN */
488
-
489
-/**
490
- * The byte order of the CPU architecture on which uIP is to be run.
491
- *
492
- * This option can be either BIG_ENDIAN (Motorola byte order) or
493
- * LITTLE_ENDIAN (Intel byte order).
494
- *
495
- * \hideinitializer
496
- */
497
-#ifndef BYTE_ORDER
498
-#define BYTE_ORDER     LITTLE_ENDIAN
499
-#endif /* BYTE_ORDER */
500
-
501
-/** @} */
502
-/*------------------------------------------------------------------------------*/
503
-
504
-/**
505
- * \defgroup uipoptapp Appication specific configurations
506
- * @{
507
- *
508
- * An uIP application is implemented using a single application
509
- * function that is called by uIP whenever a TCP/IP event occurs. The
510
- * name of this function must be registered with uIP at compile time
511
- * using the UIP_APPCALL definition.
512
- *
513
- * uIP applications can store the application state within the
514
- * uip_conn structure by specifying the size of the application
515
- * structure with the UIP_APPSTATE_SIZE macro.
516
- *
517
- * The file containing the definitions must be included in the
518
- * uipopt.h file.
519
- *
520
- * The following example illustrates how this can look.
521
- \code
522
-
523
-void httpd_appcall(void);
524
-#define UIP_APPCALL     httpd_appcall
525
-
526
-struct httpd_state {
527
-  u8_t state; 
528
-  u16_t count;
529
-  char *dataptr;
530
-  char *script;
531
-};
532
-#define UIP_APPSTATE_SIZE (sizeof(struct httpd_state))
533
- \endcode
534
- */
535
-
536
-/**
537
- * \var #define UIP_APPCALL
538
- *
539
- * The name of the application function that uIP should call in
540
- * response to TCP/IP events.
541
- *
542
- */
543
-extern void uip_tcp_appcall ( void );
544
-#define UIP_APPCALL uip_tcp_appcall
545
-
546
-/**
547
- * \var #define UIP_APPSTATE_SIZE
548
- *
549
- * The size of the application state that is to be stored in the
550
- * uip_conn structure.
551
- */
552
-#define UIP_APPSTATE_SIZE sizeof ( void * )
553
-/** @} */
554
-
555
-/* Include the header file for the application program that should be
556
-   used. If you don't use the example web server, you should change
557
-   this. */
558
-//#include "httpd.h"
559
-
560
-#warning "Remove this static IP address hack"
561
-#undef UIP_FIXEDADDR
562
-#undef UIP_IPADDR0
563
-#undef UIP_IPADDR1
564
-#undef UIP_IPADDR2
565
-#undef UIP_IPADDR3
566
-#define UIP_FIXEDADDR 1
567
-#define UIP_IPADDR0 10
568
-#define UIP_IPADDR1 254
569
-#define UIP_IPADDR2 254
570
-#define UIP_IPADDR3 1
571
-
572
-#endif /* __UIPOPT_H__ */

Loading…
Cancel
Save