X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fvconn.c;h=f0549d5da90d5bf2fa88834264e6e0035c735e9e;hb=db19b72b9f6d0d40b743214241d9666116e3b448;hp=5708987d53fc0e3b7ba3d74d255a11a373521343;hpb=125b02910c61f87364f4c58e3810876ef747a98f;p=sliver-openvswitch.git diff --git a/lib/vconn.c b/lib/vconn.c index 5708987d5..f0549d5da 100644 --- a/lib/vconn.c +++ b/lib/vconn.c @@ -350,39 +350,6 @@ vconn_set_allowed_versions(struct vconn *vconn, uint32_t allowed_versions) vconn->allowed_versions = allowed_versions; } -/* Returns the IP address of the peer, or 0 if the peer is not connected over - * an IP-based protocol or if its IP address is not yet known. */ -ovs_be32 -vconn_get_remote_ip(const struct vconn *vconn) -{ - return vconn->remote_ip; -} - -/* Returns the transport port of the peer, or 0 if the connection does not - * contain a port or if the port is not yet known. */ -ovs_be16 -vconn_get_remote_port(const struct vconn *vconn) -{ - return vconn->remote_port; -} - -/* Returns the IP address used to connect to the peer, or 0 if the - * connection is not an IP-based protocol or if its IP address is not - * yet known. */ -ovs_be32 -vconn_get_local_ip(const struct vconn *vconn) -{ - return vconn->local_ip; -} - -/* Returns the transport port used to connect to the peer, or 0 if the - * connection does not contain a port or if the port is not yet known. */ -ovs_be16 -vconn_get_local_port(const struct vconn *vconn) -{ - return vconn->local_port; -} - /* Returns the OpenFlow version negotiated with the peer, or -1 if version * negotiation is not yet complete. * @@ -596,7 +563,7 @@ vconn_connect(struct vconn *vconn) return vconn->error; default: - NOT_REACHED(); + OVS_NOT_REACHED(); } } while (vconn->state != last_state); @@ -631,11 +598,25 @@ vconn_recv(struct vconn *vconn, struct ofpbuf **msgp) type != OFPTYPE_ERROR && type != OFPTYPE_ECHO_REQUEST && type != OFPTYPE_ECHO_REPLY)) { + struct ofpbuf *reply; + VLOG_ERR_RL(&bad_ofmsg_rl, "%s: received OpenFlow version " "0x%02"PRIx8" != expected %02x", vconn->name, oh->version, vconn->version); + + /* Send a "bad version" reply, if we can. */ + reply = ofperr_encode_reply(OFPERR_OFPBRC_BAD_VERSION, oh); + retval = vconn_send(vconn, reply); + if (retval) { + VLOG_INFO_RL(&bad_ofmsg_rl, + "%s: failed to queue error reply (%s)", + vconn->name, ovs_strerror(retval)); + ofpbuf_delete(reply); + } + + /* Suppress the received message, as if it had not arrived. */ + retval = EAGAIN; ofpbuf_delete(msg); - retval = EPROTO; } } } @@ -1123,30 +1104,6 @@ vconn_init(struct vconn *vconn, const struct vconn_class *class, ovs_assert(vconn->state != VCS_CONNECTING || class->connect); } -void -vconn_set_remote_ip(struct vconn *vconn, ovs_be32 ip) -{ - vconn->remote_ip = ip; -} - -void -vconn_set_remote_port(struct vconn *vconn, ovs_be16 port) -{ - vconn->remote_port = port; -} - -void -vconn_set_local_ip(struct vconn *vconn, ovs_be32 ip) -{ - vconn->local_ip = ip; -} - -void -vconn_set_local_port(struct vconn *vconn, ovs_be16 port) -{ - vconn->local_port = port; -} - void pvconn_init(struct pvconn *pvconn, const struct pvconn_class *class, const char *name, uint32_t allowed_versions)