Signed-off-by: Arne Schwabe <a...@rfc2549.org> --- src/openvpn/occ.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-)
diff --git a/src/openvpn/occ.c b/src/openvpn/occ.c index c4e7c1be2..05e2d4b85 100644 --- a/src/openvpn/occ.c +++ b/src/openvpn/occ.c @@ -199,8 +199,12 @@ check_send_occ_load_test_dowork(struct context *c) if (entry->op >= 0) { c->c2.occ_op = entry->op; - c->c2.occ_mtu_load_size = - EXPANDED_SIZE(&c->c2.frame) + entry->delta; + size_t payload_size = frame_calculate_payload_size(&c->c2.frame, + &c->options); + size_t header_size = frame_calculate_protocol_header_size(&c->c1.ks.key_type, &c->options, + payload_size, false); + + c->c2.occ_mtu_load_size = payload_size + header_size; } else { @@ -298,10 +302,21 @@ check_send_occ_msg_dowork(struct context *c) { break; } - need_to_add = min_int(c->c2.occ_mtu_load_size, EXPANDED_SIZE(&c->c2.frame)) + size_t proto_hdr, payload_hdr; + + /* OCC message have comp/fragment headers but not ethernet headers */ + payload_hdr = frame_calculate_payload_overhead(&c->c2.frame, &c->options, + false); + + /* Since we do not know the payload size we just pass 0 as size here */ + proto_hdr = frame_calculate_protocol_header_size(&c->c1.ks.key_type, + &c->options, 0, false); + + need_to_add = min_int(c->c2.occ_mtu_load_size, c->c2.frame.buf.payload_size) - OCC_STRING_SIZE - - sizeof(uint8_t) - - EXTRA_FRAME(&c->c2.frame); + - sizeof(uint8_t) /* occ opcode */ + - payload_hdr + - proto_hdr; while (need_to_add > 0) { @@ -314,12 +329,13 @@ check_send_occ_msg_dowork(struct context *c) } --need_to_add; } - dmsg(D_PACKET_CONTENT, "SENT OCC_MTU_LOAD min_int(%d-%d-%d-%d,%d) size=%d", + dmsg(D_PACKET_CONTENT, "SENT OCC_MTU_LOAD min_int(%d,%d)-%d-%d-%d-%d) size=%d", c->c2.occ_mtu_load_size, + c->c2.frame.buf.payload_size, OCC_STRING_SIZE, (int) sizeof(uint8_t), - EXTRA_FRAME(&c->c2.frame), - c->c2.frame.buf.payload_size, + (int) payload_hdr, + (int) proto_hdr, BLEN(&c->c2.buf)); doit = true; } -- 2.33.0 _______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel