GNUnet  0.16.x
gnunet-service-ats_reservations.h File Reference

ats service, inbound bandwidth reservation management More...

#include "gnunet_util_lib.h"
#include "ats.h"
Include dependency graph for gnunet-service-ats_reservations.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.


void GAS_reservations_set_bandwidth (const struct GNUNET_PeerIdentity *peer, struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in)
 Set the amount of bandwidth the other peer could currently transmit to us (as far as we know) to the given value. More...
void GAS_handle_reservation_request (struct GNUNET_SERVICE_Client *client, const struct ReservationRequestMessage *message)
 Handle 'reservation request' messages from clients. More...
void GAS_reservations_init (void)
 Initialize reservations subsystem. More...
void GAS_reservations_done (void)
 Shutdown reservations subsystem. More...

Detailed Description

ats service, inbound bandwidth reservation management

Christian Grothoff

Definition in file gnunet-service-ats_reservations.h.

Function Documentation

◆ GAS_reservations_set_bandwidth()

void GAS_reservations_set_bandwidth ( const struct GNUNET_PeerIdentity peer,
struct GNUNET_BANDWIDTH_Value32NBO  bandwidth_in 

Set the amount of bandwidth the other peer could currently transmit to us (as far as we know) to the given value.

peeridentity of the peer
bandwidth_incurrently available bandwidth from that peer to this peer (estimate)

Definition at line 101 of file gnunet-service-ats_reservations.c.

103 {
104  struct GNUNET_BANDWIDTH_Tracker *tracker;
107  if (0 == ntohl (bandwidth_in.value__))
108  {
109  if (NULL == tracker)
110  return;
113  peer,
114  tracker));
115  GNUNET_free (tracker);
116  return;
117  }
118  if (NULL == tracker)
119  {
120  tracker = GNUNET_new (struct GNUNET_BANDWIDTH_Tracker);
122  NULL,
123  NULL,
124  bandwidth_in,
128  peer,
129  tracker,
131  return;
132  }
134  bandwidth_in);
135 }
static struct GNUNET_CONTAINER_MultiPeerMap * trackers
Map of peer identities to struct GNUNET_BANDWIDTH_Tracker *s.
Number of seconds that available bandwidth carries over (can accumulate).
Definition: gnunet_common.h:95
Definition: gnunet_common.h:97
void GNUNET_BANDWIDTH_tracker_update_quota(struct GNUNET_BANDWIDTH_Tracker *av, struct GNUNET_BANDWIDTH_Value32NBO bytes_per_second_limit)
Update quota of bandwidth tracker.
Definition: bandwidth.c:526
void GNUNET_BANDWIDTH_tracker_init(struct GNUNET_BANDWIDTH_Tracker *av, GNUNET_BANDWIDTH_TrackerUpdateCallback update_cb, void *update_cb_cls, struct GNUNET_BANDWIDTH_Value32NBO bytes_per_second_limit, uint32_t max_carry_s)
Initialize bandwidth tracker.
Definition: bandwidth.c:302
int GNUNET_CONTAINER_multipeermap_remove(struct GNUNET_CONTAINER_MultiPeerMap *map, const struct GNUNET_PeerIdentity *key, const void *value)
Remove the given key-value pair from the map.
void * GNUNET_CONTAINER_multipeermap_get(const struct GNUNET_CONTAINER_MultiPeerMap *map, const struct GNUNET_PeerIdentity *key)
Given a key find a value in the map matching the key.
int GNUNET_CONTAINER_multipeermap_put(struct GNUNET_CONTAINER_MultiPeerMap *map, const struct GNUNET_PeerIdentity *key, void *value, enum GNUNET_CONTAINER_MultiHashMapOption opt)
Store a key-value pair in the map.
There must only be one value per key; storing a value should fail if a value under the same key alrea...
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define GNUNET_new(type)
Allocate a struct or union of the given type.
#define GNUNET_free(ptr)
Wrapper around free.
Struct to track available bandwidth.
uint32_t value__
The actual value (bytes per second).
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.

References GNUNET_assert, GNUNET_BANDWIDTH_tracker_init(), GNUNET_BANDWIDTH_tracker_update_quota(), GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY, GNUNET_CONTAINER_multipeermap_get(), GNUNET_CONTAINER_multipeermap_put(), GNUNET_CONTAINER_multipeermap_remove(), GNUNET_free, GNUNET_new, GNUNET_OK, GNUNET_YES, MAX_BANDWIDTH_CARRY_S, peer, trackers, and GNUNET_BANDWIDTH_Value32NBO::value__.

Referenced by bandwidth_changed_cb().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GAS_handle_reservation_request()

void GAS_handle_reservation_request ( struct GNUNET_SERVICE_Client client,
const struct ReservationRequestMessage msg 

Handle 'reservation request' messages from clients.

clientclient that sent the request
messagethe request message
clientclient that sent the request
msgthe request message

Definition at line 145 of file gnunet-service-ats_reservations.c.

147 {
148  struct GNUNET_MQ_Envelope *env;
150  int32_t amount;
151  struct GNUNET_TIME_Relative res_delay;
154  "Received RESERVATION_REQUEST message\n");
155  amount = (int32_t) ntohl (msg->amount);
156  res_delay = reservations_reserve (&msg->peer, amount);
157  if (res_delay.rel_value_us > 0)
158  amount = 0;
161  result->amount = htonl (amount);
162  result->peer = msg->peer;
163  result->res_delay = GNUNET_TIME_relative_hton (res_delay);
165  "# reservation requests processed",
166  1,
167  GNUNET_NO);
169  env);
170 }
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
struct GNUNET_MQ_Envelope * env
Definition: 005.c:1
struct GNUNET_STATISTICS_Handle * GSA_stats
Handle for statistics.
static int result
Global testing status.
static struct GNUNET_TIME_Relative reservations_reserve(const struct GNUNET_PeerIdentity *peer, int32_t amount)
Reserve the given amount of incoming bandwidth (in bytes) from the given peer.
#define GNUNET_log(kind,...)
Definition: gnunet_common.h:94
void GNUNET_MQ_send(struct GNUNET_MQ_Handle *mq, struct GNUNET_MQ_Envelope *ev)
Send a message with the given message queue.
Definition: mq.c:302
#define GNUNET_MQ_msg(mvar, type)
Allocate a GNUNET_MQ_Envelope.
Definition: gnunet_mq_lib.h:67
Type of the 'struct ReservationResultMessage' sent by ATS to clients in response to a reservation req...
struct GNUNET_MQ_Handle * GNUNET_SERVICE_client_get_mq(struct GNUNET_SERVICE_Client *c)
Obtain the message queue of c.
Definition: service.c:2442
void GNUNET_STATISTICS_update(struct GNUNET_STATISTICS_Handle *handle, const char *name, int64_t delta, int make_persistent)
Set statistic value for the peer.
struct GNUNET_TIME_RelativeNBO GNUNET_TIME_relative_hton(struct GNUNET_TIME_Relative a)
Convert relative time to network byte order.
Definition: time.c:617
Time for relative time used by GNUnet, in microseconds.

References ReservationResultMessage::amount, env, GNUNET_ERROR_TYPE_DEBUG, GNUNET_log, GNUNET_MESSAGE_TYPE_ATS_RESERVATION_RESULT, GNUNET_MQ_msg, GNUNET_MQ_send(), GNUNET_NO, GNUNET_SERVICE_client_get_mq(), GNUNET_STATISTICS_update(), GNUNET_TIME_relative_hton(), GSA_stats, msg, GNUNET_TIME_Relative::rel_value_us, reservations_reserve(), and result.

Referenced by handle_reservation_request().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GAS_reservations_init()

void GAS_reservations_init ( void  )

Initialize reservations subsystem.

serverhandle to our server

Definition at line 177 of file gnunet-service-ats_reservations.c.

178 {
180  GNUNET_NO);
181 }
struct GNUNET_CONTAINER_MultiPeerMap * GNUNET_CONTAINER_multipeermap_create(unsigned int len, int do_not_copy_keys)
Create a multi peer map (hash map for public keys of peers).

References GNUNET_CONTAINER_multipeermap_create(), GNUNET_NO, and trackers.

Referenced by run().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GAS_reservations_done()

void GAS_reservations_done ( void  )

Shutdown reservations subsystem.

Definition at line 208 of file gnunet-service-ats_reservations.c.

209 {
211  &free_tracker,
212  NULL);
214 }
static int free_tracker(void *cls, const struct GNUNET_PeerIdentity *key, void *value)
Free memory of bandwidth tracker.
void GNUNET_CONTAINER_multipeermap_destroy(struct GNUNET_CONTAINER_MultiPeerMap *map)
Destroy a hash map.
int GNUNET_CONTAINER_multipeermap_iterate(struct GNUNET_CONTAINER_MultiPeerMap *map, GNUNET_CONTAINER_PeerMapIterator it, void *it_cls)
Iterate over all entries in the map.

References free_tracker(), GNUNET_CONTAINER_multipeermap_destroy(), GNUNET_CONTAINER_multipeermap_iterate(), and trackers.

Referenced by cleanup_task(), and run().

Here is the call graph for this function:
Here is the caller graph for this function: