]> rtime.felk.cvut.cz Git - frescor/fwp.git/commitdiff
AC for VRES is based on contract deadline
authorMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 9 Jul 2008 04:21:28 +0000 (06:21 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 9 Jul 2008 04:21:28 +0000 (06:21 +0200)
fwp/lib/mngt/fwp_contract.h
fwp/lib/mngt/fwp_mngt.c
fwp/lib/mngt/fwp_msg.c
fwp/lib/mngt/fwp_msg.h
fwp/mngr/admtest_utilization.c
wme_test/wclient.c

index e3792e423a22e90991f11ad54312b37a4fb4b980..b285079bc9cfed3b967b1e9b1aa0205bede18850 100644 (file)
@@ -30,6 +30,7 @@ typedef
 struct fwp_contract {
        int budget;             /**< bytes per period */
        int period_usec;        /**< all time units are in microseconds */
+       int deadline_usec;
 } fwp_contract_t;
 
 struct fwp_contract_data;
index d496bf97cd9502a2512677b55f098f8c2a0876b8..43f9ecadc5b5023fe2fe4eadb3d40db45e06a75e 100644 (file)
@@ -14,6 +14,7 @@ fwp_participant_t     *fwp_participant_mngr;
 static fwp_contract_t fwp_service_contract = {
        .budget = 100,
        .period_usec = 30,
+       .deadline_usec = 1000*1000
 };
 
 static fwp_vres_params_t fwp_service_vres_params = {
index d87375f60ab48505700431a9da3a9bd291a163ba..f382d38b011768458cad11ff41a61b77a2a0eb19 100644 (file)
@@ -69,6 +69,7 @@ void fwp_msg_contract_in(unsigned char *data, fwp_contract_t *cont)
 
        msg_contract->budget = htons(cont->budget);
        msg_contract->period_usec = htonl(cont->period_usec);
+       msg_contract->deadline_usec = htonl(cont->deadline_usec);
 }
 
 void fwp_msg_contract_out(unsigned char *data, fwp_contract_t *cont)
@@ -80,6 +81,7 @@ void fwp_msg_contract_out(unsigned char *data, fwp_contract_t *cont)
 
        cont->budget = ntohs(msg_contract->budget);
        cont->period_usec = ntohl(msg_contract->period_usec);
+       cont->deadline_usec = ntohl(msg_contract->deadline_usec);
 }
 
 void fwp_msg_vres_params_in(unsigned char *data, fwp_vres_params_t *vparams)
index 4ef5975ca5beb94183e33451cdae8bd6468ec86f..2454c419922ef9bda4315f6e9356607a18ade23c 100644 (file)
@@ -30,6 +30,7 @@ struct fwp_msg_contracthdr{
 struct fwp_msg_contract{       
        uint16_t budget;        /**< bits per second */
        uint32_t period_usec;   /**< all time units are in microseconds */
+       uint32_t deadline_usec;
 }__attribute__((packed));
 
 struct fwp_msg_vres_params{
index 69393bb43eab340e294fa15d0844eb429584dfd6..0be948f8ef12c1a1e4aabed82f815269ab5b2a6a 100644 (file)
@@ -155,9 +155,21 @@ void fwp_admctrl_utilization(fwp_contract_data_t *contdata_new)
        if (utilization >= 10000 * 96/100) {
                contdata_new->status = FWP_CONT_NOTNEGOTIATED;
        } else {
-               contdata_new->status = FWP_CONT_RESERVED;
-               contdata_new->vres_params.ac_id = FWP_AC_VI;
-               contdata_new->vres_params.budget = contdata_new->contract.budget;
-               contdata_new->vres_params.period_usec = contdata_new->contract.period_usec;     
+               struct fwp_contract *c = &contdata_new->contract;
+               int d = c->deadline_usec;
+               if (d <= 0) d = 100*1000*1000;
+               if (d < 50000) {
+                       contdata_new->status = FWP_CONT_NOTNEGOTIATED;
+               } else {
+                       contdata_new->status = FWP_CONT_RESERVED;
+               }
+
+               contdata_new->vres_params.ac_id =
+                       d <  100*1000 ? FWP_AC_VO :
+                       d <  500*1000 ? FWP_AC_VI :
+                       d < 1000*1000 ? FWP_AC_BE :
+                                       FWP_AC_BK;
+               contdata_new->vres_params.budget = c->budget;
+               contdata_new->vres_params.period_usec = c->period_usec; 
        }
 }
index 0011be58dc944c423ab7b281c8a346e95383b6dd..e1a22a5cd6965889ca6ff44ee43cc39debb13df4 100644 (file)
@@ -597,9 +597,10 @@ static int negotiate_contract_for_stream_fwp(struct stream *stream)
        int ret;
 
        /* Contract for client->server stream */
-
+       memset(&contract, 0, sizeof(contract));
        contract.budget = stream->packet_size;
        contract.period_usec = stream->period_usec;
+       contract.deadline_usec = 3*stream->period_usec;
        
        contract_d = fwp_contract_create(&contract);
        ret = fwp_contract_negotiate(contract_d, &stream->vres);
@@ -609,8 +610,10 @@ static int negotiate_contract_for_stream_fwp(struct stream *stream)
        }
 
        /* Contract for server->client stream */
+       memset(&contract, 0, sizeof(contract));
        contract.budget = stream->packet_size;
        contract.period_usec = stream->period_usec;
+       contract.deadline_usec = 3*stream->period_usec;
 
        contract_d = fwp_contract_create(&contract);
        ret = fwp_contract_negotiate(contract_d, &vres2);