@@ -3725,6 +3725,63 @@ mod test {
3725
3725
assert_eq ! ( s. state, State :: Closed ) ;
3726
3726
}
3727
3727
3728
+ #[ test]
3729
+ fn test_syn_sent_sack_option ( ) {
3730
+ let mut s = socket_syn_sent ( ) ;
3731
+ recv ! (
3732
+ s,
3733
+ [ TcpRepr {
3734
+ control: TcpControl :: Syn ,
3735
+ seq_number: LOCAL_SEQ ,
3736
+ ack_number: None ,
3737
+ max_seg_size: Some ( BASE_MSS ) ,
3738
+ window_scale: Some ( 0 ) ,
3739
+ sack_permitted: true ,
3740
+ ..RECV_TEMPL
3741
+ } ]
3742
+ ) ;
3743
+ send ! (
3744
+ s,
3745
+ TcpRepr {
3746
+ control: TcpControl :: Syn ,
3747
+ seq_number: REMOTE_SEQ ,
3748
+ ack_number: Some ( LOCAL_SEQ + 1 ) ,
3749
+ max_seg_size: Some ( BASE_MSS - 80 ) ,
3750
+ window_scale: Some ( 0 ) ,
3751
+ sack_permitted: true ,
3752
+ ..SEND_TEMPL
3753
+ }
3754
+ ) ;
3755
+ assert ! ( s. remote_has_sack) ;
3756
+
3757
+ let mut s = socket_syn_sent ( ) ;
3758
+ recv ! (
3759
+ s,
3760
+ [ TcpRepr {
3761
+ control: TcpControl :: Syn ,
3762
+ seq_number: LOCAL_SEQ ,
3763
+ ack_number: None ,
3764
+ max_seg_size: Some ( BASE_MSS ) ,
3765
+ window_scale: Some ( 0 ) ,
3766
+ sack_permitted: true ,
3767
+ ..RECV_TEMPL
3768
+ } ]
3769
+ ) ;
3770
+ send ! (
3771
+ s,
3772
+ TcpRepr {
3773
+ control: TcpControl :: Syn ,
3774
+ seq_number: REMOTE_SEQ ,
3775
+ ack_number: Some ( LOCAL_SEQ + 1 ) ,
3776
+ max_seg_size: Some ( BASE_MSS - 80 ) ,
3777
+ window_scale: Some ( 0 ) ,
3778
+ sack_permitted: false ,
3779
+ ..SEND_TEMPL
3780
+ }
3781
+ ) ;
3782
+ assert ! ( !s. remote_has_sack) ;
3783
+ }
3784
+
3728
3785
#[ test]
3729
3786
fn test_syn_sent_win_scale_buffers ( ) {
3730
3787
for ( buffer_size, shift_amt) in & [
0 commit comments