#include "common.h"
#include "sockets.h"
#include "lib/inputevt.h"
#include "lib/tm.h"
#include "if/core/hosts.h"
#include "if/core/nodes.h"
#include "if/core/bsched.h"
Go to the source code of this file.
Data Structures | |
| struct | sendfile_ctx |
Typedefs | |
| typedef sendfile_ctx | sendfile_ctx_t |
Functions | |
| void | bsched_early_init (void) |
| void | bsched_init (void) |
| Initialize global bandwidth schedulers. | |
| void | bsched_shutdown (void) |
| Shutdowning program. | |
| void | bsched_close (void) |
| Discard global bandwidth schedulers. | |
| void | bsched_set_peermode (node_peer_t mode) |
| Adapt the overall Gnet/HTTP bandwidth repartition depending on the current peermode. | |
| void | bsched_enable (bsched_bws_t bs) |
| Enable scheduling, marks the start of the period. | |
| void | bsched_disable (bsched_bws_t bs) |
| Disable scheduling. | |
| void | bsched_enable_all (void) |
| Enable all known bandwidth schedulers. | |
| bio_source_t * | bsched_source_add (bsched_bws_t bs, wrap_io_t *wio, guint32 flags, inputevt_handler_t callback, gpointer arg) |
| Declare fd as a new source for the scheduler. | |
| void | bsched_source_remove (bio_source_t *bio) |
| Remove bio_source object from the scheduler. | |
| void | bsched_set_bandwidth (bsched_bws_t bs, gint bandwidth) |
| On-the-fly changing of the allowed bandwidth. | |
| void | bio_add_callback (bio_source_t *bio, inputevt_handler_t callback, gpointer arg) |
| Add I/O callback to a "passive" I/O source. | |
| void | bio_remove_callback (bio_source_t *bio) |
| Remove I/O callback from I/O source. | |
| ssize_t | bio_write (bio_source_t *bio, gconstpointer data, size_t len) |
| Write at most `len' bytes from `buf' to source's fd, as bandwidth permits. | |
| ssize_t | bio_writev (bio_source_t *bio, struct iovec *iov, gint iovcnt) |
| Write at most `len' bytes from `iov' to source's fd, as bandwidth permits, `len' being determined by the size of the supplied I/O vector. | |
| ssize_t | bio_sendto (bio_source_t *bio, const gnet_host_t *to, gconstpointer data, size_t len) |
| Send UDP datagram to specified destination `to'. | |
| ssize_t | bio_sendfile (sendfile_ctx_t *ctx, bio_source_t *bio, gint in_fd, off_t *offset, size_t len) |
| Write at most `len' bytes to source's fd, as bandwidth permits. | |
| ssize_t | bio_read (bio_source_t *bio, gpointer data, size_t len) |
| Read at most `len' bytes from `buf' from source's fd, as bandwidth permits. | |
| ssize_t | bio_readv (bio_source_t *bio, struct iovec *iov, gint iovcnt) |
| XXX: This is copy-paste bullshit:. | |
| ssize_t | bws_write (bsched_bws_t bs, wrap_io_t *wio, gconstpointer data, size_t len) |
| Write at most `len' bytes from `buf' to specified fd, and account the bandwidth used. | |
| ssize_t | bws_read (bsched_bws_t bs, wrap_io_t *wio, gpointer data, size_t len) |
| Read at most `len' bytes from `buf' from specified fd, and account the bandwidth used. | |
| void | bsched_timer (void) |
| Periodic timer. | |
| void | bws_sock_connect (enum socket_type type) |
| Record that we're issuing a TCP/IP connection of a particular type. | |
| void | bws_sock_connected (enum socket_type type) |
| Record that the connection attempt succeeded. | |
| void | bws_sock_accepted (enum socket_type type) |
| We accepted an incoming connection of `type'. | |
| void | bws_sock_connect_timeout (enum socket_type type) |
| A connection attempt of `type' timed out. | |
| void | bws_sock_connect_failed (enum socket_type type) |
| Record that the connection attempt failed. | |
| void | bws_sock_closed (enum socket_type type, gboolean remote) |
| The connection was closed, remotely if `remote' is true. | |
| gboolean | bws_can_connect (enum socket_type type) |
| Do we have the bandwidth to issue a new TCP/IP connection of `type'? | |
| void | bws_udp_count_written (gint len) |
| Account for written data to UDP. | |
| void | bws_udp_count_read (gint len) |
| Account for read data from UDP. | |
| gboolean | bsched_enough_up_bandwidth (void) |
| Needs very short description so that doxygen can parse the following list properly. | |
| gboolean | bsched_saturated (bsched_bws_t bws) |
| gulong | bsched_bps (bsched_bws_t bws) |
| gulong | bsched_avg_bps (bsched_bws_t bws) |
| gulong | bsched_pct (bsched_bws_t bws) |
| gulong | bsched_avg_pct (bsched_bws_t bws) |
| gulong | bsched_bw_per_second (bsched_bws_t bws) |
| void | bsched_config_steal_http_gnet (void) |
| Allow cross-stealing of unused bandwidth between HTTP/gnet. | |
| void | bsched_config_steal_gnet (void) |
| Allow cross-stealing of unused bandwidth between TCP and UDP gnet only. | |
|
|
|
|
||||||||||||||||
|
Add I/O callback to a "passive" I/O source.
|
|
||||||||||||||||
|
Read at most `len' bytes from `buf' from source's fd, as bandwidth permits.
|
|
||||||||||||||||
|
XXX: This is copy-paste bullshit:. Read at most `len' bytes from `iov' to source's fd, as bandwidth permits, `len' being determined by the size of the supplied I/O vector. If we cannot write anything due to bandwidth constraints, return -1 with errno set to EAGAIN. |
|
|
Remove I/O callback from I/O source.
|
|
||||||||||||||||||||||||
|
Write at most `len' bytes to source's fd, as bandwidth permits. Bytes are read from `offset' in the in_fd file descriptor, and the value is updated in place by the kernel.
|
|
||||||||||||||||||||
|
Send UDP datagram to specified destination `to'.
|
|
||||||||||||||||
|
Write at most `len' bytes from `buf' to source's fd, as bandwidth permits. If we cannot write anything due to bandwidth constraints, return -1 with errno set to EAGAIN. |
|
||||||||||||||||
|
Write at most `len' bytes from `iov' to source's fd, as bandwidth permits, `len' being determined by the size of the supplied I/O vector. If we cannot write anything due to bandwidth constraints, return -1 with errno set to EAGAIN. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Discard global bandwidth schedulers.
|
|
|
Allow cross-stealing of unused bandwidth between TCP and UDP gnet only.
|
|
|
Allow cross-stealing of unused bandwidth between HTTP/gnet.
|
|
|
Disable scheduling.
|
|
|
|
|
|
Enable scheduling, marks the start of the period.
|
|
|
Enable all known bandwidth schedulers.
|
|
|
Needs very short description so that doxygen can parse the following list properly. Determine whether we have enough bandwidth to possibly become an ultra node:
FIXME: If all upload slots are used by clients which download very slowly, the below check would cause a demotion to leaf mode. It is in general not possible to know whether we are out of bandwidth or if the remote clients have insufficient available bandwidth. |
|
|
Initialize global bandwidth schedulers.
|
|
|
|
|
|
|
|
||||||||||||
|
On-the-fly changing of the allowed bandwidth.
|
|
|
Adapt the overall Gnet/HTTP bandwidth repartition depending on the current peermode. This routine is called each time the peermode changes or each time the settings for the traffic shapers changes. |
|
|
Shutdowning program. Disable all known bandwidth schedulers, so that any pending I/O can go through as quickly as possible. |
|
||||||||||||||||||||||||
|
Declare fd as a new source for the scheduler. When `callback' is NULL, the source will be "passive", i.e. its bandwidth will be limited when calls to bio_write() or bio_read() are made, but whether the source can accept those calls without blocking will have to be determined explicitly.
|
|
|
Remove bio_source object from the scheduler. The bio_source object is freed and must not be re-used. |
|
|
Periodic timer.
|
|
|
Do we have the bandwidth to issue a new TCP/IP connection of `type'?
|
|
||||||||||||||||||||
|
Read at most `len' bytes from `buf' from specified fd, and account the bandwidth used. Any overused bandwidth will be tracked, so that on average, we stick to the requested bandwidth rate. |
|
|
We accepted an incoming connection of `type'.
|
|
||||||||||||
|
The connection was closed, remotely if `remote' is true.
|
|
|
Record that we're issuing a TCP/IP connection of a particular type.
|
|
|
Record that the connection attempt failed.
|
|
|
A connection attempt of `type' timed out.
|
|
|
Record that the connection attempt succeeded.
|
|
|
Account for read data from UDP.
|
|
|
Account for written data to UDP.
|
|
||||||||||||||||||||
|
Write at most `len' bytes from `buf' to specified fd, and account the bandwidth used. Any overused bandwidth will be tracked, so that on average, we stick to the requested bandwidth rate.
|
1.3.9.1