root/vic/branches/cc/cc/formula.h
@
4855
Revision 4855, 2.5 KB (checked in by soohyunc, 5 years ago)  


Line  

1  /* 
2  * Copyright (c) 2010 University College London 
3  * All rights reserved. 
4  * 
5  * AUTHOR: SooHyun Choi <s.choi@.cs.ucl.ac.uk> 
6  * 
7  * Redistribution and use in source and binary forms, with or without 
8  * modification, are permitted provided that the following conditions 
9  * are met: 
10  * 1. Redistributions of source code must retain the above copyright 
11  * notice, this list of conditions and the following disclaimer. 
12  * 2. Redistributions in binary form must reproduce the above copyright 
13  * notice, this list of conditions and the following disclaimer in the 
14  * documentation and/or other materials provided with the distribution. 
15  * 3. Neither the name of the University nor of the Laboratory may be used 
16  * to endorse or promote products derived from this software without 
17  * specific prior written permission. 
18  * 
19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 
23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
29  * SUCH DAMAGE. 
30  * 
31  * $Id$ 
32  */ 
33  
34  #ifndef vic_cc_formula_h 
35  #define vic_cc_formula_h 
36  
37  #define MAXRATE 50000000.0 
38  #define SAMLLFLOAT 0.0000001 
39  
40  /* 
41  * This takes as input the packet drop rate, and outputs the sending 
42  * rate in bytes per second. 
43  */ 
44  static double p_to_b(double p, double rtt, double tzero, int psize, int bval) 
45  { 
46  double tmp1, tmp2, res; 
47  
48  if (p < 0  rtt < 0) { 
49  return MAXRATE ; 
50  } 
51  res = rtt * sqrt(2.0*bval*p/3.0); 
52  tmp1 = 3.0 * sqrt(3.0*bval*p/8.0); 
53  
54  if (tmp1>1.0) tmp1=1.0; 
55  
56  tmp2 = tzero * p * (1.0+32.0 * p * p); 
57  res += tmp1 * tmp2; 
58  
59  // At this point, 1/res gives the sending rate in pps: 
60  // 1/(rtt*sqrt(2*bval*p/3) + 3*sqrt(3*bval*p/8)*tzero*p*(1+32*p*p)) 
61  if (res < SAMLLFLOAT) { 
62  res=MAXRATE; 
63  } else { 
64  // change from 1/pps to Bps. 
65  res=psize/res; 
66  } 
67  if (res > MAXRATE) { 
68  res = MAXRATE ; 
69  } 
70  
71  // the unit of rate is (bits/sec) 
72  //double brate = 8.0 * res; 
73  
74  return res; 
75  } 
76  
77  #endif /* vic_cc_formula_h */ 
Note: See TracBrowser
for help on using the browser.