differed VCM consensus

This commit is contained in:
emanuel 2023-02-07 15:59:49 +00:00
parent fe77c73492
commit 0caf5ce6be
3 changed files with 27 additions and 5 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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;