TPM simple retransmission
This commit is contained in:
parent
2a901e0c4d
commit
3e6f9b6484
|
|
@ -377,7 +377,10 @@ void *sa_service(void *fc) {
|
||||||
// Tolling
|
// Tolling
|
||||||
if (facilities->tolling.enabled &&
|
if (facilities->tolling.enabled &&
|
||||||
bulletin->to_consume[a]->its_aid == 1 &&
|
bulletin->to_consume[a]->its_aid == 1 &&
|
||||||
now > bulletin->to_consume[a]->t_trigger + TOLLING_PAYMENT_MIN_PERIOD_MS &&
|
(
|
||||||
|
now > bulletin->to_consume[a]->t_trigger + TOLLING_PAYMENT_MIN_PERIOD_MS ||
|
||||||
|
(facilities->tolling.protocol.p == TOLLING_PROTOCOL_SIMPLE && tpm_should_retransmit(facilities))
|
||||||
|
) &&
|
||||||
facilities->station_type != 15) {
|
facilities->station_type != 15) {
|
||||||
|
|
||||||
tolling_info_t* info = (tolling_info_t*) bulletin->to_consume[a]->info.internal_p;
|
tolling_info_t* info = (tolling_info_t*) bulletin->to_consume[a]->info.internal_p;
|
||||||
|
|
|
||||||
30
src/tpm.c
30
src/tpm.c
|
|
@ -38,6 +38,26 @@ int tpm_is_inside_zone(void* fc, tolling_info_t* ti) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int tpm_should_retransmit(void* fc) {
|
||||||
|
|
||||||
|
facilities_t* facilities = (facilities_t*) fc;
|
||||||
|
tolling_t* tolling = &facilities->tolling;
|
||||||
|
|
||||||
|
uint64_t now = itss_time_get(&facilities->epv);
|
||||||
|
|
||||||
|
if (tolling->station.obu.rt_on) {
|
||||||
|
if (now > tolling->station.obu.rt_init + TOLLING_RT_TIMEOUT_MS) {
|
||||||
|
tolling->station.obu.rt_on = false;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (now > tolling->station.obu.rt_t_trigger + TOLLING_RT_PERIOD_MS) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int tpm_pay(void* fc, tolling_info_t* info, void* security_socket, uint8_t* neighbour, uint8_t* dst_addr) {
|
int tpm_pay(void* fc, tolling_info_t* info, void* security_socket, uint8_t* neighbour, uint8_t* dst_addr) {
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
|
||||||
|
|
@ -57,6 +77,13 @@ int tpm_pay(void* fc, tolling_info_t* info, void* security_socket, uint8_t* neig
|
||||||
tolling->tz = itss_ts_get(TIME_MICROSECONDS);
|
tolling->tz = itss_ts_get(TIME_MICROSECONDS);
|
||||||
pthread_mutex_unlock(&facilities->epv.time.lock);
|
pthread_mutex_unlock(&facilities->epv.time.lock);
|
||||||
|
|
||||||
|
// Retransmission
|
||||||
|
if (!tolling->station.obu.rt_on) {
|
||||||
|
tolling->station.obu.rt_init = itss_time_get(&facilities->epv);
|
||||||
|
tolling->station.obu.rt_on = true;
|
||||||
|
}
|
||||||
|
tolling->station.obu.rt_t_trigger = itss_time_get(&facilities->epv);
|
||||||
|
|
||||||
TPM_t* tpm = NULL;
|
TPM_t* tpm = NULL;
|
||||||
TransportRequest_t* tr = NULL;
|
TransportRequest_t* tr = NULL;
|
||||||
SecurityRequest_t* sreq = NULL;
|
SecurityRequest_t* sreq = NULL;
|
||||||
|
|
@ -1187,6 +1214,7 @@ int tpm_recv(void* fc, TPM_t* tpm_rx, void* security_socket, uint8_t* neighbour,
|
||||||
pthread_mutex_lock(&facilities->epv.time.lock);
|
pthread_mutex_lock(&facilities->epv.time.lock);
|
||||||
syslog_info("[facilities] [tolling] entry.reply took %ld us", itss_ts_get(TIME_MICROSECONDS) - tolling->tz);
|
syslog_info("[facilities] [tolling] entry.reply took %ld us", itss_ts_get(TIME_MICROSECONDS) - tolling->tz);
|
||||||
pthread_mutex_unlock(&facilities->epv.time.lock);
|
pthread_mutex_unlock(&facilities->epv.time.lock);
|
||||||
|
tolling->station.obu.rt_on = false;
|
||||||
veh_handle_recv(tolling, tpm_rx, security_socket, facilities->tx_queue, &facilities->epv, neighbour, src_addr);
|
veh_handle_recv(tolling, tpm_rx, security_socket, facilities->tx_queue, &facilities->epv, neighbour, src_addr);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
@ -1214,6 +1242,7 @@ int tpm_recv(void* fc, TPM_t* tpm_rx, void* security_socket, uint8_t* neighbour,
|
||||||
pthread_mutex_lock(&facilities->epv.time.lock);
|
pthread_mutex_lock(&facilities->epv.time.lock);
|
||||||
syslog_info("[facilities] [tolling] exit.reply took %ld us", itss_ts_get(TIME_MICROSECONDS) - tolling->tz);
|
syslog_info("[facilities] [tolling] exit.reply took %ld us", itss_ts_get(TIME_MICROSECONDS) - tolling->tz);
|
||||||
pthread_mutex_unlock(&facilities->epv.time.lock);
|
pthread_mutex_unlock(&facilities->epv.time.lock);
|
||||||
|
tolling->station.obu.rt_on = false;
|
||||||
veh_handle_recv(tolling, tpm_rx, security_socket, facilities->tx_queue, &facilities->epv, neighbour, src_addr);
|
veh_handle_recv(tolling, tpm_rx, security_socket, facilities->tx_queue, &facilities->epv, neighbour, src_addr);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
@ -1238,6 +1267,7 @@ int tpm_recv(void* fc, TPM_t* tpm_rx, void* security_socket, uint8_t* neighbour,
|
||||||
pthread_mutex_lock(&facilities->epv.time.lock);
|
pthread_mutex_lock(&facilities->epv.time.lock);
|
||||||
syslog_info("[facilities] [tolling] single.reply took %ld us", itss_ts_get(TIME_MICROSECONDS) - tolling->tz);
|
syslog_info("[facilities] [tolling] single.reply took %ld us", itss_ts_get(TIME_MICROSECONDS) - tolling->tz);
|
||||||
pthread_mutex_unlock(&facilities->epv.time.lock);
|
pthread_mutex_unlock(&facilities->epv.time.lock);
|
||||||
|
tolling->station.obu.rt_on = false;
|
||||||
veh_handle_recv(tolling, tpm_rx, security_socket, facilities->tx_queue, &facilities->epv, neighbour, src_addr);
|
veh_handle_recv(tolling, tpm_rx, security_socket, facilities->tx_queue, &facilities->epv, neighbour, src_addr);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,8 @@
|
||||||
#define TOLLING_PAYMENT_MIN_PERIOD_MS 40000
|
#define TOLLING_PAYMENT_MIN_PERIOD_MS 40000
|
||||||
#define TOLLING_MAX_CONNS 64
|
#define TOLLING_MAX_CONNS 64
|
||||||
#define TOLLING_CONN_TIMEOUT_MS 10000
|
#define TOLLING_CONN_TIMEOUT_MS 10000
|
||||||
|
#define TOLLING_RT_PERIOD_MS 400
|
||||||
|
#define TOLLING_RT_TIMEOUT_MS 5000
|
||||||
|
|
||||||
typedef enum TOLLING_PROTOCOL {
|
typedef enum TOLLING_PROTOCOL {
|
||||||
TOLLING_PROTOCOL_SIMPLE,
|
TOLLING_PROTOCOL_SIMPLE,
|
||||||
|
|
@ -71,6 +73,11 @@ typedef struct tolling {
|
||||||
uint64_t client_id;
|
uint64_t client_id;
|
||||||
uint64_t tls_conn_id;
|
uint64_t tls_conn_id;
|
||||||
TPM_t* entry_proof;
|
TPM_t* entry_proof;
|
||||||
|
|
||||||
|
// Retransmission
|
||||||
|
uint64_t rt_init;
|
||||||
|
uint64_t rt_t_trigger;
|
||||||
|
bool rt_on;
|
||||||
} obu;
|
} obu;
|
||||||
} station;
|
} station;
|
||||||
|
|
||||||
|
|
@ -95,6 +102,7 @@ int tolling_init(tolling_t* tolling, void* zmq_ctx, char* security_address, uint
|
||||||
|
|
||||||
int tpm_pay(void* fc, tolling_info_t* info, void* security_socket, uint8_t* neighbour, uint8_t* dst_addr);
|
int tpm_pay(void* fc, tolling_info_t* info, void* security_socket, uint8_t* neighbour, uint8_t* dst_addr);
|
||||||
int tpm_recv(void* fc, TPM_t* tpm_rx, void* security_socket, uint8_t* neighbour, uint8_t* src_addr);
|
int tpm_recv(void* fc, TPM_t* tpm_rx, void* security_socket, uint8_t* neighbour, uint8_t* src_addr);
|
||||||
|
int tpm_should_retransmit(void* fc);
|
||||||
int tpm_is_inside_zone(void* fc, tolling_info_t* ti);
|
int tpm_is_inside_zone(void* fc, tolling_info_t* ti);
|
||||||
|
|
||||||
tolling_info_t* tolling_info_new(itss_epv_t* epv, TollingPaymentInfo_t* tpi);
|
tolling_info_t* tolling_info_new(itss_epv_t* epv, TollingPaymentInfo_t* tpi);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue