Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.25-rc7 /net/dccp/minisocks.c

Filename:/net/dccp/minisocks.c
Lines Added:19
Lines Deleted:14
Also changed in: (Previous) 2.6.25-rc6  2.6.25-rc5  2.6.25-rc4  2.6.25-rc3  2.6.25-rc2  2.6.25-rc1 
(Following) 2.6.25-rc8  2.6.25-rc9  2.6.25  2.6.25-git2  2.6.25-git3  2.6.25-git4 

Location
[  2.6.25-rc7
  [  net
    [  dccp
       o  minisocks.c

Patch

diff --git a/net/dccp/minisocks.c b/net/dccp/minisocks.c
index 831b76e..027d181 100644
--- a/net/dccp/minisocks.c
+++ b/net/dccp/minisocks.c
@@ -117,11 +117,13 @@ struct sock *dccp_create_openreq_child(struct sock *sk,
       struct dccp_sock *newdp = dccp_sk(newsk);
       struct dccp_minisock *newdmsk = dccp_msk(newsk);
 
-      newdp->dccps_role      = DCCP_ROLE_SERVER;
-      newdp->dccps_hc_rx_ackvec  = NULL;
-      newdp->dccps_service_list  = NULL;
-      newdp->dccps_service      = dreq->dreq_service;
-      newicsk->icsk_rto      = DCCP_TIMEOUT_INIT;
+      newdp->dccps_role       = DCCP_ROLE_SERVER;
+      newdp->dccps_hc_rx_ackvec   = NULL;
+      newdp->dccps_service_list   = NULL;
+      newdp->dccps_service       = dreq->dreq_service;
+      newdp->dccps_timestamp_echo = dreq->dreq_timestamp_echo;
+      newdp->dccps_timestamp_time = dreq->dreq_timestamp_time;
+      newicsk->icsk_rto       = DCCP_TIMEOUT_INIT;
 
       if (dccp_feat_clone(sk, newsk))
          goto out_free;
@@ -200,10 +202,10 @@ struct sock *dccp_check_req(struct sock *sk, struct sk_buff *skb,
              struct request_sock **prev)
 {
    struct sock *child = NULL;
+   struct dccp_request_sock *dreq = dccp_rsk(req);
 
    /* Check for retransmitted REQUEST */
    if (dccp_hdr(skb)->dccph_type == DCCP_PKT_REQUEST) {
-      struct dccp_request_sock *dreq = dccp_rsk(req);
 
       if (after48(DCCP_SKB_CB(skb)->dccpd_seq, dreq->dreq_isr)) {
          dccp_pr_debug("Retransmitted REQUEST\n");
@@ -227,22 +229,22 @@ struct sock *dccp_check_req(struct sock *sk, struct sk_buff *skb,
       goto drop;
 
    /* Invalid ACK */
-   if (DCCP_SKB_CB(skb)->dccpd_ack_seq != dccp_rsk(req)->dreq_iss) {
+   if (DCCP_SKB_CB(skb)->dccpd_ack_seq != dreq->dreq_iss) {
       dccp_pr_debug("Invalid ACK number: ack_seq=%llu, "
                "dreq_iss=%llu\n",
                (unsigned long long)
                DCCP_SKB_CB(skb)->dccpd_ack_seq,
-               (unsigned long long)
-               dccp_rsk(req)->dreq_iss);
+               (unsigned long long) dreq->dreq_iss);
       goto drop;
    }
 
+   if (dccp_parse_options(sk, dreq, skb))
+       goto drop;
+
    child = inet_csk(sk)->icsk_af_ops->syn_recv_sock(sk, skb, req, NULL);
    if (child == NULL)
       goto listen_overflow;
 
-   /* FIXME: deal with options */
-
    inet_csk_reqsk_queue_unlink(sk, req, prev);
    inet_csk_reqsk_queue_removed(sk, req);
    inet_csk_reqsk_queue_add(sk, req, child);
@@ -303,9 +305,12 @@ EXPORT_SYMBOL_GPL(dccp_reqsk_send_ack);
 
 void dccp_reqsk_init(struct request_sock *req, struct sk_buff *skb)
 {
-   inet_rsk(req)->rmt_port = dccp_hdr(skb)->dccph_sport;
-   inet_rsk(req)->acked   = 0;
-   req->rcv_wnd      = sysctl_dccp_feat_sequence_window;
+   struct dccp_request_sock *dreq = dccp_rsk(req);
+
+   inet_rsk(req)->rmt_port     = dccp_hdr(skb)->dccph_sport;
+   inet_rsk(req)->acked     = 0;
+   req->rcv_wnd        = sysctl_dccp_feat_sequence_window;
+   dreq->dreq_timestamp_echo = 0;
 }
 
 EXPORT_SYMBOL_GPL(dccp_reqsk_init);


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.