mapping between RTI DDS transport_priority QoS and network diffserv ToS/DSCP priority tagging ?

2 posts / 0 new
Last post
Offline
Last seen: 3 years 11 months ago
Joined: 10/28/2010
Posts: 22
mapping between RTI DDS transport_priority QoS and network diffserv ToS/DSCP priority tagging ?

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

 

 

 

Fernando Garcia Aranda's picture
Fernando Garcia gives this answer, but using it I cannot see DSCP value tagged using wireshark:

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.

 

Organization:
Offline
Last seen: 3 years 11 months ago
Joined: 10/28/2010
Posts: 22

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);

}

.............
participant->get_default_datawriter_qos(dwqos);
participant->get_default_datawriter_qos(dwqos1);
/* Périodique */
dwqos1.history.kind = DDS_KEEP_LAST_HISTORY_QOS ;
dwqos1.reliability.kind = DDS_BEST_EFFORT_RELIABILITY_QOS;
dwqos1.transport_priority.value = 32;
/* Non périodique */
dwqos.history.kind = DDS_KEEP_LAST_HISTORY_QOS ;
dwqos.reliability.kind = DDS_RELIABLE_RELIABILITY_QOS;
dwqos.transport_priority.value = 31;