lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <cb00fa210909011944r60f310bcx7e3f45e619f41498@mail.gmail.com>
Date:	Tue, 1 Sep 2009 23:44:45 -0300
From:	Ivo Calado <ivocalado@...edded.ufcg.edu.br>
To:	dccp <dccp@...r.kernel.org>
Cc:	netdev <netdev@...r.kernel.org>
Subject: [PATCH 2/5] Implement loss counting on TFRC-SP receiver

Implement loss counting on TFRC-SP receiver. Consider transmission's
hole size as loss count.

Changes:
 - Adds field li_losses to tfrc_loss_interval to track loss count per interval
 - Adds field num_losses to tfrc_rx_hist, used to store loss count per
loss event
 - Adds dccp_loss_count function to net/dccp/dccp.h, responsible for
loss count using sequence numbers

Signed-off-by: Ivo Calado, Erivaldo Xavier, Leandro Sales
<ivocalado@...edded.ufcg.edu.br>, <desadoc@...il.com>,
<leandroal@...il.com>

Index: b/net/dccp/ccids/lib/loss_interval_sp.c
===================================================================
--- a/net/dccp/ccids/lib/loss_interval_sp.c     2009-08-26
21:50:23.000000000 -0300
+++ b/net/dccp/ccids/lib/loss_interval_sp.c     2009-08-26
22:51:32.000000000 -0300
@@ -184,6 +184,7 @@
               s64 len = dccp_delta_seqno(cur->li_seqno, cong_evt_seqno);
               if ((len <= 0)||(!tfrc_lh_closed_check(cur,
cong_evt->tfrchrx_ccval)))
               {
+                       cur->li_losses += rh->num_losses;
                       return false;
               }

@@ -201,6 +202,7 @@
       cur->li_seqno     = cong_evt_seqno;
       cur->li_ccval     = cong_evt->tfrchrx_ccval;
       cur->li_is_closed = false;
+       cur->li_losses    = rh->num_losses;

       if (++lh->counter == 1)
               lh->i_mean = cur->li_length = (*calc_first_li)(sk);
Index: b/net/dccp/ccids/lib/loss_interval_sp.h
===================================================================
--- a/net/dccp/ccids/lib/loss_interval_sp.h     2009-08-26
21:30:11.000000000 -0300
+++ b/net/dccp/ccids/lib/loss_interval_sp.h     2009-08-26
22:52:20.000000000 -0300
@@ -30,12 +30,14 @@
 *  @li_ccval:         The CCVal belonging to @li_seqno
 *  @li_is_closed:     Whether @li_seqno is older than 1 RTT
 *  @li_length:                Loss interval sequence length
+ *  @li_losses:        Number of losses counted on this interval
 */
 struct tfrc_loss_interval {
       u64              li_seqno:48,
                        li_ccval:4,
                        li_is_closed:1;
       u32              li_length;
+       u32              li_losses;
 };

 /**
Index: b/net/dccp/ccids/lib/packet_history_sp.c
===================================================================
--- a/net/dccp/ccids/lib/packet_history_sp.c    2009-08-26
21:46:36.000000000 -0300
+++ b/net/dccp/ccids/lib/packet_history_sp.c    2009-08-26
22:55:01.000000000 -0300
@@ -236,6 +236,7 @@
       if (likely(dccp_delta_seqno(s2, s3) > 0)) {     /* S2  <  S3 */
               h->loss_count = 3;
               tfrc_sp_rx_hist_entry_from_skb(tfrc_rx_hist_entry(h,
3), skb, n3);
+               h->num_losses = dccp_loss_count(s2, s3, n3);
               return 1;
       }

@@ -248,6 +249,7 @@
               tfrc_rx_hist_swap(h, 2, 3);
               tfrc_sp_rx_hist_entry_from_skb(tfrc_rx_hist_entry(h,
2), skb, n3);
               h->loss_count = 3;
+               h->num_losses = dccp_loss_count(s1, s3, n3);
               return 1;
       }

@@ -283,6 +285,7 @@
       h->loss_start = tfrc_rx_hist_index(h, 3);
       tfrc_sp_rx_hist_entry_from_skb(tfrc_rx_hist_entry(h, 1), skb, n3);
       h->loss_count = 3;
+       h->num_losses = dccp_loss_count(s0, s3, n3);

       return 1;
 }
Index: b/net/dccp/ccids/lib/packet_history_sp.h
===================================================================
--- a/net/dccp/ccids/lib/packet_history_sp.h    2009-08-26
21:40:55.000000000 -0300
+++ b/net/dccp/ccids/lib/packet_history_sp.h    2009-08-26
22:55:58.000000000 -0300
@@ -101,6 +101,7 @@
 * @packet_size:       Packet size in bytes (as per RFC 3448, 3.1)
 * @bytes_recvd:       Number of bytes received since @bytes_start
 * @bytes_start:       Start time for counting @bytes_recvd
+ * @num_losses:        Number of losses contained on this loss event
 */
 struct tfrc_rx_hist {
       struct tfrc_rx_hist_entry *ring[TFRC_NDUPACK + 1];
@@ -113,6 +114,7 @@
       u32                       packet_size,
                                 bytes_recvd;
       ktime_t                   bytes_start;
+       u8                        num_losses;
 };

 /**
Index: b/net/dccp/dccp.h
===================================================================
--- a/net/dccp/dccp.h   2009-08-25 20:21:45.000000000 -0300
+++ b/net/dccp/dccp.h   2009-08-26 22:59:10.000000000 -0300
@@ -168,6 +168,21 @@
       return (u64)delta <= ndp + 1;
 }

+static inline u64 dccp_loss_count(const u64 s1, const u64 s2, const u64 ndp)
+{
+       s64 delta, count;
+
+       delta = dccp_delta_seqno(s1, s2);
+       WARN_ON(delta < 0);
+
+       count = ndp + 1;
+       count -= delta;
+
+       count = (count > 0)? count: 0;
+
+       return (u64) count;
+}
+
 enum {
       DCCP_MIB_NUM = 0,
       DCCP_MIB_ACTIVEOPENS,                   /* ActiveOpens */
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ