: Integration of dynamic feature activation - part 2 (server side)
PATCH 3/14 : Integration of dynamic feature activation - part 2 (server side)
[DCCP]: Integration of dynamic feature activation - part 2 (server side)
This patch integrates the activation of features at the end of negotiation into the server-side code.
Note: In dccp_create_openreq_child the request_sock argument is no longer constant,
since dccp_activate_values() uses the feature-negotiation list on dreq to sort out the initialisation values for the different features of the child socket; and purges this queue after usei (the `req' argument to openreq_child was kept constant, however).
--- net/dccp/minisocks.c | 42 ++++++++++++------------------------------ 1 file changed, 12 insertions(+), 30 deletions(-)
net/dccp/minisocks.c +12 -27
@@ -112,7 +112,7 @@ struct sock *dccp_create_openreq_child(sstruct sock *newsk =inet_csk_clone (sk, req,GFP_ATOMIC );if (newsk !=NULL ) { -const struct dccp_request_sock *dreq =dccp_rsk (req); +struct dccp_request_sock *dreq =dccp_rsk (req);struct inet_connection_sock *newicsk =inet_csk (newsk);struct dccp_sock *newdp =dccp_sk (newsk);struct dccp_minisock *newdmsk =dccp_msk (newsk);
@@ -125,35 +125,6 @@ struct sock *dccp_create_openreq_child(s newicsk->icsk_rto =DCCP_TIMEOUT_INIT ;INIT_LIST_HEAD (&newdp->dccps_featneg); -if (dccp_feat_clone (sk, newsk)) - goto out_free; - -if (newdmsk->dccpms_send_ack_vector) { - newdp->dccps_hc_rx_ackvec -dccp_ackvec_alloc (GFP_ATOMIC ); -if (unlikely (newdp->dccps_hc_rx_ackvec =NULL )) - goto out_free; - } - - newdp->dccps_hc_rx_ccid -ccid_hc_rx_new (newdmsk->dccpms_rx_ccid, - newsk,GFP_ATOMIC ); - newdp->dccps_hc_tx_ccid -ccid_hc_tx_new (newdmsk->dccpms_tx_ccid, - newsk,GFP_ATOMIC ); -if (unlikely (newdp->dccps_hc_rx_ccid =NULL || - newdp->dccps_hc_tx_ccid =NULL )) { -dccp_ackvec_free (newdp->dccps_hc_rx_ackvec); -ccid_hc_rx_delete (newdp->dccps_hc_rx_ccid, newsk); -ccid_hc_tx_delete (newdp->dccps_hc_tx_ccid, newsk); -out_free: -/* It is still raw copy of parent, so invalidate -* destructor and make plain sk_free() */ - newsk->sk_destruct =NULL ; -sk_free (newsk); -return NULL ; - } -/* * Step 3: Process LISTEN state *
@@ -184,6 +155,17 @@ out_free:dccp_set_seqno (&newdp->dccps_awl,max48 (newdp->dccps_awl, newdp->dccps_iss)); +/* +* Activate features after initialising the sequence numbers since +* CCID initialisation may depend on GSS, ISR, ISS etc. +*/ +if (dccp_feat_activate_values (newsk, &dreq->dreq_featneg)) { +/* It is still raw copy of parent, so invalidate +* destructor and make plain sk_free() */ + newsk->sk_destruct =NULL ; +sk_free (newsk); +return NULL ; + }dccp_init_xmit_timers (newsk);DCCP_INC_STATS_BH (DCCP_MIB_PASSIVEOPENS );
Quoted 5 lines · Gerrit Renker
[DCCP]: Integration of dynamic feature activation - part 2 (server side)
This patch integrates the activation of features at the end of negotiation into the server-side code.
Quoted 7 lines
Note: In
dccp_create_openreq_childtherequest_sockargument is no longer constant,
sincedccp_activate_values()uses the feature-negotiation list on dreq to sort out the initialisation values for the different features of the child socket; and purges this queue after usei (the `req' argument toopenreq_childwas kept constant, however).Signed-off-by Gerrit Renker <[email protected]>