]> rtime.felk.cvut.cz Git - frescor/fwp.git/blobdiff - fwp/lib/frsh_fwp/fwp_fra.c
Fix allocator error reporting
[frescor/fwp.git] / fwp / lib / frsh_fwp / fwp_fra.c
index 5f41231ad8f9aedb1b407349a3b7c2ba00ee8e49..0f5f1ac726b8ebc5c87ec8993649315bb02f6ddf 100644 (file)
@@ -52,6 +52,7 @@
 #include "fwp_res.h"
 #include "fwp_idl.h"
 #include <stdio.h>
+#include <arpa/inet.h>
 
 
 UL_LOG_CUST(ulogd_fra_fwp);
@@ -63,41 +64,51 @@ static int create_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;
+       fres_block_fwp *fwp;
+       fwp_vres_params_t vparams = {0};
+       struct fwp_vres  *fwp_vres = NULL;
        int rv;
        size_t bytes;
+       char src[21] = "N/A";
        
        /* 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);
 
        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;
-       /* Create vres */
-       if ((rv = fwp_vres_create(&vparams, &fwp_vresd))) {
-               return  rv;
+       if (fwp) {
+               vparams.src.s_addr = fwp->src;
+               snprintf(src, sizeof(src), "%s", inet_ntoa(vparams.src));
        }
-       vres->priv = fwp_vresd;
+       /* Create vres */
+       if ((rv = fwp_vres_create(&vparams, &fwp_vres)))
+               return (rv == -1) ? errno : rv;
+
+       vres->priv = fwp_vres;
 
        fres_contract_id_to_string(id, &vres->id, sizeof(id));
-       ul_logmsg("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 src=%s)\n",
                id, fosa_rel_time_to_msec(basic->period), 
-               vparams.budget, vparams.ac_id);
+                 vparams.budget, vparams.ac_id, src);
        
        return 0;
 }
 
 static int cancel_vres(fres_vres_t *vres, void *priv)
 {
-       fwp_vres_d_t    fwp_vresd;
+       struct fwp_vres *       fwp_vres;
        fres_block_basic *basic;
        char id[40];
 
-       fwp_vresd = (fwp_vres_d_t) vres->priv;
-       fwp_vres_destroy(fwp_vresd);
+       fwp_vres = (struct fwp_vres *) vres->priv;
+       fwp_vres_destroy(fwp_vres);
 
        basic = fres_contract_get_basic(vres->allocated);
        fres_contract_id_to_string(id, &vres->id, sizeof(id));
@@ -113,7 +124,7 @@ int change_vres(fres_vres_t *vres, void *priv)
        fres_block_basic *basic;
        fres_block_fwp_sched *fwp_sched;
        fwp_vres_params_t vparams;
-       fwp_vres_d_t      fwp_vresd;
+       struct fwp_vres *fwp_vres;
        int rv;
        size_t bytes;
        
@@ -125,10 +136,10 @@ int change_vres(fres_vres_t *vres, void *priv)
        vparams.budget = bytes;
        vparams.period = basic->period;
        vparams.ac_id = fwp_sched->ac_id;
-       fwp_vresd = vres->priv;
+       fwp_vres = vres->priv;
 
        /* Changing vres */
-       if ((rv = fwp_vres_set_params(fwp_vresd, &vparams))) {
+       if ((rv = fwp_vres_set_params(fwp_vres, &vparams))) {
                return  rv;
        }