]>
Commit | Line | Data |
---|---|---|
ae6706f0 ACM |
1 | #ifndef _DCCP_LI_HIST_ |
2 | #define _DCCP_LI_HIST_ | |
3 | /* | |
4 | * net/dccp/ccids/lib/loss_interval.h | |
5 | * | |
6 | * Copyright (c) 2005 The University of Waikato, Hamilton, New Zealand. | |
7 | * Copyright (c) 2005 Ian McDonald <iam4@cs.waikato.ac.nz> | |
8 | * Copyright (c) 2005 Arnaldo Carvalho de Melo <acme@conectiva.com.br> | |
9 | * | |
10 | * This program is free software; you can redistribute it and/or modify it | |
11 | * under the terms of the GNU General Public License as published by the Free | |
12 | * Software Foundation; either version 2 of the License, or (at your option) | |
13 | * any later version. | |
14 | */ | |
15 | ||
16 | #include <linux/config.h> | |
17 | #include <linux/list.h> | |
18 | #include <linux/slab.h> | |
19 | #include <linux/time.h> | |
20 | ||
21 | #define DCCP_LI_HIST_IVAL_F_LENGTH 8 | |
22 | ||
23 | struct dccp_li_hist { | |
24 | kmem_cache_t *dccplih_slab; | |
25 | }; | |
26 | ||
27 | extern struct dccp_li_hist *dccp_li_hist_new(const char *name); | |
28 | extern void dccp_li_hist_delete(struct dccp_li_hist *hist); | |
29 | ||
30 | struct dccp_li_hist_entry { | |
31 | struct list_head dccplih_node; | |
32 | u64 dccplih_seqno:48, | |
33 | dccplih_win_count:4; | |
34 | u32 dccplih_interval; | |
35 | }; | |
36 | ||
37 | static inline struct dccp_li_hist_entry * | |
38 | dccp_li_hist_entry_new(struct dccp_li_hist *hist, | |
dd0fc66f | 39 | const gfp_t prio) |
ae6706f0 ACM |
40 | { |
41 | return kmem_cache_alloc(hist->dccplih_slab, prio); | |
42 | } | |
43 | ||
44 | static inline void dccp_li_hist_entry_delete(struct dccp_li_hist *hist, | |
45 | struct dccp_li_hist_entry *entry) | |
46 | { | |
47 | if (entry != NULL) | |
48 | kmem_cache_free(hist->dccplih_slab, entry); | |
49 | } | |
50 | ||
51 | extern void dccp_li_hist_purge(struct dccp_li_hist *hist, | |
52 | struct list_head *list); | |
53 | ||
54 | extern u32 dccp_li_hist_calc_i_mean(struct list_head *list); | |
55 | ||
56 | extern struct dccp_li_hist_entry * | |
57 | dccp_li_hist_interval_new(struct dccp_li_hist *hist, | |
58 | struct list_head *list, | |
59 | const u64 seq_loss, | |
60 | const u8 win_loss); | |
61 | #endif /* _DCCP_LI_HIST_ */ |