@@ -2971,6 +2971,10 @@ frame_finalize_options(struct context *c, const struct options *o)
29712971 tailroom += COMP_EXTRA_BUFFER (payload_size );
29722972#endif
29732973
2974+ if (frame -> bulk_size > 0 ) {
2975+ payload_size = frame -> tun_mtu ;
2976+ }
2977+
29742978 frame -> buf .payload_size = payload_size ;
29752979 frame -> buf .headroom = headroom ;
29762980 frame -> buf .tailroom = tailroom ;
@@ -3473,6 +3477,9 @@ do_init_frame_tls(struct context *c)
34733477 if (c -> c2 .tls_multi )
34743478 {
34753479 tls_multi_init_finalize (c -> c2 .tls_multi , c -> options .ce .tls_mtu );
3480+ if (c -> c2 .frame .bulk_size > 0 ) {
3481+ c -> c2 .tls_multi -> opt .frame .buf .payload_size = c -> c2 .frame .tun_mtu ;
3482+ }
34763483 ASSERT (c -> c2 .tls_multi -> opt .frame .buf .payload_size <= c -> c2 .frame .buf .payload_size );
34773484 frame_print (& c -> c2 .tls_multi -> opt .frame , D_MTU_INFO , "Control Channel MTU parms" );
34783485
@@ -3536,6 +3543,14 @@ do_init_frame(struct context *c)
35363543 c -> c2 .frame .extra_tun += c -> options .ce .tun_mtu_extra ;
35373544 }
35383545
3546+ /*
3547+ * Adjust bulk size based on the --bulk-mode parameter.
3548+ */
3549+ if (c -> options .ce .bulk_mode )
3550+ {
3551+ c -> c2 .frame .bulk_size = c -> options .ce .tun_mtu ;
3552+ }
3553+
35393554 /*
35403555 * Fill in the blanks in the frame parameters structure,
35413556 * make sure values are rational, etc.
@@ -3676,9 +3691,41 @@ init_context_buffers(const struct frame *frame)
36763691
36773692 size_t buf_size = BUF_SIZE (frame );
36783693
3694+ if (frame -> bulk_size > 0 ) {
3695+ size_t off_size = (frame -> buf .headroom + TUN_BAT_OFF + frame -> buf .tailroom );
3696+ buf_size = BAT_SIZE (TUN_BAT_MAX , frame -> tun_mtu , off_size );
3697+ }
3698+
3699+ dmsg (M_INFO , "MEM NEW [%ld] [%d+%d+%d]" , buf_size , frame -> buf .headroom , frame -> buf .payload_size , frame -> buf .tailroom );
3700+
36793701 b -> read_link_buf = alloc_buf (buf_size );
36803702 b -> read_tun_buf = alloc_buf (buf_size );
36813703
3704+ if (frame -> bulk_size > 0 ) {
3705+ for (int x = 0 ; x < TUN_BAT_MAX ; ++ x )
3706+ {
3707+ size_t part_size = BUF_SIZE (frame );
3708+ b -> read_tun_bufs [x ] = alloc_buf (part_size );
3709+ b -> read_tun_bufs [x ].offset = TUN_BAT_OFF ;
3710+ b -> read_tun_bufs [x ].len = 0 ;
3711+ }
3712+
3713+ b -> read_tun_max = alloc_buf (buf_size );
3714+ b -> read_tun_max .offset = TUN_BAT_OFF ;
3715+ b -> read_tun_max .len = 0 ;
3716+
3717+ b -> send_tun_max = alloc_buf (buf_size );
3718+ b -> send_tun_max .offset = TUN_BAT_OFF ;
3719+ b -> send_tun_max .len = 0 ;
3720+
3721+ b -> to_tun_max = alloc_buf (buf_size );
3722+ b -> to_tun_max .offset = TUN_BAT_OFF ;
3723+ b -> to_tun_max .len = 0 ;
3724+ }
3725+
3726+ b -> bulk_indx = -1 ;
3727+ b -> bulk_flag = -1 ;
3728+
36823729 b -> aux_buf = alloc_buf (buf_size );
36833730
36843731 b -> encrypt_buf = alloc_buf (buf_size );
@@ -3701,6 +3748,16 @@ free_context_buffers(struct context_buffers *b)
37013748 free_buf (& b -> read_tun_buf );
37023749 free_buf (& b -> aux_buf );
37033750
3751+ if (b -> to_tun_max .data ) {
3752+ free_buf (& b -> to_tun_max );
3753+ free_buf (& b -> send_tun_max );
3754+ free_buf (& b -> read_tun_max );
3755+ for (int x = 0 ; x < TUN_BAT_MAX ; ++ x )
3756+ {
3757+ free_buf (& b -> read_tun_bufs [x ]);
3758+ }
3759+ }
3760+
37043761#ifdef USE_COMP
37053762 free_buf (& b -> compress_buf );
37063763 free_buf (& b -> decompress_buf );
0 commit comments