aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2009-09-16 19:56:39 -0700
committerEric W. Biederman <ebiederm@xmission.com>2011-04-09 04:30:40 -0700
commitd6f842a60d366e0593357cbb96651718821d27e9 (patch)
treefc6ecb8307fc0d865cbfda44f96dc0f1a91eacdd
parentbdf5b6de8e20b253b320772cc16f1c23f18bdc52 (diff)
downloadsyslinux-devel-syslinux-lwip-checkpoint3.tar.gz
syslinux-devel-syslinux-lwip-checkpoint3.tar.xz
syslinux-devel-syslinux-lwip-checkpoint3.zip
lwip: better test casesyslinux-lwip-checkpoint3
Download a large file from www3.kernel.org (Amsterdam) and time the result. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-rw-r--r--core/fs/pxe/pxe.c48
1 files changed, 39 insertions, 9 deletions
diff --git a/core/fs/pxe/pxe.c b/core/fs/pxe/pxe.c
index 2a587d85..edb18c8e 100644
--- a/core/fs/pxe/pxe.c
+++ b/core/fs/pxe/pxe.c
@@ -1006,8 +1006,12 @@ static void lwip_test(void)
struct netconn *conn;
char header_buf[512];
int header_len;
- static const char host_str[] = "www.zytor.com";
+ static const char host_str[] = "www3.kernel.org";
struct netbuf *buf;
+ jiffies_t t0, t1;
+ size_t bytes, x_bytes;
+ bool found_eoh;
+ int found_nl;
/* Test the lwIP stack by trying to open a HTTP connection... */
printf("Starting lwIP test...\n");
@@ -1026,13 +1030,18 @@ static void lwip_test(void)
printf("netconn_connect error %d\n", err);
header_len = snprintf(header_buf, sizeof header_buf,
- "GET /lwip_test HTTP/1.0\r\n"
+ "GET /pub/linux/kernel/v2.6/linux-2.6.31.tar.gz HTTP/1.0\r\n"
"Host: %s\r\n"
"\r\n",
host_str);
err = netconn_write(conn, header_buf, header_len, NETCONN_NOCOPY);
printf("netconn_write error %d\n", err);
+ bytes = x_bytes = 0;
+ found_nl = 0;
+ found_eoh = false;
+
+ t0 = jiffies();
for (;;) {
void *data;
char *p;
@@ -1042,16 +1051,37 @@ static void lwip_test(void)
if (!buf)
break;
- netbuf_data(buf, &data, &len);
-
- p = data;
- while (len--)
- putchar (*p++);
+ do {
+ netbuf_data(buf, &data, &len);
+ p = data;
+ while (__unlikely(!found_eoh && len)) {
+ putchar(*p);
+ switch (*p) {
+ case '\r':
+ break;
+ case '\n':
+ if (++found_nl == 2)
+ found_eoh = true;
+ break;
+ default:
+ found_nl = 0;
+ break;
+ }
+ p++;
+ len--;
+ }
+ bytes += len;
+ if ((bytes^x_bytes) >> 20) {
+ printf("%dM\r", bytes >> 20);
+ x_bytes = bytes;
+ }
+ } while (netbuf_next(buf) >= 0);
netbuf_delete(buf);
}
-
- printf("\n[End transmission]\n");
+ t1 = jiffies();
+
+ printf("Done: %zu bytes in %u ms\n", bytes, (t1-t0)*MS_PER_JIFFY);
netconn_disconnect(conn);