]> rtime.felk.cvut.cz Git - frescor/fwp.git/blobdiff - fwp/lib/frsh_fwp/fwp_fra.c
Introduce src parameter in FWP contracts
[frescor/fwp.git] / fwp / lib / frsh_fwp / fwp_fra.c
index e1ec819c5ba9c3b04b4ea22c90f5d9160f71454d..85038db65b4576d4500b08ac3dc79c700156a778 100644 (file)
@@ -1,4 +1,50 @@
+/**************************************************************************/
+/* ---------------------------------------------------------------------- */
+/* 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 <ul_log.h>
+#include <ul_logreg.h>
 #include <fra_generic.h>
 #include <fwp.h>
 //#include <fwp_fna.h>
 #include "fwp_res.h"
 #include "fwp_idl.h"
 #include <stdio.h>
+#include <arpa/inet.h>
 
 
 UL_LOG_CUST(ulogd_fra_fwp);
 ul_log_domain_t ulogd_fra_fwp = {UL_LOGL_MSG, "fra_fwp"};
+UL_LOGREG_SINGLE_DOMAIN_INIT_FUNCTION(fra_fwp_logreg_domains, ulogd_fra_fwp);
 
 static int create_vres(fres_vres_t *vres, void *priv)
 {
        char id[40];
        fres_block_basic *basic;
        fres_block_fwp_sched *fwp_sched;
+       fres_block_fwp *fwp;
        fwp_vres_params_t vparams;
-       fwp_vres_d_t      fwp_vresd;
+       fwp_vres_d_t      fwp_vresd = {0};
        int rv;
+       size_t bytes;
+       char src[21] = "";
        
        /* Prepare vres parameters */
        basic = fres_contract_get_basic(vres->new);
        fwp_sched = fres_contract_get_block(vres->new, FRES_BLOCK_FWP_SCHED);
+       if (!fwp_sched)
+               return FRES_ERR_NEEDS_MORE_DATA_IN_CONTRACT;
+
+       fwp = fres_contract_get_block(vres->new, FRES_BLOCK_FWP);
 
-       //fwp_fna_network_budget_to_bytes(FRSH_NETPF_FWP, &basic->budget, &vparams.budget);
-       vparams.budget = basic->budget.tv_nsec;
+       frsh_network_budget_to_bytes(FRSH_NETPF_FWP, &basic->budget, &bytes);
+       vparams.budget = bytes;
        vparams.period = basic->period;
-       vparams.ac_id = fwp_sched->ac_id;       
+       vparams.ac_id = fwp_sched->ac_id;
+       if (fwp) {
+               vparams.src.s_addr = fwp->src;
+               snprintf(src, sizeof(src), " src=%s", inet_ntoa(vparams.src));
+       }
        /* Create vres */
        if ((rv = fwp_vres_create(&vparams, &fwp_vresd))) {
                return  rv;
@@ -35,9 +94,9 @@ static int create_vres(fres_vres_t *vres, void *priv)
        vres->priv = fwp_vresd;
 
        fres_contract_id_to_string(id, &vres->id, sizeof(id));
-       printf("Creating FWP VRes (id=%s, period=%ld ms, budget=%ld bytes AC=%d)\n",
+       ul_logmsg("Creating FWP VRes (id=%s, period=%ld ms, budget=%ld bytes AC=%d%s)\n",
                id, fosa_rel_time_to_msec(basic->period), 
-               vparams.budget, vparams.ac_id);
+                 vparams.budget, vparams.ac_id, src);
        
        return 0;
 }
@@ -53,7 +112,7 @@ static int cancel_vres(fres_vres_t *vres, void *priv)
 
        basic = fres_contract_get_basic(vres->allocated);
        fres_contract_id_to_string(id, &vres->id, sizeof(id));
-       printf("Creating FWP VRes (id=%s, period=%ld ms, budget=%ld bytes)\n",
+       ul_logmsg("Canceling FWP VRes (id=%s, period=%ld ms, budget=%ld bytes)\n",
               id, fosa_rel_time_to_msec(basic->period), basic->budget.tv_sec);
 
        return 0;
@@ -61,6 +120,36 @@ static int cancel_vres(fres_vres_t *vres, void *priv)
 
 int change_vres(fres_vres_t *vres, void *priv)
 {
+       char id[40];
+       fres_block_basic *basic;
+       fres_block_fwp_sched *fwp_sched;
+       fwp_vres_params_t vparams;
+       fwp_vres_d_t      fwp_vresd;
+       int rv;
+       size_t bytes;
+       
+       /* Prepare vres parameters */
+       basic = fres_contract_get_basic(vres->new);
+       fwp_sched = fres_contract_get_block(vres->new, FRES_BLOCK_FWP_SCHED);
+
+       frsh_network_budget_to_bytes(FRSH_NETPF_FWP, &basic->budget, &bytes);
+       vparams.budget = bytes;
+       vparams.period = basic->period;
+       vparams.ac_id = fwp_sched->ac_id;
+       fwp_vresd = vres->priv;
+
+       /* Changing vres */
+       if ((rv = fwp_vres_set_params(fwp_vresd, &vparams))) {
+               return  rv;
+       }
+
+       fres_contract_id_to_string(id, &vres->id, sizeof(id));
+       printf("Changing FWP VRes (id=%s, period=%ld ms, budget=%ld bytes AC=%d)\n",
+               id, fosa_rel_time_to_msec(basic->period), 
+               vparams.budget, vparams.ac_id);
+
+       vres->perceived = vres->new;
+       
        return 0;
 }
 
@@ -73,8 +162,8 @@ static struct fres_allocator fwp_allocator = {
        .priv = NULL
 };
 
-int fra_fwp_init(forb_orb orb, fres_contract_broker fcb, forb_executor_t *executor)
+int fra_fwp_init(void)
 {
        fres_block_register_fwp();
-       return fra_register(orb, fcb, executor, &fwp_allocator);
+       return fra_register(&fwp_allocator);
 }