18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Copyright (C) 2007-2008 The Android Open Source Project
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project**
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** This software is licensed under the terms of the GNU General Public
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** License version 2, as published by the Free Software Foundation, and
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** may be copied, distributed, and modified under those terms.
68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project**
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** This program is distributed in the hope that it will be useful,
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** but WITHOUT ANY WARRANTY; without even the implied warranty of
98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** GNU General Public License for more details.
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project*/
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef _SLIRP_SHAPER_H_
138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define _SLIRP_SHAPER_H_
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <stddef.h>
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* a NetShaper object is used to limit the throughput of data packets
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * at a fixed rate expressed in bits/seconds
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct NetShaperRec_*  NetShaper;
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef void (*NetShaperSendFunc)( void*  data, size_t  size, void*  opaque);
228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectNetShaper   netshaper_create  ( int                do_copy,
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                NetShaperSendFunc  send_func );
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid        netshaper_set_rate(NetShaper  shaper, double  rate );
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid        netshaper_send( NetShaper  shaper, void* data, size_t  size );
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid        netshaper_send_aux( NetShaper  shaper, void* data, size_t  size, void*  opaque );
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint         netshaper_can_send( NetShaper  shaper );
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid        netshaper_destroy (NetShaper   shaper);
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* a NetDelay object is used to simulate network connection latencies */
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct NetDelayRec_*  NetDelay;
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectNetDelay   netdelay_create( NetShaperSendFunc  send_func );
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid       netdelay_set_latency( NetDelay  delay, int  min_ms, int  max_ms );
418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid       netdelay_send( NetDelay  delay, const void*  data, size_t  size );
428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid       netdelay_send_aux( NetDelay  delay, const void*  data, size_t  size, void*  opaque );
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid       netdelay_destroy( NetDelay  delay );
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** in vl.c */
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* network traffic shaper and delayer */
478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern NetShaper   slirp_shaper_in;
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern NetShaper   slirp_shaper_out;
498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern NetDelay    slirp_delay_in;
508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* _SLIRP_SHAPER_H_ */
52