• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/router/openvpn/src/openvpn/
1/*
2 *  OpenVPN -- An application to securely tunnel IP networks
3 *             over a single UDP port, with support for SSL/TLS-based
4 *             session authentication and key exchange,
5 *             packet encryption, packet authentication, and
6 *             packet compression.
7 *
8 *  Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net>
9 *
10 *  This program is free software; you can redistribute it and/or modify
11 *  it under the terms of the GNU General Public License version 2
12 *  as published by the Free Software Foundation.
13 *
14 *  This program is distributed in the hope that it will be useful,
15 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 *  GNU General Public License for more details.
18 *
19 *  You should have received a copy of the GNU General Public License
20 *  along with this program (see the file COPYING included with this
21 *  distribution); if not, write to the Free Software Foundation, Inc.,
22 *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
23 */
24
25#ifdef HAVE_CONFIG_H
26#include "config.h"
27#elif defined(_MSC_VER)
28#include "config-msvc.h"
29#endif
30
31#include "syshead.h"
32#include "shaper.h"
33#include "memdbg.h"
34
35#ifdef ENABLE_FEATURE_SHAPER
36
37/*
38 * We want to wake up in delay microseconds.  If timeval is larger
39 * than delay, set timeval to delay.
40 */
41bool
42shaper_soonest_event (struct timeval *tv, int delay)
43{
44  bool ret = false;
45  if (delay < 1000000)
46    {
47      if (tv->tv_sec)
48	{
49	  tv->tv_sec = 0;
50	  tv->tv_usec = delay;
51	  ret = true;
52	}
53      else if (delay < tv->tv_usec)
54	{
55	  tv->tv_usec = delay;
56	  ret = true;
57	}
58    }
59  else
60    {
61      const int sec = delay / 1000000;
62      const int usec = delay % 1000000;
63
64      if (sec < tv->tv_sec)
65	{
66	  tv->tv_sec = sec;
67	  tv->tv_usec = usec;
68	  ret = true;
69	}
70      else if (sec == tv->tv_sec)
71	{
72	  if (usec < tv->tv_usec)
73	    {
74	      tv->tv_usec = usec;
75	      ret = true;
76	    }
77	}
78    }
79#ifdef SHAPER_DEBUG
80  dmsg (D_SHAPER_DEBUG, "SHAPER shaper_soonest_event sec=%d usec=%d ret=%d",
81       (int)tv->tv_sec, (int)tv->tv_usec, (int)ret);
82#endif
83  return ret;
84}
85
86void
87shaper_reset_wakeup (struct shaper *s)
88{
89  CLEAR (s->wakeup);
90}
91
92void
93shaper_msg (struct shaper *s)
94{
95  msg (M_INFO, "Output Traffic Shaping initialized at %d bytes per second",
96       s->bytes_per_second);
97}
98
99#else
100static void dummy(void) {}
101#endif /* ENABLE_FEATURE_SHAPER */
102