@@ -1297,7 +1297,8 @@ int bpf_sk_splice(struct __sk_buff *skb){
1297
1297
return TC_ACT_OK ;
1298
1298
}
1299
1299
else if (tcph -> ack ){
1300
- if ((tstate -> est ) && (tstate -> sfin == 1 ) && (tstate -> cfin == 1 ) && (bpf_htonl (tcph -> ack_seq ) == (bpf_htonl (tstate -> cfseq ) + 1 ))){
1300
+ if ((tstate -> est ) && (tstate -> sfin == 1 ) && (tstate -> cfin == 1 ) && tstate -> cfack &&
1301
+ ((bpf_htonl (tcph -> ack_seq ) == (bpf_htonl (tstate -> cfseq ) + 1 )) || (bpf_htonl (tcph -> ack_seq ) == bpf_htonl (tstate -> cfseq )))){
1301
1302
del_ingress_tcp (tcp_state_key );
1302
1303
tstate = get_ingress_tcp (tcp_state_key );
1303
1304
if (!tstate ){
@@ -1308,13 +1309,18 @@ int bpf_sk_splice(struct __sk_buff *skb){
1308
1309
}
1309
1310
1310
1311
}
1311
- else if ((tstate -> est ) && (tstate -> cfin == 1 ) && (bpf_htonl (tcph -> ack_seq ) == (bpf_htonl (tstate -> cfseq ) + 1 ))){
1312
+ else if ((tstate -> est ) && (tstate -> cfin == 1 ) &&
1313
+ ((bpf_htonl (tcph -> ack_seq ) == (bpf_htonl (tstate -> cfseq ) + 1 )) || (bpf_htonl (tcph -> ack_seq ) == bpf_htonl (tstate -> cfseq )))){
1312
1314
tstate -> sfack = 1 ;
1313
- tstate -> tstamp = tstamp ;
1315
+ if (tstamp >= tstate -> tstamp + 250000000 ){
1316
+ tstate -> tstamp = tstamp ;
1317
+ }
1314
1318
return TC_ACT_OK ;
1315
1319
}
1316
1320
else if (tstate -> est ){
1317
- tstate -> tstamp = tstamp ;
1321
+ if (tstamp >= tstate -> tstamp + 250000000 ){
1322
+ tstate -> tstamp = tstamp ;
1323
+ }
1318
1324
return TC_ACT_OK ;
1319
1325
}
1320
1326
}
@@ -1466,7 +1472,9 @@ int bpf_sk_splice(struct __sk_buff *skb){
1466
1472
event .tracking_code = INGRESS_UDP_MATCHED_ACTIVE_STATE ;
1467
1473
send_event (& event );
1468
1474
}
1469
- ustate -> tstamp = tstamp ;
1475
+ if (tstamp >= ustate -> tstamp + 250000000 ){
1476
+ ustate -> tstamp = tstamp ;
1477
+ }
1470
1478
return TC_ACT_OK ;
1471
1479
}
1472
1480
}
@@ -1601,7 +1609,8 @@ int bpf_sk_splice(struct __sk_buff *skb){
1601
1609
return TC_ACT_OK ;
1602
1610
}
1603
1611
else if (tcph -> ack ){
1604
- if ((tstate -> est ) && (tstate -> sfin == 1 ) && (tstate -> cfin == 1 ) && (bpf_htonl (tcph -> ack_seq ) == (bpf_htonl (tstate -> cfseq ) + 1 ))){
1612
+ if ((tstate -> est ) && (tstate -> sfin == 1 ) && (tstate -> cfin == 1 ) && tstate -> cfack &&
1613
+ ((bpf_htonl (tcph -> ack_seq ) == (bpf_htonl (tstate -> cfseq ) + 1 )) || (bpf_htonl (tcph -> ack_seq ) == bpf_htonl (tstate -> cfseq )))){
1605
1614
del_ingress_tcp (tcp_state_key );
1606
1615
tstate = get_ingress_tcp (tcp_state_key );
1607
1616
if (!tstate ){
@@ -1612,13 +1621,18 @@ int bpf_sk_splice(struct __sk_buff *skb){
1612
1621
}
1613
1622
1614
1623
}
1615
- else if ((tstate -> est ) && (tstate -> cfin == 1 ) && (bpf_htonl (tcph -> ack_seq ) == (bpf_htonl (tstate -> cfseq ) + 1 ))){
1624
+ else if ((tstate -> est ) && (tstate -> cfin == 1 ) &&
1625
+ ((bpf_htonl (tcph -> ack_seq ) == (bpf_htonl (tstate -> cfseq ) + 1 )) || (bpf_htonl (tcph -> ack_seq ) == bpf_htonl (tstate -> cfseq )))){
1616
1626
tstate -> sfack = 1 ;
1617
- tstate -> tstamp = tstamp ;
1627
+ if (tstamp >= tstate -> tstamp + 250000000 ){
1628
+ tstate -> tstamp = tstamp ;
1629
+ }
1618
1630
return TC_ACT_OK ;
1619
1631
}
1620
1632
else if (tstate -> est ){
1621
- tstate -> tstamp = tstamp ;
1633
+ if (tstamp >= tstate -> tstamp + 250000000 ){
1634
+ tstate -> tstamp = tstamp ;
1635
+ }
1622
1636
return TC_ACT_OK ;
1623
1637
}
1624
1638
}
@@ -1656,7 +1670,9 @@ int bpf_sk_splice(struct __sk_buff *skb){
1656
1670
event .tracking_code = INGRESS_UDP_MATCHED_ACTIVE_STATE ;
1657
1671
send_event (& event );
1658
1672
}
1659
- ustate -> tstamp = tstamp ;
1673
+ if (tstamp >= ustate -> tstamp + 250000000 ){
1674
+ ustate -> tstamp = tstamp ;
1675
+ }
1660
1676
return TC_ACT_OK ;
1661
1677
}
1662
1678
}
@@ -2887,7 +2903,8 @@ int bpf_sk_splice6(struct __sk_buff *skb){
2887
2903
tstate -> syn = 0 ;
2888
2904
tstate -> est = 1 ;
2889
2905
}
2890
- if ((tstate -> est ) && (tstate -> sfin == 1 ) && (tstate -> cfin == 1 ) && (tstate -> sfack ) && (bpf_htonl (tcph -> ack_seq ) == (bpf_htonl (tstate -> sfseq ) + 1 ))){
2906
+ if ((tstate -> est ) && (tstate -> sfin == 1 ) && (tstate -> cfin == 1 ) && (tstate -> sfack ) &&
2907
+ ((bpf_htonl (tcph -> ack_seq ) == (bpf_htonl (tstate -> sfseq ) + 1 )) || (bpf_htonl (tcph -> ack_seq ) == bpf_htonl (tstate -> sfseq )))){
2891
2908
if (local_diag -> masquerade ){
2892
2909
struct masq_reverse_key rk = {0 };
2893
2910
rk .dport = tcp_state_key .dport ;
@@ -2928,12 +2945,17 @@ int bpf_sk_splice6(struct __sk_buff *skb){
2928
2945
}
2929
2946
2930
2947
}
2931
- else if ((tstate -> est ) && (tstate -> sfin == 1 ) && (bpf_htonl (tcph -> ack_seq ) == (bpf_htonl (tstate -> sfseq ) + 1 ))){
2948
+ else if ((tstate -> est ) && (tstate -> sfin == 1 ) &&
2949
+ ((bpf_htonl (tcph -> ack_seq ) == (bpf_htonl (tstate -> sfseq ) + 1 )) || (bpf_htonl (tcph -> ack_seq ) == bpf_htonl (tstate -> sfseq )))){
2932
2950
tstate -> cfack = 1 ;
2933
- tstate -> tstamp = tstamp ;
2951
+ if (tstamp >= tstate -> tstamp + 250000000 ){
2952
+ tstate -> tstamp = tstamp ;
2953
+ }
2934
2954
}
2935
2955
else {
2936
- tstate -> tstamp = tstamp ;
2956
+ if (tstamp >= tstate -> tstamp + 250000000 ){
2957
+ tstate -> tstamp = tstamp ;
2958
+ }
2937
2959
}
2938
2960
}
2939
2961
}
@@ -3114,7 +3136,9 @@ int bpf_sk_splice6(struct __sk_buff *skb){
3114
3136
}
3115
3137
}
3116
3138
else if (ustate ){
3117
- ustate -> tstamp = tstamp ;
3139
+ if (tstamp >= ustate -> tstamp + 250000000 ){
3140
+ ustate -> tstamp = tstamp ;
3141
+ }
3118
3142
}
3119
3143
}
3120
3144
}
@@ -3263,7 +3287,8 @@ int bpf_sk_splice6(struct __sk_buff *skb){
3263
3287
tstate -> syn = 0 ;
3264
3288
tstate -> est = 1 ;
3265
3289
}
3266
- if ((tstate -> est ) && (tstate -> sfin == 1 ) && (tstate -> cfin == 1 ) && (tstate -> sfack ) && (bpf_htonl (tcph -> ack_seq ) == (bpf_htonl (tstate -> sfseq ) + 1 ))){
3290
+ if ((tstate -> est ) && (tstate -> sfin == 1 ) && (tstate -> cfin == 1 ) && (tstate -> sfack ) &&
3291
+ ((bpf_htonl (tcph -> ack_seq ) == (bpf_htonl (tstate -> sfseq ) + 1 )) || (bpf_htonl (tcph -> ack_seq ) == bpf_htonl (tstate -> sfseq )))){
3267
3292
del_tcp (tcp_state_key );
3268
3293
tstate = get_tcp (tcp_state_key );
3269
3294
if (!tstate ){
@@ -3273,12 +3298,17 @@ int bpf_sk_splice6(struct __sk_buff *skb){
3273
3298
}
3274
3299
}
3275
3300
}
3276
- else if ((tstate -> est ) && (tstate -> sfin == 1 ) && (bpf_htonl (tcph -> ack_seq ) == (bpf_htonl (tstate -> sfseq ) + 1 ))){
3301
+ else if ((tstate -> est ) && (tstate -> sfin == 1 ) &&
3302
+ ((bpf_htonl (tcph -> ack_seq ) == (bpf_htonl (tstate -> sfseq ) + 1 )) || (bpf_htonl (tcph -> ack_seq ) == bpf_htonl (tstate -> sfseq )))){
3277
3303
tstate -> cfack = 1 ;
3278
- tstate -> tstamp = tstamp ;
3304
+ if (tstamp >= tstate -> tstamp + 250000000 ){
3305
+ tstate -> tstamp = tstamp ;
3306
+ }
3279
3307
}
3280
3308
else {
3281
- tstate -> tstamp = tstamp ;
3309
+ if (tstamp >= tstate -> tstamp + 250000000 ){
3310
+ tstate -> tstamp = tstamp ;
3311
+ }
3282
3312
}
3283
3313
}
3284
3314
}
@@ -3351,7 +3381,9 @@ int bpf_sk_splice6(struct __sk_buff *skb){
3351
3381
}
3352
3382
}
3353
3383
else if (ustate ){
3354
- ustate -> tstamp = tstamp ;
3384
+ if (tstamp >= ustate -> tstamp + 250000000 ){
3385
+ ustate -> tstamp = tstamp ;
3386
+ }
3355
3387
}
3356
3388
}
3357
3389
}
0 commit comments