X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Ftest-vconn.c;h=74ebd6edc0dbadd463c2ffe7316ea8be511a0fcb;hb=8b97ad35e5a36375a357b0c0830ecba3ab0a1b1a;hp=32228f898ee158a32fee5af0687a0b494f33bfeb;hpb=9200fb9ef9a1c55a76e4c4aa789f3fb0a76f0ed1;p=openvswitch diff --git a/tests/test-vconn.c b/tests/test-vconn.c index 32228f89..74ebd6ed 100644 --- a/tests/test-vconn.c +++ b/tests/test-vconn.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010 Nicira Networks. + * Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,6 +22,10 @@ #include #include #include "command-line.h" +#include "ofp-msgs.h" +#include "ofp-util.h" +#include "ofpbuf.h" +#include "openflow/openflow.h" #include "poll-loop.h" #include "socket-util.h" #include "stream.h" @@ -81,14 +85,15 @@ fpv_create(const char *type, struct fake_pvconn *fpv) bind_path = xasprintf("fake-pvconn.%d", unix_count++); fpv->pvconn_name = xasprintf("punix:%s", bind_path); fpv->vconn_name = xasprintf("unix:%s", bind_path); - CHECK_ERRNO(pstream_open(fpv->pvconn_name, &fpv->pstream), 0); + CHECK_ERRNO(pstream_open(fpv->pvconn_name, &fpv->pstream, + DSCP_DEFAULT), 0); free(bind_path); } else if (!strcmp(type, "tcp") || !strcmp(type, "ssl")) { char *s, *port, *save_ptr = NULL; char *open_name; open_name = xasprintf("p%s:0:127.0.0.1", type); - CHECK_ERRNO(pstream_open(open_name, &fpv->pstream), 0); + CHECK_ERRNO(pstream_open(open_name, &fpv->pstream, DSCP_DEFAULT), 0); /* Extract bound port number from pstream name. */ s = xstrdup(pstream_get_name(fpv->pstream)); @@ -146,7 +151,8 @@ test_refuse_connection(int argc OVS_UNUSED, char *argv[]) : EPROTO); fpv_create(type, &fpv); - CHECK_ERRNO(vconn_open(fpv.vconn_name, OFP_VERSION, &vconn), 0); + CHECK_ERRNO(vconn_open(fpv.vconn_name, OFP10_VERSION, &vconn, + DSCP_DEFAULT), 0); fpv_close(&fpv); vconn_run(vconn); CHECK_ERRNO(vconn_connect(vconn), expected_error); @@ -170,7 +176,8 @@ test_accept_then_close(int argc OVS_UNUSED, char *argv[]) : EPROTO); fpv_create(type, &fpv); - CHECK_ERRNO(vconn_open(fpv.vconn_name, OFP_VERSION, &vconn), 0); + CHECK_ERRNO(vconn_open(fpv.vconn_name, OFP10_VERSION, &vconn, + DSCP_DEFAULT), 0); vconn_run(vconn); stream_close(fpv_accept(&fpv)); fpv_close(&fpv); @@ -191,7 +198,8 @@ test_read_hello(int argc OVS_UNUSED, char *argv[]) struct stream *stream; fpv_create(type, &fpv); - CHECK_ERRNO(vconn_open(fpv.vconn_name, OFP_VERSION, &vconn), 0); + CHECK_ERRNO(vconn_open(fpv.vconn_name, OFP10_VERSION, &vconn, + DSCP_DEFAULT), 0); vconn_run(vconn); stream = fpv_accept(&fpv); fpv_destroy(&fpv); @@ -201,9 +209,12 @@ test_read_hello(int argc OVS_UNUSED, char *argv[]) retval = stream_recv(stream, &hello, sizeof hello); if (retval == sizeof hello) { - CHECK(hello.version, OFP_VERSION); - CHECK(hello.type, OFPT_HELLO); - CHECK(hello.length, htons(sizeof hello)); + enum ofpraw raw; + + CHECK(hello.version, OFP10_VERSION); + CHECK(ofpraw_decode_partial(&raw, &hello, sizeof hello), 0); + CHECK(raw, OFPRAW_OFPT_HELLO); + CHECK(ntohs(hello.length), sizeof hello); break; } else { CHECK_ERRNO(retval, -EAGAIN); @@ -237,7 +248,8 @@ test_send_hello(const char *type, const void *out, size_t out_size, size_t n_sent; fpv_create(type, &fpv); - CHECK_ERRNO(vconn_open(fpv.vconn_name, OFP_VERSION, &vconn), 0); + CHECK_ERRNO(vconn_open(fpv.vconn_name, OFP10_VERSION, &vconn, + DSCP_DEFAULT), 0); vconn_run(vconn); stream = fpv_accept(&fpv); fpv_destroy(&fpv); @@ -267,9 +279,12 @@ test_send_hello(const char *type, const void *out, size_t out_size, struct ofp_header hello; int retval = stream_recv(stream, &hello, sizeof hello); if (retval == sizeof hello) { - CHECK(hello.version, OFP_VERSION); - CHECK(hello.type, OFPT_HELLO); - CHECK(hello.length, htons(sizeof hello)); + enum ofpraw raw; + + CHECK(hello.version, OFP10_VERSION); + CHECK(ofpraw_decode_partial(&raw, &hello, sizeof hello), 0); + CHECK(raw, OFPRAW_OFPT_HELLO); + CHECK(ntohs(hello.length), sizeof hello); read_hello = true; } else { CHECK_ERRNO(retval, -EAGAIN); @@ -315,13 +330,12 @@ static void test_send_plain_hello(int argc OVS_UNUSED, char *argv[]) { const char *type = argv[1]; - struct ofp_header hello; + struct ofpbuf *hello; - hello.version = OFP_VERSION; - hello.type = OFPT_HELLO; - hello.length = htons(sizeof hello); - hello.xid = htonl(0x12345678); - test_send_hello(type, &hello, sizeof hello, 0); + hello = ofpraw_alloc_xid(OFPRAW_OFPT_HELLO, OFP10_VERSION, + htonl(0x12345678), 0); + test_send_hello(type, hello->data, hello->size, 0); + ofpbuf_delete(hello); } /* Try connecting and sending an extra-long hello, which should succeed (since @@ -331,16 +345,15 @@ static void test_send_long_hello(int argc OVS_UNUSED, char *argv[]) { const char *type = argv[1]; - struct ofp_header hello; - char buffer[sizeof hello * 2]; - - hello.version = OFP_VERSION; - hello.type = OFPT_HELLO; - hello.length = htons(sizeof buffer); - hello.xid = htonl(0x12345678); - memset(buffer, 0, sizeof buffer); - memcpy(buffer, &hello, sizeof hello); - test_send_hello(type, buffer, sizeof buffer, 0); + struct ofpbuf *hello; + enum { EXTRA_BYTES = 8 }; + + hello = ofpraw_alloc_xid(OFPRAW_OFPT_HELLO, OFP10_VERSION, + htonl(0x12345678), EXTRA_BYTES); + ofpbuf_put_zeros(hello, EXTRA_BYTES); + ofpmsg_update_length(hello); + test_send_hello(type, hello->data, hello->size, 0); + ofpbuf_delete(hello); } /* Try connecting and sending an echo request instead of a hello, which should @@ -349,13 +362,12 @@ static void test_send_echo_hello(int argc OVS_UNUSED, char *argv[]) { const char *type = argv[1]; - struct ofp_header echo; + struct ofpbuf *echo; - echo.version = OFP_VERSION; - echo.type = OFPT_ECHO_REQUEST; - echo.length = htons(sizeof echo); - echo.xid = htonl(0x89abcdef); - test_send_hello(type, &echo, sizeof echo, EPROTO); + echo = ofpraw_alloc_xid(OFPRAW_OFPT_ECHO_REQUEST, OFP10_VERSION, + htonl(0x12345678), 0); + test_send_hello(type, echo->data, echo->size, EPROTO); + ofpbuf_delete(echo); } /* Try connecting and sending a hello packet that has its length field as 0, @@ -376,13 +388,13 @@ static void test_send_invalid_version_hello(int argc OVS_UNUSED, char *argv[]) { const char *type = argv[1]; - struct ofp_header hello; + struct ofpbuf *hello; - hello.version = OFP_VERSION - 1; - hello.type = OFPT_HELLO; - hello.length = htons(sizeof hello); - hello.xid = htonl(0x12345678); - test_send_hello(type, &hello, sizeof hello, EPROTO); + hello = ofpraw_alloc_xid(OFPRAW_OFPT_HELLO, OFP10_VERSION, + htonl(0x12345678), 0); + ((struct ofp_header *) hello->data)->version = 0; + test_send_hello(type, hello->data, hello->size, EPROTO); + ofpbuf_delete(hello); } static const struct command commands[] = { @@ -401,8 +413,8 @@ int main(int argc, char *argv[]) { set_program_name(argv[0]); - vlog_set_levels(VLM_ANY_MODULE, VLF_ANY_FACILITY, VLL_EMER); - vlog_set_levels(VLM_ANY_MODULE, VLF_CONSOLE, VLL_DBG); + vlog_set_levels(NULL, VLF_ANY_FACILITY, VLL_EMER); + vlog_set_levels(NULL, VLF_CONSOLE, VLL_DBG); signal(SIGPIPE, SIG_IGN); time_alarm(10);