* \brief Create the layers stack based on the provided layers stack description (cf. remark)
* \param[in] p_type The provided layers stack description
* \param[in] p_params Optional parameters
* \return 0 on success, -1 otherwise
* \remark The description below introduces layers stack in case of ITS project:
* CAM Layer
* next_header : btpA|btpB (overwrite BTP.type)
* header_type : tsb|gbc
* header_sub_type : sh (single hop)
* DENM Layer
* next_header : btpA|btpB (overwrite BTP.type)
* header_type : tsb|gbc
* BTP Layer
* type : btpA|btpB
* destination port: dst_port
* source port : src_port
* device_mode : Set to 1 if the layer shall encapsulate upper layer PDU
* device_mode : Set to 1 if the layer shall encapsulate upper layer PDU
* GN Layer
* ll_address : GeoNetworking address of the Test System
* latitude : latitude of the Test System
* longitude : longitude of the Test System
* beaconing : Set to 1 if GnLayer shall start beaconing
* Beaconning timer expiry: expiry (ms)
* device_mode : Set to 1 if the layer shall encapsulate upper layer PDU
* Ethernet layer
* mac_src :Source MAC address
* mac_bc :Broadcast address
* eth_type : Ethernet type
* Commsignia layer
* mac_src : Device MAC address, used to discard packets
* To indicate no filering, use the value 000000000000
* mac_bc : Broadcast address
* eth_type : Ethernet type, used to discard packets
* target_host : Device address
* target_port : Device port
* source_port : Test System port
* interface_id: Interface id, used to discard packets
* tx_power : TX power (dB)
* UDP layer (IP/UDP based on Pcap)
* dst_ip : destination IPv4 address (aa.bb.cc.dd)
* dst_port: destination port
* src_ip : source IPv4 address (aa.bb.cc.dd)
* src_port: source port
* Pcap layer
* mac_src : Source MAC address, used to exclude from capture the acket sent by the Test System
* filter : Pcap filter (compliant with tcpdump syntax)
* E.g. filter=and ether src 04e548000001
* Online mode:
* nic: Local NIC
* If set, online mode is used
* Offline mode (nic is present but not set):
* file : File to read
* frame_offset: Frame offset, used to skip packets with frame number < frame_offset
* time_offset : Time offset, used to skip packets with time offset < time_offset
* save_mode : 1 to save sent packet, 0 otherwise
* Here are some examples:
* Geonetworking multiple component case:
* NodeB.geoNetworkingPort.params := "GN(ll_address=04e548000001,latitude=43551050,longitude=10298730,beaconing=0,expiry=1000,its_aid=141)/COMMSIGNIA(mac_src=04e548000001,mac_bc=FFFFFFFFFFFF,eth_type=8947,target_host=10.200.1.101,target_port=7942,source_port=7943,its_aid=141,interface_id=2,tx_power=-32)/UDP(dst_ip=192.168.56.1,dst_port=12346,src_ip=192.168.156.4,src_port=12345)/ETH(mac_src=04e548000001,mac_dst=0A0027000011,eth_type=0800)/PCAP(mac_src=04e548000001,file=/home/vagrant/TriesAndDelete/etsi_its/testdata/TC_AUTO_IOT_DENM_RWW_BV_01_short.pcap,filter=and (udp port 30000 or udp port 7943))"
NodeC.geoNetworkingPort.params := "GN(ll_address=70b3d5791b48,latitude=43551050,longitude=10298730,beaconing=0,expiry=1000,its_aid=141)/COMMSIGNIA(mac_src=70b3d5791b48,mac_bc=FFFFFFFFFFFF,eth_type=8947,target_host=10.200.1.101,target_port=7942,source_port=7943,its_aid=141,interface_id=2,tx_power=-32)/UDP(dst_ip=192.168.56.1,dst_port=12346,src_ip=192.168.156.4,src_port=12345)/ETH(mac_src=70b3d5791b48,mac_dst=0A0027000011,eth_type=0800)/PCAP(mac_src=70b3d5791b48,file=/home/vagrant/TriesAndDelete/etsi_its/testdata/TC_AUTO_IOT_DENM_RWW_BV_01_short.pcap,filter=and (udp port 30000 or udp port 7943))"
staticconststd::string&expiry;//! Test system GeoNetworking Lifetime parameter name (in ms)
staticconststd::string&device_mode;//! To indicate to the lower layer to act as a standalone device
staticconststd::string&secured_mode;//! To indicate to the lower layer to apply securty on message exchanges as defined in IEEE 1609.2 & ETSI TS 102 965
staticconststd::string&enable_security_checks;//! To indicates if security check failures shall be treated as error or warning
staticconststd::string&sec_db_path;
staticconststd::string&certificate;
staticconststd::string&hash;
staticconststd::string&signature;
staticconststd::string&cypher;
staticconststd::string&distanceA;//! Test system GeoNetworking DistanceA parameter name
staticconststd::string&distanceB;//! Test system GeoNetworking DistanceB parameter name
staticconststd::string∠//! Test system GeoNetworking Angle parameter name
...
...
@@ -74,7 +81,12 @@ public:
virtual~Params(){};
/*!
* \fn void log();
* \fn void log() const;
* \brief Provides a dump of the content of this instance
*/
voidlog()const;
/*!
* \fn void log() const;
* \brief Provides a dump of the content of this instance
if((int)basic_header.nextHeader()==2){// Verify and extract the GeoNetworking Secured Packet as specified in ETSI EN 302 636-4-1 V1.3.1 (2017-08) Clause 9.6.1 Composition of the Basic Header
// Verify and extract the GeoNetworking Secured Packet as specified in ETSI EN 302 636-4-1 V1.3.1 (2017-08) Clause 9.4 GeoNetworking Secured Packet
returnsecurity_services::get_instance().secure_gn_payload(unsecured_gn_payload,false,secured_gn_payload,params);// TODO Add timer to check if certificate shall be sent
OCTETSTRINGbh=OCTETSTRING(4,static_cast<constunsignedchar*>(p_data));// Extract the basic header as specified in ETSI EN 302 636-4-1 V1.3.1 (2017-08) Clause 9.6