]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/dccp/ccids/lib/packet_history.h
dccp ccid-3: Remove ugly RTT-sampling history lookup
[mv-sheeva.git] / net / dccp / ccids / lib / packet_history.h
index c7eeda49cb20aae104fe3026d871e269a75bc848..221d8102da51562613ea958a3db08dc3c544cdc4 100644 (file)
 #include <linux/slab.h>
 #include "tfrc.h"
 
-struct tfrc_tx_hist_entry;
+/**
+ *  tfrc_tx_hist_entry  -  Simple singly-linked TX history list
+ *  @next:  next oldest entry (LIFO order)
+ *  @seqno: sequence number of this entry
+ *  @stamp: send time of packet with sequence number @seqno
+ */
+struct tfrc_tx_hist_entry {
+       struct tfrc_tx_hist_entry *next;
+       u64                       seqno;
+       ktime_t                   stamp;
+};
+
+static inline struct tfrc_tx_hist_entry *
+       tfrc_tx_hist_find_entry(struct tfrc_tx_hist_entry *head, u64 seqno)
+{
+       while (head != NULL && head->seqno != seqno)
+               head = head->next;
+       return head;
+}
 
 extern int  tfrc_tx_hist_add(struct tfrc_tx_hist_entry **headp, u64 seqno);
 extern void tfrc_tx_hist_purge(struct tfrc_tx_hist_entry **headp);
-extern u32  tfrc_tx_hist_rtt(struct tfrc_tx_hist_entry *head,
-                            const u64 seqno, const ktime_t now);
 
 /* Subtraction a-b modulo-16, respects circular wrap-around */
 #define SUB16(a, b) (((a) + 16 - (b)) & 0xF)
@@ -64,7 +80,7 @@ struct tfrc_rx_hist_entry {
        u64              tfrchrx_seqno:48,
                         tfrchrx_ccval:4,
                         tfrchrx_type:4;
-       u32              tfrchrx_ndp; /* In fact it is from 8 to 24 bits */
+       u64              tfrchrx_ndp:48;
        ktime_t          tfrchrx_tstamp;
 };
 
@@ -118,41 +134,21 @@ static inline struct tfrc_rx_hist_entry *
        return h->ring[h->loss_start];
 }
 
-/* initialise loss detection and disable RTT sampling */
-static inline void tfrc_rx_hist_loss_indicated(struct tfrc_rx_hist *h)
-{
-       h->loss_count = 1;
-}
-
 /* indicate whether previously a packet was detected missing */
-static inline int tfrc_rx_hist_loss_pending(const struct tfrc_rx_hist *h)
+static inline bool tfrc_rx_hist_loss_pending(const struct tfrc_rx_hist *h)
 {
-       return h->loss_count;
-}
-
-/* any data packets missing between last reception and skb ? */
-static inline int tfrc_rx_hist_new_loss_indicated(struct tfrc_rx_hist *h,
-                                                 const struct sk_buff *skb,
-                                                 u32 ndp)
-{
-       int delta = dccp_delta_seqno(tfrc_rx_hist_last_rcv(h)->tfrchrx_seqno,
-                                    DCCP_SKB_CB(skb)->dccpd_seq);
-
-       if (delta > 1 && ndp < delta)
-               tfrc_rx_hist_loss_indicated(h);
-
-       return tfrc_rx_hist_loss_pending(h);
+       return h->loss_count > 0;
 }
 
 extern void tfrc_rx_hist_add_packet(struct tfrc_rx_hist *h,
-                                   const struct sk_buff *skb, const u32 ndp);
+                                   const struct sk_buff *skb, const u64 ndp);
 
 extern int tfrc_rx_hist_duplicate(struct tfrc_rx_hist *h, struct sk_buff *skb);
 
 struct tfrc_loss_hist;
 extern int  tfrc_rx_handle_loss(struct tfrc_rx_hist *h,
                                struct tfrc_loss_hist *lh,
-                               struct sk_buff *skb, u32 ndp,
+                               struct sk_buff *skb, const u64 ndp,
                                u32 (*first_li)(struct sock *sk),
                                struct sock *sk);
 extern u32 tfrc_rx_hist_sample_rtt(struct tfrc_rx_hist *h,