]>
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. | |
e6bccd35 | 7 | * Copyright (c) 2005 Ian McDonald <ian.mcdonald@jandi.co.nz> |
ae6706f0 ACM |
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 | ||
ae6706f0 ACM |
16 | #include <linux/list.h> |
17 | #include <linux/slab.h> | |
18 | #include <linux/time.h> | |
19 | ||
20 | #define DCCP_LI_HIST_IVAL_F_LENGTH 8 | |
21 | ||
22 | struct dccp_li_hist { | |
e18b890b | 23 | struct kmem_cache *dccplih_slab; |
ae6706f0 ACM |
24 | }; |
25 | ||
26 | extern struct dccp_li_hist *dccp_li_hist_new(const char *name); | |
27 | extern void dccp_li_hist_delete(struct dccp_li_hist *hist); | |
28 | ||
29 | struct dccp_li_hist_entry { | |
30 | struct list_head dccplih_node; | |
31 | u64 dccplih_seqno:48, | |
32 | dccplih_win_count:4; | |
33 | u32 dccplih_interval; | |
34 | }; | |
35 | ||
36 | static inline struct dccp_li_hist_entry * | |
37 | dccp_li_hist_entry_new(struct dccp_li_hist *hist, | |
dd0fc66f | 38 | const gfp_t prio) |
ae6706f0 ACM |
39 | { |
40 | return kmem_cache_alloc(hist->dccplih_slab, prio); | |
41 | } | |
42 | ||
43 | static inline void dccp_li_hist_entry_delete(struct dccp_li_hist *hist, | |
44 | struct dccp_li_hist_entry *entry) | |
45 | { | |
46 | if (entry != NULL) | |
47 | kmem_cache_free(hist->dccplih_slab, entry); | |
48 | } | |
49 | ||
50 | extern void dccp_li_hist_purge(struct dccp_li_hist *hist, | |
51 | struct list_head *list); | |
52 | ||
53 | extern u32 dccp_li_hist_calc_i_mean(struct list_head *list); | |
54 | ||
66a377c5 IM |
55 | extern int dccp_li_hist_interval_new(struct dccp_li_hist *hist, |
56 | struct list_head *list, const u64 seq_loss, const u8 win_loss); | |
ae6706f0 | 57 | #endif /* _DCCP_LI_HIST_ */ |