@@ -10010,13 +10010,14 @@ ofputil_encode_bundle_add(enum ofp_version ofp_version,
request = ofpraw_alloc_xid(ofp_version == OFP13_VERSION
? OFPRAW_ONFT13_BUNDLE_ADD_MESSAGE
: OFPRAW_OFPT14_BUNDLE_ADD_MESSAGE, ofp_version,
- msg->msg->xid, 0);
+ msg->msg->xid, ntohs(msg->msg->length));
m = ofpbuf_put_zeros(request, sizeof *m);
m->bundle_id = htonl(msg->bundle_id);
m->flags = htons(msg->flags);
ofpbuf_put(request, msg->msg, ntohs(msg->msg->length));
+ ofpmsg_update_length(request);
return request;
}
@@ -1040,12 +1040,13 @@ vconn_bundle_add_msg(struct vconn *vconn, struct ofputil_bundle_ctrl_msg *bc,
struct ofpbuf *request;
int error;
+ ofpmsg_update_length(msg);
+
bam.bundle_id = bc->bundle_id;
bam.flags = bc->flags;
bam.msg = msg->data;
request = ofputil_encode_bundle_add(vconn->version, &bam);
- ofpmsg_update_length(request);
error = vconn_send_block(vconn, request);
if (!error) {
Variable length messages need their length updated before they can be added to the bundle. Message length updating after encoding is sometimes done by the encoding function, but always latest when the message is sent out. As an OpenFlow message is added to a bundle add message, it will not be sent by itself, and we need to update the length explicitly instead. Signed-off-by: Jarno Rajahalme <jarno@ovn.org> --- lib/ofp-util.c | 3 ++- lib/vconn.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-)