X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fvconn.c;h=9271f4f155e93699ade8f5be7520ef495f4ffd22;hb=7186aaa9dc9562a1090356ca428a58624f432748;hp=b2d81e93cc7f8e4e09a0363ed8d3dea4ffcb962b;hpb=a0ae0b6e8360116c8843325922c3346ab8f208c7;p=sliver-openvswitch.git diff --git a/lib/vconn.c b/lib/vconn.c index b2d81e93c..9271f4f15 100644 --- a/lib/vconn.c +++ b/lib/vconn.c @@ -138,10 +138,10 @@ vconn_usage(bool active, bool passive, bool bootstrap OVS_UNUSED) printf("\n"); if (active) { printf("Active OpenFlow connection methods:\n"); - printf(" tcp:IP[:PORT] " + printf(" tcp:IP[:PORT] " "PORT (default: %d) at remote IP\n", OFP_TCP_PORT); #ifdef HAVE_OPENSSL - printf(" ssl:IP[:PORT] " + printf(" ssl:IP[:PORT] " "SSL PORT (default: %d) at remote IP\n", OFP_SSL_PORT); #endif printf(" unix:FILE Unix domain socket named FILE\n"); @@ -262,6 +262,12 @@ error: void vconn_run(struct vconn *vconn) { + if (vconn->state == VCS_CONNECTING || + vconn->state == VCS_SEND_HELLO || + vconn->state == VCS_RECV_HELLO) { + vconn_connect(vconn); + } + if (vconn->class->run) { (vconn->class->run)(vconn); } @@ -272,6 +278,12 @@ vconn_run(struct vconn *vconn) void vconn_run_wait(struct vconn *vconn) { + if (vconn->state == VCS_CONNECTING || + vconn->state == VCS_SEND_HELLO || + vconn->state == VCS_RECV_HELLO) { + vconn_connect_wait(vconn); + } + if (vconn->class->run_wait) { (vconn->class->run_wait)(vconn); } @@ -356,10 +368,10 @@ vconn_get_local_port(const struct vconn *vconn) * * A vconn that has successfully connected (that is, vconn_connect() or * vconn_send() or vconn_recv() has returned 0) always negotiated a version. */ -enum ofp_version +int vconn_get_version(const struct vconn *vconn) { - return vconn->version; + return vconn->version ? vconn->version : -1; } static void @@ -461,9 +473,8 @@ vcs_send_error(struct vconn *vconn) snprintf(s, sizeof s, "We support versions 0x%02x to 0x%02x inclusive but " "you support no later than version 0x%02"PRIx8".", - vconn->min_version, OFP10_VERSION, vconn->version); - b = ofperr_encode_hello(OFPERR_OFPHFC_INCOMPATIBLE, - ofperr_domain_from_version(vconn->version), s); + vconn->min_version, OFP12_VERSION, vconn->version); + b = ofperr_encode_hello(OFPERR_OFPHFC_INCOMPATIBLE, vconn->version, s); retval = do_send(vconn, b); if (retval) { ofpbuf_delete(b);