@@ -2952,6 +2952,11 @@ frame_finalize_options(struct context *c, const struct options *o)
29522952 tailroom += COMP_EXTRA_BUFFER (payload_size );
29532953#endif
29542954
2955+ if (frame -> bulk_size > 0 )
2956+ {
2957+ payload_size = BAT_SIZE (TUN_BAT_ONE , frame -> tun_mtu , TUN_BAT_OFF );
2958+ }
2959+
29552960 frame -> buf .payload_size = payload_size ;
29562961 frame -> buf .headroom = headroom ;
29572962 frame -> buf .tailroom = tailroom ;
@@ -3454,6 +3459,10 @@ do_init_frame_tls(struct context *c)
34543459 if (c -> c2 .tls_multi )
34553460 {
34563461 tls_multi_init_finalize (c -> c2 .tls_multi , c -> options .ce .tls_mtu );
3462+ if (c -> c2 .frame .bulk_size > 0 )
3463+ {
3464+ c -> c2 .tls_multi -> opt .frame .buf .payload_size = c -> c2 .frame .tun_mtu ;
3465+ }
34573466 ASSERT (c -> c2 .tls_multi -> opt .frame .buf .payload_size <= c -> c2 .frame .buf .payload_size );
34583467 frame_print (& c -> c2 .tls_multi -> opt .frame , D_MTU_INFO , "Control Channel MTU parms" );
34593468
@@ -3521,6 +3530,14 @@ do_init_frame(struct context *c)
35213530 c -> c2 .frame .extra_tun += c -> options .ce .tun_mtu_extra ;
35223531 }
35233532
3533+ /*
3534+ * Adjust bulk size based on the --bulk-mode parameter.
3535+ */
3536+ if (c -> options .ce .bulk_mode )
3537+ {
3538+ c -> c2 .frame .bulk_size = c -> options .ce .tun_mtu ;
3539+ }
3540+
35243541 /*
35253542 * Fill in the blanks in the frame parameters structure,
35263543 * make sure values are rational, etc.
@@ -3661,9 +3678,45 @@ init_context_buffers(const struct frame *frame)
36613678
36623679 size_t buf_size = BUF_SIZE (frame );
36633680
3681+ if (frame -> bulk_size > 0 )
3682+ {
3683+ size_t off_size = (frame -> buf .headroom + TUN_BAT_OFF + frame -> buf .tailroom );
3684+ buf_size = BAT_SIZE (TUN_BAT_MAX , frame -> tun_mtu , off_size );
3685+ }
3686+
3687+ dmsg (M_INFO , "MEM NEW [%ld] [%d+%d+%d]" , buf_size , frame -> buf .headroom , frame -> buf .payload_size , frame -> buf .tailroom );
3688+
36643689 b -> read_link_buf = alloc_buf (buf_size );
36653690 b -> read_tun_buf = alloc_buf (buf_size );
36663691
3692+ if (frame -> bulk_size > 0 )
3693+ {
3694+ size_t off_size = (frame -> buf .headroom + TUN_BAT_OFF + frame -> buf .tailroom );
3695+ size_t one_size = BAT_SIZE (TUN_BAT_ONE , frame -> tun_mtu , off_size );
3696+
3697+ for (int x = 0 ; x < TUN_BAT_MAX ; ++ x )
3698+ {
3699+ b -> read_tun_bufs [x ] = alloc_buf (one_size );
3700+ b -> read_tun_bufs [x ].offset = TUN_BAT_OFF ;
3701+ b -> read_tun_bufs [x ].len = 0 ;
3702+ }
3703+
3704+ b -> read_tun_max = alloc_buf (buf_size );
3705+ b -> read_tun_max .offset = TUN_BAT_OFF ;
3706+ b -> read_tun_max .len = 0 ;
3707+
3708+ b -> send_tun_max = alloc_buf (buf_size );
3709+ b -> send_tun_max .offset = TUN_BAT_OFF ;
3710+ b -> send_tun_max .len = 0 ;
3711+
3712+ b -> to_tun_max = alloc_buf (buf_size );
3713+ b -> to_tun_max .offset = TUN_BAT_OFF ;
3714+ b -> to_tun_max .len = 0 ;
3715+ }
3716+
3717+ b -> bulk_indx = -1 ;
3718+ b -> bulk_leng = -1 ;
3719+
36673720 b -> aux_buf = alloc_buf (buf_size );
36683721
36693722 b -> encrypt_buf = alloc_buf (buf_size );
@@ -3686,6 +3739,17 @@ free_context_buffers(struct context_buffers *b)
36863739 free_buf (& b -> read_tun_buf );
36873740 free_buf (& b -> aux_buf );
36883741
3742+ if (b -> to_tun_max .data )
3743+ {
3744+ free_buf (& b -> to_tun_max );
3745+ free_buf (& b -> send_tun_max );
3746+ free_buf (& b -> read_tun_max );
3747+ for (int x = 0 ; x < TUN_BAT_MAX ; ++ x )
3748+ {
3749+ free_buf (& b -> read_tun_bufs [x ]);
3750+ }
3751+ }
3752+
36893753#ifdef USE_COMP
36903754 free_buf (& b -> compress_buf );
36913755 free_buf (& b -> decompress_buf );
0 commit comments