Commit 55361183 authored by Yann Garcia's avatar Yann Garcia
Browse files

Add CPS support

parent 40fbdba3
Loading
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -534,8 +534,8 @@ void ConfigRsuSimulatorLayer::receive_data(OCTETSTRING &data, params &params) {
    process_ut_pki_trigger(data, params);
  } else if (id == uppertester_vru_codec::c_utVamTrigger) { // Receive an UtMbrTrigger
    process_ut_vam_trigger(data, params);
  // } else if (id == uppertester_cps_codec::c_utCpmTrigger) { // Receive an UtMbrTrigger
  //   process_ut_cpm_trigger(data, params);
  } else if (id == uppertester_cps_codec::c_utCpmTrigger) { // Receive an UtMbrTrigger
    process_ut_cpm_trigger(data, params);
  } else if (id == uppertester_mbr_codec::c_utMbrTrigger) { // Receive an UtMbrTrigger
    process_ut_mbr_trigger(data, params);
  } else {
@@ -1649,18 +1649,18 @@ int ConfigRsuSimulatorLayer::process_ut_cpm_trigger(const OCTETSTRING &data, par
    loggers::get_instance().log("ConfigRsuSimulatorLayer::process_ut_cpm_trigger: msg_id=%02x", msg_id);
    uint8_t flag = *p++;
    loggers::get_instance().log("ConfigRsuSimulatorLayer::process_ut_cpm_trigger: flag=%02x", flag);
    // LibItsCps__TypesAndValues::UtCpmTrigger trigger;
    // // Decode msgs
    // if ((flag & 0x80) == 0x80) {
    //   trigger.setVruProfile() = *p;
    // }
    LibItsCps__TypesAndValues::UtCpmTrigger trigger;
    // Decode msgs
    if ((flag & 0x80) == 0x80) {
      trigger.setVehicleRole() = *p;
    }
    // if ((flag & 0x40) == 0x40) {
    //   trigger.leaveClusterWithCause() = *p;
    // }
    // loggers::get_instance().log_msg("ConfigRsuSimulatorLayer::process_ut_cpm_trigger: ", trigger);
    loggers::get_instance().log_msg("ConfigRsuSimulatorLayer::process_ut_cpm_trigger: ", trigger);

    // // Pass it to the ports if any
    // to_all_upper_ports(trigger, params);
    // Pass it to the ports if any
    to_all_upper_ports(trigger, params);
  } else {
    loggers::get_instance().warning("ConfigRsuSimulatorLayer::process_ut_cpm_trigger: Unsupported protocol");
    return -1;
+1 −1
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ void cps_layer::receive_data(OCTETSTRING &data, params &p_params) {
  loggers::get_instance().log_msg(">>> cps_layer::receive_data: ", data);

  // Sanity check
  if (*(static_cast<const unsigned char *>(data) + 1) != 0x02) { // Check that received packet has CA message id - See ETSI TS 102 894
  if (*(static_cast<const unsigned char *>(data) + 1) != 0x0E) { // Check that received packet has CA message id - See ETSI TS 102 894
    // Not a CPS message, discard it
    loggers::get_instance().warning("cps_layer::receive_data: Wrong message id: 0x%02x", *(static_cast<const unsigned char *>(data) + 1));
    return;
+6 −7
Original line number Diff line number Diff line
@@ -37,13 +37,13 @@ int uppertester_cps_codec::encode(const LibItsCps__TypesAndValues::UtCpmTrigger
  encoding_buffer.put_c(static_cast<const uint8_t>(uppertester_cps_codec::c_utCpmTrigger));
  uint8_t                                                  flags = 0x00;
  OCTETSTRING                                              val;
  // if (r.setCpsProfile().is_present()) {
  //   flags |= 0x80;
  //   val = int2oct(r.setCpsProfile(), 1);
  if (r.setVehicleRole().is_present()) {
    flags |= 0x80;
    val = int2oct(r.setVehicleRole(), 1);
  // } else if (r.leaveClusterWithCause().is_present()) {
  //   flags |= 0x40;
  //   val = int2oct(r.leaveClusterWithCause(), 1);
  // }
  }
  encoding_buffer.put_c(flags);
  encoding_buffer.put_string(val);
  data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data());
@@ -113,9 +113,8 @@ int uppertester_cps_codec::decode(const OCTETSTRING &data, LibItsCps__TypesAndVa
  const uint8_t *ptr = static_cast<const uint8_t *>(data);
  if (*ptr == uppertester_cps_codec::c_utCpmInitializeResult) {
    msg.utCpmInitializeResult() = BOOLEAN(*(ptr + 1) == 0x01);
  } else if (*ptr == 0x24) { // TODO Use a constant for "Peer does not support is "Peer does not support the command"
    // Peer does not support the command
    msg.utCpmInitializeResult() = 0x00;
  } else if (*ptr == uppertester_cps_codec::c_utCpmTriggerResult) {
    msg.utCpmTriggerResult() = BOOLEAN(*(ptr + 1) == 0x01);
  } else {
    loggers::get_instance().warning("uppertester_cps_codec::decode: Unsupported result");
    return -1;
+2 −2
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ void uppertester_cps_layer::sendMsg(const LibItsCps__TypesAndValues::UtCpmInitia
  } else {
    // Encode UpperTester PDU
    OCTETSTRING data;
    _codec.encode((const Record_Type &)send_par, data);
    _codec.encode(send_par, data);
    // Update parameters
    send_data(data, p_params);
  }
@@ -42,7 +42,7 @@ void uppertester_cps_layer::sendMsg(const LibItsCps__TypesAndValues::UtCpmTrigge
  } else {
    // Encode UpperTester PDU
    OCTETSTRING data;
    _codec.encode((const Record_Type &)send_par, data);
    _codec.encode(send_par, data);
    // Update parameters
    send_data(data, p_params);
  }
+12 −9
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
# This section shall contain the values of all parameters that are defined in your TTCN-3 modules.

# IUT Station ID
LibItsCommon_Pixits.PX_IUT_STATION_ID := 2533729309
LibItsCommon_Pixits.PX_IUT_STATION_ID := 1111101

LibItsGeoNetworking_Pixits.PX_GN_UPPER_LAYER := e_btpB

@@ -100,30 +100,33 @@ LogEventTypes:= Yes
# its_aid=639:  CPS

# Cygwin
#system.cpmPort.params := "CPS(next_header=btpB,header_type=tsb,header_sub_type=sh)/BTP/GN(ll_address=4C5E0C14D2EA,latitude=367470519,longitude=-455595023,distanceA=1500,distanceB=1500,angle=0,device_mode=1,secured_mode=1,sec_db_path=../data/certificates/certificates)/ETH(mac_src=e2b7b30429eb)/PCAP(mac_src=e2b7b30429eb,nic=CEBB111F-D749-4B40-8B4D-DBB060E90987,filter=and ether proto 0x8947)"
#system.cpmPort.params := "CPS(next_header=btpB,header_type=tsb,header_sub_type=sh)/BTP(dst_port=2019)/GN(ll_address=4C5E0C14D2EA,latitude=367470519,longitude=-455595023,distanceA=1500,distanceB=1500,angle=0,device_mode=1,secured_mode=1,sec_db_path=../data/certificates/certificates)/ETH(mac_src=e2b7b30429eb)/PCAP(mac_src=e2b7b30429eb,nic=CEBB111F-D749-4B40-8B4D-DBB060E90987,filter=and ether proto 0x8947)"
# Linux
system.cpmPort.params := "CPS(next_header=btpB,header_type=tsb,header_sub_type=sh)/BTP/GN(ll_address=4C5E0C14D2EA,latitude=367470519,longitude=-455595023,distanceA=1500,distanceB=1500,angle=0,device_mode=1,secured_mode=1,sec_db_path=../data/certificates/certificates)/ETH(mac_src=8c554ac1eee0)/PCAP(mac_src=8c554ac1eee0,nic=wlp0s20f3,filter=and ether proto 0x8947)"
system.cpmPort.params := "CPS(next_header=btpB,header_type=tsb,header_sub_type=sh)/BTP(dst_port=2019)/GN(ll_address=4C5E0C14D2EA,latitude=367470519,longitude=-455595023,distanceA=1500,distanceB=1500,angle=0,device_mode=1,secured_mode=1,sec_db_path=../data/certificates/certificates)/ETH(mac_src=8c554ac1eee0)/PCAP(mac_src=8c554ac1eee0,nic=wlo1,filter=and ether proto 0x8947)"
# Linux over UDP
#system.cpmPort.params := "CPS(next_header=btpB,header_type=tsb,header_sub_type=sh)/BTP/GN(ll_address=4C5E0C14D2EA,latitude=367470519,longitude=-455595023,distanceA=1500,distanceB=1500,angle=0,device_mode=1,secured_mode=1,sec_db_path=../data/certificates/certificates)/ETH(mac_src=8c554ac1eee0)/UDP(dst_ip=192.168.1.43,src_port=4041,dst_port=9091)"
#system.cpmPort.params := "CPS(next_header=btpB,header_type=tsb,header_sub_type=sh)/BTP(dst_port=2019)/GN(ll_address=4C5E0C14D2EA,latitude=367470519,longitude=-455595023,distanceA=1500,distanceB=1500,angle=0,device_mode=1,secured_mode=1,sec_db_path=../data/certificates/certificates)/ETH(mac_src=8c554ac1eee0)/UDP(dst_ip=192.168.1.43,src_port=4041,dst_port=9091)"

# PC5 + UU/Raw
#system.geoNetworkingPort.params := "GN(ll_address=4C5E0C14D2EB,latitude=367470519,longitude=-455595023,its_aid=36,secured_mode=1,certificate=CERT_IUT_A_AT,sec_db_path=../data/certificates/certificates_iut)/LTE(mac_src=8c554ac1eee1,nic=wlp0s20f3,filter=and ether proto 0x8947,pc5_layer=QUALCOMM,uu_protocol=raw,uu_transport=udp,dst_ip=192.168.1.43,dst_port=4041,src_port=9091)"
#system.geoNetworkingPort.params := "GN(ll_address=4C5E0C14D2EB,latitude=367470519,longitude=-455595023,its_aid=36,secured_mode=1,certificate=CERT_IUT_A_AT,sec_db_path=../data/certificates/certificates_iut)/LTE(mac_src=8c554ac1eee1,nic=wlo1,filter=and ether proto 0x8947,pc5_layer=QUALCOMM,uu_protocol=raw,uu_transport=udp,dst_ip=192.168.1.43,dst_port=4041,src_port=9091)"
# PC5 + Uu/MQTT
#   Raw UDP
#system.cpmPort.params := "CPS(next_header=btpB,header_type=tsb,header_sub_type=sh)/BTP/GN(ll_address=4C5E0C14D2EA,latitude=367470519,longitude=-455595023,distanceA=1500,distanceB=1500,angle=0,device_mode=1,secured_mode=1,sec_db_path=../data/certificates/certificates)/LTE(mac_src=8c554ac1eee0,nic=wlp0s20f3,filter=and ether proto 0x8947,pc5_layer=QUALCOMM,uu_protocol=mqtt,mqtt_client_id=8c554ac1eee0,mqtt_topics=rsu,uu_transport=udp,debug=1,server=192.168.1.39,port=1883)"
#system.cpmPort.params := "CPS(next_header=btpB,header_type=tsb,header_sub_type=sh)/BTP(dst_port=2019)/GN(ll_address=4C5E0C14D2EA,latitude=367470519,longitude=-455595023,distanceA=1500,distanceB=1500,angle=0,device_mode=1,secured_mode=1,sec_db_path=../data/certificates/certificates)/LTE(mac_src=8c554ac1eee0,nic=wlo1,filter=and ether proto 0x8947,pc5_layer=QUALCOMM,uu_protocol=mqtt,mqtt_client_id=8c554ac1eee0,mqtt_topics=rsu,uu_transport=udp,debug=1,server=192.168.1.39,port=1883)"
#   MQTT over TCP
#system.cpmPort.params := "CPS(next_header=btpB,header_type=tsb,header_sub_type=sh)/BTP/GN(ll_address=4C5E0C14D2EA,latitude=367470519,longitude=-455595023,distanceA=1500,distanceB=1500,angle=0,device_mode=1,secured_mode=1,sec_db_path=../data/certificates/certificates)/LTE(mac_src=8c554ac1eee0,nic=wlp0s20f3,filter=and ether proto 0x8947,pc5_layer=QUALCOMM,uu_protocol=mqtt,mqtt_client_id=8c554ac1eee0,mqtt_topics=rsu,uu_transport=tcp,debug=1,server=192.168.1.39,port=1883)"
#system.cpmPort.params := "CPS(next_header=btpB,header_type=tsb,header_sub_type=sh)/BTP(dst_port=2019)/GN(ll_address=4C5E0C14D2EA,latitude=367470519,longitude=-455595023,distanceA=1500,distanceB=1500,angle=0,device_mode=1,secured_mode=1,sec_db_path=../data/certificates/certificates)/LTE(mac_src=8c554ac1eee0,nic=wlo1,filter=and ether proto 0x8947,pc5_layer=QUALCOMM,uu_protocol=mqtt,mqtt_client_id=8c554ac1eee0,mqtt_topics=rsu,uu_transport=tcp,debug=1,server=192.168.1.39,port=1883)"

# CPS UpperTester port based on UDP
system.utPort.params := "UT_CPS/UDP(dst_ip=192.168.1.43,dst_port=12345,src_port=12346)"
system.utPort.params := "UT_CPS/UDP(dst_ip=192.168.1.21,dst_port=12345,src_port=12346)"
#system.utPort.params := "UT_CPS/UDP(dst_ip=192.168.146.26)"
#system.utPort.params := "UT_CPS/UDP(dst_ip=172.16.35.1)"

[EXECUTE]
#ItsCps_TestControl.control

# Check that protocolVersion is set to 3 and messageID is set to 14
ItsCps_TestCases.TC_CPS_MSGF_BV_01

#
ItsCps_TestCases.TC_CPS_MSD_PAR_BV_01
#ItsCps_TestCases.TC_CPS_MSD_PAR_BV_01
#
#ItsCps_TestCases.TC_CPS_MSD_PAR_BV_02
#
Loading