@@ -485,11 +485,11 @@ static bool mptcp_established_options_mp(struct sock *sk, struct sk_buff *skb,
485
485
mpext = mptcp_get_ext (skb );
486
486
data_len = mpext ? mpext -> data_len : 0 ;
487
487
488
- /* we will check ext_copy. data_len in mptcp_write_options() to
488
+ /* we will check ops-> data_len in mptcp_write_options() to
489
489
* discriminate between TCPOLEN_MPTCP_MPC_ACK_DATA and
490
490
* TCPOLEN_MPTCP_MPC_ACK
491
491
*/
492
- opts -> ext_copy . data_len = data_len ;
492
+ opts -> data_len = data_len ;
493
493
opts -> suboptions = OPTION_MPTCP_MPC_ACK ;
494
494
opts -> sndr_key = subflow -> local_key ;
495
495
opts -> rcvr_key = subflow -> remote_key ;
@@ -505,9 +505,9 @@ static bool mptcp_established_options_mp(struct sock *sk, struct sk_buff *skb,
505
505
len = TCPOLEN_MPTCP_MPC_ACK_DATA ;
506
506
if (opts -> csum_reqd ) {
507
507
/* we need to propagate more info to csum the pseudo hdr */
508
- opts -> ext_copy . data_seq = mpext -> data_seq ;
509
- opts -> ext_copy . subflow_seq = mpext -> subflow_seq ;
510
- opts -> ext_copy . csum = mpext -> csum ;
508
+ opts -> data_seq = mpext -> data_seq ;
509
+ opts -> subflow_seq = mpext -> subflow_seq ;
510
+ opts -> csum = mpext -> csum ;
511
511
len += TCPOLEN_MPTCP_DSS_CHECKSUM ;
512
512
}
513
513
* size = ALIGN (len , 4 );
@@ -1227,7 +1227,7 @@ static void mptcp_set_rwin(const struct tcp_sock *tp)
1227
1227
WRITE_ONCE (msk -> rcv_wnd_sent , ack_seq );
1228
1228
}
1229
1229
1230
- static u16 mptcp_make_csum ( const struct mptcp_ext * mpext )
1230
+ static u16 __mptcp_make_csum ( u64 data_seq , u32 subflow_seq , u16 data_len , __sum16 sum )
1231
1231
{
1232
1232
struct csum_pseudo_header header ;
1233
1233
__wsum csum ;
@@ -1237,15 +1237,21 @@ static u16 mptcp_make_csum(const struct mptcp_ext *mpext)
1237
1237
* always the 64-bit value, irrespective of what length is used in the
1238
1238
* DSS option itself.
1239
1239
*/
1240
- header .data_seq = cpu_to_be64 (mpext -> data_seq );
1241
- header .subflow_seq = htonl (mpext -> subflow_seq );
1242
- header .data_len = htons (mpext -> data_len );
1240
+ header .data_seq = cpu_to_be64 (data_seq );
1241
+ header .subflow_seq = htonl (subflow_seq );
1242
+ header .data_len = htons (data_len );
1243
1243
header .csum = 0 ;
1244
1244
1245
- csum = csum_partial (& header , sizeof (header ), ~csum_unfold (mpext -> csum ));
1245
+ csum = csum_partial (& header , sizeof (header ), ~csum_unfold (sum ));
1246
1246
return (__force u16 )csum_fold (csum );
1247
1247
}
1248
1248
1249
+ static u16 mptcp_make_csum (const struct mptcp_ext * mpext )
1250
+ {
1251
+ return __mptcp_make_csum (mpext -> data_seq , mpext -> subflow_seq , mpext -> data_len ,
1252
+ mpext -> csum );
1253
+ }
1254
+
1249
1255
void mptcp_write_options (__be32 * ptr , const struct tcp_sock * tp ,
1250
1256
struct mptcp_out_options * opts )
1251
1257
{
@@ -1337,7 +1343,7 @@ void mptcp_write_options(__be32 *ptr, const struct tcp_sock *tp,
1337
1343
len = TCPOLEN_MPTCP_MPC_SYN ;
1338
1344
} else if (OPTION_MPTCP_MPC_SYNACK & opts -> suboptions ) {
1339
1345
len = TCPOLEN_MPTCP_MPC_SYNACK ;
1340
- } else if (opts -> ext_copy . data_len ) {
1346
+ } else if (opts -> data_len ) {
1341
1347
len = TCPOLEN_MPTCP_MPC_ACK_DATA ;
1342
1348
if (opts -> csum_reqd )
1343
1349
len += TCPOLEN_MPTCP_DSS_CHECKSUM ;
@@ -1366,14 +1372,17 @@ void mptcp_write_options(__be32 *ptr, const struct tcp_sock *tp,
1366
1372
1367
1373
put_unaligned_be64 (opts -> rcvr_key , ptr );
1368
1374
ptr += 2 ;
1369
- if (!opts -> ext_copy . data_len )
1375
+ if (!opts -> data_len )
1370
1376
goto mp_capable_done ;
1371
1377
1372
1378
if (opts -> csum_reqd ) {
1373
- put_unaligned_be32 (opts -> ext_copy .data_len << 16 |
1374
- mptcp_make_csum (& opts -> ext_copy ), ptr );
1379
+ put_unaligned_be32 (opts -> data_len << 16 |
1380
+ __mptcp_make_csum (opts -> data_seq ,
1381
+ opts -> subflow_seq ,
1382
+ opts -> data_len ,
1383
+ opts -> csum ), ptr );
1375
1384
} else {
1376
- put_unaligned_be32 (opts -> ext_copy . data_len << 16 |
1385
+ put_unaligned_be32 (opts -> data_len << 16 |
1377
1386
TCPOPT_NOP << 8 | TCPOPT_NOP , ptr );
1378
1387
}
1379
1388
ptr += 1 ;
0 commit comments