utilization += (long long)(duration_usec * 10000) / contract->period_usec;
}
- if (utilization >= 10000 * 96/100) {
- contdata_new->status = FWP_CONT_NOTNEGOTIATED;
- } else {
- struct fwp_contract *c = &contdata_new->contract;
- int d = c->deadline_usec;
- if (d <= 0) d = 100*1000*1000;
- if (d < 50000) {
+ if (contdata_new) {
+ if (utilization >= 10000 * 96/100) {
contdata_new->status = FWP_CONT_NOTNEGOTIATED;
} else {
- contdata_new->status = FWP_CONT_RESERVED;
- }
+ 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;
+ 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;
+ }
}
/* Update utilization for GUI */
- if (contdata_new->status == FWP_CONT_RESERVED) {
+ if (contdata_new == NULL || contdata_new->status == FWP_CONT_RESERVED) {
fwp_reserved_utilization = utilization;
}
}
/* delete contract from contract table */
fwp_contract_table_delete(&participant->contract_table, contdata);
fwp_contract_destroy(contdata);
+
+ /* Update admission data (only necessary for demo and GUI) */
+ fwp_admctrl_test(NULL);
FWP_DEBUG("Contract id=%d to canceled\n", id);