|
@@ -487,10 +487,10 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
|
|
/*
|
|
/*
|
|
* Step 3: Process LISTEN state
|
|
* Step 3: Process LISTEN state
|
|
*
|
|
*
|
|
- * Set S.ISR, S.GSR, S.SWL, S.SWH from packet or Init Cookie
|
|
|
|
|
|
+ * Set S.ISR, S.GSR, S.SWL, S.SWH from packet or Init Cookie
|
|
*
|
|
*
|
|
- * In fact we defer setting S.GSR, S.SWL, S.SWH to
|
|
|
|
- * dccp_create_openreq_child.
|
|
|
|
|
|
+ * In fact we defer setting S.GSR, S.SWL, S.SWH to
|
|
|
|
+ * dccp_create_openreq_child.
|
|
*/
|
|
*/
|
|
dreq = dccp_rsk(req);
|
|
dreq = dccp_rsk(req);
|
|
dreq->dreq_isr = dcb->dccpd_seq;
|
|
dreq->dreq_isr = dcb->dccpd_seq;
|
|
@@ -760,6 +760,30 @@ static int dccp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Step 3: Process LISTEN state
|
|
|
|
+ * If S.state == LISTEN,
|
|
|
|
+ * If P.type == Request or P contains a valid Init Cookie option,
|
|
|
|
+ * (* Must scan the packet's options to check for Init
|
|
|
|
+ * Cookies. Only Init Cookies are processed here,
|
|
|
|
+ * however; other options are processed in Step 8. This
|
|
|
|
+ * scan need only be performed if the endpoint uses Init
|
|
|
|
+ * Cookies *)
|
|
|
|
+ * (* Generate a new socket and switch to that socket *)
|
|
|
|
+ * Set S := new socket for this port pair
|
|
|
|
+ * S.state = RESPOND
|
|
|
|
+ * Choose S.ISS (initial seqno) or set from Init Cookies
|
|
|
|
+ * Initialize S.GAR := S.ISS
|
|
|
|
+ * Set S.ISR, S.GSR, S.SWL, S.SWH from packet or Init Cookies
|
|
|
|
+ * Continue with S.state == RESPOND
|
|
|
|
+ * (* A Response packet will be generated in Step 11 *)
|
|
|
|
+ * Otherwise,
|
|
|
|
+ * Generate Reset(No Connection) unless P.type == Reset
|
|
|
|
+ * Drop packet and return
|
|
|
|
+ *
|
|
|
|
+ * NOTE: the check for the packet types is done in
|
|
|
|
+ * dccp_rcv_state_process
|
|
|
|
+ */
|
|
if (sk->sk_state == DCCP_LISTEN) {
|
|
if (sk->sk_state == DCCP_LISTEN) {
|
|
struct sock *nsk = dccp_v6_hnd_req(sk, skb);
|
|
struct sock *nsk = dccp_v6_hnd_req(sk, skb);
|
|
|
|
|
|
@@ -826,8 +850,6 @@ static int dccp_v6_rcv(struct sk_buff **pskb)
|
|
/*
|
|
/*
|
|
* Step 2:
|
|
* Step 2:
|
|
* If no socket ...
|
|
* If no socket ...
|
|
- * Generate Reset(No Connection) unless P.type == Reset
|
|
|
|
- * Drop packet and return
|
|
|
|
*/
|
|
*/
|
|
if (sk == NULL) {
|
|
if (sk == NULL) {
|
|
dccp_pr_debug("failed to look up flow ID in table and "
|
|
dccp_pr_debug("failed to look up flow ID in table and "
|
|
@@ -857,6 +879,7 @@ no_dccp_socket:
|
|
goto discard_it;
|
|
goto discard_it;
|
|
/*
|
|
/*
|
|
* Step 2:
|
|
* Step 2:
|
|
|
|
+ * If no socket ...
|
|
* Generate Reset(No Connection) unless P.type == Reset
|
|
* Generate Reset(No Connection) unless P.type == Reset
|
|
* Drop packet and return
|
|
* Drop packet and return
|
|
*/
|
|
*/
|