/*!
- * @file frescan_requests.c
+ * @file frescan_bwres_requests.c
*
- * @brief FRESCAN requests
+ * @brief FRESCAN bandwith reservation layer: requests
*
* This module contains an operation to create the queue, an operation to
* enqueue a message (with a request), and an operation to
#include <misc/freelist.h>
#include <misc/linux_list.h>
#include "frescan.h"
-#include "frescan_requests.h"
+#include "frescan_bwres_requests.h"
#include "frescan_config.h"
#include "frescan_debug.h"
#include "fosa_mutexes_and_condvars.h"
**/
struct request_t {
- frescan_req_type_t type;
- frescan_robj_id_t reply;
- frescan_contract_t *contract;
- frescan_ss_t ss;
- frescan_node_t src;
- void *return_info;
- struct list_head request_list;
+ frescan_request_data_t request_data;
+ struct list_head request_list;
int pool_pos;
};
static struct request_t the_requests_pool[FRESCAN_MX_REQUESTS];
static freelist_t freelist;
+
static struct request_t the_requests_list;
/**
}
/**
- * frescan_request_alloc()
+ * frescan_requests_alloc()
*
* Allocate a request with the mutex locked
*
**/
-int frescan_request_alloc(frescan_request_id_t *id)
+int frescan_requests_alloc(frescan_request_id_t *req)
{
int err, pos;
err = fosa_mutex_unlock(&requests_mutex);
if (err != 0) return err;
- *id = (unsigned int)pos;
- the_requests_pool[*id].pool_pos = pos;
+ *req = (unsigned int)pos;
+ the_requests_pool[*req].pool_pos = pos;
return 0;
}
/**
- * frescan_request_free()
+ * frescan_requests_free()
*
* free the request from the pool
*
**/
-int frescan_request_free(frescan_request_id_t id)
+int frescan_requests_free(frescan_request_id_t req)
{
int err;
err = fosa_mutex_lock(&requests_mutex);
if (err != 0) return err;
- err = freelist_free(&freelist, id);
+ err = freelist_free(&freelist, req);
if (err != 0) goto locked_error;
err = fosa_mutex_unlock(&requests_mutex);
}
/**
- * frescan_request_set_type()
- *
- **/
-
-int frescan_request_set_type(frescan_request_id_t id, frescan_req_type_t type)
-{
- DEBUG(FRESCAN_REQUESTS_ENABLE_DEBUG, "id:%d, type:%d\n", id, type);
- the_requests_pool[id].type = type;
- return 0;
-}
-
-/**
- * frescan_request_set_reply()
- *
- **/
-
-int frescan_request_set_reply(frescan_request_id_t id, frescan_robj_id_t reply)
-{
- the_requests_pool[id].reply = reply;
- return 0;
-}
-
-/**
- * frescan_request_set_contract()
- *
- **/
-
-int frescan_request_set_contract(frescan_request_id_t id,
- const frescan_contract_t *contract)
-{
- the_requests_pool[id].contract = (frescan_contract_t *)contract;
- return 0;
-}
-
-/**
- * frescan_request_set_ss()
+ * frescan_requests_get_data() - gets the data of the request
*
- **/
-
-int frescan_request_set_ss(frescan_request_id_t id,
- frescan_ss_t ss)
-{
- the_requests_pool[id].ss = ss;
- return 0;
-}
-
-/**
- * frescan_request_set_src()
- *
- **/
-
-int frescan_request_set_src(frescan_request_id_t id, frescan_node_t src)
-{
- the_requests_pool[id].src = src;
- return 0;
-}
-
-/**
- * frescan_request_set_return_info()
- *
- **/
-
-int frescan_request_set_return_info(frescan_request_id_t id,
- void *return_info)
-{
- the_requests_pool[id].return_info = return_info;
- return 0;
-}
-
-/**
- * frescan_request_get_type()
- *
- **/
-
-int frescan_request_get_type(frescan_request_id_t id, frescan_req_type_t *type)
-{
- *type = the_requests_pool[id].type;
- DEBUG(FRESCAN_REQUESTS_ENABLE_DEBUG, "id:%d, type:%d\n", id, *type);
- return 0;
-}
-
-/**
- * frescan_request_get_reply()
- *
- **/
-
-int frescan_request_get_reply(frescan_request_id_t id, frescan_robj_id_t *reply)
-{
- *reply = the_requests_pool[id].reply;
- return 0;
-}
-
-/**
- * frescan_request_get_contract()
- *
- **/
-
-int frescan_request_get_contract(frescan_request_id_t id,
- frescan_contract_t **contract)
-{
- *contract = the_requests_pool[id].contract;
- return 0;
-}
-
-/**
- * frescan_request_get_src()
- *
- **/
-
-int frescan_request_get_src(frescan_request_id_t id, frescan_node_t *src)
-{
- *src = the_requests_pool[id].src;
- return 0;
-}
-
-/**
- * frescan_request_get_return_info()
- *
- **/
+ */
-int frescan_request_get_return_info(frescan_request_id_t id,
- void **return_info)
+int frescan_requests_get_data(frescan_request_id_t req,
+ frescan_request_data_t **data)
{
- *return_info = the_requests_pool[id].return_info;
+ DEBUG(FRESCAN_REQUESTS_ENABLE_DEBUG, "request id:%d\n", req);
+ *data = &the_requests_pool[req].request_data;
return 0;
}
/**
- * frescan_requestqueue_enqueue()
+ * frescan_requests_enqueue()
*
**/
-int frescan_requestqueue_enqueue(frescan_request_id_t id)
+int frescan_requests_enqueue(frescan_request_id_t req)
{
int err;
"is list empty A? %d\n",
list_empty(&the_requests_list.request_list));
- list_add_tail(&the_requests_pool[id].request_list,
+ list_add_tail(&the_requests_pool[req].request_list,
&the_requests_list.request_list);
DEBUG(FRESCAN_REQUESTS_ENABLE_DEBUG,
*
**/
-int frescan_requestqueue_dequeue(frescan_request_id_t *id)
+int frescan_requests_dequeue(frescan_request_id_t *req)
{
int err;
struct list_head *pos;
list_del(&request->request_list);
- *id = request->pool_pos;
+ *req = request->pool_pos;
DEBUG(FRESCAN_REQUESTS_ENABLE_DEBUG,
"is list empty now? %d\n",