From fbb9c82a77490114ddf5d9da40d02698a71247cd Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 24 Oct 2008 17:14:08 +0200 Subject: [PATCH] Added resmngr and resched from dummy exapmle --- fwp/mngr/Makefile.omk | 8 +++--- fwp/mngr/fwpmngr.c | 67 +++++++++++++++++++++++++++++++++++++++++++ fwp/mngr/fwpsched.c | 64 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 135 insertions(+), 4 deletions(-) create mode 100644 fwp/mngr/fwpmngr.c create mode 100644 fwp/mngr/fwpsched.c diff --git a/fwp/mngr/Makefile.omk b/fwp/mngr/Makefile.omk index e95d0fb..9af7d74 100644 --- a/fwp/mngr/Makefile.omk +++ b/fwp/mngr/Makefile.omk @@ -3,11 +3,11 @@ CFLAGS += -Wall -D_REENTRANT -g -D_FWP_INTERNALS_ #fwpagent_SOURCES+= fwp_agent.c #fwpmngr_SOURCES+= fwp_participant.c fwp_mngr.c fwp_contract_table.c\ fwp_agent_table.c fwp_admctrl.c -fwpmngr_SOURCES+= fwp_mngr.c fwp_participant_table.c +fwpmngr_SOURCES+= fwp_mngr.c fwpmngr_SOURCES+= fwp_admctrl.c fwpmngr_SOURCES+= admtest_utilization.c -fwpmngr_SOURCES+= gui.c +#fwpmngr_SOURCES+= gui.c -lib_LOADLIBES+= fwp ulut pthread rt ncurses +lib_LOADLIBES+= fwp ulut pthread rt +#lib_LOADLIBES+= fwp ulut pthread rt ncurses -#SUBDIRS=tests diff --git a/fwp/mngr/fwpmngr.c b/fwp/mngr/fwpmngr.c new file mode 100644 index 0000000..066ff02 --- /dev/null +++ b/fwp/mngr/fwpmngr.c @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include +#include +#include +#include "res_dummy.h" +#include + +struct dummy_data { + int some_data; +}; + + +bool admission_test(struct fres_sa_scenario *scenario, void *priv) +{ + bool schedulable; + struct dummy_data *data = priv; + struct fres_sa_contract *c; + + printf("Admission test:\n"); + data->some_data++; + + fres_sa_scenario_for_each_contract(scenario, c) { + fres_block_basic *basic; + char id[40]; + fres_contract_id_to_string(id, &c->contract->id, sizeof(id)); + basic = fres_contract_get_basic(c->contract); + + printf(" processing: id=%s, period=%ld ms, budget=%ld ms\n", + id, + fosa_rel_time_to_msec(basic->period), + fosa_rel_time_to_msec(basic->budget)); + + } + schedulable = scenario->num_contracts <= 3; + printf("=> %s\n", schedulable?"schedulable":"not schedulable"); + + return schedulable; +} + +struct dummy_data dummy_data; + +static const struct fres_res_manager frm = { + .res_type = FRSH_RT_NETWORK, + .res_id = FRSH_NETPF_FWP, + .admission_test = admission_test, + .priv = &dummy_data +}; + +int main(int argc, char *argv[]) +{ + forb_orb orb; + int ret; + + orb = forb_init(&argc, &argv, "frm_fwp"); + if (!orb) error(1, errno, "forb_init"); + + ret = frm_register_and_run(orb, &frm); + + if (ret != 0) { + error(1, errno, "frm_generic_run"); + } + + return 0; +} diff --git a/fwp/mngr/fwpsched.c b/fwp/mngr/fwpsched.c new file mode 100644 index 0000000..a2a3a6b --- /dev/null +++ b/fwp/mngr/fwpsched.c @@ -0,0 +1,64 @@ +#include +#include +#include "res_dummy.h" +#include + + +UL_LOG_CUST(ulogd_frs_dummy); +ul_log_domain_t ulogd_frs_dummy = {UL_LOGL_MSG, "frs_dummy"}; + +int create_vres(fres_vres_t *vres, void *priv) +{ + int *my_data = priv; + fres_block_basic *basic; + char id[40]; + + (*my_data)++; + + fres_contract_id_to_string(id, &vres->contract->id, sizeof(id)); + basic = fres_contract_get_basic(vres->contract); + printf("Creating VRes #%d (id=%s, period=%ld ms, budget=%ld ms)\n", + *my_data, id, + fosa_rel_time_to_msec(basic->period), + fosa_rel_time_to_msec(basic->budget)); + return 0; +} +int cancel_vres(fres_vres_t *vres, void *priv) +{ + int *my_data = priv; + fres_block_basic *basic; + char id[40]; + + fres_contract_id_to_string(id, &vres->contract->id, sizeof(id)); + basic = fres_contract_get_basic(vres->contract); + printf("Creating VRes #%d (id=%s, period=%ld ms, budget=%ld ms)\n", + *my_data, id, + fosa_rel_time_to_msec(basic->period), + fosa_rel_time_to_msec(basic->budget)); + + (*my_data)--; + return 0; +} + +int change_vres(fres_vres_t *vres, void *priv) +{ + return 0; +} + + + +static int my_data; + +static struct fres_scheduler dummy_scheduler = { + .res_type = DUMMY_RESOURCE_TYPE, + .res_id = DUMMY_RESOURCE_ID, + .create_vres = create_vres, + .cancel_vres = cancel_vres, + .change_vres = change_vres, + .priv = &my_data +}; + +int frs_dummy_init(forb_orb orb, fres_contract_broker fcb, forb_executor_t *executor) +{ + return frs_register(orb, fcb, executor, &dummy_scheduler); +} -- 2.39.2