]> rtime.felk.cvut.cz Git - frescor/fwp.git/blobdiff - fwp/mngr/fwp_mngr.c
manager: replaced fres_sa_scenario_for_each_contract to skip contracts to be canceled
[frescor/fwp.git] / fwp / mngr / fwp_mngr.c
index 5d15a95389eb1835d76215466472882fd92e7917..25f2c43ab3bd2f1ba66a2f8b1c3f1fa6c1c351c4 100644 (file)
-#include <fwp.h>
+/**************************************************************************/
+/* ---------------------------------------------------------------------- */
+/* Copyright (C) 2006 - 2008 FRESCOR consortium partners:                */
+/*                                                                       */
+/*   Universidad de Cantabria,              SPAIN                        */
+/*   University of York,                    UK                           */
+/*   Scuola Superiore Sant'Anna,            ITALY                        */
+/*   Kaiserslautern University,             GERMANY                      */
+/*   Univ. Politécnica  Valencia,           SPAIN                       */
+/*   Czech Technical University in Prague,  CZECH REPUBLIC               */
+/*   ENEA                                   SWEDEN                       */
+/*   Thales Communication S.A.              FRANCE                       */
+/*   Visual Tools S.A.                      SPAIN                        */
+/*   Rapita Systems Ltd                     UK                           */
+/*   Evidence                               ITALY                        */
+/*                                                                       */
+/*   See http://www.frescor.org for a link to partners' websites         */
+/*                                                                       */
+/*          FRESCOR project (FP6/2005/IST/5-034026) is funded            */
+/*       in part by the European Union Sixth Framework Programme         */
+/*       The European Union is not liable of any use that may be         */
+/*       made of this code.                                              */
+/*                                                                       */
+/*                                                                       */
+/*  This file is part of FWP (Frescor WLAN Protocol)                     */
+/*                                                                       */
+/* FWP is free software; you can redistribute it and/or modify it        */
+/* under terms of the GNU General Public License as published by the     */
+/* Free Software Foundation; either version 2, or (at your option) any   */
+/* later version.  FWP is distributed in the hope that it will be        */
+/* useful, but WITHOUT ANY WARRANTY; without even the implied warranty   */
+/* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   */
+/* General Public License for more details. You should have received a   */
+/* copy of the GNU General Public License along with FWP; see file       */
+/* COPYING. If not, write to the Free Software Foundation, 675 Mass Ave,  */
+/* Cambridge, MA 02139, USA.                                             */
+/*                                                                       */
+/* As a special exception, including FWP header files in a file,         */
+/* instantiating FWP generics or templates, or linking other files       */
+/* with FWP objects to produce an executable application, does not       */
+/* by itself cause the resulting executable application to be covered    */
+/* by the GNU General Public License. This exception does not            */
+/* however invalidate any other reasons why the executable file might be  */
+/* covered by the GNU Public License.                                    */
+/**************************************************************************/
+#include <frm_generic.h>
+#include <forb.h>
+#include <error.h>
+#include <errno.h>
+#include <fres_sa_scenario.h>
+#include <stdbool.h>
+#include <ul_log.h>
+#include <fwp_res.h>
+#include <stdio.h>
+#include "fwp_admctrl.h"
 
-#define FWP_MTU                2346  
-#define FWP_BUFFSIZE           FWP_MTU 
-
-/* buffer and socket for incomming message */
-static unsigned char   buffer[FWP_MTU];
-
-/**
- * fwp_mngt_input 
- *
- * Function waits for remote or local message 
- * 
- * @msgb  received message 
- * \return 
- * On success, it returns 0 and the pointer to received message in msgb parameter.
- * On error, it returns negative error code
- *
- */
-int fwp_mngr_input(struct fwp_msgb **pmsgb)
+static
+int dummy_admission_test(struct fres_sa_scenario *scenario, void *priv, 
+                               bool *schedulable)
 {
-       struct fwp_msgb *msgb;
-       ssize_t size;
+       struct fres_sa_contract *c;
 
-       FWP_DEBUG("Waiting for messages\n");
-       size = fwp_recv(fwp_mngt_repointd, buffer, BUFFSIZE);
-        
-       FWP_DEBUG("Creating fwp msgb len=%d\n", size);  
-       /* For future: fwp_socket could be allocated behind data in msgb*/
-       if (!(msgb = fwp_msgb_alloc(size))) {
-               perror("No memory available.\n");
-               return -ENOMEM;
-       }
-       /*memcpy(fwp_msgb_put(msgb, len), buffer, len); */
-       msgb->data = buffer;
-       fwp_msgb_put(msgb, len);
-       
-       *pmsgb = msgb;
-       return (0);
-}
+       printf("Dummy admission test:\n");
 
-void fwp_mngr_main_loop()
-{
-       struct fwp_msgb *msgb;
+       fres_sa_scenario_for_each_no_cancel_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));
 
-       /* start admission control thread */
-       while (1 /*exit_flag*/){
-               fwp_mngr_input(&msgb);
-               if (msgb)
-                       fwp_mngr_msg_handler(msgb);
-               FWP_DEBUG("Mngr prepared to wait for next msg.\n");
        }
+       *schedulable = scenario->num_contracts <= 3;
+       printf("=> %s\n", schedulable?"schedulable":"not schedulable");
+               
+       return 0;
 }
 
-int main()
+static const struct fres_res_manager frm = {
+       .res_type = FRSH_RT_NETWORK,
+       .res_id = FRSH_NETPF_FWP,
+       //.admission_test = dummy_admission_test,
+       .admission_test = fwp_admctrl_utilization,
+       .priv = NULL
+};
+
+int main(int argc, char *argv[])
 {
-       if (fwp_init() < 0) {
-               fprintf(stderr,"FWP initialization failed.\n");
-               exit(1);
-       }
+       forb_orb orb;
+       int ret;
 
-       /* After initialization, destroy fwp_mngt_repointd and create the new one
-        * with specified parameters */
+       orb = forb_init(&argc, &argv, "frm_fwp");
+       if (!orb) error(1, errno, "forb_init");
        
-       FWP_DEBUG("Management receive endpoint created\n");
-       fwp_receive_endpoint_create(FWP_MNGR_STREAM_ID, 0, &fwp_mngt_repointd);
-               
-       fwp_mngr_main_loop();
+       fres_block_register_fwp();
+       ret = frm_register_and_run(orb, &frm);
 
-       return 0;       
-} 
+       if (ret != 0) {
+               error(1, errno, "frm_generic_run");
+       }
+       
+       return 0;
+}