Loading ccsrc/Protocols/Commsignia/commsignia_layer.cc +53 −47 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ #include "converter.hh" unsigned char commsignia_layer::_fixed_header[10] = { 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0x0D }; unsigned char commsignia_layer::_g5_fixed_header[10] = { 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0x0D }; commsignia_layer::commsignia_layer(const std::string & p_type, const std::string & param) : layer(p_type), _params(), _mac_src(), _eth_type() { loggers::get_instance().log(">>> commsignia_layer::commsignia_layer: %s, %s", to_string().c_str(), param.c_str()); Loading Loading @@ -45,13 +45,19 @@ commsignia_layer::commsignia_layer(const std::string & p_type, const std::string if (it == _params.cend()) { _params.insert(std::pair<std::string, std::string>(std::string("use_vpn"), "0")); } it = _params.find(std::string("xport_mode")); if (it == _params.cend()) { _params.insert(std::pair<std::string, std::string>(std::string("xport_mode"), "G5")); } //_params.log(); } void commsignia_layer::send_data(OCTETSTRING& data, params& params) { loggers::get_instance().log_msg(">>> commsignia_layer::send_data: ", data); OCTETSTRING buffer(10, commsignia_layer::_fixed_header); OCTETSTRING buffer = OCTETSTRING(0, nullptr); if (_params[std::string("xport_mode")].compare("G5") == 0) { buffer = OCTETSTRING(10, commsignia_layer::_g5_fixed_header); if (_params[std::string("use_vpn")].compare("1") == 0) { buffer += int2oct(1, 1); // Injection to software } else { Loading Loading @@ -96,6 +102,7 @@ void commsignia_layer::send_data(OCTETSTRING& data, params& params) { loggers::get_instance().log_msg("commsignia_layer::send_data: buffer: Fixed=", buffer); buffer += int2oct(data.lengthof(), 2); // Data length loggers::get_instance().log_msg("commsignia_layer::send_data: buffer: Data length=", buffer); } // else, LTE-V2X, injection buffer = GN+BTP+CAM/DENM only buffer += data; // Payload loggers::get_instance().log_msg("commsignia_layer::send_data: Final buffer=", buffer); Loading Loading @@ -188,6 +195,8 @@ void commsignia_layer::receive_data(OCTETSTRING& data, params& params) { memcpy((void*)&h.fragment_seq_num, (unsigned short*)p, sizeof(unsigned short)); p += sizeof(unsigned short); loggers::get_instance().log("commsignia_layer::receive_data: fragment_seq_num=%04x", h.fragment_seq_num); OCTETSTRING bid = OCTETSTRING(6, (const unsigned char*)&h.bss_id); // TODO To be removed loggers::get_instance().log_msg("commsignia_layer::receive_data: bss_id: ", bid); OCTETSTRING dst = OCTETSTRING(6, (const unsigned char*)&h.dst_addr); loggers::get_instance().log_msg("commsignia_layer::receive_data: dst: ", dst); OCTETSTRING src = OCTETSTRING(6, (const unsigned char*)&h.src_addr); Loading @@ -199,9 +208,9 @@ void commsignia_layer::receive_data(OCTETSTRING& data, params& params) { loggers::get_instance().warning("commsignia_layer::receive_data: Discard packet due to wrong comparison"); //TODO return; } // else, continue const commsignia_layer::c2p_llc_hdr* l; int length; if (c2p_ver == 0x11) { const commsignia_layer::c2p_llc_hdr* l; if ((ntohs(h.frame_ctrl) & 0xf000) == 0x8000) { l = (const commsignia_layer::c2p_llc_hdr*)(static_cast<const unsigned char *>(data) + sizeof(commsignia_layer::c2p_s_v1_rx_t) + sizeof(commsignia_layer::c2p_802_11p_hdr) + sizeof(commsignia_layer::c2p_qos_ctrl)); length = sizeof(commsignia_layer::c2p_s_v1_rx_t) + sizeof(commsignia_layer::c2p_802_11p_hdr) + sizeof(commsignia_layer::c2p_qos_ctrl) + sizeof(commsignia_layer::c2p_llc_hdr); Loading @@ -209,11 +218,8 @@ void commsignia_layer::receive_data(OCTETSTRING& data, params& params) { l = (const commsignia_layer::c2p_llc_hdr*)(p + sizeof(commsignia_layer::c2p_s_v1_rx_t) + sizeof(commsignia_layer::c2p_802_11p_hdr)); length = sizeof(commsignia_layer::c2p_s_v1_rx_t) + sizeof(commsignia_layer::c2p_802_11p_hdr) + sizeof(commsignia_layer::c2p_llc_hdr); } loggers::get_instance().log("commsignia_layer::receive_data: dsap=%02x", l->dsap); loggers::get_instance().log("commsignia_layer::receive_data: ssap=%02x", l->ssap); loggers::get_instance().log("commsignia_layer::receive_data: ssap=%02x", l->ctrl); loggers::get_instance().log("commsignia_layer::receive_data: type=%04x", l->type); } else { } else { // LTE-V2X length = sizeof(commsignia_layer::c2p_s_v1_rx_cv2x_t) + sizeof(commsignia_layer::c2p_802_11p_hdr) + 10/*Fixed size*/; } // Check ether type Loading ccsrc/Protocols/Commsignia/commsignia_layer.hh +2 −1 Original line number Diff line number Diff line Loading @@ -113,7 +113,8 @@ class commsignia_layer : public layer { std::vector<unsigned char> _eth_type; //! Used to optimize filtering on ethernet type in \see commsignia_layer::receive_data method //! Fixed header for packet injection static unsigned char _fixed_header[10]; static unsigned char _g5_fixed_header[10]; static unsigned char _cv2x_fixed_header[10]; public: //! \publicsection Loading ccsrc/Protocols/Qualcomm/qualcomm_layer.cc 0 → 100644 +39 −0 Original line number Diff line number Diff line #include <algorithm> #include <cctype> #include <arpa/inet.h> #include "qualcomm_layer_factory.hh" #include "loggers.hh" #include "converter.hh" qualcomm_layer::qualcomm_layer(const std::string & p_type, const std::string & param) : layer(p_type), _params() { loggers::get_instance().log(">>> qualcomm_layer::qualcomm_layer: %s, %s", to_string().c_str(), param.c_str()); // Setup parameters params::convert(_params, param); //_params.log(); } void qualcomm_layer::send_data(OCTETSTRING& data, params& params) { loggers::get_instance().log_msg(">>> qualcomm_layer::send_data: ", data); OCTETSTRING buffer = int2oct(3, 1); // CV2X identifier buffer += data; // Payload loggers::get_instance().log_msg("qualcomm_layer::send_data: Final buffer=", buffer); send_to_all_layers(buffer, params); } void qualcomm_layer::receive_data(OCTETSTRING& data, params& params) { loggers::get_instance().log_msg(">>> qualcomm_layer::receive_data: ", data); // Remove CV2X identifier data = OCTETSTRING(data.lengthof() - 1, 1 + static_cast<const unsigned char*>(data)); loggers::get_instance().log_msg("qualcomm_layer::receive_data: payload for upper layer:", data); // FIXME receive_to_all_layers(data, params); } qualcomm_layer_factory qualcomm_layer_factory::_f; ccsrc/Protocols/Qualcomm/qualcomm_layer.hh 0 → 100644 +43 −0 Original line number Diff line number Diff line /*! * \file udp_layer_factory.hh * \brief Header file for ITS Qualcomm port protocol layer factory. * \author ETSI STF525 * \copyright ETSI Copyright Notification * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. * \version 0.1 */ #pragma once #include "t_layer.hh" #include "params.hh" class OCTETSTRING; //! Forward declaration of TITAN class /*! * \class qualcomm_layer * \brief This class provides description of ITS Qualcomm port protocol layer */ class qualcomm_layer : public layer { params _params; //! Layer parameters public: //! \publicsection /*! * \brief Specialised constructor * Create a new instance of the qualcomm_layer class * \param[in] p_type \todo * \param[in] p_param \todo */ qualcomm_layer(const std::string & p_type, const std::string & param); /*! * \brief Default destructor * \remark If \see _reconnect_on_send is set to false, the disconnection is done by the destructor */ virtual ~qualcomm_layer() {}; virtual void send_data(OCTETSTRING& data, params& params); virtual void receive_data(OCTETSTRING& data, params& info); }; // End of class qualcomm_layer ccsrc/Protocols/Qualcomm/qualcomm_layer_factory.hh 0 → 100644 +45 −0 Original line number Diff line number Diff line /*! * \file qualcomm_layer_factory.hh * \brief Header file for ITS Qualcomm protocol layer factory. * \author ETSI STF525 * \copyright ETSI Copyright Notification * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. * \version 0.1 */ #pragma once #include "layer_stack_builder.hh" #include "qualcomm_layer.hh" /*! * \class qualcomm_layer_factory * \brief This class provides a factory class to create an qualcomm_layer class instance */ class qualcomm_layer_factory: public layer_factory { static qualcomm_layer_factory _f; //! Reference to the unique instance of this class public: //! \publicsection /*! * \brief Default constructor * Create a new instance of the udp_layer_factory class * \remark The Qualcomm layer identifier is QUALCOMM */ qualcomm_layer_factory() { // register factory layer_stack_builder::register_layer_factory("QUALCOMM", this); }; /*! * \fn layer* create_layer(const std::string & type, const std::string & param); * \brief Create the layers stack based on the provided layers stack description * \param[in] p_type The provided layers stack description * \param[in] p_params Optional parameters * \return 0 on success, -1 otherwise * \inline */ inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param) { return new qualcomm_layer(p_type, p_param); }; }; // End of class qualcomm_layer_factory Loading
ccsrc/Protocols/Commsignia/commsignia_layer.cc +53 −47 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ #include "converter.hh" unsigned char commsignia_layer::_fixed_header[10] = { 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0x0D }; unsigned char commsignia_layer::_g5_fixed_header[10] = { 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0x0D }; commsignia_layer::commsignia_layer(const std::string & p_type, const std::string & param) : layer(p_type), _params(), _mac_src(), _eth_type() { loggers::get_instance().log(">>> commsignia_layer::commsignia_layer: %s, %s", to_string().c_str(), param.c_str()); Loading Loading @@ -45,13 +45,19 @@ commsignia_layer::commsignia_layer(const std::string & p_type, const std::string if (it == _params.cend()) { _params.insert(std::pair<std::string, std::string>(std::string("use_vpn"), "0")); } it = _params.find(std::string("xport_mode")); if (it == _params.cend()) { _params.insert(std::pair<std::string, std::string>(std::string("xport_mode"), "G5")); } //_params.log(); } void commsignia_layer::send_data(OCTETSTRING& data, params& params) { loggers::get_instance().log_msg(">>> commsignia_layer::send_data: ", data); OCTETSTRING buffer(10, commsignia_layer::_fixed_header); OCTETSTRING buffer = OCTETSTRING(0, nullptr); if (_params[std::string("xport_mode")].compare("G5") == 0) { buffer = OCTETSTRING(10, commsignia_layer::_g5_fixed_header); if (_params[std::string("use_vpn")].compare("1") == 0) { buffer += int2oct(1, 1); // Injection to software } else { Loading Loading @@ -96,6 +102,7 @@ void commsignia_layer::send_data(OCTETSTRING& data, params& params) { loggers::get_instance().log_msg("commsignia_layer::send_data: buffer: Fixed=", buffer); buffer += int2oct(data.lengthof(), 2); // Data length loggers::get_instance().log_msg("commsignia_layer::send_data: buffer: Data length=", buffer); } // else, LTE-V2X, injection buffer = GN+BTP+CAM/DENM only buffer += data; // Payload loggers::get_instance().log_msg("commsignia_layer::send_data: Final buffer=", buffer); Loading Loading @@ -188,6 +195,8 @@ void commsignia_layer::receive_data(OCTETSTRING& data, params& params) { memcpy((void*)&h.fragment_seq_num, (unsigned short*)p, sizeof(unsigned short)); p += sizeof(unsigned short); loggers::get_instance().log("commsignia_layer::receive_data: fragment_seq_num=%04x", h.fragment_seq_num); OCTETSTRING bid = OCTETSTRING(6, (const unsigned char*)&h.bss_id); // TODO To be removed loggers::get_instance().log_msg("commsignia_layer::receive_data: bss_id: ", bid); OCTETSTRING dst = OCTETSTRING(6, (const unsigned char*)&h.dst_addr); loggers::get_instance().log_msg("commsignia_layer::receive_data: dst: ", dst); OCTETSTRING src = OCTETSTRING(6, (const unsigned char*)&h.src_addr); Loading @@ -199,9 +208,9 @@ void commsignia_layer::receive_data(OCTETSTRING& data, params& params) { loggers::get_instance().warning("commsignia_layer::receive_data: Discard packet due to wrong comparison"); //TODO return; } // else, continue const commsignia_layer::c2p_llc_hdr* l; int length; if (c2p_ver == 0x11) { const commsignia_layer::c2p_llc_hdr* l; if ((ntohs(h.frame_ctrl) & 0xf000) == 0x8000) { l = (const commsignia_layer::c2p_llc_hdr*)(static_cast<const unsigned char *>(data) + sizeof(commsignia_layer::c2p_s_v1_rx_t) + sizeof(commsignia_layer::c2p_802_11p_hdr) + sizeof(commsignia_layer::c2p_qos_ctrl)); length = sizeof(commsignia_layer::c2p_s_v1_rx_t) + sizeof(commsignia_layer::c2p_802_11p_hdr) + sizeof(commsignia_layer::c2p_qos_ctrl) + sizeof(commsignia_layer::c2p_llc_hdr); Loading @@ -209,11 +218,8 @@ void commsignia_layer::receive_data(OCTETSTRING& data, params& params) { l = (const commsignia_layer::c2p_llc_hdr*)(p + sizeof(commsignia_layer::c2p_s_v1_rx_t) + sizeof(commsignia_layer::c2p_802_11p_hdr)); length = sizeof(commsignia_layer::c2p_s_v1_rx_t) + sizeof(commsignia_layer::c2p_802_11p_hdr) + sizeof(commsignia_layer::c2p_llc_hdr); } loggers::get_instance().log("commsignia_layer::receive_data: dsap=%02x", l->dsap); loggers::get_instance().log("commsignia_layer::receive_data: ssap=%02x", l->ssap); loggers::get_instance().log("commsignia_layer::receive_data: ssap=%02x", l->ctrl); loggers::get_instance().log("commsignia_layer::receive_data: type=%04x", l->type); } else { } else { // LTE-V2X length = sizeof(commsignia_layer::c2p_s_v1_rx_cv2x_t) + sizeof(commsignia_layer::c2p_802_11p_hdr) + 10/*Fixed size*/; } // Check ether type Loading
ccsrc/Protocols/Commsignia/commsignia_layer.hh +2 −1 Original line number Diff line number Diff line Loading @@ -113,7 +113,8 @@ class commsignia_layer : public layer { std::vector<unsigned char> _eth_type; //! Used to optimize filtering on ethernet type in \see commsignia_layer::receive_data method //! Fixed header for packet injection static unsigned char _fixed_header[10]; static unsigned char _g5_fixed_header[10]; static unsigned char _cv2x_fixed_header[10]; public: //! \publicsection Loading
ccsrc/Protocols/Qualcomm/qualcomm_layer.cc 0 → 100644 +39 −0 Original line number Diff line number Diff line #include <algorithm> #include <cctype> #include <arpa/inet.h> #include "qualcomm_layer_factory.hh" #include "loggers.hh" #include "converter.hh" qualcomm_layer::qualcomm_layer(const std::string & p_type, const std::string & param) : layer(p_type), _params() { loggers::get_instance().log(">>> qualcomm_layer::qualcomm_layer: %s, %s", to_string().c_str(), param.c_str()); // Setup parameters params::convert(_params, param); //_params.log(); } void qualcomm_layer::send_data(OCTETSTRING& data, params& params) { loggers::get_instance().log_msg(">>> qualcomm_layer::send_data: ", data); OCTETSTRING buffer = int2oct(3, 1); // CV2X identifier buffer += data; // Payload loggers::get_instance().log_msg("qualcomm_layer::send_data: Final buffer=", buffer); send_to_all_layers(buffer, params); } void qualcomm_layer::receive_data(OCTETSTRING& data, params& params) { loggers::get_instance().log_msg(">>> qualcomm_layer::receive_data: ", data); // Remove CV2X identifier data = OCTETSTRING(data.lengthof() - 1, 1 + static_cast<const unsigned char*>(data)); loggers::get_instance().log_msg("qualcomm_layer::receive_data: payload for upper layer:", data); // FIXME receive_to_all_layers(data, params); } qualcomm_layer_factory qualcomm_layer_factory::_f;
ccsrc/Protocols/Qualcomm/qualcomm_layer.hh 0 → 100644 +43 −0 Original line number Diff line number Diff line /*! * \file udp_layer_factory.hh * \brief Header file for ITS Qualcomm port protocol layer factory. * \author ETSI STF525 * \copyright ETSI Copyright Notification * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. * \version 0.1 */ #pragma once #include "t_layer.hh" #include "params.hh" class OCTETSTRING; //! Forward declaration of TITAN class /*! * \class qualcomm_layer * \brief This class provides description of ITS Qualcomm port protocol layer */ class qualcomm_layer : public layer { params _params; //! Layer parameters public: //! \publicsection /*! * \brief Specialised constructor * Create a new instance of the qualcomm_layer class * \param[in] p_type \todo * \param[in] p_param \todo */ qualcomm_layer(const std::string & p_type, const std::string & param); /*! * \brief Default destructor * \remark If \see _reconnect_on_send is set to false, the disconnection is done by the destructor */ virtual ~qualcomm_layer() {}; virtual void send_data(OCTETSTRING& data, params& params); virtual void receive_data(OCTETSTRING& data, params& info); }; // End of class qualcomm_layer
ccsrc/Protocols/Qualcomm/qualcomm_layer_factory.hh 0 → 100644 +45 −0 Original line number Diff line number Diff line /*! * \file qualcomm_layer_factory.hh * \brief Header file for ITS Qualcomm protocol layer factory. * \author ETSI STF525 * \copyright ETSI Copyright Notification * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. * \version 0.1 */ #pragma once #include "layer_stack_builder.hh" #include "qualcomm_layer.hh" /*! * \class qualcomm_layer_factory * \brief This class provides a factory class to create an qualcomm_layer class instance */ class qualcomm_layer_factory: public layer_factory { static qualcomm_layer_factory _f; //! Reference to the unique instance of this class public: //! \publicsection /*! * \brief Default constructor * Create a new instance of the udp_layer_factory class * \remark The Qualcomm layer identifier is QUALCOMM */ qualcomm_layer_factory() { // register factory layer_stack_builder::register_layer_factory("QUALCOMM", this); }; /*! * \fn layer* create_layer(const std::string & type, const std::string & param); * \brief Create the layers stack based on the provided layers stack description * \param[in] p_type The provided layers stack description * \param[in] p_params Optional parameters * \return 0 on success, -1 otherwise * \inline */ inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param) { return new qualcomm_layer(p_type, p_param); }; }; // End of class qualcomm_layer_factory