aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2009-09-16 19:56:39 -0700
committerH. Peter Anvin <hpa@zytor.com>2009-09-16 19:56:39 -0700
commit1fca84a753c24831d3b16ce09525b194406c2d35 (patch)
tree2268ad259df31b0c4173f7be23909f77ea5b738a
parentd79514ba4884906a0261bccb0f6e6f4cdae9db3e (diff)
downloadlwip-1fca84a753c24831d3b16ce09525b194406c2d35.tar.gz
lwip-1fca84a753c24831d3b16ce09525b194406c2d35.tar.xz
lwip-1fca84a753c24831d3b16ce09525b194406c2d35.zip
lwip: better test case
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 e97fca14..e397ca11 100644
--- a/core/fs/pxe/pxe.c
+++ b/core/fs/pxe/pxe.c
@@ -1427,8 +1427,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");
@@ -1447,13 +1451,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;
@@ -1463,16 +1472,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);