diff --git a/src/config.c b/src/config.c index 524738d..6f346c4 100644 --- a/src/config.c +++ b/src/config.c @@ -358,16 +358,37 @@ int facilities_config() { facilities.coordination.active = config->facilities.mcm.activate; if (!strcmp("vcm-RR", config->facilities.mcm.protocol)) { facilities.coordination.protocol = MC_PROTOCOL_VCM_RR; + facilities.coordination.chain.enabled = true; } else if (!strcmp("vcm-RR1C", config->facilities.mcm.protocol)) { facilities.coordination.protocol = MC_PROTOCOL_VCM_RR1C; + facilities.coordination.chain.enabled = true; } else if (!strcmp("vcm-RR1Cc", config->facilities.mcm.protocol)) { facilities.coordination.protocol = MC_PROTOCOL_VCM_RR1C; + facilities.coordination.chain.enabled = true; } else if (!strcmp("vcm-RRAC", config->facilities.mcm.protocol)) { facilities.coordination.protocol = MC_PROTOCOL_VCM_RRAC; + facilities.coordination.chain.enabled = true; } else if (!strcmp("vcm-RRACc", config->facilities.mcm.protocol)) { facilities.coordination.protocol = MC_PROTOCOL_VCM_RRAC; + facilities.coordination.chain.enabled = true; + } else if (!strcmp("dvcm-RR-PBFT", config->facilities.mcm.protocol)) { + facilities.coordination.protocol = MC_PROTOCOL_VCM_RR; + facilities.coordination.chain.enabled = false; + } else if (!strcmp("dvcm-RR1C-PBFT", config->facilities.mcm.protocol)) { + facilities.coordination.protocol = MC_PROTOCOL_VCM_RR1C; + facilities.coordination.chain.enabled = false; + } else if (!strcmp("dvcm-RR1Cc-PBFT", config->facilities.mcm.protocol)) { + facilities.coordination.protocol = MC_PROTOCOL_VCM_RR1C; + facilities.coordination.chain.enabled = false; + } else if (!strcmp("dvcm-RRAC-PBFT", config->facilities.mcm.protocol)) { + facilities.coordination.protocol = MC_PROTOCOL_VCM_RRAC; + facilities.coordination.chain.enabled = false; + } else if (!strcmp("dvcm-RRACc-PBFT", config->facilities.mcm.protocol)) { + facilities.coordination.protocol = MC_PROTOCOL_VCM_RRAC; + facilities.coordination.chain.enabled = false; } else { facilities.coordination.protocol = MC_PROTOCOL_VCM_RR; + facilities.coordination.chain.enabled = true; } facilities.coordination.vcm_period_min = config->facilities.mcm.period_min; facilities.coordination.vcm_period_max = config->facilities.mcm.period_max; diff --git a/src/vcm.c b/src/vcm.c index fdf7ed9..d12eff7 100644 --- a/src/vcm.c +++ b/src/vcm.c @@ -183,7 +183,7 @@ static void vcm_reject(VCM_t* vcm, mc_neighbour_s* neighbour) { vcm_rep->vcm.currentPosition.longitude = lon; asn_ulong2INTEGER(&vcm_rep->vcm.currentPosition.timestamp, now); - if (coordination->chain.id) { + if (coordination->chain.enabled && coordination->chain.id) { vcm_rep->vcm.chain = calloc(1, sizeof(ChainInformation_t)); vcm_rep->vcm.chain->id = coordination->chain.id; vcm_rep->vcm.chain->link.buf = malloc(32); @@ -347,7 +347,7 @@ static bool commit() { mvc->negotiation->choice.commit.qp.choice.requesterId = coordination->session.requester->station_id; } - if (coordination->chain.id) { + if (coordination->chain.enabled && coordination->chain.id) { vcm_com->vcm.chain = calloc(1, sizeof(ChainInformation_t)); vcm_com->vcm.chain->id = coordination->chain.id; vcm_com->vcm.chain->link.buf = malloc(32); @@ -493,7 +493,7 @@ static int vcm_check_handle_request(VCM_t* vcm, mc_neighbour_s* neighbour) { vcm_rep->vcm.currentPosition.longitude = lon; asn_ulong2INTEGER(&vcm_rep->vcm.currentPosition.timestamp, now); - if (coordination->chain.id && vcm->vcm.chain) { + if (coordination->chain.enabled && coordination->chain.id && vcm->vcm.chain) { vcm_rep->vcm.chain = calloc(1, sizeof(ChainInformation_t)); vcm_rep->vcm.chain->id = coordination->chain.id; vcm_rep->vcm.chain->link.buf = malloc(32); @@ -739,7 +739,7 @@ static int intersection_detected(VCM_t* vcm, mc_neighbour_s* neighbour) { vcm_req->vcm.currentPosition.longitude = lon; asn_ulong2INTEGER(&vcm_req->vcm.currentPosition.timestamp, now); - if (coordination->chain.id) { + if (coordination->chain.enabled && coordination->chain.id) { vcm_req->vcm.chain = calloc(1, sizeof(ChainInformation_t)); vcm_req->vcm.chain->id = coordination->chain.id; vcm_req->vcm.chain->link.buf = malloc(32); @@ -1046,7 +1046,7 @@ static int mk_vcm() { vcm->vcm.currentPosition.longitude = lon; asn_ulong2INTEGER(&vcm->vcm.currentPosition.timestamp, now); - if (coordination->chain.id) { + if (coordination->chain.enabled && coordination->chain.id) { vcm->vcm.chain = calloc(1, sizeof(ChainInformation_t)); vcm->vcm.chain->id = coordination->chain.id; vcm->vcm.chain->link.buf = malloc(32); diff --git a/src/vcm.h b/src/vcm.h index 2c766fa..be3bf21 100644 --- a/src/vcm.h +++ b/src/vcm.h @@ -73,6 +73,7 @@ typedef struct coordination { struct { + bool enabled; uint64_t id; uint8_t links[MC_AFF_STATIONS_N_MAX + 1][MC_HASH_LINK_LEN]; uint8_t n_links;