Hi,
I am looking for a way to mapp RTI DDS transport_priority QoS and network diffserv ToS/DSCP priority tagging.
Below a reply from Fernando Garcia, but I cannot see DSCP value different from 0 with wireshark.
Any one can give a help with some line presenting how to use those API and/or with the xml configuration file.
Also, Did any one have a explanation about the relation between task priority described with RTI DDS user manuel (since
I understand that this is like client/server priority with corba based application) and the DDS-QoS policy "transport_priority"
and Diffserv/TOS (IP precedence) priority values.
Thanks.
Akram
The transport_priority QoS is used to tell the underlying transport mechanism (e.g UDP or shared memory) how to configure its priority. Each individual transport maps that to something according to its capabilities. This indirection is necessary because the range of priorities, or their meaning, may differ from transport to transport. A particular transport can even ignore it if it does not support prioritization. Looking at the documentation it seems to me that the builtin UDP transport supports prioritization, but the default configuration you get out of the box disables it. You can read about this here: http://community.rti.com/docs/html/api_cpp/group__NDDS__Transport__UDPv4... Specifically read the comments associated with the dds.transport.UDPv4.builtin.transport_priority_mask. The documentation says by default it is set to zero which disables it. So it seems that top get what you want you would need to minimally set: dds.transport.UDPv4.builtin.transport_priority_mask And potentially modify the default value of these other two to fit your needs. NDDS_Transport_UDPv4_Property_t::transport_priority_mapping_low NDDS_Transport_UDPv4_Property_t::transport_priority_mapping_high The easiest way to do this is using the XML QoS Profiles.
You can do this:
DDS_DataWriterQos datawriter_qos;
if(DDSDomainParticipantFactory::get_instance()->get_default_participant_qos(participantQoS) != DDS_RETCODE_OK){
cout << "Erreur get default participant QoS " << endl;
}
else
{
DDS_PropertyQosPolicyHelper_add_property(&participantQoS.property,"rti.monitor.library","rtimonitoring",
DDS_BOOLEAN_FALSE);
sprintf(valueBuffer,"%p",RTIDefaultMonitor_create);
DDS_PropertyQosPolicyHelper_add_property(&participantQoS.property,"rti.monitor.create_function_ptr",
valueBuffer,DDS_BOOLEAN_FALSE);
DDSPropertyQosPolicyHelper::add_property(participantQoS.property,
"dds.transport.UDPv4.builtin.transport_priority_mask",
"0x3f",
DDS_BOOLEAN_FALSE);
}