2
0
mirror of https://github.com/openvswitch/ovs synced 2025-10-15 14:17:18 +00:00

ofpbuf: Simplify ofpbuf API.

ofpbuf was complicated due to its wide usage across all
layers of OVS, Now we have introduced independent dp_packet
which can be used for datapath packet, we can simplify ofpbuf.
Following patch removes DPDK mbuf and access API of ofpbuf
members.

Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
Acked-by: Jarno Rajahalme <jrajahalme@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
Pravin B Shelar
2015-03-02 17:29:44 -08:00
parent cf62fa4c70
commit 6fd6ed71cb
42 changed files with 705 additions and 1058 deletions

View File

@@ -103,7 +103,7 @@ vconn_stream_close(struct vconn *vconn)
struct vconn_stream *s = vconn_stream_cast(vconn);
if ((vconn->error == EPROTO || s->n_packets < 1) && s->rxbuf) {
stream_report_content(ofpbuf_data(s->rxbuf), ofpbuf_size(s->rxbuf), STREAM_OPENFLOW,
stream_report_content(s->rxbuf->data, s->rxbuf->size, STREAM_OPENFLOW,
THIS_MODULE, vconn_get_name(vconn));
}
@@ -126,14 +126,14 @@ vconn_stream_recv__(struct vconn_stream *s, int rx_len)
struct ofpbuf *rx = s->rxbuf;
int want_bytes, retval;
want_bytes = rx_len - ofpbuf_size(rx);
want_bytes = rx_len - rx->size;
ofpbuf_prealloc_tailroom(rx, want_bytes);
retval = stream_recv(s->stream, ofpbuf_tail(rx), want_bytes);
if (retval > 0) {
ofpbuf_set_size(rx, ofpbuf_size(rx) + retval);
rx->size += retval;
return retval == want_bytes ? 0 : EAGAIN;
} else if (retval == 0) {
if (ofpbuf_size(rx)) {
if (rx->size) {
VLOG_ERR_RL(&rl, "connection dropped mid-packet");
return EPROTO;
}
@@ -156,7 +156,7 @@ vconn_stream_recv(struct vconn *vconn, struct ofpbuf **bufferp)
}
/* Read ofp_header. */
if (ofpbuf_size(s->rxbuf) < sizeof(struct ofp_header)) {
if (s->rxbuf->size < sizeof(struct ofp_header)) {
int retval = vconn_stream_recv__(s, sizeof(struct ofp_header));
if (retval) {
return retval;
@@ -164,12 +164,12 @@ vconn_stream_recv(struct vconn *vconn, struct ofpbuf **bufferp)
}
/* Read payload. */
oh = ofpbuf_data(s->rxbuf);
oh = s->rxbuf->data;
rx_len = ntohs(oh->length);
if (rx_len < sizeof(struct ofp_header)) {
VLOG_ERR_RL(&rl, "received too-short ofp_header (%d bytes)", rx_len);
return EPROTO;
} else if (ofpbuf_size(s->rxbuf) < rx_len) {
} else if (s->rxbuf->size < rx_len) {
int retval = vconn_stream_recv__(s, rx_len);
if (retval) {
return retval;
@@ -199,8 +199,8 @@ vconn_stream_send(struct vconn *vconn, struct ofpbuf *buffer)
return EAGAIN;
}
retval = stream_send(s->stream, ofpbuf_data(buffer), ofpbuf_size(buffer));
if (retval == ofpbuf_size(buffer)) {
retval = stream_send(s->stream, buffer->data, buffer->size);
if (retval == buffer->size) {
ofpbuf_delete(buffer);
return 0;
} else if (retval >= 0 || retval == -EAGAIN) {
@@ -225,7 +225,7 @@ vconn_stream_run(struct vconn *vconn)
return;
}
retval = stream_send(s->stream, ofpbuf_data(s->txbuf), ofpbuf_size(s->txbuf));
retval = stream_send(s->stream, s->txbuf->data, s->txbuf->size);
if (retval < 0) {
if (retval != -EAGAIN) {
VLOG_ERR_RL(&rl, "send: %s", ovs_strerror(-retval));
@@ -234,7 +234,7 @@ vconn_stream_run(struct vconn *vconn)
}
} else if (retval > 0) {
ofpbuf_pull(s->txbuf, retval);
if (!ofpbuf_size(s->txbuf)) {
if (!s->txbuf->size) {
vconn_stream_clear_txbuf(s);
return;
}