#LDFLAGS = -lpthread -lrt
fwp_SOURCES = core/fwp_util.c core/fwp_vres.c core/fwp_msgb.c core/fwp_msgq.c\
core/fwp_endpoint.c
-fwp_SOURCES += mngt/fwp_msg.c mngt/fwp_mngt.c mngt/fwp_contract_table.c
+fwp_SOURCES += mngt/fwp_msg.c mngt/fwp_contract_table.c mngt/fwp_mngt.c\
+ mngt/fwp_mngt.c
include_HEADERS= fwp.h
#define _FWP_H
#include "fwp_conf.h"
+#include "fwp_vres.h"
#include "fwp_endpoint.h"
#include "fwp_mngt.h"
-#include "fwp_util.h"
-#include "fwp_contract.h"
#include "fwp_msg.h"
-#include "fwp_comm.h"
+#include "fwp_contract.h"
+#include "fwp_contract_table.h"
/**
*
* If an error occured it returns negative error code.
*/
+#if 0
int fwp_contract_negotiate(struct fwp_contract *contract, fwp_vres_d_t *vresdp)
{
fwp_vres_params_t vparams;
return FWP_CONTNEGT_REJECTED;
}
}
+#endif
+
+fwp_contract_d_t fwp_contract_create(fwp_contract_t *contract)
+{
+ fwp_msgb_t *msgb;
+ fwp_contract_data_t *contdata;
+
+ contdata = fwp_contract_data_new();
+ contdata->vresd = fwp_vres_alloc();
+ contdata->id = fwp_vres_get_id(contdata->vresd);
+ memcpy(&contdata->contract, contract, sizeof(*contract));
+ contdata->status = FWP_CONT_REQUESTED;
+
+ /* Add to contract table */
+ fwp_contract_table_insert(&fwp_participant_this->contract_table,
+ contdata);
+ return 0;
+}
+
+int fwp_contract_reserve(fwp_contract_d_t contractd)
+{
+ fwp_contract_id_t contract_id = contractd;
+ fwp_contract_data_t *contdata;
+ fwp_msgb_t *msgb;
+
+ contdata = fwp_contract_table_find(&fwp_participant_this->contract_table,
+ contract_id);
+ /* Send contract to manager */
+ msgb = fwp_msgb_alloc(sizeof(struct fwp_msg_header) +
+ sizeof(struct fwp_msg_contract));
+ fwp_msg_contract_deflate(msgb->data, contdata->id, &contdata->contract);
+ fwp_mngt_send(FWP_MSG_NEGT_RESERVE, msgb,
+ fwp_participant_this, fwp_participant_mngr);
+ return 0;
+}
+
+int fwp_contract_commit(fwp_contract_d_t contractd)
+{
+ fwp_contract_id_t contract_id = contractd;
+ fwp_contract_data_t *contdata;
+ fwp_msgb_t *msgb;
+
+ contdata = fwp_contract_table_find(&fwp_participant_this->contract_table,
+ contract_id);
+ /* Send contract to manager */
+ msgb = fwp_msgb_alloc(sizeof(struct fwp_msg_header) +
+ sizeof(struct fwp_msg_contract));
+ fwp_msg_contract_deflate(msgb->data, contdata->id, &contdata->contract);
+ fwp_mngt_send(FWP_MSG_NEGT_COMMIT, msgb,
+ fwp_participant_this, fwp_participant_mngr);
+ return 0;
+}
#if 0
/**
} fwp_contract_status_t;
typedef fwp_vres_id_t fwp_contract_id_t;
+typedef fwp_contract_id_t fwp_contract_d_t;
/**
* FWP contract.
#include "ul_gavl.h"
GAVL_CUST_NODE_INT_DEC(_fwp_contract_table, fwp_contract_table_t,
- fwp_contract_data_t, unsigned int, contract_tree,
+ fwp_contract_data_t, fwp_contract_id_t, contract_tree,
tree_node, id, gavl_cmp_int);
GAVL_CUST_NODE_INT_IMP(_fwp_contract_table, fwp_contract_table_t,
- fwp_contract_data_t, unsigned int, contract_tree,
+ fwp_contract_data_t, fwp_contract_id_t, contract_tree,
tree_node, id, gavl_cmp_int);
fwp_contract_data_t* fwp_contract_data_new()
gavl_node_t *contract_tree;
} fwp_contract_table_t;
+fwp_contract_data_t* fwp_contract_data_new(void);
void fwp_contract_table_init(fwp_contract_table_t *tbl);
int fwp_contract_table_insert(fwp_contract_table_t *tbl,
#include "fwp_mngt.h"
-#include "fwp_participant.h"
/*
* Global mngt variables
/*fwp_endpoint_d_t fwp_mngt_repointd;*/
-/* temporarily*/
/**
* struct resource {
* char name[10];
return 0;
}
-int fwp_negt_request(fwp_contract_t *contract)
-{
- fwp_msgb_t *msgb;
- fwp_contract_data_t *contdata;
-
- contdata = fwp_contract_data_new();
- contdata->vresd = fwp_vres_alloc();
- contdata->id = fwp_vres_get_id(contdata->vresd);
- memcpy(&contdata->contract, contract, sizeof(*contract));
- contdata->status = FWP_CONT_REQUESTED;
-
- /* Add to contract table */
- fwp_contract_table_insert(&fwp_participant_this->contract_table,
- contdata);
- /* Send contract to manager */
- msgb = fwp_msgb_alloc(sizeof(struct fwp_msg_header) +
- sizeof(struct fwp_msg_contract));
- fwp_msg_contract_deflate(msgb->data, contdata->id, &contdata->contract);
- fwp_mngt_send(FWP_MSG_NEGT_REQ, msgb,
- fwp_participant_this, fwp_participant_mngr);
- return 0;
-}
-
-int fwp_negt_reserve()
-{
- fwp_msgb_t *msgb;
-
- msgb = fwp_msgb_alloc(sizeof(struct fwp_msg_header));
- fwp_mngt_send(FWP_MSG_NEGT_RESERVE, msgb,
- fwp_participant_this, fwp_participant_mngr);
- return 0;
-}
-
-int fwp_negt_commit()
-{
- fwp_msgb_t *msgb;
-
- msgb = fwp_msgb_alloc(sizeof(struct fwp_msg_header));
- fwp_mngt_send(FWP_MSG_NEGT_COMMIT, msgb,
- fwp_participant_this, fwp_participant_mngr);
- return 0;
-}
-
int fwp_mngt_service_vres_create(fwp_vres_d_t* fwp_service_vresd)
{
struct fwp_vres_params fwp_service_vparams;
#include "fwp_msg.h"
#include "fwp_util.h"
+#include "fwp_vres.h"
#include "fwp_endpoint.h"
+#include "fwp_participant.h"
+#include "fwp_contract_table.h"
#define FWP_MNGR_STREAM_ID 3000
#define FWP_MNGT_DISCOVERY_STREAM_ID 3000
FWP_DEBUG("Sent HELLO msg \n");
}
-/*void fwp_mngr_negt_request(msgb, participant_id)
+int fwp_mngr_contract_reserve(fwp_msgb_t *msgb, fwp_participant_id_t participant_id)
{
+ fwp_participant_t *participant;
+ fwp_contract_data_t *contdata;
+
+ /* Find participant */
+ if (!(participant = fwp_participant_table_find(&participant_id))){
+ return -EPERM;
+ }
+
+ contdata = fwp_contract_data_new();
+ fwp_msg_contract_inflate(msgb->data, &contdata->id, &contdata->contract);
+ contdata->status = FWP_CONT_REQUESTED;
+ /* Add contract to contract table */
+ fwp_contract_table_insert(&participant->contract_table, contdata);
+ /*launch admission test */
+
+ return 0;
+}
+
+int fwp_mngr_contract_commit(fwp_msgb_t *msgb, fwp_participant_id_t participant_id)
+{
+ fwp_participant_t *participant;
+ fwp_contract_data_t *contdata;
+ fwp_contract_t contract;
+ fwp_contract_id_t id;
+
+ /* Find participant */
+ if (!(participant = fwp_participant_table_find(&participant_id))){
+ return -EPERM;
+ }
-}*/
+ fwp_msg_contract_inflate(msgb->data, &id, &contract);
+ contdata = fwp_contract_table_find(&participant->contract_table, id);
+ contdata->status = FWP_CONT_ACCEPTED;
+
+ /* Add to contract accept list */
+ return 0;
+}
void fwp_mngr_msg_handler(fwp_msgb_t *msgb)
{
case FWP_MSG_HELLO:
fwp_mngr_hello(msgb, participant_id);
break;
-#if 0
- case FWP_MSG_NEGREQ:
+
+ case FWP_MSG_NEGT_REQ:
FWP_DEBUG("Negotiation Request received\n");
- fwp_mngr_negt_request(msgb, participant_id);
+ fwp_mngr_contract_reserve(msgb, participant_id);
break;
-#endif
default:
printf("Invalid message\n.");
fwp_msgb_free(msgb);
test_PROGRAMS = fwp_mngrtest
fwp_mngrtest_SOURCES+= fwp_mngrtest.c
-lib_LOADLIBES += fwp pthread rt
+lib_LOADLIBES += fwp pthread rt ulut