Radar IP and Interface are now in the toml file

This commit is contained in:
Marco 2021-05-26 17:09:30 +01:00
parent 64f9b91035
commit f08c25812f
3 changed files with 40 additions and 21 deletions

View File

@ -252,6 +252,8 @@ int facilities_config(void* facilities_s) {
facilities->dissemination->tmc_connect = config->facilities.cpm.tmc_connected; facilities->dissemination->tmc_connect = config->facilities.cpm.tmc_connected;
facilities->dissemination->latitude = config->management.gps.latitude; facilities->dissemination->latitude = config->management.gps.latitude;
facilities->dissemination->longitude = config->management.gps.longitude; facilities->dissemination->longitude = config->management.gps.longitude;
facilities->dissemination->int_radar = config->facilities.cpm.radar_interface;
facilities->dissemination->ip_radar = config->facilities.cpm.radar_ip;

View File

@ -66,11 +66,11 @@ bool waitingIncomingConnection(void){
bool interface_connection(char* radar_ip,char* radar_port, facilities_t* facilities){ bool interface_connection(char* radar_port, facilities_t* facilities){
if(facilities->dissemination->tmc_connect == false){ if(facilities->dissemination->tmc_connect == false){
// 1 - Create socket // Create socket
s_socket.i32_socket = socket(AF_INET, SOCK_STREAM, 0); s_socket.i32_socket = socket(AF_INET, SOCK_STREAM, 0);
if(s_socket.i32_socket < 0){ if(s_socket.i32_socket < 0){
@ -78,10 +78,10 @@ bool interface_connection(char* radar_ip,char* radar_port, facilities_t* facilit
return false; return false;
} }
// 2 - Bind it to server address and port // Bind it to server address and port
bzero(&s_socket.s_server, sizeof(s_socket.s_server)); bzero(&s_socket.s_server, sizeof(s_socket.s_server));
s_socket.s_server.sin_family = AF_INET; s_socket.s_server.sin_family = AF_INET;
s_socket.s_server.sin_addr.s_addr = inet_addr(radar_ip); s_socket.s_server.sin_addr.s_addr = inet_addr(facilities->dissemination->ip_radar);
s_socket.s_server.sin_port = htons(atoi(radar_port)); s_socket.s_server.sin_port = htons(atoi(radar_port));
if(bind(s_socket.i32_socket, (struct sockaddr*)&s_socket.s_server,sizeof(s_socket.s_server)) < 0){ if(bind(s_socket.i32_socket, (struct sockaddr*)&s_socket.s_server,sizeof(s_socket.s_server)) < 0){
@ -107,7 +107,7 @@ bool interface_connection(char* radar_ip,char* radar_port, facilities_t* facilit
bzero(&raw_socket.sll, sizeof(raw_socket.sll)); bzero(&raw_socket.sll, sizeof(raw_socket.sll));
bzero(&raw_socket.ifr, sizeof(raw_socket.ifr)); bzero(&raw_socket.ifr, sizeof(raw_socket.ifr));
strncpy((char *)raw_socket.ifr.ifr_name, INTERFACE_RADAR, IFNAMSIZ); strncpy((char *)raw_socket.ifr.ifr_name, facilities->dissemination->int_radar, IFNAMSIZ);
if((ioctl(raw_socket.raw_fd, SIOCGIFINDEX, &raw_socket.ifr)) == -1){ if((ioctl(raw_socket.raw_fd, SIOCGIFINDEX, &raw_socket.ifr)) == -1){
syslog_err("Error getting interface index"); syslog_err("Error getting interface index");
return false; return false;
@ -539,20 +539,18 @@ void dissemination_reset_timer(dissemination_t* dissemination, it2s_tender_epv_t
void *cp_service(void *fc){ void *cp_service(void *fc){
/* Variables */ /* Variables */
int i32_recv_bytes; int i32_recv_bytes;
u_int8_t au8_readBuffer[READ_BUFFER_SIZE]; u_int8_t au8_readBuffer[READ_BUFFER_SIZE];
bool is_radar_connected; bool is_radar_connected;
u_int8_t au8_readTcp[READ_BUFFER_SIZE]; u_int8_t au8_readTcp[READ_BUFFER_SIZE];
facilities_t *facilities = (facilities_t *) fc; facilities_t *facilities = (facilities_t *) fc;
uint8_t bdr_oer[2048]; uint8_t bdr_oer[2048];
uint8_t fdi_oer[2048]; uint8_t fdi_oer[2048];
bdr_oer[0] = 4; //Facilities bdr_oer[0] = 4; //Facilities
fdi_oer[0] = 4; fdi_oer[0] = 4;
BTPDataRequest_t *bdr = calloc(1, sizeof(BTPDataRequest_t)); BTPDataRequest_t *bdr = calloc(1, sizeof(BTPDataRequest_t));
FacilitiesDataIndication_t *fdi = calloc(1, sizeof(FacilitiesDataIndication_t)); FacilitiesDataIndication_t *fdi = calloc(1, sizeof(FacilitiesDataIndication_t));
@ -568,28 +566,27 @@ void *cp_service(void *fc){
bdr->btpType = BTPType_btpB; //BTP Type B is for non-interactive packet transport | BTP Type A is for interactive packet transport bdr->btpType = BTPType_btpB; //BTP Type B is for non-interactive packet transport | BTP Type A is for interactive packet transport
//The former doesn't have a source port and the latter have //The former doesn't have a source port and the latter have
bdr->destinationPort = Port_cpm; //CPM entity port for communication between Facilities and Transport bdr->destinationPort = Port_cpm; //CPM entity port for communication between Facilities and Transport
bdr->gnPacketTransportType = PacketTransportType_shb; //shb = Single Hop Broadcast packet bdr->gnPacketTransportType = PacketTransportType_shb; //shb = Single Hop Broadcast packet
bdr->gnTrafficClass = 2; //Identifier assigned to a GeoNetworking packet that expresses its requirements on data transport bdr->gnTrafficClass = 2; //Identifier assigned to a GeoNetworking packet that expresses its requirements on data transport
bdr->data.buf = malloc(1500); //CPM Data to be sent to the Transport layer bdr->data.buf = malloc(1500); //CPM Data to be sent to the Transport layer
if(facilities->use_security) { if(facilities->use_security) {
bdr->gnSecurityProfile = malloc(sizeof(long)); bdr->gnSecurityProfile = malloc(sizeof(long));
*bdr->gnSecurityProfile = 1; *bdr->gnSecurityProfile = 1;
} }
is_radar_connected = interface_connection(RADAR_IP,RADAR_PORT,facilities); // Create Radar listening socket is_radar_connected = interface_connection(RADAR_PORT,facilities); // Create Radar listening socket
/*--- Fill mandatory Facilities Data Indication parameters ---*/ /*--- Fill mandatory Facilities Data Indication parameters ---*/
fdi->itsMessageType = ItsMessageType_cpm; fdi->itsMessageType = ItsMessageType_cpm;
fdi->data.buf = malloc(1500); fdi->data.buf = malloc(1500);
struct timespec* systemtime; struct timespec* systemtime;
systemtime = (struct timespec*)malloc(sizeof(struct timespec)); systemtime = (struct timespec*)malloc(sizeof(struct timespec));
if (systemtime == NULL) { if (systemtime == NULL) {
@ -614,12 +611,33 @@ void *cp_service(void *fc){
if (dissemination_check(facilities->dissemination, &facilities->epv) && facilities->dissemination->active){ if (dissemination_check(facilities->dissemination, &facilities->epv) && facilities->dissemination->active){
if(is_radar_connected){ if(is_radar_connected){
if(i32_recv_bytes <= 0){ if(i32_recv_bytes <= 0){
syslog_debug("No data received from radar ..."); syslog_debug("No data received from radar ...");
is_radar_connected = false; is_radar_connected = false;
continue; continue;
} }
int j = 0;
int temp_data = ((int)(au8_readBuffer[12])) >> 4;
for(int i = temp_data;i < READ_BUFFER_SIZE; i++){
au8_readBuffer[j] = au8_readBuffer[i];
j++;
}
temp_data = ((int)(au8_readBuffer[0])) & 0x0f;
j = 0;
for(int i = temp_data;i < READ_BUFFER_SIZE; i++){
au8_readBuffer[j] = au8_readBuffer[i];
j++;
}
if(i32_recv_bytes < 0){
syslog_debug("No data received from radar ...");
break;
}
/* Information parsing */ /* Information parsing */
parse_input(au8_readBuffer,i32_recv_bytes); parse_input(au8_readBuffer,i32_recv_bytes);

View File

@ -17,9 +17,6 @@
#define ROAD_ANGLE 120 #define ROAD_ANGLE 120
#define MESSAGE_ID 14 #define MESSAGE_ID 14
#define PROTOCOL_VERSION 1 #define PROTOCOL_VERSION 1
#define INTERFACE_RADAR "enp3s0"
#define RADAR_IP "192.168.11.1" // ITS-S interface connected to the radar
#define RADAR_PORT "55555" // Destination port from the radar #define RADAR_PORT "55555" // Destination port from the radar
@ -120,6 +117,8 @@ typedef struct
bool active; bool active;
bool tmc_connect; bool tmc_connect;
char* int_radar;
char* ip_radar;
pthread_mutex_t lock; pthread_mutex_t lock;