Data Distribution Service Avatar
  1. OMG Specification

Data Distribution Service — Open Issues

  • Acronym: DDS
  • Issues Count: 482
  • Description: Issues not resolved
Open Closed All
Issues not resolved

Issues Summary

Key Issue Reported Fixed Disposition Status
DDSIRTP26-39 writing error DDSI-RTPS 2.5 open
DDSTSN-3 Minor clarifications and enhancements DDS-TSN 1.0a1 open
DDSTSN-1 Update references to 802.1Qcc and 802.1Qcr, which have been merged into 802.1Q DDS-TSN 1.0a1 open
DDSSEC12-3 Provide mechanisms to extend Governance and Permissions files without breaking interoperability DDS-SECURITY 1.0b1 open
DDSSEC12-62 Indicate that AccessControl operations need to be called on a set_qos DDS-SECURITY 1.1b1 open
DDSSEC12-75 Errors in non-normative IDL of section 7.5.1.2.3 Mapping of Operations to the ReplyTopic Types DDS-SECURITY 1.1b1 open
DDSSEC12-85 check_remote_participant when default is ALLOW DDS-SECURITY 1.1b1 open
DDSSEC12-49 Mutability of PartitionQos DDS-SECURITY 1.1b1 open
DDSSEC12-55 Using string literals as binary_property values inside Handshake Tokens DDS-SECURITY 1.1b1 open
DDSSEC12-16 Define rules for references between elements DDS-SECURITY 1.1 open
DDSSEC12-14 CryptoTransformIdentifier extensibility FINAL is not compatibly with its derived classes DDS-SECURITY 1.1 open
DDSSEC12-91 How are 'subject_name' fields compared? DDS-SECURITY 1.1 open
DDSSEC12-79 Built-in Access Control: interpretation of enable_read/write_access_control DDS-SECURITY 1.1 open
DDSSEC12-1 Complexity of Authentication Plugin Model DDS-SECURITY 1.0b1 open
DDSSEC12-92 Underspecified RSASSA-PSS-SHA256 Salt Length DDS-SECURITY 1.1b1 open
DDSSEC12-115 Sectiob 8.2.1 Expand set of submessages that may be sent on TSN streams DDS-SECURITY 1.1b1 open
DDSSEC12-116 DDS-Security impact on DDS-TSN DDS-SECURITY 1.1b1 open
DDSSEC12-2 Built-in Authentication and Cryptography plugins tied together by SharedSecretHandle implementation DDS-SECURITY 1.0b1 open
DDSSEC12-7 The DDS-Security specification makes some modifications to the DDSI-RTPS protocol that should be taken into consideration DDS-SECURITY 1.0 open
DDSSEC12-4 Examples of Wildcard permissions DDS-SECURITY 1.0 open
DDSSEC12-5 The UML model should be cleaned up DDS-SECURITY 1.0 open
DDSSEC12-9 The specification should not duplicate (copy) the machine readable XSD files DDS-SECURITY 1.0 open
DDSSEC12-8 Section 3 (Normative References) should be updated and expanded DDS-SECURITY 1.0 open
DDSSEC12-6 Remove Jira-issue related comments from machine-readable files DDS-SECURITY 1.0 open
DDSSEC12-13 Avoid sending permissions as part of Authentication Handshake DDS-SECURITY 1.1 open
DDSSEC12-12 Instance-Level access-control DDS-SECURITY 1.1 open
DDSSEC12-19 Allow expressions to be used in the data-tag permissions DDS-SECURITY 1.1 open
DDSSEC12-18 Authentication interface begin_handshake_reply() DDS-SECURITY 1.1b1 open
DDSSEC12-15 DataHolder IDL inconsistent DDS-SECURITY 1.1b1 open
DDSSEC12-11 say explicitly that is_valid is set to zero if that is case DDS-SECURITY 1.1b1 open
DDSSEC12-10 Issues with the UML model used in the specification DDS-SECURITY 1.0 open
DDSSEC12-22 get_datawriter/reader_sec_attributes inconsistent IDL DDS-SECURITY 1.1b1 open
DDSSEC12-21 decode_datawriter_submessage uses "in" for SecurityException DDS-SECURITY 1.1b1 open
DDSSEC12-23 Authentication interface set_permissions_credential_and_token DDS-SECURITY 1.1b1 open
DDSSEC12-20 SecureSubmessageCategory_t in normative IDL DDS-SECURITY 1.1b1 open
DDSSEC12-27 ParticipantStatelessMessage definition DDS-SECURITY 1.1b1 open
DDSSEC12-25 IDL get_topic_sec_attributes parameter typo DDS-SECURITY 1.1b1 open
DDSSEC12-26 IDL SubscriptionBuiltinTopicDataSecure inheritance DDS-SECURITY 1.1b1 open
DDSSEC12-24 IDL LongLongSeq unused DDS-SECURITY 1.1b1 open
DDSSEC12-37 Modify Security's QoS changes for compatibility with RTPS DDS-SECURITY 1.1b1 open
DDSSEC12-35 Description of the PluginEndpointSecurityAttributes DDS-SECURITY 1.1b1 open
DDSSEC12-36 Description of the EndpointSecurityAttributes DDS-SECURITY 1.1b1 open
DDSSEC12-32 Authentication behavior use of built-in endpoints DDS-SECURITY 1.1b1 open
DDSSEC12-33 Use a submessage flag to indicate Data/Frag submessage has a transformed payload DDS-SECURITY 1.1b1 open
DDSSEC12-28 Determining when to use DCPSParticipantMessageSecure DDS-SECURITY 1.1b1 open
DDSSEC12-34 Wrong XML tag in description of Enable Read Access Control DDS-SECURITY 1.1b1 open
DDSSEC12-30 8.4.2.9.24 section name typo DDS-SECURITY 1.1b1 open
DDSSEC12-44 register_local_datareader and Data Protection Kind DDS-SECURITY 1.1b1 open
DDSSEC12-45 Replace "CryptoKeyTransform" with "CryptoTransform" DDS-SECURITY 1.1b1 open
DDSSEC12-42 Various Typos DDS-SECURITY 1.1b1 open
DDSSEC12-41 Reduce the range of Reserved RTPS parameter IDs DDS-SECURITY 1.1b1 open
DDSSEC12-38 Broken cross-references DDS-SECURITY 1.1b1 open
DDSSEC12-40 Return types in CryptoKeyFactory interface description DDS-SECURITY 1.1b1 open
DDSSEC12-39 AuthRequestMessageToken future_challenge property DDS-SECURITY 1.1b1 open
DDSSEC12-43 IDL ParticipantSecurityAttributes::plugin_participant_attributes DDS-SECURITY 1.1b1 open
DDSSEC12-48 Clarify the configuration and use of certificate chains for Identity DDS-SECURITY 1.1b1 open
DDSSEC12-50 Builtin CryptoKeyFactory direct dependency on AccessControl's config details DDS-SECURITY 1.1b1 open
DDSSEC12-47 Inconsistent Flag Name PLUGIN_PARTICIPANT_SECURITY_ATTRIBUTES_FLAG_BUILTIN_IS_DISCOVERY_ENCRYPTED DDS-SECURITY 1.1b1 open
DDSSEC12-51 Participant2ParticipantKxKeyMaterial DDS-SECURITY 1.1b1 open
DDSSEC12-54 XML Schema defines boolean literals as "true" / "false" DDS-SECURITY 1.1b1 open
DDSSEC12-52 9.5.3.3.4.3 should refer to the footer, not header DDS-SECURITY 1.1b1 open
DDSSEC12-46 "atributes" typo DDS-SECURITY 1.1b1 open
DDSSEC12-58 AES-GCM doesn't add padding DDS-SECURITY 1.1b1 open
DDSSEC12-57 Builtin Crypto message authentication codes DDS-SECURITY 1.1b1 open
DDSSEC12-86 Security for XTypes TypeLookup Service DDS-SECURITY 1.1 open
DDSSEC12-56 Encoding of Diffie-Hellman Public Key DDS-SECURITY 1.1b1 open
DDSSEC12-59 Parsing messages generated by encode_serialized_payload (auth only) DDS-SECURITY 1.1b1 open
DDSSEC12-53 Clarify meaning of "bit array" and specify number of constant bytes in HMAC input when computing SessionKey DDS-SECURITY 1.1b1 open
DDSSEC12-61 Table 29 description of is_write_protected DDS-SECURITY 1.1b1 open
DDSSEC12-60 check_remote_topic domainId parameter DDS-SECURITY 1.1b1 open
DDSSEC12-101 Add support for DomainTag to DDS-Security DDS-SECURITY 1.1b1 open
DDSSEC12-29 Specify DDS Security uses XCDR serialization version 1 DDS-SECURITY 1.1b1 open
DDSSEC12-110 Corrections to tables describing IdentityStatusToken, AuthenticatedPeerCredentialToken, AuthRequestMessageToken DDS-SECURITY 1.1b1 open
DDSSEC12-108 secure log topic has a year 2038 issue DDS-SECURITY 1.1b1 open
DDSSEC12-122 Provide mechanism for changing the session keys associated with the different DDS Entitites DDS-SECURITY 1.1b1 open
DDSSEC12-90 Meeting CNSSP-15 security requirements DDS-SECURITY 1.1b1 open
DDSSEC12-94 Provide pre-shared protection for unauthenticated messages DDS-SECURITY 1.1b1 open
DDSSEC12-31 Security for DDS-RPC DDS-SECURITY 1.1b1 open
DDSXTY14-74 Clarify the intended member ID of a union's discriminator DDS-XTypes 1.3b1 open
DDSXTY14-73 Ambiguous definition and/or usage of PUSH(ORIGIN=0) DDS-XTypes 1.3b1 open
DDSXTY13-86 Clarify the intended member ID of a union's discriminator DDS-XTypes 1.3 open
DDSWEB11-3 Correct inconsistency on the URLs for the machine readable documents in the FTF2 report DDS-WEB 1.0 open
DDSXTY14-56 XCDR2 serialization of sequences of non-primitive elements DDS-XTypes 1.3b1 open
DDSXTY14-72 XCDR2 serialization of non-trivial maps DDS-XTypes 1.3b1 open
DDSXML11-5 DDS::Time_t/Duration_t changes DDS-XML 1.0 open
DDS15-13 DDS defines Time_t with seconds as long, this is 32bit. This will give an issue after 2038 DDS 1.2 open
DDS15-331 Proper interpretation of Duration_t for negative values DDS 1.4 open
DDSSEC12-121 Problematic use of multiple INFO_SRC within an RTPS DDS-SECURITY 1.1b1 open
DDSXTY14-69 Section contains a duplicate sentence from the next section. DDS-XTypes 1.3 open
DDSXTY13-85 Ambiguous definition and/or usage of PUSH(ORIGIN=0) DDS-XTypes 1.3 open
DDSXML11-4 How to describe the locator information in XML DDS-XML 1.0 open
DDSIRTP26-38 Extend InfoSource to contain RTPS HeaderExtension fields DDSI-RTPS 2.5 open
DDSXTY14-68 Update IDL definition of union TypeIdentifier in Annex B to account for primitive types DDS-XTypes 1.3b1 open
DDSXTY14-59 Clarify accessing discriminator of a DynamicData union DDS-XTypes 1.3 open
DDSSEC12-114 Provide a way for multiple vendors to extend the algorithms and interoperate DDS-SECURITY 1.1b1 open
DDSSEC12-102 Provide efficient way to skip encrypted implementation-specific content DDS-SECURITY 1.1b1 open
DDSIRTP26-37 Specify how a discovery service could be used to bootstap discovery DDSI-RTPS 2.5 open
DDSXTY14-38 Data Representation for RTPS's Serialized Key DDS-XTypes 1.3 open
DDSIRTP26-3 SequenceNumberSet validity could be too strict DDSI-RTPS 2.3 open
DDSXTY14-67 Typos in DynamicData UML Diagrams DDS-XTypes 1.3 open
DDSXTY14-66 Conflicting Order of Minimal Struct and Union Members in TypeObject DDS-XTypes 1.3 open
DDSXTY14-64 Should the TypeObject mark key members as must understand DDS-XTypes 1.3b1 open
DDSXTY14-65 Typo in DataRepresentationMask DDS-XTypes 1.3 open
DDSPSMC11_-4 DynamicData should be value type, not a reference type DDS-PSM-Cxx 1.0b2 open
DDSXTY14-47 Encoding of TypeInformation in SEDP DDS-XTypes 1.3 open
DDSXTY14-53 Description on how to encode Participant GUID in dds::rpc::RequestHeader seems wrong DDS-XTypes 1.3b1 open
DDSXTY14-54 Impossible to handle @must_understand AND @optional fields in an @appendable struct correctly DDS-XTypes 1.3b1 open
DDSXTY14-63 bitset types not defined DDS-XTypes 1.3b1 open
DDSIRTP26-36 Minor Typo in SubmessageKind IDL DDSI-RTPS 2.5 open
DDSSEC12-82 encode_rtps_message/decode_rtps_message error and status reporting DDS-SECURITY 1.1 open
DDSXTY14-61 DynamicTypeSupport IDL defnition is invalid IDL DDS-XTypes 1.3 open
DDSIRTP26-35 DataFrag submessage element naming DDSI-RTPS 2.5 open
DDSIRTP26-34 Version number is inconsistent DDSI-RTPS 2.5 open
DDSIRTP26-4 Inconsistent notation used to represent bit positions pictorially DDSI-RTPS 2.5 open
DDSXTY14-60 Table 9 is missing BITMASK_TYPE DDS-XTypes 1.3 open
DDSIRTP26-33 Typo in 9.4.5.7.1 Flags in the Submessage Header DDSI-RTPS 2.5 open
DDS15-329 set_listener behavior is underspecified DDS 1.4 open
DDSIRTP26-6 Network amplification DDSI-RTPS 2.5 open
DDSXTY14-28 IDL's fixed data type is required in XTypes DDS-XTypes 1.3 open
DDSXTY14-36 Representing union case labels in TypeObject DDS-XTypes 1.3 open
DDSXTY14-35 Anonymous Types in Strongly Connected Components DDS-XTypes 1.3 open
DDSIRTP26-31 Inconsistency in the wire representation of SequenceNumber type fields DDSI-RTPS 2.5 open
DDSIRTP26-32 Typo in Table 9.18 (PID__DOMAIN_ID) DDSI-RTPS 2.5 open
DDSIRTP26-30 Incorrect definition of a user-defined within EntityId_t DDSI-RTPS 2.5 open
DDSXTY14-24 TypeFlags usage in normative IDL DDS-XTypes 1.3 open
DDSXTY14-58 Dynamic Binding: equals() for DynamicType/DynamicTypeMember and related types DDS-XTypes 1.3 open
DDSXTY14-57 Annex C: BoundSeq IDL type not defined DDS-XTypes 1.3 open
DDSSEC12-99 Update parameters of check_remote_datawriter_register_instance DDS-SECURITY 1.1 open
DDS15-250 Align with XTYPES 1.3 and IDL 4.2 DDS 1.4 open
DDS15-315 InstanceHandle_t underspecified DDS 1.4 open
DDSIRTP26-29 Wrong data type for serializedPayload in DATAFRAG DDSI-RTPS 2.5 open
DDS15-328 Annex A: Ownership Profile is unclear DDS 1.4 open
DDSIRTP26-28 Introduce a concept of Partitions at the DomainParticipant level DDSI-RTPS 2.5 open
DDSIRTP26-27 The specs and illustration of the ChangeForReader are missing / have been removed DDSI-RTPS 2.5 open
DDSIRTP26-26 Error in formatting pseudo code DDSI-RTPS 2.5 open
DDSIRTP26-25 Handling of non-existent cache changes in logical action DDSI-RTPS 2.5 open
DDS15-327 The "depth" QoS setting does not have any bounds set DDS 1.4 open
DDS15-320 Missing escaping rules for filter expression, topic expression, query expression DDS 1.4 open
DDSXML11-3 Missing DDS-XTypes extensions (which should be part of DDS 1.5) DDS-XML 1.0 open
DDSIRTP26-24 Inconsistent use of higuest_sent_seq_num and highestSentChangeSN DDSI-RTPS 2.5 open
DDSIRTP26-23 Inconsistent use of SEQUENCE_NUMBER_INVALID; for highestSentChangeSN DDSI-RTPS 2.5 open
DDSXTY14-55 Add support for data-level compression during serialization DDS-XTypes 1.3b1 open
DDSIRTP26-17 Fields writerSet and secureWriterSet are missing in wire representation: DDSI-RTPS 2.5 open
DDSIRTP26-16 Paramter id and length should be unsigned short DDSI-RTPS 2.5 open
DDSIRTP26-14 Masks in table 9.6 (ParameterId subspaces) should be hexadecimal DDSI-RTPS 2.5 open
DDSIRTP26-13 Note on the message wide CRC check DDSI-RTPS 2.5 open
DDSIRTP26-11 Textual error in section 9.4.5.2.1 DDSI-RTPS 2.5 open
DDSIRTP26-10 Description incomplete DDSI-RTPS 2.5 open
DDSIRTP26-12 CRC computation for Checksum128_t undefined DDSI-RTPS 2.5 open
DDSIRTP26-15 Please ignore Implementation Work Blocked flag in issue INBOX-1375 DDSI-RTPS 2.5 open
DDSXTY14-17 Typo or editing issue DDS-XTypes 1.3b1 open
DDSXTY14-44 Default value and @default annotations DDS-XTypes 1.3 open
DDSJSON11-1 JSON Representation of Unions DDS-JSON 1.0 open
DDSIRTP26-9 Unclear how to discover GROUP_GUID/GROUP_ENTITY_ID from a coherent Publisher DDSI-RTPS 2.5 open
DDS15-326 Incorporate the lookup_topicdescription change added in XTYPES 1.3 DDS 1.4 open
DDSPSMC11_-96 dds::core::status::StatusMask should allow you to set mutiple Status bits by using the logical OR operation DDS-PSM-Cxx 1.0 open
DDS15-245 Clarify the PartitionQosPolicy DDS 1.4 open
DDSSEC12-89 Add return_permissions_handle to the AccessControl interface DDS-SECURITY 1.1 open
DDSIRTP26-7 Provide a pre-shared key protection mechanism DDSI-RTPS 2.5 open
DDSSEC12-93 Add best practice/implementation guidelines to the CryptoTransform plugin DDS-SECURITY 1.1b1 open
DDSXTY14-52 Missing TK_INT8 and TK_UINT8 in the IDL machine readable file DDS-XTypes 1.3b1 open
DDSXTY14-51 Extensibility of inherited structures DDS-XTypes 1.3b1 open
DDSXTY14-20 Inconsistent Definitions of RTPS Encapsulation DDS-XTypes 1.3b1 open
DDSXTY14-50 Integrate annotations for range/min/max with try_construct DDS-XTypes 1.3b1 open
DDSXTY14-49 Remove all IDL42 specified parts DDS-XTypes 1.3 open
DDSXTY14-48 8 bit types mising in 7.2.1 DDS-XTypes 1.3 open
DDS15-316 find_topic/delete_topic underspecified DDS 1.4 open
DDS15-325 Read / Take with max_samples = 0 DDS 1.4 open
DDSXTY14-39 TypeLookup IDL Inconsistency DDS-XTypes 1.3 open
DDSRPC11-5 Common Types contains invalid IDL DDS-RPC 1.0 open
DDSXTY14-46 Typo in Member of AnnotationParameterValue DDS-XTypes 1.3 open
DDSIRTP26-5 Section 9.4.2.9 Timestamps shows 'seconds' as 'long' instead of 'unsigned long' DDSI-RTPS 2.5 open
DDS15-324 sample lost/rejected should be clarified and extended DDS 1.4 open
DDS11-15 DDS should use typed modules DDS 1.2 open
DDS15-323 Order in which implied IDL and language mappings interact DDS 1.4 open
DDS15-322 Incorrect value for GROUPDATA_QOS_POLICY_NAME DDS 1.2 open
DDSXTY14-45 The list of valid KEY types does not include String types DDS-XTypes 1.3 open
DDSOPCU11-3 IDL keywords used as interface/module DDS-OPCUA 1.0 open
DDSOPCU11-2 Don't use anonymous types DDS-OPCUA 1.0 open
DDSXML11-2 No mapping for uint8/int8, map, bitset DDS-XML 1.0 open
DDSIRTP26-2 Support transport-level RTPS message compression DDSI-RTPS 2.3b1 open
DDSIRTP26-1 Interoperability of Transient/Persistent data DDSI-RTPS 2.3b1 open
DDS15-321 Example class table seems to violate written convention DDS 1.4 open
DDS15-28 DDS Entities should have a name DDS 1.2 open
DDSXTY14-42 Table 60 - RTPS encapsulation identifier DDS-XTypes 1.3 open
DDS15-319 create_querycondition with a query with string parameters DDS 1.4 open
DDSXTY14-41 Unknown behavior of explicitly negated key in nested struct DDS-XTypes 1.3b1 open
DDSXTY14-40 Type Consistency Enforcement QoS Policy ignore_member_names DDS-XTypes 1.3 open
DDS15-318 Extend SampleLostStatus with last_reason DDS 1.4 open
DDSXTY14-37 Ambiguous effect of using annotations on attributes with multiple declarators. DDS-XTypes 1.3b1 open
DDS15-317 behaviour of create_topic with duplicate topic_name DDS 1.4 open
DDS15-46 Default built-in ReaderDataLifecycle values DDS 1.2 open
DDSSEC12-88 Size of permission file sent on authentication can exceed max IP packet size DDS-SECURITY 1.1b1 open
DDS15-314 Change the default value for DataWriterLifecycle::autodispose_unregistered_instances and behavior when a DataWriter is deleted DDS 1.4 open
DDSXTY14-33 Enums with different holder types should not be assignable DDS-XTypes 1.3 open
DDSXTY14-25 7.4.3.5.3 contradictory rules for collections DDS-XTypes 1.3 open
DDSXTY14-27 DataRepresentationQosPolicy default DDS-XTypes 1.3 open
DDSXTY14-29 Specify that TypeLookup Service uses XCDR2 DDS-XTypes 1.3 open
DDSXTY14-26 XTypes spec is missing topic names for TypeLookupService DDS-XTypes 1.3 open
DDSXTY14-23 Missing alignment for XCDR1 mutable's sentinel DDS-XTypes 1.3b1 open
DDSRPC11-1 Mapping of one single Topic per Service does not work well with DDS Security DDS-RPC 1.0 open
DDSSEC12-74 Builtin Access Control operations (Table 63) missing entries DDS-SECURITY 1.1 open
DDSPSMC11_-95 Listener model breaks API design goal of automatic resource management DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-93 Typo fixes DDS-PSM-Cxx 1.0 open
DDSXTY14-21 Can structures contain constant declarations? DDS-XTypes 1.3b1 open
DDS15-313 Editorial corrections DDS 1.4 open
DDS15-199 Typo DDS 1.4 open
DDS15-312 Default value for WRITER_DATA _LIFECYCLE v should be FALSE DDS 1.4 open
DDSPSMC11_-94 DynamicType should be a value type, not a reference type DDS-PSM-Cxx 1.0b2 open
DDSXTY14-19 Confusing description of FINAL on 7.2.3 TypeExtensibilityandMutability DDS-XTypes 1.3b1 open
DDS15-311 Add a function that allows releasing any resources created by the DomainParticipantFactory DDS 1.4 open
DDSSEC12-84 The Qos used to publish the BuiltinLoggingTopic is not specicified DDS-SECURITY 1.1b1 open
DDSXTY14-14 Define Implied Keys Behavior DDS-XTypes 1.3b1 open
DDSXTY14-18 7.4.3.5.3 doesn't define OPTIONS DDS-XTypes 1.3b1 open
DDSXTY14-16 Spec text unclear DDS-XTypes 1.3b1 open
DDSXTY14-13 Be more precise on meaning of string lengths and bounds DDS-XTypes 1.3b1 open
DDSXTY14-15 Implementation Defined Default Nested Behavior DDS-XTypes 1.3b1 open
DDS15-310 get_discovered_participant_data() should return BAD_PARAMETER instead of PRECONDITION_NOT_MET DDS 1.4 open
DDSXTY14-12 Need to add an ignore_enum_literal_names in TypeConsistencyEnforcement QosPolicy DDS-XTypes 1.3b1 open
DDSXTY14-11 Clarify whether the algorithm to compute KeyHash is specific to XTYPES DDS-XTypes 1.3b1 open
DDSXTY14-10 Missing parameter in Annex C operation DynamicDataFactory::create_data DDS-XTypes 1.3b1 open
DDSXTY14-8 Extra text left in section 7.2.2.4.4.4.4 Member IDs DDS-XTypes 1.3b1 open
DDSOPCU11-1 Typos and Inconsistencies DDS-OPCUA 1.0 open
DDSSEC12-83 class_id string in Authentication/Permissions Tokens should include spec version DDS-SECURITY 1.1b1 open
DDSXRCE11-3 Extra fields in IDL of 7.8.2.1 create_client DDS-XRCE 1.0 open
DDSXTY14-6 Extra fields in IDL of 7.8.2.1 create_client DDS-XTypes 1.3b1 open
DDS15-256 Define InstanceHandle_t and DomainId_t portably DDS 1.4 open
DDS15-5 InstanceHandle_t/Domain ID DDS 1.2 open
DDS15-240 The start time of type Time_t is not defined DDS 1.4 open
DDS15-251 Wrong name for DataRepresentationQosPolicy field DDS 1.4 open
DDS15-246 Collection of longs misrepresented in 2.2.1.1 MyClass DDS 1.4 open
DDS15-247 Names of listener operations are incorrect in UML diagrams DDS 1.4 open
DDS15-249 Consider replacing @Choice annotation with XTYPES 1.2 unions DDS 1.4 open
DDS15-195 Typo in section 2.2.2.5 Subscription Module DDS 1.4 open
DDS15-188 DATAWRITER_QOS_USE_TOPIC_QOS and DATAREADER_QOS_USE_TOPIC_QOS DDS 1.2 open
DDS15-51 Invalid DURABILITY_SERVICE reference on the DataWriter DDS 1.2 open
DDS15-20 The DDS Specification should define legal DDS Topic Types DDS 1.4 open
DDS15-185 Invalid DURABILITY_SERVICE reference on the DataWriter DDS 1.1 open
DDS15-186 subset of OMG IDL DDS 1.1 open
DDS15-181 Typo on description of class TopicDescription DDS 1.2 open
DDS15-182 Clarification of create_multitopic behavior DDS 1.2 open
DDS15-184 create_contentfilteredtopic Method Prototype and Description Out DDS 1.2 open
DDS15-178 Clarification of instance_state -- Section: 2.1.2.5.1.3 DDS 1.2 open
DDS15-179 Clarify behavior of register_type operation DDS 1.2 open
DDS15-174 Typo in Section: 2.1.3 DDS 1.2 open
DDS15-176 Typo on descripton of "read" operation DDS 1.2 open
DDS15-172 Typo in Section: 2.2.3.14 DDS 1.2 open
DDS15-173 Typo in description of "persistence" service responsibility DDS 1.2 open
DDS15-34 'synchronous' and 'asynchronous' switched DDS 1.2 open
DDS15-35 Specify the allowed IDL Types within DDS Topic structs DDS 1.2 open
DDS15-37 DDS typos and omissions DDS 1.2 open
DDS15-153 Definition of BuiltinTopicKey_t DDS 1.2 open
DDS15-235 DURABILITY history depth should be de-coupled from the KEEP_LAST history depth used for reliability DDS 1.4 open
DDS15-32 No specific package definition for the entities of the model in case of JAVA language binding DDS 1.4 open
DDS15-33 Deprecated usage of IDL in the DDS spec DDS 1.2 open
DDS15-31 Mapping of OMG IDL to C++ for DDS DDS 1.2 open
DDS15-25 History and Reliability should be orthogonally independent concerns DDS 1.4 open
DDS15-21 Wrong definition of GROUPDATA_QOS_POLICY_NAME constant in IDL DDS 1.4 open
DDS15-14 : #define HANDLE_TYPE_NATIVE long typedef HANDLE_TYPE_NATIVE InstanceHandle_t; DDS 1.2 open
DDS15-15 For ContentFilteredTopic::get_expression_parameters the argument name is not given in the spec DDS 1.2 open
DDS15-16 Introduce new typedef for anonymous types DDS 1.2 open
DDS15-17 The get_sample_lost method seems to be part of the Subscriber class DDS 1.1 open
DDS15-8 DDS should require to annotate IDL to indicate which IDL types are used for dds DDS 1.2 open
DDS15-9 DDS specification should be more precise on NATIVE defines DDS 1.2 open
DDS15-10 Add DDS::STATUS_MASK_NONE DDS 1.2 open
DDS15-12 Add new mask which will let DDS callback on the listener to gets its mask DDS 1.2 open
DDSXTY14-5 Consider referencing DDS-XML for the XML type and data representations DDS-XTypes 1.3b1 open
DDS15-309 Extend SampleInfo with sequenceNumber and reception_timestamp DDS 1.4 open
DDS15-4 Spec lacks definition regarding uniqueness of InstanceHandle_t DDS 1.2 open
DDSRPC11-4 Consider replacing @Choice annotation with XTYPES 1.2 unions DDS-RPC 1.0 open
DDS15-197 Legal characters and length of Topic Name DDS 1.4 open
DDS15-1 TypeSupport::get_type_name should be precisely specified DDS 1.2 open
DDS15-27 behaviour of redefining multiple times the same topic with different QoS not clearly specified DDS 1.2 open
DDS15-26 Missing APIs for (read|take)_instance_w_condition DDS 1.4 open
DDS15-43 DDS DCPS Issue: PRESENTATION=GROUP and QoS DDS 1.2 open
DDS15-24 The compatibility rules for the Presentation QoS are too strict DDS 1.2 open
DDS15-303 PARTITION PolicyQos should be in DataReader/DataWriter DDS 1.4 open
DDS15-194 Coherent updates with best efforts DDS 1.4 open
DDS15-183 Clarification of resource management DDS 1.2 open
DDS15-177 Section: 2.1.2.5.3 clarification of parameters to 'read/take' operation DDS 1.2 open
DDS15-248 Deprecate Basic Service Mapping DDS 1.4 open
DDSXTY14-4 Wrong name for DataRepresentationQosPolicy field DDS-XTypes 1.3b1 open
DDS15-36 DURABILITYSERVICE_POLICY_NAME DDS 1.2 open
DDS15-23 When using GROUP access scope presentation QoS, allow for read/take outside of begin_access and end_access block DDS 1.2 open
DDS15-22 Allow for more optimized list returned by get_datareaders() DDS 1.2 open
DDS15-266 Organize definitions of Time_t, Duration_t and other common types in the PIM DDS 1.4 open
DDSSEC12-81 Authentication Protocol: Make what is validated in the messages more explicit DDS-SECURITY 1.1b1 open
DDS15-7 Add several with_profile methods DDS 1.2 open
DDS15-6 get_type_name, class or object method DDS 1.2 open
DDS15-258 Add a DomainTag to the PSM DDS 1.4 open
DDS15-3 Write with handle_nil underspecified DDS 1.2 open
DDS15-2 ContentFilteredTopics should be removed. Filtering belongs to DataReaders DDS 1.2 open
DDSXTY14-2 Specify more clearly which types have a name and how it is constructed DDS-XTypes 1.3b1 open
DDSXTY14-1 Add Unions to types supported in Queries and Filters DDS-XTypes 1.3b1 open
DDSSEC12-70 Protecting the Source Timestamp DDS-SECURITY 1.1b1 open
DDS15-255 What can be done with a disabled Topic? DDS 1.4 open
DDS15-254 Specify the behavior of instance state machine in case of a disconnect-reconnect scenario DDS 1.4 open
DDS15-253 Consider adding some of the concepts in the new PSMs to the PIM DDS 1.4 open
DDSPSMC11_-3 Missing get_discovered_participants and get_discovered_participant_data functions DDS-PSM-Cxx 1.0b2 open
DDS15-252 Clarify definition of counts in Plain Communication Status DDS 1.4 open
DDSPSMC11_-86 Instance handle constructor for TopicInstance should be deleted. DDS-PSM-Cxx 1.0 open
DDSPSMC11_-77 Unintuitive way to access extension member functions DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-69 Condition classes should only be used with WaitSets DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-71 Remove templatization for datatype from TopicDescription DDS-PSM-Cxx 1.0 open
DDSPSMC11_-82 MERGE CONFLICT: Modify Topic inheritance DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-25 Inheritance hierarchy of C++11 PSM conflicts with inheritance hierarchy from DDS PIM DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-73 Use consistent way to refer to vendor specific Delegate DDS-PSM-Cxx 1.0 open
DDSPSMC11_-7 Inconsistent ways to set functor in Condition types DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-79 MERGE CONFLICT: Modify description of additional StatusCondition constructor. DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-70 StatusCondition should have a singleton delegate DDS-PSM-Cxx 1.0 open
DDS15-52 DataReader semantics for historical data are insufficient DDS 1.2 open
DDSPSMC11_-75 MAP_TYPE enumeration constant should be redefined due to clash with POSIX macro DDS-PSM-Cxx 1.0b2 open
DDSJAVA11_-1 DataReader.read should return an Iterable collection, not an Iterator DDS-Java 1.0b2 open
DDSPSMC11_-1 API correction required to dds/sub/find.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-72 Transform AnyDataWriter and AnyDataReader from wrappers into parent classes. DDS-PSM-Cxx 1.0 open
DDSPSMC11_-74 Define relationship between Query and QueryCondition DDS-PSM-Cxx 1.0 open
DDSXRCE11-2 CREATE_CLIENT example: typo in hex representation of submessageLength DDS-XRCE 1.0b1 open
DDSXRCE11-1 Serial Transport (section C.1) should be a subsection of 11 DDS-XRCE 1.0b1 open
DDSSEC12-80 Add support for ChaCha20 DDS-SECURITY 1.1b1 open
DDSIRTP23-136 Erratum DDSI-RTPS 2.2 open
DDSRPC11-3 Remove the 'default' case in Requst and Return union types DDS-RPC 1.0 open
DDSXML11-1 Fix a number of typos in specification document DDS-XML 1.0 open
DDS15-244 Communication Status changes for multiple events DDS 1.4 open
DDSPSMC11_-66 Make use of C++11 final/override/delete DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-68 Small correctes to the specification DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-67 Normative references not complete and out of date DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-64 Missing TBuiltinTopicTypes DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-63 Provide extension constructors for standard classes DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-65 EntityQos is overly general DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-62 Names of the generated headers DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-61 Default Constructors DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-53 API corrections required to src/hpp/dds/core/Exception.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-51 API corrections required to src/hpp/dds/core/TQosProvider.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-52 API corrections required to src/hpp/dds/core/TInstanceHandle.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-50 Documentation comments corrections required to src/hpp/dds/domain/discovery.hpp & find.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-60 API correction required to src/hpp/dds/dds.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-55 API correction required to src/hpp/dds/core/status/TStatus.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-59 API correction required to src/hpp/dds/core/status/State.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-57 API correction required to src/hpp/dds/core/policy/TCorePolicy.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-56 API correction required to src/hpp/dds/sub/AnyDataReaderListener.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-54 Missing file dds/pub/detail/find.hpp referenced in src/hpp/dds/pub/find.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-47 Documentation comments corrections to src/hpp/dds/pub/TPublisher.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-48 API correction required to src/hpp/dds/sub/LoanedSamples.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-58 DataReader.hpp, ContentFilteredTopic.hpp, Topic.hpp, TopicDescription.hpp o not compile with MS Visual Studio DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-49 API correction required to src/hpp/dds/core/cond/detail/GuardCondition.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-28 Inconsistent use of Type/type - fix compilation DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-31 API correction required to src/hpp/dds/core/Optional.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-43 Example vendor code is incorrect DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-29 API correction required to src/hpp/dds/core/cond/TWaitSet.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-45 API correction required to src/hpp/dds/core/cond/StatusCondition.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-33 Code in src/hpp/dds/core/array.hpp does not compile DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-41 API correction required to src/hpp/dds/pub/AnyDataWriter.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-34 API correction required to src/hpp/dds/domain/qos/detail/DomainParticipantQos.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-32 API correction required to src/hpp/dds/domain/TDomainParticipant.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-42 src/hpp/dds/domain/TDomainId.hpp should be removed from the API DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-40 API correction required to src/hpp/dds/core/types.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-30 API correction required to src/hpp/dds/core/ref_traits.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-39 API correction required to src/hpp/dds/core/detail/conformance.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-44 API correction required to src/hpp/dds/pub/qos/detail/DataWriterQos.hpp & PublisherQos.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-36 Documentation comments corrections to src/hpp/dds/pub/discovery.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-35 API correction required to src/hpp/dds/pub/TSuspendedPublication.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-46 API correction required to src/hpp/dds/sub/TDataReader.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-37 API correction required to src/hpp/dds/sub/SubscriberListener.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-38 API correction required to src/hpp/dds/sub/DataReaderListener.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-27 API correction required to src/hpp/dds/sub/SharedSamples.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-23 API needs a standardized way of downcasting API entities DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-26 Name clash between Topic discovery functions DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-24 dds::topic::TBuiltinTopicKey should be completely customizable. DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-19 dds/core/cond/TCondition.hpp should have virtual methods DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-22 Ownership label SHARED is already defined as a macro in some SUN compilers DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-21 Compilation error in dds/core/policy/PolicyKind.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-20 dds/core/array.hpp is licensed under LGPL DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-12 Reference should provide comparison operators DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-15 Missing constants/functions to obtain the built-in topic names DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-14 API corrections required to dds/core/Duration.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-17 API correction required to dds/core/Time.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-8 API corrections required to dds/sub/AnyDataReader.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-13 API does not provide functionality from the DomainParticipantFactory DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-9 Correction required to dds/sub/ddssub.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-11 API correction required to dds/topic/TBuiltinTopic.hpp DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-16 Selector missing next_instance() function DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-18 dds/pub/find.hpp is incomplete DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-10 Declaring Reference::operator new() private causes undesired side effects DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-5 Generic InstanceHandle constructor should be explicit DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-2 Method SampleInfo::valid() should be renamed SampleInfo::valid_data() DDS-PSM-Cxx 1.0b2 open
DDSPSMC11_-6 API corrections required to ManipulatorSelector and related functions DDS-PSM-Cxx 1.0b2 open
DDS15-243 Dispose for topics without key DDS 1.4 open
DDSIRTP23-135 Use of Stateful versus Stateless Endpoints DDSI-RTPS 2.2 open
DDSRPC11-2 Errors in non-normative IDL of section 7.5.1.2.3 Mapping of Operations to the ReplyTopic Types DDS-RPC 1.0 open
DDSSEC12-77 Invalid IETF RFC document reference. DDS-SECURITY 1.1b1 open
DDSSEC12-76 IDL should be updated to match IDL 4.2 DDS-SECURITY 1.1b1 open
DDS15-242 set_expression_parameters on ContentFilteredTopic, MultiTopic DDS 1.4 open
DDSSEC12-73 Multiple grants in a permissions document DDS-SECURITY 1.1b1 open
DDSSEC12-72 serialized_local_participant_data passed to Auth plugin DDS-SECURITY 1.1b1 open
DDS15-241 Clarify when a dispose or unregister may be omitted for a Reader DDS 1.4 open
DDSSEC12-71 Inconsistent descriptions of Data Tagging DDS-SECURITY 1.1b1 open
DDSSEC12-69 Builtin Auth dependency on Access Control details DDS-SECURITY 1.1b1 open
DDS15-238 Add restrictions and guidelines that are required when writing GROUP coherent sets DDS 1.4 open
DDS15-239 Add resource limits related to coherent changes DDS 1.4 open
DDSSEC12-68 Add explanation of how to use the secureWriterSet to support GROUP ordered access DDS-SECURITY 1.1b1 open
DDSSEC12-67 Misleading description of Crypto Key Exchange (8.5.1.8) DDS-SECURITY 1.1b1 open
DDSSEC12-66 IDL struct ParticipantSecurityAttributes contains ac_endpoint_properties DDS-SECURITY 1.1b1 open
DDSSEC12-65 validate_remote_permissions interaction with Authentication Plugin DDS-SECURITY 1.1b1 open
DDSSEC12-64 get_topic_sec_attributes 3rd parameter type DDS-SECURITY 1.1b1 open
DDSSEC12-63 Operation: set_permissions_credential_and_token DDS-SECURITY 1.1b1 open
DDS15-237 How to handle some GROUP ordered Subcriber scenarios DDS 1.4 open
DDS15-236 Request/Offered behavior of DURABILITY Qos does not match use-cases DDS 1.4 open
DDS15-234 Incorporate common elements from DDS Security to the Builtin Topics DDS 1.4 open
DDS15-208 Add DataTagQosPolicy DDS 1.4 open
DDS15-209 Define ranges of QosPolicyId_t DDS 1.4 open
DDS15-50 Add name attribute to Entity DDS 1.2 open
DDS4CCM11-15 Schema appears to be missing root element DDS4CCM 1.1 open
DDS15-207 Durability section typos DDS 1.4 open
DDS15-206 BuiltinTopicKey_t should be completely customizable. DDS 1.4 open
DDS15-205 Specify behavior of filters and queries relative of lifecycle events DDS 1.4 open
DDS15-204 Add API for "directed writes" DDS 1.4 open
DDS15-203 Topic Names are Restricted to Characters, Digits, and Hyphens DDS 1.4 open
DDSSEC_-190 Multiple DataReaders per topic on secured Participant DDS-SECURITY 1.0 open
DDS15-202 Relationship between begin/end coherent changes and presentation.coherent_access==true DDS 1.4 open
DDS15-201 No specification for unregister_type for TypeSupport interface DDS 1.4 open
DDS4CCM11-14 Remove key_fields DDS4CCM 1.1 open
DDS15-200 Syntax for Topic Names DDS 1.4 open
DDS15-198 Add a write_sequence() operation to DataWriter DDS 1.4 open
DDSJAVA11-17 Correct inconsistency on the URLs for the machine readable documents DDS-Java 1.0 open
DDS15-175 Clarify behavior of "take" operation DDS 1.2 open
DDS15-180 Behavior of multiple calls to create_topic -- Section: 2.1.2.3.2 DDS 1.2 open
DDS15-196 Clarify RxO behavior for DURABILITY Qos DDS 1.4 open
DDS15-30 [DDS] Data types permissible as topic key fields DDS 1.2 open
DDS15-171 Force KEEP_ALL to be RELIABLE Section: 2.1.3.18 DDS 1.2 open
DDS15-45 Cancel coherent update DDS 1.2 open
DDS15-190 Specify Publishers with PRESENTATION access_scope GROUP should use same order for DataWriters DDS 1.4 open
DDSWEB11-2 The file dds-xtypes_type_definition.xsd should not define a targetNamespace DDS-WEB 1.0b1 open
DDSWEB11-1 JSON Missing DDS-WEB 1.0b1 open
DDSIRTP2-60 missing space "eachother" DDSI-RTPS 2.0b1 open
DDS15-49 Semantics instance liveliness and ownership unclear DDS 1.2 open
DDS15-44 Get entity enabled state DDS 1.2 open
DDS15-29 All IDL should use local interfaces DDS 1.4 open
DDS15-47 Inconsistent lookup semantics DDS 1.2 open
DDS15-48 Missing TypeSupport operations DDS 1.2 open
DDS15-11 Extend Topic with method to retrieve key fields DDS 1.2 open
DDS11-10 Attributes_on_the_data DDS 1.0b1 open
DDS4CCM11-5 Make all arguments inout DDS4CCM 1.0 open
DDS4CCM11-7 DDS_TopicBase connector lacks type_name DDS4CCM 1.0 open
DDS4CCM11-1 Name patterns should support underscores and scoping DDS4CCM 1.0 open
DDS11-2 Ref-232 Allow_reader_to_access_partition_of_writer DDS 1.0b1 open
DDS11-3 ref-1053 Missing is_composition DDS 1.0 open
DDS4CCM11-4 Make topic_name changeable DDS4CCM 1.1 open
DDS4CCM11-9 Section 8.4.4 talks about threading, but this section is really under specified DDS4CCM 1.0b1 open
DDS11-4 Detection_of_dynamic_qos_failure Issue DDS 1.0b1 open
DDS4CCM11-8 Let the user be able to instantiate one dds connector DDS4CCM 1.0 open
DDS11-12 Extension_to_the_query_language DDS 1.0b1 open
DDS11-1 Ref-167 Malloc_required_for_get_default_qos DDS 1.0b1 open
DDS11-5 Additional_qos_THROUGHPUT Issue DDS 1.0b1 open
DDS11-8 DDS ISSUE# 50] Multiple observers sharing a datareader DDS 1.0b1 open
DDS11-11 Filtered_out_lifecycle_state Issue DDS 1.0b1 open
DDS4CCM11-3 StateListenerControl:: is_filter_interpreted should be documented as optional DDS4CCM 1.0 open
DDS4CCM11-6 Layout issue test DDS4CCM 1.0 open
DDS11-9 DDS ISSUE# 51] Avoid use of dynamic memory for manipulating QoS DDS 1.0b1 open
DDS4CCM11-2 attributes as part of porttype do appear on port and mirrorport DDS4CCM 1.0 open
DDS11-7 Key_separate_from_data Issue DDS 1.0b1 open
DDS11-6 DDS ISSUE# 47] Allow application to not specify a timstamp DDS 1.0b1 open
DDS4CCM11-11 proposed simple spec extension for common DDS use case DDS4CCM 1.1 open
DDS4CCM11-10 The model file ptc/11-02-11 is not valid UML – it has eclipse namespace and extraneous elements DDS4CCM 1.0 open
DDS11-14 'synchrobnous' and 'asynchronous' switched DDS 1.1 open
DDS11-13 section 2.1.2.5.2.16 "get_default_datareader_qos" DDS 1.1 open
DDSJAVA11-6 Inconsistency in close() operations wrt. "throw java.io.IOException" declaration DDS-Java 1.0 open
DDSJAVA11-5 Operations with Collection as parameter should provide a "varargs" alternative DDS-Java 1.0 open
DDSJAVA11-12 StatusCondition should be immutable and have fluent API DDS-Java 1.0 open
DDSJAVA11-11 Error in Javadoc of DomainParticipantFactory.createParticipant(domain, qos, listener, statuses) DDS-Java 1.0 open
DDSJAVA11-8 In DomainParticipantFactoryQoS interface withPolicy() and withPolicies() have wrong parameters types DDS-Java 1.0 open
DDSJAVA11-7 The PolicyFactory class misses operations for Presentation and TopicData creation DDS-Java 1.0 open
DDSJAVA11-16 Missing "not" DDS-Java 1.0b1 open
DDSJAVA11-15 The resolution of the FTF Issue 15966 was partially applied DDS-Java 1.0 open
DDSJAVA11-10 The DataReaderQos interface misses a getReliability() operation DDS-Java 1.0 open
DDSJAVA11-9 Error in implementation of TypeSupport.newTypeSupport() DDS-Java 1.0 open
DDSJAVA11-14 In WaitSet all waitForCondition() operations should return the triggered conditions DDS-Java 1.0 open
DDSJAVA11-13 WaitSet should be aligned to the ISO C++ IDDS PSM DDS-Java 1.0 open
DDSJAVA11-2 ModifiableInstanceHandle should be removed DDS-Java 1.0 open
DDSJAVA11-1 The current Java PSM makes an implicit assumptions on member ordering DDS-Java 1.0b1 open
DDSJAVA11-4 Bucket accessors shall be removed DDS-Java 1.0 open
DDSJAVA11-3 RequestOffered.requestedOfferedContract() semantic should be removed DDS-Java 1.0 open
DDS15-187 Durability Implementation Description does not consider the role of partitions DDS 1.4 open

Issues Descriptions

writing error

  • Status: open   Implementation work Blocked
  • Source: Shanghai Action Technology Co., Ltd. ( Action Hao)
  • Summary:

    The original text reads:
    The RTPS protocol version 2.5 defines the following special values.
    PROTOCOLVERSION_1_0
    PROTOCOLVERSION_1_1
    PROTOCOLVERSION_1_0 PROTOCOLVERSION_1_1
    PROTOCOLVERSION_2_1
    PROTOCOLVERSION_2_2
    PROTOCOLVERSION_2_2
    PROTOCOLVERSION_2_4

    Two PROTOCOLVERSION_2_2 appeared
    I think it should be PROTOCOLVERSION_2_3

  • Reported: DDSI-RTPS 2.5 — Thu, 18 Apr 2024 10:36 GMT
  • Updated: Mon, 22 Apr 2024 15:53 GMT

Minor clarifications and enhancements

  • Key: DDSTSN-3
  • Status: open  
  • Source: Real-Time Innovations ( Mr. Fernando Garcia-Aranda)
  • Summary:

    In Clause 7.2.2, the term "network topology description" seems odd. The text should probably refer to the deployment configuration model.

    In Table 7.19, "DataFrameSpecification Definition", the second bullet point should only refer to UDP/IP, not "TCP/IP".

    In Clause 8.2.2 should clarify that endpoints in the context of DDS entities refer to DataReaders and DataWriters, the term may confuse readers coming from different backgrounds.

    In Clause B.1.2, the clarification on manual configurations that need to calculate a schedule should probably mention they need to calculate whether the requirements can be met (schedule may be a confusing term in that context).

    In B.2.1.1, "Square Stream Configuration", the destination-mac-address in the status response should be "01-00-5E-7F-FF-01" (given the destination multicast IP address).

    In B.2.1.2, "Triangle Stream Configuration", the destination-mac-address in the status response should be "01-00-5E-7F-FF-02" (given the destination multicast IP address).

  • Reported: DDS-TSN 1.0a1 — Sun, 31 Mar 2024 19:40 GMT
  • Updated: Sat, 13 Apr 2024 00:15 GMT

Update references to 802.1Qcc and 802.1Qcr, which have been merged into 802.1Q

  • Key: DDSTSN-1
  • Status: open  
  • Source: Real-Time Innovations ( Mr. Fernando Garcia-Aranda)
  • Summary:

    IEEE 802.1Q has recently (as of 2022) incorporated several specifications that have been developed in parallel. That is the case of 802.1Qcc, which this specification heavily relies on, and 802.1Qcr. This is part of the regular process of IEEE.

    At the time of publication of the revised submission, 802.1Q-2022 was being voted and finalized, so the Beta 1 version of DDS-TSN points to 802.1Q-2018, 802.1Qcc, and 802.1Qcr. We should update these references and point to 802.1Q-2022, which now includes both Qcc and Qcr.

  • Reported: DDS-TSN 1.0a1 — Sun, 31 Mar 2024 17:58 GMT
  • Updated: Sat, 13 Apr 2024 00:15 GMT

Provide mechanisms to extend Governance and Permissions files without breaking interoperability

  • Key: DDSSEC12-3
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The specification does not state what to do when Permissions and Governance files contain "extra elements" that are not valid according to the XSD.

    This is expected to occur both as a result of vendor extensions as well as due to additions in future versions of DDS Security.

    Allowing these extensions/additions without breaking compatibility is important. So the spec should be clear in that they are allowed and also provide rules/guidelines on them.

    Some possibilities:

    • Simply state that elements that are not expected/understood should be ignored
    • Same as above but provide some structure for those elements. E.g. specify that they must have a "vendorId" attribute (used to avoid collisions) and a "mustUnderstand" attribute used to force failure in some cases.
    • Define an "extensions" element that has known structure (e.g. name/value pairs) which is the one used for the extensions.
    • Others to be proposed.

    Common approaches are described here: http://www.ibm.com/developerworks/library/x-xtendschema/
    This document also discusses various approaches: https://www.xml.com/pub/a/2004/10/27/extend.html

  • Reported: DDS-SECURITY 1.0b1 — Sat, 20 Feb 2016 01:36 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT
  • Attachments:

Indicate that AccessControl operations need to be called on a set_qos

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The operations
    check_create_participant
    check_create_datawriter
    check_create_datareader
    check_remote_participant
    check_remote_datawriter
    check_remote_datareader
    check_local_datawriter_match
    check_local_datareader_match

    Should be called when the Qos (or the discovery XXXBuiltinTopicData) change for the one of the involved entities.

    This should be added to the proper 8.4.2.9.x sections.

  • Reported: DDS-SECURITY 1.1b1 — Sat, 9 Jun 2018 00:16 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Errors in non-normative IDL of section 7.5.1.2.3 Mapping of Operations to the ReplyTopic Types

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 7.5.1.2.3 Mapping of Operations to the ReplyTopic Types cotntains the following IDL:

    @Choice @Autoid
    struct RobotControl_command_Result { 
        RobotControl_command_Out result;
    };@Choice @Autoid
    struct RobotControl_stop_Result { 
        RobotControl_getSpeed_Out result;
    };
    };@Choice @Autoid
    struct RobotControl_setSpeed_Result {
          RobotControl_setSpeed_Out result;
          TooFast toofast_ex;
    };
    };@Choice @Autoid
    struct RobotControl_getSpeed_Result {
          RobotControl_getStatus_Out result;
    };
    

    This IDL is not correct. It contains extra "};" preceding the @Choice annotations in several places. The correct IDL would be:

    @Choice @Autoid
    struct RobotControl_command_Result { 
        RobotControl_command_Out result;
    };
    
    @Choice @Autoid
    struct RobotControl_stop_Result { 
        RobotControl_getSpeed_Out result;
    };
    
    @Choice @Autoid
    struct RobotControl_setSpeed_Result {
          RobotControl_setSpeed_Out result;
          TooFast toofast_ex;
    };
    
    @Choice @Autoid
    struct RobotControl_getSpeed_Result {
          RobotControl_getStatus_Out result;
    };
    
  • Reported: DDS-SECURITY 1.1b1 — Wed, 29 Aug 2018 00:41 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

check_remote_participant when default is ALLOW

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The check_remote_participant row of Table 63 contains the text:

    If the Permissions document contains a Grant for the remote
    DomainParticipant and the Grant contains an allow rule on the
    DomainParticipant domain_id, then the operation shall succeed and
    return TRUE.

    It seems like the intent is to ensure that there is some possible Action that this participant can do in the domain. That should take into account a <default>ALLOW</default> permission.

    In general the <default> XML element seems to be not fully/consistently described in the section for Built-In Access Control. The xsd says it must be present, but section 9.4.1.3.2.3 says it may not be.

  • Reported: DDS-SECURITY 1.1b1 — Tue, 23 Jun 2020 04:13 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Mutability of PartitionQos

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    In 7.3.5 (Immutability of Publisher Partition Qos in combination with non-volatile...)

    The criteria (1) is not consistent with the goal stated at the end of the section about "prevents data that was published while the DataWriter had associated a set of Partitions from being sent to DataReaders that were not matching before the Partition change and match after the Partition is changed."

    To accomplish this criteria (1) should be re-stated to say this impacts if the Topic associated with the DataWriter has TopicSecurityAttributes with is_read_protected set to TRUE.

  • Reported: DDS-SECURITY 1.1b1 — Tue, 10 Apr 2018 00:03 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Using string literals as binary_property values inside Handshake Tokens

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    In the definition of the various Handshake Tokens, certain property values are specified with literal strings in the spec (such as "RSASSA-PSA-SHA256"). Since these are inserted into binary_properties, the spec should describe the encoding: is there a length prefix (like CDR string?), is there a trailing nul (like CDR string?), assume the encoding is ASCII but it would be good to specify this.

  • Reported: DDS-SECURITY 1.1b1 — Wed, 11 Apr 2018 18:24 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Define rules for references between elements

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The syntax in DDS-XML containes places where an object references another object. This is done normally using an attribute with type elementNameReference defined in http://www.omg.org/spec/DDS-XML/20170301/dds-xml_domain_definitions_nonamespace.xsd

    However the specification does not deny any rules/constraints on the references themselves. In fact those references must follow a precise syntax to uniquely select an element which require a full path down the containment hierarchy down to the selected element.

    The specification should define this and provide some examples.

  • Reported: DDS-SECURITY 1.1 — Sat, 6 Jan 2018 23:52 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

CryptoTransformIdentifier extensibility FINAL is not compatibly with its derived classes

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 7.3.7.3 defines CryptoHeader as inheriting from CryptoTransformIdentifier. However CryptoHeader is APPENDABLE and CryptoTransformIdentifier is FINAL.

    This does not seem possible according to XTYPES.

    Other places of the spec (section 9.5.2.3 "DDS:Crypto:AES-GCM-GMAC CryptoHeader") define it as final.

  • Reported: DDS-SECURITY 1.1 — Sat, 16 Dec 2017 04:11 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

How are 'subject_name' fields compared?

  • Status: open  
  • Source: Twin Oaks Computing, Inc. ( Mr. Clark Tucker)
  • Summary:

    In 9.4.1.3.2 Grant Section, the spec states:

    "A permissions [sic, should be grant] Section with a subject name that does not match the subject name given in the corresponding Authorization certificate shall be ignored."

    It is not clear what algorithm should be applied to determine if two subject_names "match"; and this has interoperability implications.

    A 'simple' approach would be a simple string comparison.

    A 'complex' approach would be to do the following:

    1) parse each subject_name as a series of name=value pairs,
    2) check that all name's exist in each subject_name
    3) check that for each name, the corresponding 'value' matches, using regex (for example fnmatch(), or similar) processing.

    The more complex approach might be beneficial, because it could support using a 'wildcard' Common Name. For example, in the permissions file, use a Subject Name like this:

          <subject_name>/C=US/ST=CO/O=Twin Oaks Computing/CN=*.twinoakscomputing.com/emailAddress=support@twinoakscomputing.com</subject_name>
    

    Then, the Identity Cert's could be constructed with a more specific Subject Name, like "CN=participant1.twinoakscomputing.com", and it would match.

  • Reported: DDS-SECURITY 1.1 — Tue, 22 Jun 2021 21:09 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Built-in Access Control: interpretation of enable_read/write_access_control

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The check_create_participant entry of "Table 63 - Actions undertaken..." in the case where is_access_protected is true and all topic entries in Governance have enable_read_access_control and enable_write_access_control both true specifies that check_create_participant returns false. Thus the participant can't be created and this configuration won't be usable.

    If the intent of enable_read/write_access_control is to defer to the Permissions document to determine both readability and write-ability of this participant (for the given topic) it would seem like this case should be supported and allowed by check_create_participant.

    As part of resolving this issue we should also address DDSSEC12-85, meaning state whether a <default> clause should always be present.

  • Reported: DDS-SECURITY 1.1 — Fri, 16 Nov 2018 23:24 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Complexity of Authentication Plugin Model

  • Key: DDSSEC12-1
  • Legacy Issue Number: 19793
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Julien Enoch)
  • Summary:

    The Authentication Plugin Model specifies a state machine to be implemented by the DDS middleware to manage the authentication of the remote Participants. The implementation of this state machine is complex because:

    • It is not specified when to call validate_remote_identity (for each received SPDP or only for the first received SPDP from a newly discovered Participant? What if a malicious Participant send a SPDP at first, usurping the GUID of a legit Participant?)
    • The handshake could be initiated from both sides at nearly the same time (nothing forbid this in §8.3)
    • There is no indication in the specification to tell how parallel handshakes between 2 Participants should interact
    • It is difficult to determine at which sense a received message belongs
    • In §8.3.2.8.1 it's specified that "The DDS security implementation shall pass to the AuthenticationPlugin any message received by the BuiltinParticipantStatelessMessageReader...". But there are states in the state machine where it's not specified how to pass those messages (e.g. when validate_remote_identity has not been called yet, and the state machine is not initialized)

    This results in quite complex code, and this is a weakness in a mechanism which needs to be very strong.

    Anyway, the state machine in the middleware is redundant with the one needed in the plugin. In addition, it has to deal with events where it doesn't know what is really going on. Only the plugin has the real information. Therefore, we think this middleware state machine is useless, add extra complexity which makes the authentication less robust, and consumes a lot of resources.

    Instead, we suggest to remove it and to change the mechanism to the following:

    • remove all the "_handshake" methods on the Authentication Plugin
    • add a treat_message method to the authentication plugin to handle any incoming authentication ParticipantStatelessMessage
    • add a send_message method to the authentication listener interface to tell the middleware to send an authentication ParticipantStatelessMessage
    • add a validated_remote_participant method to the authentication listener interface to tell the middleware that the indicated participant is authenticated
    • add a invalidated_remote_participant method to the authentication listener interface to tell the middleware that the indicated participant is not authenticated
    • once the authentication is initialised with validate_remote_identity, all the state machine is managed directly by the plugin which sends the appropriate messages and is given the received ones, until its decision is given to the DDS middleware through the authentication listener.

    This will provide the necessary functionality in a much simple, efficient and robust manner.

  • Reported: DDS-SECURITY 1.0b1 — Thu, 11 Jun 2015 04:00 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Underspecified RSASSA-PSS-SHA256 Salt Length

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The DDS Security version 1.1 specification mentions:

    If the Participant Private Key is a RSA key, then:

    The value of the c.dsign_algo property shall be “RSASSA-PSS-SHA256”.
    The digital signature shall be computed using the RSASSA-PSS algorithm specified in PKCS #1 (IETF 3447) RSA Cryptography Specifications Version 2.1 [44], using SHA256 as hash function, and MGF1 with SHA256 (mgf1sha256) as mask generation function.
    This RFC is the one aforementioned. It states:

    This encoding method is parameterized by the choice of hash function, mask generation function, and salt length. These options should be fixed for a given RSA key, except that the salt length can be variable (see [31] for discussion). Suggested hash and mask generation functions are given in Appendix B.

    In the appendix, we can see an example where the salt length is the same as the hash length:

    RSASSA-PSS-params ::= SEQUENCE
    Unknown macro:
    Unknown macro:

    { hashAlgorithm [0] HashAlgorithm DEFAULT sha1, maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT mgf1SHA1, saltLength [2] INTEGER DEFAULT 20, trailerField [3] TrailerField DEFAULT trailerFieldBC }

    However, the salt length doesn't have to be the hash length. The WolfSSL and OpenSSL crypto libraries support several options (Openssl doc here and WolfSSL doc here). Our current approach is to use OpenSSL's default option: "maximum permissible value" (pkcsBlockLen - hLen - 2) when signing and auto (detect salt length from the signature) when verifying.

    proposed solution
    The specification should mention the salt length used when generating the signature. Otherwise, it should say that auto must be used when verifying the signature. This would allow interoperability (WolfSSL for example doesn't use auto by default).

  • Reported: DDS-SECURITY 1.1b1 — Thu, 21 Oct 2021 10:02 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Sectiob 8.2.1 Expand set of submessages that may be sent on TSN streams

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 8.2.1 Message Module says:

    To provide a deterministic behavior and a deterministic message size, DataWriters associated with an TsnTalker in the Deployment configuration (see subclause 7.2.3.1) may need to limit their RTPS Message exchange to RTPS Messages that include the following RTPS Submessages:
    • InfoTimestamp
    • Data
    • DataFrag

    This should be expanded to include the RTPS HeaderExtension as well as GAP.

    Later in the section there is an explanation of why GAP may not be needed:

    RTPS Submessages responsible for achieving reliability or in-order delivery, such as Gap, AckNack, NackFrag; as well as the rest of Interpreter Submessages, may be sent as part of “Best Effort” Streams. However, given the guarantees of the underlying TSN system, this sort of traffic may be unnecessary for TSN-enabled DataReaders and DataWriters. Also, retransmissions and other types of aperiodic traffic may fail to meet the schedule and configuration of the TSN Streams associated with the delivery of time-critical data.

    However GAP is not just for reliability or in-order delivery. It is also used in best-efforts in situation where a sample is not relevant to a reader (e.g. because of writer-side content filtering), even if the sample is sent best-efforts.
    Gaps are needed to distinguish lost samples from samples that are intentionally-skipped. If the gap is not present, the reader side will interpret non sequential sequence numbers as sample loss, impacting status variables in in the DataReader.

  • Reported: DDS-SECURITY 1.1b1 — Tue, 4 Jul 2023 23:48 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

DDS-Security impact on DDS-TSN

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The specification does not address whether DDS-Security can be deployed on top of TSN.
    The logical assumption would be yes, but then the use of the RTPS sub-messages introduced by DDS security (e.g. SRTPS_PREFIX) should be mentioned.

  • Reported: DDS-SECURITY 1.1b1 — Tue, 4 Jul 2023 23:51 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Built-in Authentication and Cryptography plugins tied together by SharedSecretHandle implementation

  • Key: DDSSEC12-2
  • Status: open  
  • Source: THALES ( Cyril Dangerville)
  • Summary:

    An implementation of the built-in Cryptography plugin is not compatible with the local implementation of the built-in Authentication, unless it uses/understands the same type of SharedSecretHandle. (SharedSecretHandle is the interface defined at the architecture level.) Therefore, the two built-in plugins are tied together and you cannot replace one or another with any other implementation of the same built-in plugin.
    It is possible to make them independent in two possible ways (at least):

    1. Define a BuiltinSharedSecretHandle that extends SharedSecretHandle interface, and has 3 methods like this:
      • octet[] getChallenge1(): returns challenge1 from the authentication handshake
      • octet[] getChallenge2(): returns challenge2 from the authentication handshake
      • octet[] getSharedSecret(): returns the shared secret from the authentication handshake
    2. OR define a new type of Token (IDL structure) - e.g. HandshakeResultToken - for the final output of the Authentication handshake like this:
      • class_id DDS:Auth:PKI-DH:1.0+Result
      • binary_properties: challenge1, challenge2, SharedSecret

    In both cases, it would change the specs of the methods get_shared_secret() and return_shared_handle() of the Authentication plugin, section 9.3.3.

  • Reported: DDS-SECURITY 1.0b1 — Tue, 1 Mar 2016 17:36 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

The DDS-Security specification makes some modifications to the DDSI-RTPS protocol that should be taken into consideration

  • Key: DDSSEC12-7
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The following two sections in DDS-Security 1.1 affect future versions of DDSI-RTPS.

    The DDSI-RTPS should include language that makes sure future versions do not conflict with what DDS-Security and future revisions thereof may do.

    Specifically the following two sections of DDS-Security 1.1 should be taken into consideration

    7.3.6.1 Change to the RTPS minor version number
    Implementations of this specification shall set the RTPS protocol version number present in the RTPS Header. The RTPS Major version number shall be set to 2 and the RTPS Minor version number shall be set to 3. Future revisions of the DDS-RTPS specification shall take into consideration this fact.

    7.4.1.3 Reserved RTPS parameter IDs
    This specification reserves the RTPS Simple Discovery Protocol ParameterIDs in the range:
    0x1000 to 0x1FFF and 0x5000 to 0x5FFF. The second interval covers the same range of parametersID, except they have the must-understand bit set. This reserved range applies to RTPS version 2.3 (see 7.3.6.1) and higher minor revisions of RTPS. Future revisions of the DDS-RTPS specification shall take into consideration this fact.

  • Reported: DDS-SECURITY 1.0 — Mon, 25 Sep 2017 09:48 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Examples of Wildcard permissions

  • Key: DDSSEC12-4
  • Status: open  
  • Source: THALES ( Cyril Dangerville)
  • Summary:

    It is not clear whether the Permissions XSD allows to express all kinds of wildcard permissions. Just to make sure we cover all cases, we should give examples of permissions XML that grant only...

    1. all permissions to any domain? ("all permissions" = join, pub/sub/relay to any topic/partition/data_tag, etc.)
    2. all permissions to a specific domain, e.g. domain 0?
    3. all permissions to all topics of domain 0? ("all permissions" = pub/sub/relay, etc.)
    4. all permissions to all partitions of domain 0?
    5. all permissions to a specific topic, e.g. "Circle1", of domain 0?
    6. all permissions to a specific partition, e.g. "P1", of domain 0?
    7. the permission to publish to any topic of domain 0? (but not subscribe/relay)
    8. the permission to publish to any partition of domain 0? (but not subscribe/relay)

    Such examples would be very useful in the spec as well.

  • Reported: DDS-SECURITY 1.0 — Tue, 11 Jul 2017 12:43 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT
  • Attachments:

The UML model should be cleaned up

  • Key: DDSSEC12-5
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    There are some issues with the UML model that should be improved. This came from the AB review of the RTF 1 report:

    ● SubmessageKind should be an Enumeration not a Class. And it’s missing its Literals. Tables 4,5 indicate Literals would include SEC_BODY, SEC_PREFIX, SEC_POSTFIX, SRTPS_PREFIX, SRTPS_POSTFIX
    ● SubmessageFlag is totally underspecified but probably should not be a PrimitiveType
    ● Likewise CryptoState. In fact there are far too many PrimitiveTypes, none of them documented, which should probably be Strings.

  • Reported: DDS-SECURITY 1.0 — Mon, 25 Sep 2017 17:53 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

The specification should not duplicate (copy) the machine readable XSD files

  • Key: DDSSEC12-9
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The specification contains full copies of the machine readable XSD files:

    • DDS Security Access Control Permissions XSD
    • DDS Security Access Control Governance XSD

    This causes problems as updates may not always be done consistently.

    Therefore it would be better if the specification removed this duplication and just referenced the external machine-readable files.

  • Reported: DDS-SECURITY 1.0 — Mon, 25 Sep 2017 09:30 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Section 3 (Normative References) should be updated and expanded

  • Key: DDSSEC12-8
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The specification depends on many other standards that appear referenced thought the specification and in Annex A (References) but do not appear in Section 3.

    Section 3 should be expanded to include the subset of those references that are used for normative behavior. [46], [47], and [52] are clear examples of references that should be moved to Section 3.

  • Reported: DDS-SECURITY 1.0 — Mon, 25 Sep 2017 07:02 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Remove Jira-issue related comments from machine-readable files

  • Key: DDSSEC12-6
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The machine-readable files have comments that trace their changes to the Jira issues that caused them. This hurts the use of the specification so they should be removed.

  • Reported: DDS-SECURITY 1.0 — Mon, 25 Sep 2017 10:24 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Avoid sending permissions as part of Authentication Handshake

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The authentication handshake requires participants to exchange their permission files. This is done as clear text.

    Visibility into the permissions file leaks information as to what the system Topic names are as well as what the application publishes and subscribes. This can be sensitive for some systems.

    Aside form this sending this document is potentially expensive as the knowledge could be available on a separate channel.

    The RTF should look share this information only with authenticated participants and possibly also avoid sending it if it is already known to the peer participant.

    Related this is the fact that permissions are "monolithic" of you need to add a permission to a Participant you need to create and sign a new document. Would be nice to have some way to grant/propagate incremental permissions. E.g. something that could be bundled into the propagation of the Endpoint discovery data itself.

  • Reported: DDS-SECURITY 1.1 — Sat, 18 Nov 2017 00:42 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Instance-Level access-control

  • Status: open   Implementation work Blocked
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The Security plugin model supports being able to control access to each DDS Topic instance (instead of just controlling access to the DDS Topic). However the builtin plugin permission files do not provide a way to configure these permissions.

    This is important for many DDS-Security use-cases where each instance represents a different object and needs to separately indicate who has access to it. For example imaging a "CarPosition" topic that is used to publish the position of cars. Someone may be given permission to suscribe or publish its own car position, but not other cars. Likewise a manufactured or insurance company may be given permissions to the cars that they manage but not others.

  • Reported: DDS-SECURITY 1.1 — Fri, 17 Nov 2017 02:07 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Allow expressions to be used in the data-tag permissions

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The permissions document allow and deny rules contain a section for matching the data tags of the DataReader/DataWriter. The match is based on an exact match of the tag-name and tag-value.

    For consistency with the way we match the permissions for Topic and Partitions we should also allow an expression for the tag-value portion. This is only for the permission rule itself. Not for the DataTag QosPolicy.

    So to match the rule the DataTag name in the Qos must exactly match the name in the permissions document (no expressions here) and the DataTag value in the Qos should match (using fnmatch) the expression in the permissions document.

  • Reported: DDS-SECURITY 1.1 — Thu, 18 Jan 2018 23:24 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Authentication interface begin_handshake_reply()

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Normative IDL has no parameter handshake_message_in (from Table 23). It would be possible to use handshake_message_out to serve the purposes of "in" since it's an inout parameter in IDL, but is that the intention here?

  • Reported: DDS-SECURITY 1.1b1 — Wed, 10 Jan 2018 19:37 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

DataHolder IDL inconsistent

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    In 7.2.3.1, DataHolder is a struct annotated with @extensibility(APPENDABLE) and no optional fields.
    However in ptc/17-09-26 (normative IDL), DataHolder has no @extensibility annotation and two optional fields.

  • Reported: DDS-SECURITY 1.1b1 — Thu, 4 Jan 2018 21:38 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

say explicitly that is_valid is set to zero if that is case

  • Status: open  
  • Source: Upham Security ( Frederick Hirsch)
  • Summary:

    At end of 2nd to last para document has (matching the errata):

    "sending the ParticipantSecurityInfo (the default value of zero has is_valid=0) or sending it with is_valid."

    It should probably be

    "sending the ParticipantSecurityInfo (the default value of zero has is_valid=0) or sending it with is_valid set to zero.”

  • Reported: DDS-SECURITY 1.1b1 — Tue, 31 Oct 2017 20:03 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Issues with the UML model used in the specification

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The UML diagrams in the specification use UML stereotypes, such as <<discovery>>. However these are not documented anywhere in the specification nor do they appear in the XMI.

    Also the diagrams are non-standard UML in that they show superclasses in the top right corner. See for example Figure 10.

    These issues should be corrected.

  • Reported: DDS-SECURITY 1.0 — Mon, 25 Sep 2017 07:07 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

get_datawriter/reader_sec_attributes inconsistent IDL

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Table 32 (8.4.2.9) has a topic_name parameter for both get_datawriter_sec_attributes and get_datareader_sec_attributes, however this parameter is not present in the normative IDL.

  • Reported: DDS-SECURITY 1.1b1 — Tue, 30 Jan 2018 18:59 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

decode_datawriter_submessage uses "in" for SecurityException

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    In the normative IDL interface CryptoTransform, the decode_datawriter_submessage operation uses the "in" parameter passing mode for SecurityException – should be "out" or "inout".

  • Reported: DDS-SECURITY 1.1b1 — Tue, 30 Jan 2018 18:54 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Authentication interface set_permissions_credential_and_token

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    In the normative IDL, the type of the 2nd parameter for set_permissions_credential_and_token is listed as PermissionsCredential but should PermissionsCredentialToken.

  • Reported: DDS-SECURITY 1.1b1 — Tue, 30 Jan 2018 19:04 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

SecureSubmessageCategory_t in normative IDL

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The normative IDL doesn't have SecureSubmessageCategory_t, but it does have SecureSumessageCategory_t which appears to be a typo.

  • Reported: DDS-SECURITY 1.1b1 — Tue, 30 Jan 2018 18:51 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

ParticipantStatelessMessage definition

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Section 7.4.3.2:

    The data type associated with these endpoints is ParticipantStatelessMessage defined
    below (see also 7.2.5):
    typedef ParticipantStatelessMessage ParticipantGenericMessage;

    Two issues:
    a. I don't see how this relates to 7.2.5, should that be 7.2.6?
    b. The typedef is backwards. Typedef declares a new name (second) from an existing type (first).

  • Reported: DDS-SECURITY 1.1b1 — Tue, 30 Jan 2018 19:23 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

IDL get_topic_sec_attributes parameter typo

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    2nd parameter to get_topic_sec_attributes has type "String", should be "string".

  • Reported: DDS-SECURITY 1.1b1 — Tue, 30 Jan 2018 19:07 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

IDL SubscriptionBuiltinTopicDataSecure inheritance

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    SubscriptionBuiltinTopicDataSecure should inherit from SubscriptionBuiltinTopicData in the local module, not the one in the DDS:: module.

  • Reported: DDS-SECURITY 1.1b1 — Tue, 30 Jan 2018 19:10 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

IDL LongLongSeq unused

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    DDS::Security::LongLongSeq is not used so it should be removed from the normative IDL.

  • Reported: DDS-SECURITY 1.1b1 — Tue, 30 Jan 2018 19:06 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Modify Security's QoS changes for compatibility with RTPS

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Section 7.2.5 changes QoS in ways that break RTPS compatibility, however minor modifications can fix this.

    Because the mapping for PropertyQosPolicy in Table 10 (is this an implied entry in Table 12 as well?) conflicts with RTPS's definition of PID 0x59, the Binary Property values may not be sent on the wire. Note that RTPS has no concept of appendable extensibility, and requires backwards compatibility for all 2.x versions.

    We can represent this restriction on PropertyQosPolicy in IDL4:

    @extensibility(FINAL)
    struct PropertyQosPolicy {
      PropertySeq value;
    
      @non-serialized
      BinaryPropertySeq binary_value;
    };
    

    The practical effect of this change is that any BinaryProperty entry with propagate == TRUE is not actually propagated inside PropertyQosPolicy. However a search through the specification indicates that there is no requirement for this, at least for built-in plugins. Any other plugins are necessarily vendor specific so those are not necessarily restricted from using an appendable policy, as long as they are aware of the compatibility issues (for allow_unauthenticated_participants == TRUE).

    Also, for consistency the Tag and DataTags structs could be made @extensibility(FINAL). This is not as important since only Security-aware implementations will know about DataTagQosPolicy.

  • Reported: DDS-SECURITY 1.1b1 — Mon, 19 Feb 2018 23:37 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Description of the PluginEndpointSecurityAttributes

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The rows in Table 61 is_submessage_encrypted and is_payload_encrypted each have paragraphs starting "If is_*_encrypted is FALSE..." and including "GCM authenticated encryption", which should be "GMAC authentication transformation" like the corresponding rows of Table 59.

  • Reported: DDS-SECURITY 1.1b1 — Fri, 16 Feb 2018 23:06 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Description of the EndpointSecurityAttributes

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    In Table 30, the entry for is_payload_protected says "If is_payload_protected is FALSE, then the CryptoKeyFactory, KeyExchange and CryptoTransform operations are called only if is_payload_protected is TRUE", but the last phrase should be "only if is_submessage_protected is TRUE".

  • Reported: DDS-SECURITY 1.1b1 — Fri, 16 Feb 2018 23:16 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Authentication behavior use of built-in endpoints

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    In section 8.8.2.2, it's established that the BuiltinParticipantStatelessMessage built-in endpoints are used for exchanging the "authentication handshake" messages. This makes sense based on how those built-in endpoints are defined in 7.4.3 and how they're used in some parts of 8.3.2.9 and .11.

    However there are parts of 8.3.2.11 and 8.8.2 that describe this handshake using the names BuiltinParticipantMessageWriter / Reader (note the absence of "Stateless"). The name BuiltinParticipantMessageWriter is defined by the RTPS spec as the endpoint used to implement the participant scoped liveliness (see RTPS 2.2 section 8.4.13.2).

  • Reported: DDS-SECURITY 1.1b1 — Wed, 14 Feb 2018 21:41 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Use a submessage flag to indicate Data/Frag submessage has a transformed payload

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    If the crypto plugin transforms the payload but the layers containing the payload (submessage or message) are not transformed, the resulting Data/Frag submessage contains no indication that its payload has a nonstandard format.
    Since this spec is essentially defining a new minor version of RTPS (along with RTPS RTF process concurrent to this), one of the reserved flags in the submessage header of Data/Frag can be defined as FLAG_S meaning that the format of the SerializedPayload submessage element is defined by the security spec.

  • Reported: DDS-SECURITY 1.1b1 — Thu, 15 Feb 2018 19:38 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Determining when to use DCPSParticipantMessageSecure

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The last paragraph of 7.4.2 indicates that TopicSecurityAttributes::is_liveliness_protected is used to determine if a liveliness message should be sent using the new DCPSParticipantMessageSecure builtin endpoint or the old DCPSParticipantMessage builtin endpoint.

    However it is not clear which topic's TopicSecurityAttributes are to be used. The liveliness message essentially belongs to the participant and not any given topic (see RTPS v2.2 8.4.13.5). Should the security spec use ParticipantSecurityAttributes here instead?

  • Reported: DDS-SECURITY 1.1b1 — Thu, 1 Feb 2018 17:03 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Wrong XML tag in description of Enable Read Access Control

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    9.4.1.2.6.4 describes Enable Read Access Control, however the bullet list within this section uses the xml tag <enable_write_access_control> (twice), it should be <enable_read_access_control>.

  • Reported: DDS-SECURITY 1.1b1 — Fri, 16 Feb 2018 22:33 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

8.4.2.9.24 section name typo

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Operation: get_datarwriter_sec_attributes
    should be
    Operation: get_datawriter_sec_attributes

  • Reported: DDS-SECURITY 1.1b1 — Fri, 9 Feb 2018 20:34 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

register_local_datareader and Data Protection Kind

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    In the Table 70 row for register_local_datareader, the ReaderKeyMaterial is created based on Data Protection Kind. This should be Metadata Protection Kind because the ReaderKeyMaterial signs/encrypts submessages and not data payloads.

  • Reported: DDS-SECURITY 1.1b1 — Fri, 9 Mar 2018 20:51 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Replace "CryptoKeyTransform" with "CryptoTransform"

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The term CryptoKeyTransform is used 3 times (section name of 9.5.3.3, text of 9.5.3.3.1, caption of Table 72). These should be CryptoTransform.

  • Reported: DDS-SECURITY 1.1b1 — Fri, 9 Mar 2018 21:19 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Various Typos

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Section 7.4.4.2 "TopicSecurityAtributes" should be "Attributes"

    Section 8.8.9.1, 8.8.9.2, and 8.8.9.3 "cripto" should be "crypto"

    Section 8.8.3 "best-efforts" should be "best-effort"

    Section 8.8.4 "simultanepusly" should be "simultaneously"

    Table 63 caption: "bulitin" should be "built-in"

    Section 9.5 "BEST_EFFORTS" should be "BEST_EFFORT"

    Section 9.5.2.3 "indentifier" should be "identifier"

    Section 9.5.3.1 "ciphetext' should be "ciphertext"

    Normative IDL parameter 1 of create_local_data_crypto_tokens "cryto" should be "crypto"

  • Reported: DDS-SECURITY 1.1b1 — Thu, 8 Mar 2018 17:02 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Reduce the range of Reserved RTPS parameter IDs

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 7.4.1.3 'Reserved RTPS parameter IDs' reserves the whole 0x1000 to 0x1FFF (plus 0x5000 to 0x5FFF for must-understand) . That is 2 x 4096 PIDs. In reality DDS security only uses 6 PIDs... So this is a bit too much of a land grab.

    It would be better to be more conservative and reserve a smaller range which can then be expanded as needed.

    RTPS version 2.4 states that the reserved range for DDS security is 0x1000 to 0x10FF and 0x5000 to 0x50FF.

    Section 7.4.1.3 should be updated to reflect this reduced range.

  • Reported: DDS-SECURITY 1.1b1 — Tue, 6 Mar 2018 23:34 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Broken cross-references

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    There are a few cross-references that don't resolve, resulting in the text "see 0" or "in subclause 0" in the spec:

    • Table 30 plugin_endpoint_attributes column 3 contains "found in 0"
    • Table 52 get_authenticated_peer_credential_token contains "See section 0"
    • 9.4.1.2.6.7 right before the bullet list
    • Table 63 validate_remote_permissions
    • 9.5.3.3.4.1 final paragraph has "subclause 0"
  • Reported: DDS-SECURITY 1.1b1 — Wed, 21 Feb 2018 16:11 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Return types in CryptoKeyFactory interface description

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    In CryptoKeyFactory, all operations other than the unregister_* ones return handles. But the descriptions of register_matched_remote_participant and register_local_datawriter (8.5.1.7.2-3) end with "operation returns false". That should be "operation returns HandleNIL".

  • Reported: DDS-SECURITY 1.1b1 — Thu, 1 Mar 2018 19:31 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

AuthRequestMessageToken future_challenge property

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    In Table 48 (9.3.2.4), "properties" should be "binary_properties" so that the property future_challenge is treated as binary, matching Table 49's challenge1.

  • Reported: DDS-SECURITY 1.1b1 — Thu, 1 Mar 2018 19:02 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

IDL ParticipantSecurityAttributes::plugin_participant_attributes

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    In the normative IDL, the struct ParticipantSecurityAttributes's field plugin_participant_attributes has type ParticipantSecurityAttributesMask but it should have type PluginParticipantSecurityAttributesMask

  • Reported: DDS-SECURITY 1.1b1 — Thu, 8 Mar 2018 21:33 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Clarify the configuration and use of certificate chains for Identity

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 9.3.1.3 (Identity Certificate) indicates it is possible to use certificate chains.

    However the language of this section is confusing because an X.509 v3 Certificate does not contain a chain. It is a single certificate. What can contain a chain of certificates is a file. E.g. the standard "PEM" file format referenced in Table 44 can contain a certificate chain.

    To clarify this the following modifications are suggested:
    (1) In table 44, row for "identity_certificate" change from:
    "URI to a X509 certificate signed by the IdentityCA in PEM format"...
    To
    "URI to a X509 certificate (or certificate chain) signed by the IdentityCA, either as the root CA or as an intermediate CA, in PEM format"

    (2) In section 9.3.1.3 change from:
    "An X.509 v3 Certificate [39] that chains up to the Identity CA (see 9.3.1.1)."
    To:
    "A X.509 v3 Certificate chain [39] that is signed by the Identity CA (see 9.3.1.1) either as the root or as an intermediate CA in the chain"

    (3) In section 9.3
    In bullet 3. Clarify it may not be a single X.509 rather it can be a chain.

    (4) In table 49, field "c.id" indicate this is not a single certificate but a certificate chain. As that is what was configured in the PropertyQosPolicy.

    (5) In table 50, field "c.id" indicate this is not a single certificate but a certificate chain. As that is what was configured in the PropertyQosPolicy.

    (5) In table 52, field "validate_local_identity" indicate this is not a single certificate but a certificate chain.

    (6) In Table 53 IdentityCertificate is undefined. Maybe it should be "identity_certificate" and refer to the property defined in Table 44.

  • Reported: DDS-SECURITY 1.1b1 — Mon, 9 Apr 2018 23:56 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Builtin CryptoKeyFactory direct dependency on AccessControl's config details

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The behavior of the built-in CryptoKeyFactory operations is described in Table 70. Many entries of this table include direct references to details of the built-in Access Control plugin's configuration file (an example, "see 9.4.1.2.5.6").

    It would be easier to follow and more modular if this was changed to instead reference the data structure that the CryptoKeyFactory can actually see, which in this case is ParticipantSecurityAttributes.

  • Reported: DDS-SECURITY 1.1b1 — Wed, 11 Apr 2018 16:41 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Inconsistent Flag Name PLUGIN_PARTICIPANT_SECURITY_ATTRIBUTES_FLAG_BUILTIN_IS_DISCOVERY_ENCRYPTED

  • Status: open  
  • Source: OCI ( Tim Simpson)
  • Summary:

    All the other flag names defined here take the form of "PLUGIN_PARTICIPANT_SECURITY_ATTRIBUTES_FLAG_IS_XXX_YYY". Should the BUILTIN part of this flag really be there? I believe this should instead read: PLUGIN_PARTICIPANT_SECURITY_ATTRIBUTES_FLAG_IS_DISCOVERY_ENCRYPTED.

  • Reported: DDS-SECURITY 1.1b1 — Wed, 14 Feb 2018 22:02 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Participant2ParticipantKxKeyMaterial

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Table 70 introduces the term "Participant2ParticipantKxKeyMaterial" which isn't used anywhere else in the spec.

    It would be helpful to have a table that lists each "key material" object along with which operation creates it and how it's used.

  • Reported: DDS-SECURITY 1.1b1 — Wed, 11 Apr 2018 16:45 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT


9.5.3.3.4.3 should refer to the footer, not header

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The last paragraph of 9.5.3.3.4.3 refers to the "CryptoHeader", this should be "CryptoFooter"

  • Reported: DDS-SECURITY 1.1b1 — Wed, 11 Apr 2018 16:48 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

"atributes" typo

  • Status: open  
  • Source: OCI ( Tim Simpson)
  • Summary:

    participant_security_attributes is currently spelled participant_security_atributes on page 25 of the specification.

  • Reported: DDS-SECURITY 1.1b1 — Wed, 14 Feb 2018 21:57 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

AES-GCM doesn't add padding

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    In 9.5.3.3.4.2 remove this part:
    "Note that the cipher operations have 16-byte block-size and add padding when needed. Therefore the secure data.length (“N”) will always be a multiple of 16."

    AES-GCM doesn't add padding. The implication of this is that the CryptoContent Submessage Element may end at an arbitrary point in the stream (from the point of view of alignment). Bringing the stream "back into alignment" will depend on the usage context:

    • When encoding payload, the CryptoFooter follows directly after CryptoContent. This means that CryptoFooter's first element (common_mac) may start unaligned. Then receiver_specific_macs.length appears in the stream as a 32-bit value so it will be preceded by 0-3 padding bytes depending on the length of CryptoContent.
    • When encoding a submessage or full message, CryptoContent is followed by the start of another submessage which must be aligned to 4 per the RTPS spec.
  • Reported: DDS-SECURITY 1.1b1 — Tue, 1 May 2018 15:10 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Builtin Crypto message authentication codes

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    9.5.3.3.6 "The message digest is computed on the crypto_header and the ciphertext."

    This statement appears to contradict the descriptions of common_mac and receiver_specific_macs in 9.5.3.3.4.4 (payload), 9.5.3.3.4.5 (submessage), and 9.5.3.3.4.6 (message).

  • Reported: DDS-SECURITY 1.1b1 — Thu, 19 Apr 2018 20:58 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Security for XTypes TypeLookup Service

  • Status: open   Implementation work Blocked
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    XTypes defines 4 new built-in endpoints for its TypeLookup Service. DDS-Security should define secure versions of these, just like the secure versions of discovery built-in endpoints.

  • Reported: DDS-SECURITY 1.1 — Fri, 26 Jun 2020 20:30 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Encoding of Diffie-Hellman Public Key

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The HandshakeRequestMessageToken's dh1 property (Table 49) contains a Diffie-Hellman Public Key. The text of Table 49 says that this is encoded as a CDR Big Endian Serialization. However, the data type of the Public Key is neither a CDR Built-In type nor specified in IDL. Thus the encoding is underspecified.

  • Reported: DDS-SECURITY 1.1b1 — Wed, 11 Apr 2018 18:33 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Parsing messages generated by encode_serialized_payload (auth only)

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    When "performing authentication only," the encode_serialized_payload operation wraps the SerializedPayload inside CryptoHeader and CryptoFooter. This resulting byte stream takes the place of the original SerializedPayload submessage element in a Data(Frag) submessage.

    On the receiving side, this modified submessage element is passed to decode_serialized_payload. The problem comes in parsing this CryptoHeader-SeralizedPayload-CryptoFooter group.

    The CryptoHeader is of fixed size and only contains octet-width data (therefore has no padding), so parsing it and determining where SerializedPaylod starts is trivial.

    Then the implementation needs to determine where SerializedPayload ends in order to determine which bytes to authenticate. There is no in-stream indication of where the SerializePayload ends.

    One possibility would be to look at the end of the byte sequence that decode_serialized_payload received and "step backwards" by the length of the CryptoFooter, however the CryptoFooter is variable length (with receiver_specific_macs). Even if the implementation has external knowledge that receiver_specific_macs are not in use, the alignment requirement of the plugin_sec_tag.receiver_specific_macs.length effectively makes this a variable-length element (also see issue #58).

    To resolve this, an additional element for "length" could be added before the SerializedPayload, just like the CryptoContent submessage element does. This would make parsing the encoded payload similar for the encrypt and auth-only cases.

  • Reported: DDS-SECURITY 1.1b1 — Wed, 9 May 2018 15:38 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Clarify meaning of "bit array" and specify number of constant bytes in HMAC input when computing SessionKey

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The string literal "SessionKey" (and "SessionReceiverKey") is used without additional context as part of the binary input to HMAC. Add to this section that the ASCII encoding of "SessionKey" without a nul terminator is required.

    Section 9.3.3.3.2 talks about a "bit array" type, clarify what that is.

  • Reported: DDS-SECURITY 1.1b1 — Wed, 11 Apr 2018 18:07 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Table 29 description of is_write_protected

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The description of is_write_protected starts with "Indicates if read access". This should be "Indicates if write access."

  • Reported: DDS-SECURITY 1.1b1 — Thu, 31 May 2018 16:49 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

check_remote_topic domainId parameter

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    domainId is not listed in section 8.4.2.9.12

  • Reported: DDS-SECURITY 1.1b1 — Thu, 10 May 2018 15:06 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Add support for DomainTag to DDS-Security

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    DomainTag was added to DDSI-RTPS as a mechanism to further identify/isolate DDS Domains beyond the separation provided by the DomainId. For two participants to be on the same domain both the DomainId and the DomainTag (a string) must match. The domain-tag string matching is literal (strcmp() character by character) there is no expressions.

    Resulting from this it makes sense to add support for them to DDS security, without this support there would be no way to have different governance or permissions for domains that differ only on the DomainTag.

    Adding support will impact the SPIs (e.g. extra parameters on validate_local_identity, validate_local_permissions, and most of thje check_operations. Operations that currently take the DomainId_t as a parameter should be expanded to also take a DomainTag.

    Adding support will impact Governance and Permissions files.
    E.g. the DomainIdSet should which is used on both files be expanded to incorporate domain tags.

  • Reported: DDS-SECURITY 1.1b1 — Tue, 14 Mar 2023 19:48 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT
  • Attachments:

Specify DDS Security uses XCDR serialization version 1

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Starting with DDS-XTYPES version 1.2 a data type can be serialized using XCDR version 1 or version 2. This impacts the serialization of APPENDABLE and MUTABLE types. It does not impact the serialization of FINAL types unless they contain 8-byte primitives (long long or double) or optional members.

    DDS-Security was written before DDS-XTYPES 1.2 came out. So all the products are using XCDR version 1.

    Going forward DDS-Security should specify that it always uses XCDR version 1 for serialization of the types defined in the specification.

  • Reported: DDS-SECURITY 1.1b1 — Thu, 8 Feb 2018 22:21 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Corrections to tables describing IdentityStatusToken, AuthenticatedPeerCredentialToken, AuthRequestMessageToken

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    IdentityStatusToken, AuthenticatedPeerCredentialToken, AuthRequestMessageToken are specified in Table 46, Table 47, Table 48 of the DDS Security 1.1 spec. as containing "properties".

    This is inconsistent with the description of HandshakeRequestMessageToken, HandshakeReplyMessageToken, and HandshakeFinalMessageToken. These specify binary_property.

    They should be consistent. In fact AuthRequestMessageToken specifies that the content of the property with key "future_challenge" should match what is sent in HandshakeRequestMessageToken "challenge1"

    It appears vendors are all using binary_properties as they are all interoperating. Therefore Table 46, Table 47, Table 48 should be modified to say "binary_property' for the attribute name.

  • Reported: DDS-SECURITY 1.1b1 — Tue, 27 Jun 2023 23:10 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

secure log topic has a year 2038 issue

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Topic uses the DDS::Time_t which rolls over at 2038.
    We should update to the newer definition to be adopted in DDS 1.6

    We may need to use a different type name to allow both to co-exist
    Curent definition is this:

    extensibility(APPENDABLE) // After DDSSEC12-29
    struct BuiltinLoggingType {
        octet  facility;  // Set to 0x0A (10). Indicates sec/auth msgs
        LoggingLevel severity;
        Time_t timestamp; // Since epoch 1970-01-01 00:00:00 +0000 (UTC)
        string hostname;  // IP host name of originator
        string hostip;    // IP address of originator
        string appname;   // Identify the device or application 
        string procid;    // Process name/ID for syslog system
        string msgid;     // Identify the type of message
        string message;   // Free-form message
    
        // Note that certain string keys (SD-IDs) are reserved by IANA
        map<string, NameValuePairSeq>  structured_data; 
    };
    
  • Reported: DDS-SECURITY 1.1b1 — Tue, 20 Jun 2023 22:49 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Provide mechanism for changing the session keys associated with the different DDS Entitites

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The builtin plugins create session keys for multiple DDS entities (DomainParticipant, DataWriter, DataReader) and share those with the matched Entities that successfully authenticate and have the proper authorization. The session key(s) are used to protect the messages sent by the entity using encryption and/or message-authentication codes.

    Importantly the same key (e.g. a DataWriter key) may be shared with multiple matched DataReaders.

    There are situations where an Entity may need to change is Session Key. E.g. if it has been used to encode too many messages, or if there is a need to "revoke" access for one or more existing matched Endpoints.

    The specification should provide and describe the mechanism that implementations may use to change session Keys such that they are able to interoperate across vendors.

  • Reported: DDS-SECURITY 1.1b1 — Wed, 25 Oct 2023 04:58 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT
  • Attachments:

Meeting CNSSP-15 security requirements


Provide pre-shared protection for unauthenticated messages


Security for DDS-RPC

  • Status: open   Implementation work Blocked
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    DDS security does not provide any additional means to secure the DDS-RPC service calls. Absent this the protection would be based on the underlying DDS Topics.

    DDS-RPC maps all operations of an interface to two unkeyed Topics. One for the request and one for the reply. The request Topic is used for all operations and likewise the reply Topic.

    Thus relying on the underlying Topics would provide access control granularity at the level of the service and not allow to give narrower permissions. E.g. invoke certain operations and not others. This is not acceptable in some deployment situations.

    One solution may be to make the Topics keyed by the operation. This is possible now that IDL42 allows the discriminator of a union to act as the key.

    Alternatively DDS-Security could specify some other mechanism, for example designate a data-tag to indicate the operations that the request DataWriter may invoke. The receiver side would check that the operation invoked matches the DataWriter tag before processing the request.

  • Reported: DDS-SECURITY 1.1b1 — Sun, 11 Feb 2018 07:43 GMT
  • Updated: Mon, 25 Mar 2024 15:55 GMT

Clarify the intended member ID of a union's discriminator

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Note: This issue was filed in RTF 3 by Idar Carlsen. As RTF3 is already close it is being copied into RTF4.


    // Unions with extensibility MUTABLE, version 2 encoding
    // see (22) for serialization of MMEMBER using version 2 encoding
    (27) XCDR[2] << {O : MUNION_TYPE} =
     XCDR
     << { DHEADER(O) : UInt32 }
     << { O.disc : MMEMBER }
     << { O.selected_member : MMEMBER }?
    

    The specification says the discriminator should be treated as an MMEMBER, but it is not clear what the member ID of the discriminator should be. This has caused interoperability issues as different vendors are using different IDs.

    In Kongsberg's implementation, we've been using 0 for the discriminant. The first member of the union has thus had the member ID 1 (assuming @autoid(SEQUENTIAL)).

  • Reported: DDS-XTypes 1.3b1 — Thu, 21 Mar 2024 03:51 GMT
  • Updated: Sat, 23 Mar 2024 14:23 GMT

Ambiguous definition and/or usage of PUSH(ORIGIN=0)

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Note: This issue was filed by Sam Nosenzo in RTF 3. As the RTF 3 is already close it has been copied to RTF4

    The description of PUSH states:
    ```
    Pushes the specified XCDR stream variable VARIABLE
    into the stack and sets the current value to <newvalue>.
    The notation <?> indicates that the new value can be
    chosen by the implementation.
    This action is reverted by the POP() operation
    ```
    However the first serialization rule that writes the HEADER calls

    `PUSH(ORIGIN=0)` after writing the ENCHEADER, even though it's already been set to 0 on initialization. PUSH(ORIGIN=0) is also called after writing PL_CDR headers. I'm confused as to what this is supposed to mean. Based off of the current definition of PUSH I would be lead to believe that it truly does set the origin equal to 0. However looking at it's usage I would think that PUSH(ORIGIN=0) should mean that the origin is reset to where the current offset is, and based of of what I've seen in PL_CDRv1 messages with 8 byte members, this has been a correct assumption.
    Another confusing element around the usage of PUSH is that I don't see POP used anywhere in the Serialization rules.

  • Reported: DDS-XTypes 1.3b1 — Thu, 21 Mar 2024 03:48 GMT
  • Updated: Thu, 21 Mar 2024 03:49 GMT

Clarify the intended member ID of a union's discriminator

  • Status: open  
  • Source: Kongsberg Defence & Aerospace ( Ms. Idar Carlsen)
  • Summary:
    // Unions with extensibility MUTABLE, version 2 encoding
    // see (22) for serialization of MMEMBER using version 2 encoding
    (27) XCDR[2] << {O : MUNION_TYPE} =
     XCDR
     << { DHEADER(O) : UInt32 }
     << { O.disc : MMEMBER }
     << { O.selected_member : MMEMBER }?
    

    The specification says the discriminator should be treated as an MMEMBER, but it is not clear what the member ID of the discriminator should be. This has caused interoperability issues as different vendors are using different IDs.

    In Kongsberg's implementation, we've been using 0 for the discriminant. The first member of the union has thus had the member ID 1 (assuming @autoid(SEQUENTIAL)).

  • Reported: DDS-XTypes 1.3 — Sun, 17 Mar 2024 17:45 GMT
  • Updated: Thu, 21 Mar 2024 03:43 GMT

Correct inconsistency on the URLs for the machine readable documents in the FTF2 report

  • Key: DDSWEB11-3
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The machine-readable file URLs on the
    FTF report (ptc/15-09-21) and FTF 2 convenience document
    (ptc/15-09-13) disagree.

    The correct ones are the ones used in the FTF 2 document because these are consistent which the reference schema files that appear in the XML files also included as part of the specification.

    If nothing is done the URLs on the cover of the report (ptc/15-09-21) take precedence over the ones in the FTF2 specification, so it is imperative to re-issue the report to correct this.

  • Reported: DDS-WEB 1.0 — Thu, 19 May 2016 00:40 GMT
  • Updated: Wed, 3 Jan 2024 20:38 GMT

XCDR2 serialization of sequences of non-primitive elements

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    When serializing a sequences of non-primitive elements, the XTYPES spec requires serializing a DHEADER ahead of serializing the number of elements and each element. This is rule (12)

    Arrays of non-primitive elements also serializing the DHEADER but not the number of elements. This is rule (9)

    I think it would make sense to modify or at least relax these rules.
    At a minimum arrays and sequeces of enumerated types and bitmask types should not have a DHEADER as it does not add information beyond what is available knowing the number of elements and size of each element. That it, they should behave as primitives (basically they are integers).

    Additionally it may be better to not have the DHEADER at all for sequences and arrays. Or at least for sequences or arrays whose elements are final.

    Basically the "extensibility" of the sequence is already handled by having the number of elements and having a DHEADER adds nothing and makes types that contain sequences of FINAL incompatible with XCDR1. This is a side-effect that we did not want or anticipate. Otherwise types that are constructed from only FINAL types would be compatible between XCDR1 and XCDR2 (except for 8-byte aligned types).

  • Reported: DDS-XTypes 1.3b1 — Wed, 4 May 2022 22:43 GMT
  • Updated: Fri, 15 Dec 2023 19:15 GMT

XCDR2 serialization of non-trivial maps

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    This issue was raised by Idar Carlsen (Kongsberg Defence & Aerospace)

    In the X-Types 1.3 specification, under the “7.4.3.5.3 Complete Serialization Rules” section, it says that non-trivial maps should have a DHEADER when XCDR2 is used (rule 15). Notably, it only has the DHEADER – unlike the version 1 encoding, the size (in terms of numbers of entries) of the map is not serialized. This differs from how sequences are serialized, as they include the size as well. Is this correct, or should the size of the map also be serialized in addition to the DHEADER?

    It seems to me that some of the other DDS implementations include the size, even though the specification does not say so.

  • Reported: DDS-XTypes 1.3b1 — Tue, 5 Dec 2023 16:36 GMT
  • Updated: Wed, 6 Dec 2023 16:06 GMT

DDS::Time_t/Duration_t changes


DDS defines Time_t with seconds as long, this is 32bit. This will give an issue after 2038

  • Key: DDS15-13
  • Legacy Issue Number: 14166
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    DDS defines Time_t with seconds as long, this is 32bit. This will give an issue after 2038, almost all operating systems are now defining time as 64bit, shouldn't DDS do the same?

    In addition, the the standard does not define the calendar time of Time_t at

    { sec = 0, nanosec = 0 }

    This is required in order to convert a Time_t to/from a system's native time (such the the type time_t on Unix systems which has the calendar start time 1970-01-01 00:00:00).

  • Reported: DDS 1.2 — Thu, 30 Jul 2009 04:00 GMT
  • Updated: Fri, 24 Nov 2023 07:59 GMT

Proper interpretation of Duration_t for negative values

  • Key: DDS15-331
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The specification does not fully define the meaning of a Duration_t when the second part is negative.

    struct Duration_t {
        long sec;
        unsigned long nanosec;
    };
    

    What is he interpretation of a value when sec <0?
    Does the nanosec part get interpreted to have the same sign?
    If so, then the number between 0 < x < -1 cannot be represented

    So the most logical way to interpret a negative value for the sec field appears to be:

    value = sec + nanosec 
    

    where sec can be positive or negative but nanosec is always positive.
    So the value of negative 1ms would be represented as:

    sec = -1
    nanosec = 999,000,000
    

    The specification should define the proper interpretation.

  • Reported: DDS 1.4 — Mon, 20 Nov 2023 21:13 GMT
  • Updated: Mon, 20 Nov 2023 21:13 GMT

Problematic use of multiple INFO_SRC within an RTPS

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The RTPS spec allows a single RTPS message to contain multiple INFO_SRC submessages, effectively changing the Participant GUID of the sending Participant.

    This seems problematic for DDS Security since the cryptograophic material is tied to that Participant GUID (e.g. the RTPS protection).
    Also INFO_SRC does not work well with the new RTPS_HEADER_EXTENSION.

    How commonly is this capability used? It is worth finding a way to make DDS-Security work with it or would it be better to disallow it.

    Should it be disallowed just for DDS-Security or for DDS in general?

  • Reported: DDS-SECURITY 1.1b1 — Wed, 27 Sep 2023 13:24 GMT
  • Updated: Wed, 25 Oct 2023 04:44 GMT

Section contains a duplicate sentence from the next section.

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Frederick Hornsey)
  • Summary:

    Sections are:

    7.3.1.9 Map Types
    Map types as described in this specification are fully compatible with the IDL constructs of the
    same name defined in the Extended Data-Types Building Block of [IDL].
    Structures as defined by this specification are fully compatible with the IDL constructs of the
    same name.
    7.3.1.10 Structure Types
    Structures as described in this specification are fully compatible with the IDL constructs of the
    same name.

    "Structures as defined by..." is duplicated twice.

  • Reported: DDS-XTypes 1.3 — Fri, 1 Sep 2023 20:42 GMT
  • Updated: Fri, 8 Sep 2023 22:26 GMT

Ambiguous definition and/or usage of PUSH(ORIGIN=0)

  • Status: open  
  • Source: Foxglove Technologies Inc ( Sam Nosenzo)
  • Summary:

    The description of PUSH states:
    ```
    Pushes the specified XCDR stream variable VARIABLE
    into the stack and sets the current value to <newvalue>.
    The notation <?> indicates that the new value can be
    chosen by the implementation.
    This action is reverted by the POP() operation
    ```
    However the first serialization rule that writes the HEADER calls `PUSH(ORIGIN=0)` after writing the ENCHEADER, even though it's already been set to 0 on initialization. PUSH(ORIGIN=0) is also called after writing PL_CDR headers. I'm confused as to what this is supposed to mean. Based off of the current definition of PUSH I would be lead to believe that it truly does set the origin equal to 0. However looking at it's usage I would think that PUSH(ORIGIN=0) should mean that the origin is reset to where the current offset is, and based of of what I've seen in PL_CDRv1 messages with 8 byte members, this has been a correct assumption.
    Another confusing element around the usage of PUSH is that I don't see POP used anywhere in the Serialization rules.

  • Reported: DDS-XTypes 1.3 — Mon, 21 Aug 2023 18:44 GMT
  • Updated: Wed, 23 Aug 2023 20:18 GMT

How to describe the locator information in XML

  • Key: DDSXML11-4
  • Status: open   Implementation work Blocked
  • Source: Beijing Jingwei Hirain Technology Co., Ltd. ( Jun.Feng)
  • Summary:

    1. In the specification and xsd file,can not find that how to describe the locator information of the domain participant such as metatrafficUnicastLocator or defaultUnicastLocator.
    2. When the topicKind of a topic is WITH_KEY, how to describe the corresponding key-value information of the DateWriter in the "data_writer" part.
    3. If user can add some bolcks that user defined and if there are some rules?
    4. There are no "uint8" or "int8" in the the simpleType whose name is "allTypeKind" in the xsd file whose name is "dds-xml_type_definitions_nonamespace.xsd". But there are the definition in chapter "7.3.2.2 Basic Types" of the specification "Extensible and Dynamic Topic Types for DDS"(DDS-XTypes)

  • Reported: DDS-XML 1.0 — Mon, 21 Aug 2023 12:45 GMT
  • Updated: Wed, 23 Aug 2023 20:17 GMT

Extend InfoSource to contain RTPS HeaderExtension fields

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The InfoSource is meant to hold the same information inside the RTPS message such that an RTPS message can be used to relay RTPS submessages from other sources and the RTPS submessages are interpreted in the correct content of the originating Participant.

    The RTPS Header Extension submessage was added to extend the RTPS Header in a way that did not break interoperability with existing systems. So logically the information inside RTPS Header Extension belongs in the RTPS Header. Therefore it should also be added to the InfoSource

  • Reported: DDSI-RTPS 2.5 — Wed, 16 Aug 2023 23:00 GMT
  • Updated: Thu, 17 Aug 2023 04:06 GMT

Update IDL definition of union TypeIdentifier in Annex B to account for primitive types

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The union TypeIdentifier definitoon in Annex B contain several cases commended out. This is done because (per the comment in the IDL) union cases all have to have an associated member/value

    // All primitive types fall here.
    // Commented-out because Unions cannot have cases with no member.
    /*
    case TK_NONE:
    case TK_BOOLEAN:
    case TK_BYTE_TYPE:
    case TK_INT8_TYPE:
    case TK_INT16_TYPE:
    ...
    

    Since the union discriminator is an octet, it is possible to set it to the values shown in the comment (e.g. TK_INT8_TYPE) in this situation since the case member is not shown the discriminator will be set but no branch would be selected so there is no associated value.
    In other words, we can get the desired behavior of having the discriminator set but no value selected (so nothing beyond the discriminator is serialized), but we cannot express the expectation of all those cases in the IDL...

    This could be corrected in two ways:
    (1) We could use a enumerated value with @bit_bound(8) as the type of the discriminator instead of the octet. The list of literals would make it obvious what the expected values for the discriminator
    (2) We could keep the union discriminated by an octet and uncomment all the cases for the primitive types. Then we would need to add a "dummy" member so the case has an associated value, but we could mark it @non_serialized so it has no impact on the wire representation.

    It would seem that (1) is cleaner but (2) is less disruptive...

  • Reported: DDS-XTypes 1.3b1 — Sat, 12 Aug 2023 02:20 GMT
  • Updated: Wed, 16 Aug 2023 15:56 GMT

Clarify accessing discriminator of a DynamicData union

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    It's not clear how a user of a DynamicData object that represents a union gets the discriminator value. We derive the following:

    // see pgh 1 of 7.2.2.4.4.3 for use of "discriminator" as a magic string
    const MemberId id_disc = dyndata->get_member_id_by_name("discriminator"); 
    if (id_disc == MEMBER_ID_INVALID) { some error happened }
    // based on union_type_descriptor.discriminator_type->get_kind(), determine the type of the discriminator
    // in this example, let's say it's an IDL long
    int val;
    dyndata->get_int32_value(val, id_disc);
    

    It would be better for the spec to have a clearly defined way of getting a MemberId that represents the discriminator. It could be a new API in DynamicType or TypeDescriptor.

  • Reported: DDS-XTypes 1.3 — Mon, 8 Aug 2022 15:38 GMT
  • Updated: Mon, 14 Aug 2023 15:28 GMT

Provide a way for multiple vendors to extend the algorithms and interoperate

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The specification provides mechanisms to extend the set of cryptographic algorithms in future revisions.
    The specification also provides mechanisms to extend the set of cryptographic algorithms by a single vendor without requiring a revision of the standard. Those extended algorithms will be understood by the vendor and ignored by others.
    What is not clear is if two vendors can agree to use another cryptographic algorithm and interoperate. This use-case may be relevant to an end-user that is using multiple vendors and wants to have those vendors work together to use a new crypto algorithm

    This issue requests some mechanism to support this last use case.

  • Reported: DDS-SECURITY 1.1b1 — Fri, 30 Jun 2023 16:34 GMT
  • Updated: Mon, 3 Jul 2023 17:18 GMT

Provide efficient way to skip encrypted implementation-specific content

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The RTPS specification allows implementations to send implementation-specific RTPS sub-messages inside an RTPS message. These submessages are distinguished by having submessageId's within a specific range.

    Prior to DDS security skipping implementation-specific RTPS sub-messages was very efficient requiring only the receiver to jump their length indicated in. the header.
    However with DDS security the submessages can be encrypted inside a SRTPS_PREFIX/SUFFIX envelope this requires the receiver to always decrypt them even if it will end up skipping them.
    An extreme, but likely common case is when the SRTPS_PREFIX/SUFFIX contains exclusively implementation-specific RTPS sub-messages which makes the effort to decrypt the RTPS message fruitless.

    A way to resolve this would be to designate a flag in the SRTPA_PREFIX submessage to indicate that the content contains only vendor-specific submessages. A receiver can use this flag to skip the whole RTPS message avoiding the effort to decrypt i n the event that the sender vendorId does not match the receiver's.

    The proposal therefore is to designate the leftmost flag of the SRTPS_PREFIX submessage to indicate it contains only "vendor specific content".

  • Reported: DDS-SECURITY 1.1b1 — Thu, 8 Jun 2023 04:35 GMT
  • Updated: Thu, 8 Jun 2023 13:21 GMT

Specify how a discovery service could be used to bootstap discovery

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Primarily targets environments that don't have multicast. Implementations support using a "discovery" service. In some cases it operates "transparently".

    The SIG and vendors have discussed this and the conclusion was that it would be best to add tome description in the RTPS spec that explains how the discovery service would work and interoperate.

  • Reported: DDSI-RTPS 2.5 — Wed, 7 Jun 2023 17:33 GMT
  • Updated: Wed, 7 Jun 2023 17:33 GMT

Data Representation for RTPS's Serialized Key

  • Status: open   Implementation work Blocked
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    RTPS 2.3 section 9.4.5.3.1
    "D=0 and K=1 means that the serializedPayload SubmessageElement contains the serialized Key."

    XTypes section 7.4 "Data Representation" should define the rules for encoding an object of a type defined by the 7.2 "Type System" to a Key-only serialization.

    Using what's currently in the spec, there are two potential interpretations:

    a. follow all the encoding rules as for a full object (adding DHeader, EMHeader, etc.) but any part of that object that's not a key gets skipped, using 7.2.2.4.7 to determine what's a key

    b. use the rules in 7.6.8 (which are explicitly only for a KeyHash) to get a KeyHolder object and then encode that

  • Reported: DDS-XTypes 1.3 — Wed, 28 Oct 2020 19:43 GMT
  • Updated: Wed, 31 May 2023 09:23 GMT

SequenceNumberSet validity could be too strict

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    9.4.2.6 SequenceNumberSet defines one of the rules for validity as
    bitmapBase >= 1

    We have observed that other implementations use bitmapBase 0 in AckNack submessages. There seems to be no downside to just accepting these as valid even though the spec currently says they are not.

    The RTF should determine if this condition in 9.4.2.6 can just be removed.

  • Reported: DDSI-RTPS 2.3 — Mon, 7 Jun 2021 22:55 GMT
  • Updated: Tue, 30 May 2023 22:53 GMT

Typos in DynamicData UML Diagrams

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Frederick Hornsey)
  • Summary:

    Both figures have get_member_id_by_index methods instead of get_member_id_at_index like the rest of the spec does.

  • Reported: DDS-XTypes 1.3 — Thu, 16 Mar 2023 05:38 GMT
  • Updated: Mon, 24 Apr 2023 18:25 GMT

Conflicting Order of Minimal Struct and Union Members in TypeObject

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Frederick Hornsey)
  • Summary:

    Section 7.3.4.5 specifies that all struct and union members in TypeObjects are to be ordered by member index/declaration order.

    •The elements in CompleteStructMemberSeq shall be ordered in increasing values of the member_index.
    •The elements in MinimalStructMemberSeq shall be ordered in increasing values of the member_index.
    •The elements in CompleteUnionMember shall be ordered in increasing values of the member_index.
    •The elements in MinimalUnionMember shall be ordered in increasing values of the member_index.

    There are comments in the IDL in front of the sequence typedefs for these members that also specify the order. The complete ones agree that they should be sorted by member index, but the minimal ones say they should be sorted by member id:

    // Ordered by common.member_id
    typedef sequence<MinimalStructMember> MinimalStructMemberSeq;
    ...
    // Ordered by MinimalUnionMember.common.member_id
    typedef sequence<MinimalUnionMember> MinimalUnionMemberSeq;

  • Reported: DDS-XTypes 1.3 — Wed, 29 Mar 2023 22:13 GMT
  • Updated: Wed, 5 Apr 2023 22:44 GMT

Should the TypeObject mark key members as must understand

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The spec states that @key members are always "must understand" does this mean that when represented in a TypeObject the member should also have the "must understand" flag set or is it enough with it being marked with the "key" flag as this would already imply its must understand nature?

    Either way it should not impact assignability but it would impact the TypeId computation.

  • Reported: DDS-XTypes 1.3b1 — Tue, 21 Mar 2023 15:27 GMT
  • Updated: Thu, 30 Mar 2023 18:23 GMT

Typo in DataRepresentationMask

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Typo, it says

    @posiiton(2) XCDR2

    but should say

    @position(2) XCDR2

  • Reported: DDS-XTypes 1.3 — Thu, 25 Mar 2021 07:54 GMT
  • Updated: Thu, 30 Mar 2023 18:21 GMT

DynamicData should be value type, not a reference type

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The class DynamicData inherits from Reference, but this class shouldn't behave differently from any other topic-type T, which (including the built-in types) are always value types.

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 13 Jul 2016 22:18 GMT
  • Updated: Wed, 29 Mar 2023 18:29 GMT

Encoding of TypeInformation in SEDP

  • Status: open  
  • Source: Kongsberg Defence & Aerospace ( Dr. Ornulf Staff)
  • Summary:

    The encoding of the TypeInformation member in the builtin topics should be explicitly specified. There is a normative comment on using XCDR2 for v1.3 types in the IDL, but this can be interpreted not to apply in the context of the builtin topics which are otherwise XCDR1.

  • Reported: DDS-XTypes 1.3 — Thu, 17 Jun 2021 13:04 GMT
  • Updated: Tue, 21 Mar 2023 15:39 GMT

Description on how to encode Participant GUID in dds::rpc::RequestHeader seems wrong

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    Section 7.6.3.3.4 states the following sentence on how to encode the Participant GUID into the dds::rpc::RequestHeader:

    The Service instanceName that appears in the dds::rpc::RequestHeader shall be set to the string obtained by concatenating the prefix “dds.builtin.TOS .” With the 16-character string version of the DomainParticipant GUID encoded using hexadecimal digits with lower case letters. There shall be no “0x” ahead of the hexadecimal digits. For example, “dds.builtin.TOS.123456789abcdf0”

    This seems to imply that you need to encode the Participant GUID as a 16 digit hexadedecimal string, which wouldn't allow you to represent the entire GUID. Probably the 16 bytes do no intend to refer to the hexadecimal digits of the string representation, but rather to the 16 bytes of the GUID itself. A couple of paragraphs further down it refers to the DDS-RPC spec, where indeed the 16 byte restriction is not mentioned:

    The dds::rpc::RequestHeader in the TypeLookup_Request and the TypeLookup_Reply shall be set as specified in the [DDS-RPC] specification.

  • Reported: DDS-XTypes 1.3b1 — Mon, 20 Dec 2021 16:09 GMT
  • Updated: Tue, 21 Mar 2023 15:36 GMT

Impossible to handle @must_understand AND @optional fields in an @appendable struct correctly

  • Status: open   Implementation work Blocked
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The XTypes spec seems to suggest that @must_understand fields are applicable to any non-final datatype. Section 7.3.1.2.1.9 mentions this:

    "By default, the assignment from an object of type T2 into an object of type T1 where T1 and T2 are non-final types will ignore any members in T2 that are not present in T1. This behavior may be changed by applying the @must_understand annotation to a member within a type definition."

    That would mean that @must_understand fields are also applicable to @appendable structs, but in this case there is no way for a field to be identified as must_understand field in its Delimited-CDR representation.

    Of course you could state that in case of @appendable structs, you should determine assignability at discovery time and not at run time, in which case you are not dependent on the availability of a must_understand bit in the serialized blob. However, in case a Writer publishes a sample with a field that is both @must_understand AND @optional, according Table 19 (section 7.2.4.4.8) there is no mismatch between this Writer and a Reader that is missing the field (that is only the case if the field has @optional set to FALSE), which means the sample needs to be matched at runtime.

    The spec is a little unclear of the semantics in this case: I guess that if the optional value is empty but must_understand you can slice it out of the projected type, but when it is not empty you are not allowed to slice the value out since it is a must_understand value and you will have to discard the whole sample instead. It would be nice if the spec could explicitly confirm or deny this.

    But working from the presumption that you are indeed allowed to slice out values that are both empty and must_understand, the next problem arises immediately: how does a Reader know that a sample containing an unfamiliar field actually represents an optional field that is must_understand?

    Let's consider a scenario where I have a Reader that is reading a type A with the following defintion:

    @appendable struct A {
        @key long id;
         long x;
    };
    

    Now this Reader can be matched against all sorts of Writers, including Writers that have appended all kinds of fields to the end of this datatype: its deserializer simply slices everything out that comes after field x.

    This works well for most appended versions of this datatype, but now suddenly an additional Writer joins the system with the following definition:

    @appendable struct A {
        @key long id;
         long x;
        @optional @must_understand long y;
    };
    

    This Writer will match the Reader according to Table 19 since although the @must_understand annotation is TRUE, the corresponding @optional field is NOT false. So now the deserializer for our Reader has to deserialize a sample for which it doesn't know what the payload after the x actually represents. It might represent a value that it can safely slice out, or it might represent a value that may not be sliced out.

    The spec states in rule number 20 of section 7.4.3.5.3 that in case of XCDRV2, an optional member is preceeded by a boolean called is_present. The problem here is that our deserializer doesn't know where the sample originates from therefore has no knowledge whether the byte following field x represent an is_present boolean or just some other sliceable field.

    So the basic question boils down to this:

    • Do we allow fields that are both must_understand and optional in case of Appendable extensibility?
    • If so, how do we indicate in this case that a field is both optional and must_understand in a preferably backward compatible way?
  • Reported: DDS-XTypes 1.3b1 — Mon, 10 Jan 2022 15:02 GMT
  • Updated: Tue, 21 Mar 2023 15:22 GMT

bitset types not defined

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Figure 16 defines bitset as another kind of aggregated type. One might assume that this has the semantics of an IDL4 bitset.

    The text after Figure 16 and the rest of the spec doesn't define how bitset works in the type system (assignability), type representation, and data representation.

  • Reported: DDS-XTypes 1.3b1 — Mon, 20 Mar 2023 19:15 GMT
  • Updated: Tue, 21 Mar 2023 14:39 GMT

Minor Typo in SubmessageKind IDL

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Frederick Hornsey)
  • Summary:

    IDL value annotation for GAP is @value(8x08) instead of @value(0x08).

  • Reported: DDSI-RTPS 2.5 — Fri, 3 Mar 2023 11:13 GMT
  • Updated: Fri, 17 Mar 2023 15:03 GMT

encode_rtps_message/decode_rtps_message error and status reporting

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    8.5.1.9.4 (4th pgh) describes that encode_rtps_message may determine that no encoding is necessary. This is currently an awkward fit with the common API design of returning a boolean and "setting" or "not setting" an exception struct. What does "not setting" the exception struct mean in practice? How does an implementation portably handle this?

    It would be better to have an enum or integer return type so that the plugin can more directly influence the implementation's control flow, with distinct return values for OK_ENCODED, OK_NOT_ENCODED, ERROR, possibly others.

    A similar issue occurs with decode_rtps_message (8.5.1.9.5). Because key exchange happens asynchronously with respect to encoded message transmission, the plugin may not be able to decode a given message. Simply "returning an exception" in this case is not ideal since the calling code should probably log this exception and it may raise alarms.

    Extending this idea of enum (or integer constants) return types instead of boolean to other CryptoTransform operations may also be useful. For example, the other encode operations could return a OK_NOT_ENCODED instead of copying data.

  • Reported: DDS-SECURITY 1.1 — Tue, 17 Sep 2019 21:53 GMT
  • Updated: Tue, 13 Dec 2022 22:35 GMT

DynamicTypeSupport IDL defnition is invalid IDL

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Frederick Hornsey)
  • Summary:

    DynamicTypeSupport has the following IDL definition in Annex C:

    interface DynamicTypeSupport : TypeSupport {
      /* This interface shall instantiate the type FooTypeSupport
       * defined by the DDS specification where "Foo" is DynamicData.
       */
      /*static*/ DynamicTypeSupport create_type_support(
        in DynamicType type);
      /*static*/ DDS::ReturnCode_t delete_type_support(
        in DynamicTypeSupport type_support);
      DDS::ReturnCode_t register_type(
        in DDS::DomainParticipant participant,
        in ObjectName type_name);
      ObjectName get_type_name();
    };
    

    This definition can't be used in an XTypes implementation, at least in one using standard IDL. register_type and get_type_name can't use those names because a derived interface can't define operations that share names with ones in its base interfaces. This is described at the end of 7.4.3.4.3.2.1 in IDL 4.2. Another issue is the "static" operations. They get the point across as to what the author means but, they are also not usable as IDL can't define operations as static. DynamicTypeBuilderFactory and DynamicDataFactory also do this.

  • Reported: DDS-XTypes 1.3 — Fri, 28 Oct 2022 17:45 GMT
  • Updated: Thu, 8 Dec 2022 16:29 GMT

DataFrag submessage element naming

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Table 8.42 defines the elements that comprise a DataFrag submessage. It includes the dataSize as one of those elements.

    Section 9.4.5.5 must map all elements of the submessage to the PSM types. However, it is lacking a dataSize. Instead it includes a sampleSize. SampleSize should be renamed dataSize and perhaps should use a well-defined type from 9.3.2 such as MessageLength_t.

  • Reported: DDSI-RTPS 2.5 — Tue, 15 Nov 2022 22:36 GMT
  • Updated: Tue, 15 Nov 2022 22:36 GMT

Version number is inconsistent

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Section 8.3.3.1.2 indicates which version of the protocol is specified in this document.
    No other place in the document should attempt to do the same, all others should refer back to 8.3.3.1.2. 8.3.3.1.2 should define the constant "PROTOCOLVERSION" as a symbol that indicates the current version (2.6). Add a reference to section 8.6 which defines how different versions can interoperate.

    In Table 8.2:
    In the cell to the right of ProtocolVersion_t, remove the text from "The following values are reserved..." until the end of the cell. Replace it with a reference to 8.3.3.1.2.

    In Section 8.3.5.3:
    Remove the text from "The RTPS protocol version X.Y defines..." until the end of this subsection. Replace it with a reference to 8.3.3.1.2.

    In Section 9.3.2.1:
    Remove the IDL comment

    // The implementations following this version of the document
    // implement protocol version 2.4
    
  • Reported: DDSI-RTPS 2.5 — Tue, 15 Nov 2022 22:25 GMT
  • Updated: Tue, 15 Nov 2022 22:25 GMT

Inconsistent notation used to represent bit positions pictorially

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The spec uses two numbering schemes for bits:

    For example 9.4.1 (Overall Structure)

    0...2...........7...............15.............23. .............31
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    

    But then in 9.4.4 (Mapping of the RTPS Header)

    0...2...........8...............16.............24.............. 32
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    

    It should be consistent. The more correct scheme appears to be:

    0...2...........8...............16.............24. .............32 
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
    

    With this scheme the number represents the number of bits that appear before the number (the "." positions). The other scheme seems inconsistent. "0" is placed ahead of the bit of that order, but '7' and the rest are placed after.

  • Reported: DDSI-RTPS 2.5 — Thu, 10 Jun 2021 22:20 GMT
  • Updated: Tue, 15 Nov 2022 22:10 GMT

Table 9 is missing BITMASK_TYPE

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Add BITMASK_TYPE to table 9

  • Reported: DDS-XTypes 1.3 — Tue, 15 Nov 2022 22:08 GMT
  • Updated: Tue, 15 Nov 2022 22:08 GMT

Typo in 9.4.5.7.1 Flags in the Submessage Header

  • Status: open  
  • Source: Georgia Institute of Technology ( Seulbae Kim)
  • Summary:

    LivelinessFlag in the last paragraph should be GroupInfoFlag, i.e.,
    "The GroupInfoFlag is represented with the literal ‘G’. G=1 means the HeartBeat includes the currentGSN,
    firstGSN, and lastGSN. The value of the LivelinessFlag can be obtained from the expression:"
    should be changed to
    "The GroupInfoFlag is represented with the literal ‘G’. G=1 means the HeartBeat includes the currentGSN,
    firstGSN, and lastGSN. The value of the GroupInfoFlag can be obtained from the expression:"

  • Reported: DDSI-RTPS 2.5 — Wed, 5 Oct 2022 02:55 GMT
  • Updated: Wed, 5 Oct 2022 15:14 GMT

set_listener behavior is underspecified

  • Key: DDS15-329
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Suppose the DATA_AVAILABLE StatusChangedFlag (see Figure 2.16) is set on a DataReader and then a listener (with DATA_AVAILABLE_STATUS in its mask) is attached to the DataReader by the user calling set_listener(). The specification does not specify if the listener should be invoked. If the decision is that the listener is not invoked, then guidance should be given to users that they may need to invoke the listener manually.

  • Reported: DDS 1.4 — Fri, 30 Sep 2022 18:21 GMT
  • Updated: Fri, 30 Sep 2022 18:21 GMT

Network amplification

  • Status: open  
  • Source: Trend Micro Inc. ( Federico Maggi)
  • Summary:

    Details available to RTF members

  • Reported: DDSI-RTPS 2.5 — Fri, 24 Sep 2021 13:16 GMT
  • Updated: Tue, 27 Sep 2022 17:20 GMT

IDL's fixed data type is required in XTypes

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Since "Core Data Types (Sub Clause 7.4.1 [IDL])" is included in the XTypes type system model, it needs to include "fixed"

  • Reported: DDS-XTypes 1.3 — Tue, 28 Jul 2020 19:40 GMT
  • Updated: Wed, 21 Sep 2022 20:22 GMT

Representing union case labels in TypeObject

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    TypeObject assumes that all union case labels are representable in a 32-bit integer:

    // Case labels that apply to a member of a union type
    // Ordered by their values
    typedef sequence<long> UnionCaseLabelSeq;
    

    Both IDL 4.2 and the general type system in XTypes (Figure 18, 7.2.2.4.4.3) allow 64-bit integer types as discriminators and therefore 64-bit values as case labels.

  • Reported: DDS-XTypes 1.3 — Tue, 29 Sep 2020 17:46 GMT
  • Updated: Wed, 21 Sep 2022 19:00 GMT

Anonymous Types in Strongly Connected Components

  • Status: open   Implementation work Blocked
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Section 7.3.4.9.2 describes the algorithm for computing type identifiers for strongly connected components. Step 4b says

    If the Strongly Connected Component (SCC) has multiple types, then sort them using the lexicographic order of their fully qualified type name. Let SCCIndex(U) be the sort index of each type U belonging to the SCC starting with index 1 for the first type. For anonymous types concatenate the fully qualified name of the containing type with the member name using “.” as the separator, for example “MyModule::MyStruct.myMember”.

    This does not cover all possibilities for anonymous types. To illustrate, the following IDL with recursive types uses an anonymous type in a typedef:

    struct NodeData {
      long l_data;
    };
    struct TreeNode;
    typedef sequence<@external TreeNode> Children;
    struct TreeNode {
      NodeData data;
      Children children;
    };
    

    The algorithm requires a name for sequence<@external TreeNode>. In general, the rule for naming anonymous types in step 4b must be expanded to include anywhere an anonymous type may appear including structs, unions, typedefs, and other anonymous types.

    An additional, related, problem is that given the definition of Plain...
    7.3.4.1 “Plain types only have a TypeIdentifier. Non-plain types have both a TypeIdentifier and a TypeObject.”
    the children field of TreeNode of the SCC example in 7.3.4.8 is a Plain Collection and has no TypeObject

    struct NodeData {
      long l_data;
    };
    struct TreeNode {
      NodeData data;
      sequence<@external TreeNode> children;
    };
    

    Step 4(b)ii of the algorithm in 7.3.4.9.2 requires that all of the types in an SCC have a TypeObject 4(b)ii.
    Possible Solutions and Notes:
    The algorithm implies that all of the types involved in a Strongly Connected Component have a type identifier of TI_STRONGLY_CONNECTED_COMPONENT. The precludes the use of the Plain Collections in Strongly Connected Components. Thus, if the algorithm of 7.3.4.9.2 is not revised, then the definition of Plain Collections needs to be revised to exclude those involved in a Strongly-Connected Component.

  • Reported: DDS-XTypes 1.3 — Wed, 2 Sep 2020 16:25 GMT
  • Updated: Wed, 21 Sep 2022 18:45 GMT

Inconsistency in the wire representation of SequenceNumber type fields

  • Status: open  
  • Source: Georgia Institute of Technology ( Seulbae Kim)
  • Summary:

    In the wire representation figures of 9.4.5.4 and 9.4.5.5, `SequenceNumber writerSN` is shown as:

    +---------------+---------------+---------------+---------------+
    +           SequenceNumber       writerSN                       +
    +---------------+---------------+---------------+---------------+
    

    as if it only occupies 4 bytes.

    In all other places (9.4.2.6, 9.4.5.6, 9.4.5.7, 9.4.5.8, 9.4.5.14, and 9.6.4.7), SequenceNumbers are represented explicitly as 64-bit values:

    +---------------+---------------+---------------+---------------+
    |                                                               |
    +           SequenceNumber       gapStart                       +
    |                                                               |
    +---------------+---------------+---------------+---------------+
    

    In hindsight, the plus signs does indicate that the field is larger than it looks, but unless there is a clear reason, can those representations be unified to remove potential confusion and provide better readability?

  • Reported: DDSI-RTPS 2.5 — Tue, 23 Aug 2022 15:31 GMT
  • Updated: Wed, 24 Aug 2022 17:03 GMT

Typo in Table 9.18 (PID__DOMAIN_ID)

  • Status: open  
  • Source: Georgia Institute of Technology ( Seulbae Kim)
  • Summary:

    `PID__DOMAIN_ID` in table 9.18 has an extra underscore. It should be `PID_DOMAIN_ID`.

  • Reported: DDSI-RTPS 2.5 — Tue, 23 Aug 2022 19:30 GMT
  • Updated: Wed, 24 Aug 2022 16:08 GMT

Incorrect definition of a user-defined within EntityId_t

  • Status: open  
  • Source: Real Time Innovations ( Samuel Raeburn)
  • Summary:

    Section 9.3.1.2 lists the three pre-defined values of the entity key field in EntityId_t as:

    • ‘8 for user-defined entities.
    • ‘11’ for built-in entities.
    • ‘01’ for vendor-specific entities

    The user-defined entities definition should be '00'.

  • Reported: DDSI-RTPS 2.5 — Mon, 22 Aug 2022 10:22 GMT
  • Updated: Wed, 24 Aug 2022 16:08 GMT

TypeFlags usage in normative IDL

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Enum and bitmask can have extensibility

        typedef TypeFlag   EnumTypeFlag;        // Unused. No flags apply
        typedef TypeFlag   BitmaskTypeFlag;     // Unused. No flags apply
    
  • Reported: DDS-XTypes 1.3 — Tue, 30 Jun 2020 19:25 GMT
  • Updated: Wed, 10 Aug 2022 22:24 GMT

Dynamic Binding: equals() for DynamicType/DynamicTypeMember and related types

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Definition of equality is based on the "Properties" of the class as defined by the UML models (for example, Table 54). However, associations/aggregations (which are not properties) are just as important for equality. An example is the TypeDescriptor that's associated with each DynamicType. While not a Property, the state of TypeDescriptor is effectively part of the state of DynamicType.

    A related issue is that DynamicTypeMembers can only be equal "if they belong to the same type." This seems to be both unnecessary and prevents certain valid use cases. An application may want to determine if two different structs each have a string member of a certain name. Based on the Type System model (sect 7.2) it would be natural to apply the equals() operation on the members to check their logical equality independent of which struct they're declared in.

  • Reported: DDS-XTypes 1.3 — Mon, 8 Aug 2022 14:26 GMT
  • Updated: Mon, 8 Aug 2022 14:26 GMT

Annex C: BoundSeq IDL type not defined

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The IDL defined in Annex C uses the type BoundSeq as a member of TypeDescriptor, but BoundSeq is not defined in the spec.

  • Reported: DDS-XTypes 1.3 — Tue, 26 Jul 2022 18:01 GMT
  • Updated: Thu, 28 Jul 2022 14:27 GMT

Update parameters of check_remote_datawriter_register_instance

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    check_remote_datawriter_register_instance defined in 8.4.2.9.15 has these parameters: permissions_handle, reader, publication_handle, key, exception.

    In the IDL file and Table 32 in 8.4.2.9 there's also an instance_handle parameter, which should be removed.

  • Reported: DDS-SECURITY 1.1 — Fri, 24 Jun 2022 19:50 GMT
  • Updated: Fri, 24 Jun 2022 19:50 GMT

Align with XTYPES 1.3 and IDL 4.2

  • Key: DDS15-250
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    This issue should be treated as blocker so that it is resolved ahead of other issues.

    • Align naming of annotations with the latest versions of said specifications.
    • Use the new size-aware typenames: int32_t, uint32_t etc. Instead of the classic ones.
    • Use bitmask where it makes sense. For example the StatusKind, InstanceStateKind, ViewStateKind and the corresponding
    • StatusMask, InstanceStateMask, ViewStateMask? Will this negatively impact /break the Java, C#, C++ APIs?
    • Use enum for ReturnCode_t, QosPolicyId_t? Will this negatively impact /break the Java, C#, C++ APIs?
    • Use template modules to model the Implied IDL related to type 'Foo'?
    • Apply the @extensibility annotation to the BuiltinTopicData types and the types they reference (e.g. QosPolicy types) since they are serialized to be sent to other peers. Note that this was already done in XTYPES so we can copy those definitions to the DDS spec and remove them from a future revision of XTYPES.
  • Reported: DDS 1.4 — Mon, 20 May 2019 22:47 GMT
  • Updated: Thu, 2 Jun 2022 00:59 GMT

InstanceHandle_t underspecified

  • Key: DDS15-315
  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    In 2.2.2.1.1.8 the Instance handle is mentioned by the spec lacks some definition of InstanceHandle_t. In how far as instance handles unique and should they be comparable? Are they unique system wide or process wide? Is it legal to have two DDS entities (for example two domain participants) to have the same instance handle? This is important for users who for example store DDS entities in a std::map.

  • Reported: DDS 1.4 — Mon, 16 Nov 2020 07:30 GMT
  • Updated: Wed, 25 May 2022 23:42 GMT

Wrong data type for serializedPayload in DATAFRAG

  • Status: open  
  • Source: Atostek Oy ( Juhana Helovuo)
  • Summary:

    Table 8.42 gives the Structure of the DataFrag Submessage. The last field is specified to have type "SerializedPayload". If this would be the case, the contents of that field should be decodable as a SerializedPayload object, as specified in Section 10, but really the field seems to contain just a fragment of a SerializedPayload. A complete series of fragments must be concatenated to get a valid SerializedPayload. Therefore, the type should be changed to indicate that it is a fragment, not a whole object.

    A similar problem exists in Section 9.4.5.5 DataFrag Submessage.

    More generally, there seems to be confusion in terminology between SerializedPayload / SerializedData / SerializedDataFragment.

    The latter two seem to be suitable for use in the payload field of Data and DataFrag submessages, respectively, and they are defined in 8.3.5.17 -.18, but SerializedPayload is not defined in 8.3.5 at all.

    Section 9.4.2 (PSM) again does not define a mapping for SerializedData / SerializedDataFragment, but for SerializedPayload instead.

    Please clarify the relationship between the aforementioned terms.

  • Reported: DDSI-RTPS 2.5 — Tue, 17 May 2022 12:33 GMT
  • Updated: Thu, 19 May 2022 16:02 GMT

Annex A: Ownership Profile is unclear

  • Key: DDS15-328
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The bullet point for " This profile adds two things " goes on to list three things. The third is about History QoS, which makes it appear to the reader like this was added on later and not initially part of the profile. That itself is not a problem, but for clarity this section should provide a rationale as to why the History QoS Policy is involved in the definition of Ownership Profile.

  • Reported: DDS 1.4 — Thu, 7 Apr 2022 15:54 GMT
  • Updated: Thu, 7 Apr 2022 15:54 GMT

Introduce a concept of Partitions at the DomainParticipant level

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    At the wire-protocol level currently only DataWriters and DataReaders have Partitions.

    It would be useful to have a similar concept/Qos at the DomainParticipant level. This would allow system deployments to control better participant matching.

    While the same could be implemented by adding the the partitions to all Readers and Writers in the Participant the process would be tedious and far less efficient. For example with Participant partitions it would be possible for Participants that do not have a matching partition to avoid doing EndpointDiscovery.

  • Reported: DDSI-RTPS 2.5 — Wed, 16 Mar 2022 23:49 GMT
  • Updated: Wed, 16 Mar 2022 23:49 GMT

The specs and illustration of the ChangeForReader are missing / have been removed

  • Status: open  
  • Source: N/A ( Frans Schneider)
  • Summary:

    In previous versions, ChangeForReader was specified and illustrated. The ChangeFromWriter (8.4.10.5) is still in place including its illustrated use (8.4.12.3). Is ChangeForReader removed on purpose or by accident? In my opinion, ChangeForReader should be defined as before.

  • Reported: DDSI-RTPS 2.5 — Thu, 3 Mar 2022 10:05 GMT
  • Updated: Mon, 7 Mar 2022 19:49 GMT

Error in formatting pseudo code

  • Status: open  
  • Source: N/A ( Frans Schneider)
  • Summary:

    The if statement on the second line should start on a new line.
    Instead of:
    ```
    ReceiverReceiver.unicastReplyLocatorList =
    InfoReply.unicastLocatorList if ( MulticastFlag )

    { Receiver.multicastReplyLocatorList = InfoReply.multicastLocatorList } else { Receiver.multicastReplyLocatorList = <empty> }
    ```
    this should be:
    ```
    ReceiverReceiver.unicastReplyLocatorList = InfoReply.unicastLocatorList

    if ( MulticastFlag ){ Receiver.multicastReplyLocatorList = InfoReply.multicastLocatorList }

    else

    { Receiver.multicastReplyLocatorList = <empty> }

    ```

  • Reported: DDSI-RTPS 2.5 — Wed, 2 Mar 2022 13:07 GMT
  • Updated: Wed, 2 Mar 2022 21:43 GMT

Handling of non-existent cache changes in logical action

  • Status: open  
  • Source: N/A ( Frans Schneider)
  • Summary:

    In the version 2.3 specs, a gap is inserted in case a cache change isn't available in the history cache. In the 2.5 specs, only the highest previously sent sequence number is taken into account to determine if agap should be inserted.
    The shown logical actions will fail if the cache change with a_change_seq_num can't be located in the cache. in which case a gap should be inserted as well as in the 2.3 specs. Considering the explanation given for sending a gap because of the HISTORY QoS set to KEEP_LAST in the last paragraph on page 82, one should definitely consider the situation that a cache change is missing.

  • Reported: DDSI-RTPS 2.5 — Mon, 28 Feb 2022 08:47 GMT
  • Updated: Wed, 2 Mar 2022 21:42 GMT

The "depth" QoS setting does not have any bounds set

  • Key: DDS15-327
  • Status: open  
  • Source: Open Robotics ( William Woodall)
  • Summary:

    The description of the history depth QoS setting indicates it is optional and only used when KEEP_LAST is the history kind, and that it is a long (or sometimes referred to as an integer/int), and that the default value is 1, and that it needs to be consistent with related RESOURCE_LIMITS QoS settings, but it does not specify a bounds nor does it explicitly state that the bounds are actually any valid (signed) long value. So a few boundary cases are not well defined, for example:

    • is KEEP_LAST with depth 0 valid? If so, is it a special behavior?
    • what about negative values for depth?

    RTI's Connext Pro documentation limits it to values greater than zero and less than 100,000,000:

    > "[range] [1,100 million], <= DDS_ResourceLimitsQosPolicy::max_samples_per_instance"
    https://community.rti.com/static/documentation/connext-dds/6.0.1/doc/api/connext_dds/api_c/structDDS__HistoryQosPolicy.html#aef0fb3fd3579866be17d1a936f5e3729

    Other implementations like Cyclone DDS and Fast-DDS will accept values of zero, though it's not clear what they're behavior is in that case.

    Those are useful to imply what the behavior is, but I think the standard should probably take stance on the valid values for depth, and I think values >= 1 makes sense, though the "100 million" upper bound set by RTI's API seems kind of arbitrary, though I don't have a better alternative in mind.

  • Reported: DDS 1.4 — Thu, 24 Feb 2022 02:30 GMT
  • Updated: Wed, 2 Mar 2022 21:42 GMT

Missing escaping rules for filter expression, topic expression, query expression

  • Key: DDS15-320
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The specification should specify how string parameters should be escaped when used withing a query string, for example a query_expression of "name = 'bar'', but what if bar is a string with a single quote, newline, tab, etc? The specification should specify the escaping rules for that.

  • Reported: DDS 1.4 — Thu, 4 Mar 2021 07:04 GMT
  • Updated: Wed, 23 Feb 2022 16:26 GMT

Missing DDS-XTypes extensions (which should be part of DDS 1.5)

  • Key: DDSXML11-3
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    This specification lacks the XSD type definitions for the QoS extensions coming from DDSXTypes (at least DataRepresentationQosPolicy and TypeConsistencyEnforcementQosPolicy), these should be added to the DDS XML consolidated XML

  • Reported: DDS-XML 1.0 — Wed, 9 Feb 2022 15:05 GMT
  • Updated: Wed, 9 Feb 2022 17:10 GMT

Inconsistent use of higuest_sent_seq_num and highestSentChangeSN

  • Status: open  
  • Source: N/A ( Frans Schneider)
  • Summary:

    In 8.4.7.3 and 8.4.7.5, the variable highestSentChangeSN is used for the highest sequence number sent. In 8.4.8.1.4 and subsequent paragraphs, the variable highest_sent_seq_num is used for the same purpose.
    Also, there is a spelling error in the variable's name higuest_sent_seq_num instead of highest_sent_seq_num.

  • Reported: DDSI-RTPS 2.5 — Mon, 7 Feb 2022 11:39 GMT
  • Updated: Mon, 7 Feb 2022 17:24 GMT

Inconsistent use of SEQUENCE_NUMBER_INVALID; for highestSentChangeSN

  • Status: open  
  • Source: N/A ( Frans Schneider)
  • Summary:

    On initialization of the ReaderLocator, the highestSentChangeSN is set to SEQUENCE_NUMBER_INVALID which is not defined in this specification. In 8.4.7.2 RTPS StatelessWriter the function unsent_changes_reset is defined as resetting highestSentChangeSN to the value 0. Either define SEQUENCE_NUMBER_INVALID as being the value 0 and use it also in function unsent_changes_reset or use the value 0 instead of SEQUENCE_NUMBER_INVALID. Or, is there a good erason to make a distinction between SEQUENCE_NUMBER_INVALID and 0?

  • Reported: DDSI-RTPS 2.5 — Mon, 7 Feb 2022 10:01 GMT
  • Updated: Mon, 7 Feb 2022 17:23 GMT

Add support for data-level compression during serialization

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Larga data types or types that contain compressible data (e.g. strings) can benefit from using compression at serialization time.
    This would reduce the size required to store the data in the reader/writer caches as well as the bandwidth used to send the data.

    This is complementary to transport-level compression and has the advanatage that the data is only compressed once (at serialization, instead of every time it is sent) as well as reducing memory requirements.

  • Reported: DDS-XTypes 1.3b1 — Tue, 1 Feb 2022 19:08 GMT
  • Updated: Tue, 1 Feb 2022 19:08 GMT

Fields writerSet and secureWriterSet are missing in wire representation:

  • Status: open  
  • Source: N/A ( Frans Schneider)
  • Summary:

    In 8.3.8.6 Heartbeat, the fields writerSet and secureWriterSet are defined. The equivalent wire presentation is missing however.

  • Reported: DDSI-RTPS 2.5 — Tue, 25 Jan 2022 15:25 GMT
  • Updated: Tue, 25 Jan 2022 22:18 GMT

Paramter id and length should be unsigned short

  • Status: open  
  • Source: N/A ( Frans Schneider)
  • Summary:

    Both the parameter id and length fields are defined as short. These should be unsigned short.

  • Reported: DDSI-RTPS 2.5 — Mon, 24 Jan 2022 14:57 GMT
  • Updated: Tue, 25 Jan 2022 22:14 GMT

Masks in table 9.6 (ParameterId subspaces) should be hexadecimal

  • Status: open   Implementation work Blocked
  • Source: N/A ( Frans Schneider)
  • Summary:

    The masks used in table 9.6 should be written as 0x8000 and 0x4000 instead of 8000 and 4000

  • Reported: DDSI-RTPS 2.5 — Mon, 24 Jan 2022 13:20 GMT
  • Updated: Tue, 25 Jan 2022 22:11 GMT

Note on the message wide CRC check

  • Status: open  
  • Source: N/A ( Frans Schneider)
  • Summary:

    Using the header_extension submessage to pass the message's CRC seems to me the wrong place. It would be more logical to add the CRC at the end of the message for obvious reasons. First processing the whole potentially large message and then inserting the CRC somewhere in the front, requires extra resources. Also, this makes it unnecessary to first use zero's for the value of the CRC field while calculating the message's CRC. Adding the CRC just to the end of the message, maybe in a submessage of its own if you like, is a much better solution.

    Moreover, the receiver has been designed in such a way that while processing a message it can hand off processed submessgaes right away, which is rather nice. With a message CRC ckheck, either in the header or the tail of the messgae, mitigates this feature since one first has to process the whole message before deciding if the message, and therefor the submessages, is valid. Iff some CRC checking should be implemented, do this at the level of a submessage.

    With a 128 or just 64 bit CRC bit checksum, the designer clearly had huge message sizes in mind, which doesn't seem a good design decision to me.

  • Reported: DDSI-RTPS 2.5 — Thu, 20 Jan 2022 14:01 GMT
  • Updated: Tue, 25 Jan 2022 22:07 GMT

Textual error in section 9.4.5.2.1

  • Status: open  
  • Source: N/A ( Frans Schneider)
  • Summary:

    The line

    The value of the UExtension4Flag can be obtained from the expression:
    T = SubmessageHeader.flags & 0x04

    should read:

    The value of the TimestampFlag can be obtained from the expression:
    T = SubmessageHeader.flags & 0x04

  • Reported: DDSI-RTPS 2.5 — Wed, 19 Jan 2022 10:29 GMT
  • Updated: Tue, 25 Jan 2022 21:56 GMT

Description incomplete

  • Status: open  
  • Source: N/A ( Frans Schneider)
  • Summary:

    In the bullet list, the text of second item seems to be incomplete. It now reads:

    • The GUIDs of Endpoint Groups within a Participant
  • Reported: DDSI-RTPS 2.5 — Tue, 11 Jan 2022 14:50 GMT
  • Updated: Tue, 25 Jan 2022 21:53 GMT

CRC computation for Checksum128_t undefined

  • Status: open  
  • Source: N/A ( Frans Schneider)
  • Summary:

    The algorithms for 32 and 64 bit crc checks are defined but the one for 128 bits is missing.

  • Reported: DDSI-RTPS 2.5 — Wed, 19 Jan 2022 14:08 GMT
  • Updated: Tue, 25 Jan 2022 21:27 GMT

Please ignore Implementation Work Blocked flag in issue INBOX-1375

  • Status: open  
  • Source: N/A ( Frans Schneider)
  • Summary:

    Sorry, had this flag checked by accident.

  • Reported: DDSI-RTPS 2.5 — Mon, 24 Jan 2022 14:22 GMT
  • Updated: Tue, 25 Jan 2022 20:39 GMT

Typo or editing issue

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    7.4.1.2.1 7th paragraph (maybe) / 3rd paragraph of page 126: : “The four bytes following the PID_EXTENDED and length shall be a serialized UINT32 value "eMemberHeader" that is constructed by combining four 1-bit flags with by the 28-bit member ID.”

    It seems like the second “by” should be removed.

  • Reported: DDS-XTypes 1.3b1 — Tue, 24 Mar 2020 14:13 GMT
  • Updated: Fri, 21 Jan 2022 06:58 GMT

Default value and @default annotations

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    IDL4 defines @default as a way to specify a custom default value for an IDL element, but DDS XTypes defines it own default mechanism, shouldn't the value of @default be used when set?

  • Reported: DDS-XTypes 1.3 — Wed, 21 Apr 2021 10:28 GMT
  • Updated: Fri, 21 Jan 2022 02:59 GMT

JSON Representation of Unions

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Some union values are "empty" in that they have no case selected. Since discriminators are optional, is the JSON representation of such a union equivalent to an empty struct?

    // IDL
    union U switch (boolean) {
    case TRUE:
      long i;
    };
    

    When a value of this union has discriminator FALSE, there is no selected case.

  • Reported: DDS-JSON 1.0 — Tue, 18 Jan 2022 21:18 GMT
  • Updated: Tue, 18 Jan 2022 21:18 GMT

Unclear how to discover GROUP_GUID/GROUP_ENTITY_ID from a coherent Publisher

  • Status: open   Implementation work Blocked
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The RTPS V2.5 spec explains how to implement the Group ordering/coherency feature in section 8.7.5 and 8.7.6. In these sections it is explained that the scope of the coherent update (i.e. which coherent Writers the coherent Publishers contains) is communicated by means of the GroupDigest, which is the first part of an MD5 hash of an ordered list of CDR encoded EntityIDs of those Writers.

    In order for the Subscribing side to validate whether all relevant Writers have successfully been discovered, it will create a digest from all EntityIDs of the writers discovered so far, and then compare that to the Digest received from the publisher. Only when the two digests are identical you know that you have successfully discovered all participating Writers.

    Problem for this is that you need to know which Writers belong to which Publisher: you can't just calculate a digest over all discovered Writers because not all discovered Writers might be part of the same group coherent Publisher.

    That means I need to to know the GROUP_GUID or at the very least the GROUP_ENTITY_ID of the Publisher of a Writer in order for me to determine which discovered Writer to include in the digest I calculate to do the comparison.

    However, it is not clear from the spec how this GROUP_GUID or this GROUP_ENTITY_ID is communicated from the publishing side to the subscribing side. The spec introduces a separate PID for both the GROUP_GUID and and the GROUP_ENTITY_ID, but nowhere does it say which one to send out from the Publisher side, or to which message to attach this information. This information is necessary however in order to build an interoperable group coherent implementation.

  • Reported: DDSI-RTPS 2.5 — Wed, 12 Jan 2022 16:02 GMT
  • Updated: Wed, 12 Jan 2022 16:02 GMT

Incorporate the lookup_topicdescription change added in XTYPES 1.3

  • Key: DDS15-326
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 7.6.4.2 Operation: DomainParticipant::lookup_topicdescription
    in XTYPES 1.3 makes a changes to the DDS spec in the description of the Operation: DomainParticipant::lookup_topicdescription

    This change should be consolidated into the DDS specification.

  • Reported: DDS 1.4 — Tue, 4 Jan 2022 21:09 GMT
  • Updated: Tue, 4 Jan 2022 21:09 GMT

dds::core::status::StatusMask should allow you to set mutiple Status bits by using the logical OR operation

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The current dds::core::status::StatusMask inherits from a bitset, but it does not allow you to use the logical OR ( operator | () ) to set multiple bits in the mask.

    Even though StatusMask inherits from std::bitset (which does allow you to use the | operator() ), any attempt to use it on the StatusMask (as in
    StatusMask | StatusMask) results in a compilation error because the resulting type is a bitset, not a StatusMask.

    This seems a bit weird, since using the logical OR seems the natural way in which people set bits in a mask, and it is a common pattern that is used extensively in its parent, the bitset.

    The current StatusMask does allow you to use the streaming operator << for the same purpose instead, but this does not feel like a natural way of doing it.

    Last but not least, some implementations are already supporting the | operator where others don't, so we might as well want to standardize is to keep application code portable across vendors.

  • Reported: DDS-PSM-Cxx 1.0 — Mon, 20 Dec 2021 21:02 GMT
  • Updated: Mon, 20 Dec 2021 21:02 GMT

Clarify the PartitionQosPolicy

  • Key: DDS15-245
  • Status: open  
  • Source: Brunvoll AS ( Havard Skjevling)
  • Summary:

    It is ambiguous whether or not the PartitionQosPolicy set for a Publisher or Subscriber should affect DataWriter and DataReader matching, and how an implementation should handle it.

    Since it is stated that failure to match partitions does not imply "incompatible" QoS, it would seem it does not affect matching.
    If so, the specification should be clearer with regards to

    • whether this is filtered on the publishing, or subscribing side (or both)
    • how partitions are tied to samples or instances e.g. when written from a DataWriter whose Publisher changes partitions intermittently
    • how it deals with late joiners and historical data
    • how this affects the "transient/persistent" services and their entities' QoS settings

    2.2.3 QosPolicy Table

    A DataWriter within a Publisher only communicates with a DataReader in a Subscriber if (in addition to matching the Topic and having compatible QoS) the Publisher and Subscriber have a common partition name string.

    2.2.3.13 Partitions

    For a DataReader to see the changes made to an instance by a DataWriter, not only the Topic must match, but also they must
    share a common partition. Each string in the list that defines this QoS policy defines a partition name. A partition name may
    contain wildcards. Sharing a common partition means that one of the partition names matches.
    Failure to match partitions is not considered an “incompatible” QoS and does not trigger any listeners nor conditions.

  • Reported: DDS 1.4 — Wed, 7 Nov 2018 11:03 GMT
  • Updated: Tue, 16 Nov 2021 20:21 GMT

Add return_permissions_handle to the AccessControl interface

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Handles that are allocated by plugins need to have a "return" operation so that the memory used by the plugin can be freed when the handle is no longer needed by the middleware.

    boolean return_permissions_handle(in PermissionsHandle handle,
      inout SecurityException ex);
    
  • Reported: DDS-SECURITY 1.1 — Thu, 1 Oct 2020 16:12 GMT
  • Updated: Fri, 12 Nov 2021 17:50 GMT

Provide a pre-shared key protection mechanism

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    There is an inherent DoS network amplification attack that exploits peer-to-peer discovery. See https://issues.omg.org/browse/DDSIRTP26-6

    This issue should be addressed by DDS-Security. Likely using some pre-shared key mechanics to protect all messages not otherwise protected. For example, the authentication handshakes.

  • Reported: DDSI-RTPS 2.5 — Fri, 12 Nov 2021 16:24 GMT
  • Updated: Fri, 12 Nov 2021 16:24 GMT

Add best practice/implementation guidelines to the CryptoTransform plugin


Missing TK_INT8 and TK_UINT8 in the IDL machine readable file

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    https://issues.omg.org/browse/DDSXTY13-7 added these two constants and they were placed in the IDL that appears in Annex B. However they were left out of the separate machine readable file https://www.omg.org/spec/DDS-XTypes/20190301/dds-xtypes_typeobject.idl

    In addition, the comment:

        //   - COMMON indicates the TypeIdentifier identifies equivalent types
        //     according to both the MINIMAL and the COMMON equivalence relation.
        //     This means the TypeIdentifier is the same for both relationships
    

    Should say (replace second "COMMON" with "COMPLETE"):

        //   - COMMON indicates the TypeIdentifier identifies equivalent types
        //     according to both the MINIMAL and the COMPLETE equivalence relation.
        //     This means the TypeIdentifier is the same for both relationships
    
  • Reported: DDS-XTypes 1.3b1 — Tue, 12 Oct 2021 00:51 GMT
  • Updated: Tue, 12 Oct 2021 15:09 GMT

Extensibility of inherited structures

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The specification should state the behavior if a derived type extensibility kind is specified to be different from that of its parent.

    Furthermore for usability we should specify the behavior if the derived type does not specify any extensibility kind. Does it 'inherit' that of the parent or is it assumed to be the 'default'.

    Current thinking: It is an error to have a derived structure specify a different extensibility kind than its parent. Leaving it unspecified sets the derived type extensibility type to that of your parent.

    Basically the serialization of the derived class does not add its own header.

  • Reported: DDS-XTypes 1.3b1 — Thu, 30 Sep 2021 15:28 GMT
  • Updated: Tue, 5 Oct 2021 14:05 GMT

Inconsistent Definitions of RTPS Encapsulation

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Frederick Hornsey)
  • Summary:

    There are inconsistencies in the two definitions of the RTPS Encapsulation Header I've found so far. The major issue is that the values for the encoding identifiers are different between 7.4.3.4 and 7.6.3.1.2 for non-XCDR1 encodings. These are the big-endian values compared:

    Type 7.4.3.4 7.6.3.1.2
    Plain XCDR2 0x00, 0x10 0x00, 0x06
    Parameter List XCDR2 0x00, 0x12 0x00, 0x0a
    Delimited XCDR2 0x00, 0x14 0x00, 0x08
    XML 0x01, 0x00 0x00, 0x04

    The other issue is that while 7.6.3.1.2 describes the two options bytes of the encapsulation header that follow the encoding identifier and extends it for padding info, 7.4.3. is lacking in details as far as I can see. The serialization rules has them in 7.4.3.5.3 as `OPTIONS`, but doesn't define it in any of the tables before the rules like all the other symbols are. It does mention encapsulation in 7.4.3.5, but doesn't mention anything about extending the options bytes.

  • Reported: DDS-XTypes 1.3b1 — Thu, 4 Jun 2020 17:51 GMT
  • Updated: Sat, 2 Oct 2021 00:10 GMT

Integrate annotations for range/min/max with try_construct

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The range/min/max group of standard IDL annotations are not referenced in table 21 and its surrounding sections.

    It would seem like the try_construct behavior could be applied to range/min/max when the publisher and subscriber have different but compatible annotations.

  • Reported: DDS-XTypes 1.3b1 — Thu, 30 Sep 2021 14:45 GMT
  • Updated: Thu, 30 Sep 2021 14:45 GMT

Remove all IDL42 specified parts

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    DDSXTypes refers in section 3 to IDL4.2 but still duplicates a lot of things which are now part in IDL4. It is now very hard to determine what is part of IDL4 and what is DDSXTypes specific, for example bit_bound seems to be just for DDS, it is not part of IDL4.

  • Reported: DDS-XTypes 1.3 — Thu, 19 Aug 2021 09:38 GMT
  • Updated: Fri, 20 Aug 2021 06:52 GMT

8 bit types mising in 7.2.1

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    In 7.2.1 it says:

    Integral types of various bit lengths (16, 32, 64), both signed and unsigned

    8 bit types are missing, so updated this to

    Integral types of various bit lengths (8, 16, 32, 64), both signed and unsigned

  • Reported: DDS-XTypes 1.3 — Tue, 17 Aug 2021 11:22 GMT
  • Updated: Tue, 17 Aug 2021 22:16 GMT

find_topic/delete_topic underspecified

  • Key: DDS15-316
  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    It is not clear what kind of restrictions there are to find_topic/delete_topic.

    Assume two software modules in the same process, order of instantiation is not fixed, also more modules could be loaded by a configuration file. All modules use find_topic to find topic Foo, the first module now calls create_topic to create the topic, second module gets topic Foo through find_topic.

    Each module now creates its own datareader/datawriters using the topic it retrieved. At the moment the module now ends it cleans the datareader/datawriter it has created and now calls delete_topic. It is not clear what at that moment delete_topic will return for the module that has successfully used find_topic to get the topic. Some DDS vendors return RETCODE_OK, some RETCODE_PRECONDITION_NOT_MET because there are still readers/writers related to that topic (but the other module did use create_topic). The shutdown order can also be swapped, so first the module that used create_topic will be removed, the one with find_topic keeps running.

    The description of find_topic should be extended to clarify how it behaves related to delete_topic? Personally I think RETCODE_OK should be returned when there is no DataReader, DataWriter, ContentFilteredTopic, or MultiTopic attached anymore to the topic returned by find_topic, independent of the entities attached to the topic as it was created by create_topic (or a different find_topic call)

  • Reported: DDS 1.4 — Mon, 16 Nov 2020 12:36 GMT
  • Updated: Thu, 22 Jul 2021 06:17 GMT

Read / Take with max_samples = 0

  • Key: DDS15-325
  • Status: open  
  • Source: eProsima ( Miguel Company)
  • Summary:

    It is not clear what should be done if the user calls read, take, or any of their variants when the following conditions are met:

    1. The method is called with max_samples = 0
    2. There is data available that would be returned with max_samples > 0

    I think we have two options here:

    1. Return NO_DATA
    2. Return OK with a resulting collection with len = 0

    The last sentence of the section seems to indicate the latter...

    If the DataReader has no samples that meet the constraints, the return value will be NO_DATA

    ... but the definition of NO_DATA on page 5 seems to indicate the former (as no data is returned)

    Indicates a transient situation where the operation did not
    return any data but there is no inherent error.

  • Reported: DDS 1.4 — Thu, 15 Jul 2021 09:02 GMT
  • Updated: Tue, 20 Jul 2021 13:20 GMT

TypeLookup IDL Inconsistency

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Frederick Hornsey)
  • Summary:

    TypeLookup IDL in 7.6.3.3.3 contains the following unsigned long constants in IDL:

    // computed from @hashid("getTypes")
    const unsigned long TypeLookup_getTypes_HashId = 0x018252d3;
    // computed from @hashid("getDependencies");
    const unsigned long TypeLookup_getDependencies_HashId = 0x05aafb31;
    

    However later in the IDL two unions called TypeLookup_Call and TypeLookup_Return which use those constants as branches are discriminated with a long. Since long is apparently specified by the RPC spec, then the type of the constants should be changed to long to match the unions.

    Other issues in this IDL:

    • TypeLookup_getTypes_Result and TypeLookup_getTypeDependencies_Result both use DDS_RETCODE_OK as an IDL constant. It should be DDS::RETCODE_OK (from the DDS core spec 2.3.3)
    • TypeLookup_Call and TypeLookup_Return both use IDL constants that end in the word "Hash" but should match the ones above (they are missing "Id")
    • TypeLookup_Reply contains a member of type RequestHeader which should be ReplyHeader
  • Reported: DDS-XTypes 1.3 — Tue, 10 Nov 2020 02:10 GMT
  • Updated: Wed, 16 Jun 2021 22:03 GMT

Common Types contains invalid IDL

  • Key: DDSRPC11-5
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    IDL identifiers may not reuse the same names (disregarding case) of types already in scope. This is a problem for "instanceName" in the RPC spec:

    struct RequestHeader {
      SampleIndentity_t requestId;
      InstanceName instanceName;
    };
    

    And SampleIndentity_t is misspelled. It should be SampleIdentity.

  • Reported: DDS-RPC 1.0 — Wed, 16 Jun 2021 21:32 GMT
  • Updated: Wed, 16 Jun 2021 21:32 GMT

Typo in Member of AnnotationParameterValue

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Frederick Hornsey)
  • Summary:

    AnnotationParameterValue has a members for integer types. uint_16_value is the only one that has an underscore between the int and the size and this appears to be a typo. Given that it seems that the name has no real bearing in this situation, it should be fixed by changing uint_16_value to uint16_value.

  • Reported: DDS-XTypes 1.3 — Mon, 14 Jun 2021 22:07 GMT
  • Updated: Mon, 14 Jun 2021 23:04 GMT

Section 9.4.2.9 Timestamps shows 'seconds' as 'long' instead of 'unsigned long'

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    RTPS version 2.3 updated modified Time_t to have the 'seconds' be of type unsigned long so that there would be no rollover in 2038.

    This matches when it is shown in the IDL definition in 9.3.2.1 'IDL Definitions'

    However Section 9.4.2.9 Timestamps illustrates the 'Timestamp' sub-message element with a 'long' instead of 'unsigned long' for the seconds part. It should be changed to illustrate 'unsigned long' as in:

    Timestamp:

    0...2...........8...............16.............24. .............32 
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
    |                 unsigned long    seconds                      | 
    +---------------+---------------+---------------+---------------+ 
    |                 unsigned long    fraction                     | 
    +---------------+---------------+---------------+---------------+
    
  • Reported: DDSI-RTPS 2.5 — Thu, 10 Jun 2021 23:32 GMT
  • Updated: Thu, 10 Jun 2021 23:32 GMT

sample lost/rejected should be clarified and extended

  • Key: DDS15-324
  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    when testing for sample lost/rejected between multiple DDS vendors we see different vendors to different things. The specification should be extended with more information when a sample is considered lost and when rejected with also more details how QoS settings would influence this. We see that vendors have extended the SampleLostStatus and SampleRejectedStatus and even have deprecated some of its members, this should be handled in the specification so that the user gets the same behavior when using multiple vendors

  • Reported: DDS 1.4 — Thu, 27 May 2021 16:27 GMT
  • Updated: Thu, 3 Jun 2021 18:53 GMT

DDS should use typed modules

  • Key: DDS11-15
  • Legacy Issue Number: 15430
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The DDS specfication has typed interfaces (writer/reader/etc) which are currently not expressed in IDL. The DDS specification should use the typed modules as introduced in the dds4ccm specification to express all interfaces explicitly in IDL, including the typed ones.

  • Reported: DDS 1.2 — Mon, 23 Aug 2010 04:00 GMT
  • Updated: Fri, 21 May 2021 09:30 GMT

Order in which implied IDL and language mappings interact

  • Key: DDS15-323
  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    There looks to be different interpretations between DDS vendors how implied IDL and language mappings interface. The specification lists in 2.3.3 the example of type Foo which results in the implied IDL DataWriter named FooDataWriter. On this implied IDL the concrete language mapping is applied, so with IDL to C++ we get FooDataWriter/FooDataWriter_ptr/FooDataWriter_var. But, what happens when the type is a IDL or C++ keyword, for example the type _public results in the implied IDL publicDataWriter, on which the IDL to C++ language mapping is implied, so to our idea you get _cxx_public/publicDataWriter/publicDataReader. The IDL to C++ language mapping only sees the identifiers as resulted by the implied IDL rules. Some vendors do generate _cxx_public/_cxx_publicDataWriter/_cxx_publicDataReader which means the implied IDL and IDL to C++ language mapping are strangely mixed. A generaic modeling tool for example only knows of implied IDL, a custom code generator generates the code for the specific language mapping.

    The specification should give an example for _public, what does the programmer now get in a specific programming language, for example C++

  • Reported: DDS 1.4 — Wed, 19 May 2021 11:54 GMT
  • Updated: Thu, 20 May 2021 20:27 GMT

Incorrect value for GROUPDATA_QOS_POLICY_NAME

  • Key: DDS15-322
  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The IDL file dds_dcps.idl has a wrong value

    const string GROUPDATA_QOS_POLICY_NAME = "TransportPriority";

    Shouldn't it say "GroupData"

  • Reported: DDS 1.2 — Wed, 12 May 2021 12:20 GMT
  • Updated: Wed, 12 May 2021 14:06 GMT

The list of valid KEY types does not include String types

  • Status: open  
  • Source: Twin Oaks Computing, Inc. ( Mr. Clark Tucker)
  • Summary:

    The text reads:

    "A type's key can only include members of the following types: primitive, aggregation,
    enumeration, bitmask, array, and sequence."

    It should include 'string' and 'wstring'.

  • Reported: DDS-XTypes 1.3 — Thu, 6 May 2021 15:53 GMT
  • Updated: Tue, 11 May 2021 13:56 GMT

IDL keywords used as interface/module

  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    A module ATTRIBUTE and interface Attribute are both used in this spec, but attribute is a keyword in IDL and this will collide with it, IDL is case insensitive (see IDL 4.2, section 7.2.3 Identifiers) and check the IDL collision rules, see IDL 4.2, section 7.2.3.1 Collision Rules.

    Maybe more keywords are used in this spec, would recommend to compile the IDL of this specification with more IDL compilers.

  • Reported: DDS-OPCUA 1.0 — Sun, 25 Apr 2021 08:12 GMT
  • Updated: Fri, 30 Apr 2021 13:42 GMT

Don't use anonymous types

  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Some language mappings don't support anonymous types for various reasons. This specification does use some anonymous types which can easily be removed by adding some typedefs outside of the types. Please add some typedes and use these within the containing types.

  • Reported: DDS-OPCUA 1.0 — Sun, 25 Apr 2021 08:07 GMT
  • Updated: Fri, 30 Apr 2021 13:42 GMT

No mapping for uint8/int8, map, bitset

  • Key: DDSXML11-2
  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The IDL specification got extended with support for uint8/int8, map, bitset/mask, but there is no mapping for this in the DDS XML specification. The DDS XML specification should also define how these new IDL types are mapped in XML

  • Reported: DDS-XML 1.0 — Mon, 19 Apr 2021 07:28 GMT
  • Updated: Fri, 30 Apr 2021 13:36 GMT

Support transport-level RTPS message compression

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Some transports have limited bandwidth and may benefit from compressing the RTPS message prior to being sent over the transport.

    This is something that could be added in a reasonably simple manner by considering this part of the transport PSM.

  • Reported: DDSI-RTPS 2.3b1 — Mon, 14 Sep 2020 15:06 GMT
  • Updated: Fri, 9 Apr 2021 12:28 GMT


Example class table seems to violate written convention

  • Key: DDS15-321
  • Status: open  
  • Source: Air Force Institute of Technology, Student ( Nathaniel Peck)
  • Summary:

    Above the Myclass example table, the written text says that collections of types will be denoted by <type>[]. The example describes in: param4 as being a collection of longs, but the table defines the type as long rather than long[] as the written convention seems to imply.

  • Reported: DDS 1.4 — Tue, 30 Mar 2021 17:56 GMT
  • Updated: Thu, 1 Apr 2021 15:53 GMT

DDS Entities should have a name

  • Key: DDS15-28
  • Legacy Issue Number: 16029
  • Status: open  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    DDS Entities (DomainParticipant, Publisher, Subscriber, DataReader and DataWriter) have associated GUID but the current API does not provide any way of associating them a symbolic name, such as "com.acme.mycoolapp.DomainParticipantFoo"

    The DDS PIM should be extended to support the explicit setting of entity names. When not set explicitly, vendors should be free to pick meaningful names.

  • Reported: DDS 1.2 — Wed, 16 Feb 2011 05:00 GMT
  • Updated: Tue, 16 Mar 2021 08:22 GMT

Table 60 - RTPS encapsulation identifier

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    In this table, the row second from the bottom for "XCDR MUTABLE 2 Little Endian" has the wrong identifier.

  • Reported: DDS-XTypes 1.3 — Thu, 11 Mar 2021 15:44 GMT
  • Updated: Thu, 11 Mar 2021 15:44 GMT

create_querycondition with a query with string parameters

  • Key: DDS15-319
  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    We identified differences between DDS vendors how to handle a query condition that uses a string parameter. At the moment we have a query with "symbol = %0", what is the query parameter string we need to use when we want to match it with OMG. When using for example C++, RTI Connext DDS seems to require "'OMG'", so single quotes around the string itself, but OpenDDS/Opensplice seem to use "OMG" so without single quotes around the string.

    The specification should be clear about how strings are used when they are passed through a query parameter like %0.

  • Reported: DDS 1.4 — Fri, 26 Feb 2021 14:24 GMT
  • Updated: Thu, 4 Mar 2021 01:01 GMT

Unknown behavior of explicitly negated key in nested struct

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    In section 7.6.8 it is stated that for a nested struct that is annotated as key for an embedding struct, you have to follow the following process to to generate its KeyHolder: "If there are any key members, then remove the non-key members from FooKeyHolder. Otherwise do not remove any members."

    So what if the struct has no explicit key members, but it has explicitly mentioned that a certain field should not act as key? Take for example the following example:

    struct Foo {
        long x;
        @key(false) long y;
    };
    
    struct Bar {
        @key Foo myFoo;
        string name;
    };
    

    There are three different ways to interpret the rules for this usecase:

    1. Both x and y will end up in the KeyHolder, since Foo did not specify any key members, so nothing gets removed.
    2. Only y will end up in the KeyHolder, since Foo specified explicitly that x should not act as key.
    3. Neither x nor y will end up in the KeyHolder, since some of the members have an explicit key annotation and so I remove all the members which are not keys, which is y (stated explicitly) and x (stated implicitly).

    So the big underlying question is: is explicitly stating @key(false) equal to not having a @key annotation at all, or does explicitly stating that a member is not a key have some more expressive power over implicitly determining its key status by absence of the @key annotation?

  • Reported: DDS-XTypes 1.3b1 — Wed, 27 Jan 2021 15:03 GMT
  • Updated: Fri, 5 Feb 2021 16:25 GMT

Type Consistency Enforcement QoS Policy ignore_member_names

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The paragraph that explains ignore_member_names defines its semantics as follows:

    • If the option is set to TRUE, member names are considered
    • If the option is set to FALSE (the default), then
      member names are not ignored

    The mode of "considering" would seem to be the same as "not ignoring." Thus the spec is currently stating that the two options are equivalent. Since the name is ignore_member_names, that indicates that setting TRUE should indeed ignore them.

    The spec should be changed to indicate that if the option is set to TRUE then member names are ignored.

  • Reported: DDS-XTypes 1.3 — Mon, 25 Jan 2021 21:40 GMT
  • Updated: Mon, 25 Jan 2021 21:40 GMT

Extend SampleLostStatus with last_reason

  • Key: DDS15-318
  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Several DDS vendors have already extended SampleLostStatus with a last_reason, indicating why the last sample was lost. We would like to see this in the DDS specification so that all vendors provide this consistently

  • Reported: DDS 1.4 — Mon, 23 Nov 2020 12:11 GMT
  • Updated: Mon, 28 Dec 2020 17:03 GMT

Ambiguous effect of using annotations on attributes with multiple declarators.

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    It is possible to put an annotation on an attribute with multiple declarators, like this:

    struct Foo {
      @key long x, y;
    };
    

    What is the effect of this? Does the annotation apply to both declarators? In that case, how do you interpret the following:

    struct Foo {
      @fieldid(0x01000) long x, y;
    };
    
  • Reported: DDS-XTypes 1.3b1 — Wed, 30 Sep 2020 14:49 GMT
  • Updated: Tue, 8 Dec 2020 15:59 GMT

behaviour of create_topic with duplicate topic_name

  • Key: DDS15-317
  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    the DDS spec should define the behaviour when the create_topic is called multiple times with the same topic_name, I think the operation should fail at that moment, but that is not mentioned in the spec

  • Reported: DDS 1.4 — Mon, 16 Nov 2020 17:36 GMT
  • Updated: Tue, 17 Nov 2020 14:30 GMT

Default built-in ReaderDataLifecycle values

  • Key: DDS15-46
  • Legacy Issue Number: 10811
  • Status: open  
  • Source: Anonymous
  • Summary:

    Problem:
    QoS settings of buildin Readers: according to section 2.1.5 builtin Readers should have its ReaderDataLifecycles delays set to infinite, meaning that builtin topics that are disposed and/or unregistered will never be removed from the system unless explicitly 'taken'. If an application never bothers to look at the builtin readers, they will never clean up resources and these readers will use up more and more memory if entities keep on joining and leaving the network.

    Solution:
    We propose to give the builtin-readers a finite duration for both auto_purge variables (for example something like 5 minutes).

  • Reported: DDS 1.2 — Mon, 5 Mar 2007 05:00 GMT
  • Updated: Mon, 12 Oct 2020 13:44 GMT

Size of permission file sent on authentication can exceed max IP packet size

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The Permission File is an XML file. The signature is also encoded as text. For large systems with a lot of Topics the size can grow to be quite big. This is amplified by the fact that it is possible and convenient to combine the permissions of multiple participants into a single file. This size can exceed the 64KB max size of IP.

    An additional problem is that the permissions file is sent during the authentication handshake. The authentication handshake uses a special "best efforts stateless" that does not support fragmentation of large packets. This is done on purpose to make the channel to be robust to sequence number attacks but it results on the inability to send these large permission files.

    This could be addressed by separating the permissions from the authentication handshake and there is already an issue filed for this, see DDSSEC12-13.

    However there is a simple solution that can make the current approach more scalable. The proposed approach is to send the Permissions document compressed rather than in their current text form.

    Users are already hitting this limit so this issue requests that capability to send the permissions compressed is added with high priority, even if later a more general solution is developed as requested in DDSSEC12-13.

  • Reported: DDS-SECURITY 1.1b1 — Tue, 1 Sep 2020 17:50 GMT
  • Updated: Sun, 13 Sep 2020 19:22 GMT

Change the default value for DataWriterLifecycle::autodispose_unregistered_instances and behavior when a DataWriter is deleted

  • Key: DDS15-314
  • Status: open  
  • Source: Real-Time Innovations ( Ms Erin McManus)
  • Summary:

    Unregistering and disposing instances have different semantics and the default association of these two operations through the usage of the autodispose_unregistered_instances may lead to behaviors that are unexpected and not desirable to DDS users.

    The unregister operation is meant to indicate that the DataWriter will no longer update the instance but does not indicate anything about the state of the instance itself. The dispose operation, on the other hand, is meant to indicate a change in the state of the instance, it indicates that the instance has been deleted. Because of this, we are proposing changing the default value of this QoS to FALSE. This is something that many of our customers end up doing explicitly.

    In addition to changing the default value for autodispose_unregistered_instances, we are also proposing that this QoS does not have any effect during the deletion of the DataWriter. Disposing of an instance should be an explicit operation (individual or bulk operation). In many cases, the user's intention is not to delete (dispose) an instance when a DataWriter is deleted and doing so explicitly ties the lifecycle of the instance to the lifecycle of the DataWriter.

  • Reported: DDS 1.4 — Wed, 2 Sep 2020 23:52 GMT
  • Updated: Thu, 3 Sep 2020 20:00 GMT

Enums with different holder types should not be assignable

  • Status: open   Implementation work Blocked
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The row for ENUM_TYPE in Table 40 defines an enum's holder type.

    Footnote 3 on page 63 indicates that the type system is designed to allow a DataReader to consume a byte stream from a differently-typed (but assignable) DataWriter without "requiring the consultation of per-DataWriter type definitions during sample deserialization".

    The current definition of Enum Assignability fails in this respect. It needs to prevent enum types from being assignable when their holder types differ.

    Also relevant - pgh 2 of 7.2.4.2 "...Enumerated types (Enumeration and Bitmask) are delimited types as their serialized size is fixed"

  • Reported: DDS-XTypes 1.3 — Wed, 26 Aug 2020 18:09 GMT
  • Updated: Wed, 26 Aug 2020 22:09 GMT

7.4.3.5.3 contradictory rules for collections

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Arrays of all kinds/extensibilities are covered by rules 8-10. Following those we find the "comments" below:

    // Arrays with extensibility APPENDABLE use common APPENDABLE rules:
    // (29)-(30)
    // Arrays with extensibility MUTABLE are not allowed. Treated as APPENDABLE.
    

    Which is either redundant or contradictory. Same issue with Sequences (rules 11-13) and maps (rules 14-16).

    Due to this, the notes before rules 29-30 should be revised to remove "Collection or"

    // Extensibility APPENDABLE (Collection or Aggregated types), version ?
    // encoding
    
  • Reported: DDS-XTypes 1.3 — Tue, 30 Jun 2020 20:01 GMT
  • Updated: Tue, 25 Aug 2020 17:40 GMT

DataRepresentationQosPolicy default

  • Status: open   Implementation work Blocked
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    7.6.3.1.1 ends with
    "The default value of the DataRepresentationQosPolicy shall be an empty list of preferences.
    An empty list of preferences shall be taken to be equivalent to a list containing the single element XCDR"

    This contradicts the rest of the section which describes how XCDR (v1) is optional. The default should be XCDR2.

  • Reported: DDS-XTypes 1.3 — Tue, 28 Jul 2020 19:37 GMT
  • Updated: Tue, 25 Aug 2020 16:15 GMT

Specify that TypeLookup Service uses XCDR2

  • Status: open   Implementation work Blocked
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    7.6.3.3.3 defines built-in RTPS Endpoints for TypeLookup, but doesn't specify their Data Representation. Since TypeLookup is new, this should be XCDR2.

  • Reported: DDS-XTypes 1.3 — Tue, 28 Jul 2020 19:45 GMT
  • Updated: Mon, 24 Aug 2020 19:22 GMT

XTypes spec is missing topic names for TypeLookupService

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    In section 7.6.2.3, that introduces the TypeLookupService, the datatypes used for exchanging TypeLookupRequests and TypeLookupResponse are introduced, and so are the endpoints used to exchange them.
    However, what is missing is the topic names used for the topics carrying these requests and their responses. Technically you might not need the topic names to build an interoperable implementation, because the endpoints are builtin endpoints and therefore don't need to be matched, but nevertheless, the topic will need to have a name and the name might as well be part of the spec.

  • Reported: DDS-XTypes 1.3 — Thu, 4 Jun 2020 20:51 GMT
  • Updated: Tue, 28 Jul 2020 19:28 GMT

Missing alignment for XCDR1 mutable's sentinel

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Rule 23 is missing "ALIGN(4)" before PID_SENTINEL

    // Structures with extensibility MUTABLE, version 1 encoding
    (23) XCDR[1] << {O : MSTRUCT_TYPE} =
    XCDR
    << { O.member[i] : MMEMBER }*
    << { PID_SENTINEL : UInt16 }
    << { length = 0 : UInt16 }
    
  • Reported: DDS-XTypes 1.3b1 — Mon, 29 Jun 2020 23:27 GMT
  • Updated: Wed, 8 Jul 2020 04:16 GMT

Mapping of one single Topic per Service does not work well with DDS Security

  • Key: DDSRPC11-1
  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    This issue has also been entered into DDS-Security as the solution could also involve changes to that specification. See:
    https://issues.omg.org/browse/DDSSEC12-31

    DDS-RPC maps each DDS-Service to a single (unkeyed) Topic-pair (request topic & reply Topic).

    DDS-Security provides access control per Topic and per Instance (Key). Moreover, the builtin plugins only provide access control per Topic.

    With these mappings is it not possible to configure access control per operation/method in the service. This is a common requirement for many service definitions.

    One way to overcome this would be to provide a mapping where each a Service would map to multiple Topic pairs. E.g. one Topic pair per method/operation. That way it would be possible to separately grant permissions to call operations on a service or to implement operations on a service.

    The mapping of a Topic pair per method/operation would also setting different Qos per operation...

    Alternatively one could

  • Reported: DDS-RPC 1.0 — Tue, 28 Aug 2018 23:45 GMT
  • Updated: Wed, 24 Jun 2020 17:36 GMT

Builtin Access Control operations (Table 63) missing entries

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The operations get_topic_sec_attributes, get_datareader_sec_attributes and get_datawriter_sec_attributes are missing from Table 63 - Actions undertaken by the operations of the bulitin AccessControl plugin.

  • Reported: DDS-SECURITY 1.1 — Mon, 27 Aug 2018 22:12 GMT
  • Updated: Sun, 21 Jun 2020 22:40 GMT

Listener model breaks API design goal of automatic resource management

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The way the C++ PSM modeled listeners has proven problematic. While the whole language binding is designed to provide automatic resource management, listeners break that model. Listeners are assigned to a DDS Entity as a raw pointer and “retain” the Entity.

    Because an Entity with a listener is retained, the user must manually reset the listener to allow its automatic destruction or explicitly close the entity. This defeats the purpose of automatic resource management, forcing users to write exception-safe code or risk “leaking” the resource.

    RTI proposes a change in how listeners are set. In summary:

    1) Listeners are set as std::shared_ptr's. All APIs change to receive a std::shared_ptr<Listener> instead of a Listener*
    2) Listeners no longer retain the entity. (It's the other way around; the Entity keeps a reference to its listener, which ensures the listener is not deleted). 

    Note that an entity can be explicitly retained with the member function retain(), which allows preserving the old behavior quite easily.

    The changes, affecting all dds::core::Entity-derived types, are the following:
     

    Previous API (usable but deprecated) New API
    Constructor with Listener* argument Constructor with std::shared_ptr<Listener>
    Listener setter: listener(Listener*, StatusMask) Listener setter: set_listener(std::shared_ptr<Listener>, StatusMask)
     (not available) Listener setter with no mask, added for convenience: set_listener(std::shared_ptr<Listener>) // Defaults to all() when the listener is not null or none() when it’s null
    Listener getter: Listener * listener() const  Listener getter: std::shared_ptr<Listener> get_listener() const

    Notice the name change—the overloaded listener is now get_listener/set_listener. A new overload wasn’t possible because the getter would only differ on the return type.

    Implementations that do not support C++11 can offer the old listener model.
     
    Example:

    // Previous API:
    MyListener *my_listener = new MyListener();
    reader.listener(my_listener, StatusMask::all());
    // ...
    reader.listener(NULL, StatusMask::none()); // user must reset the listener to destroy entity
    delete my_listener;
    
    // New API:
    auto my_listener = std::make_shared<MyListener>();
    reader.set_listener(my_listener);// No manual resource management required anymore
    
    // Or simply:
    reader.set_listener(std::make_shared<MyListener>());
     

     

  • Reported: DDS-PSM-Cxx 1.0b2 — Sun, 14 Jun 2020 19:45 GMT
  • Updated: Mon, 15 Jun 2020 23:32 GMT

Typo fixes

  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    p3 section 5 table 1st row right column

    [...] Given two programming language type T and Q,

    -> types

    p5 7.1 1st para 3rd line

    [...] language today universally sup- ported by C++ compilers.

    -> supported

    p5 7.2 1st para 3rd sentence

    The specification defines
    type constructors, i.e., parameterized class, that delegate

    -> classes

    p6 7.2 cont'd

    Under no circumstances a vendor shall change [...]. The only action performed by
    type constructor is to delegate their implementation

    -> constructors

    p6 7.3 2nd bullet

    * Loand-based read/take operation shall be exception safe.

    -> Loan based

    p7 7.4.1 MappingClasses (title)
    -> Mapping Classes

    p10 7.4.5 3rd table

    [left column] PIM Native Return Type

    -> PIM Return Type

    [right column] One of the following, depending on wether

    -> whether

    p12 Table 7-2 Namespace 2nd column 2nd row

    pomain

    -> domain

    p13 7.5.2 end of 1st sentence and 2nd sentence

    (note that for immutable value-types the only form of change is to create
    a new value- type).
    The DDS-PSM-Cxx models all DDS PIM classes [...] as value- types.

    -> value-type, value-types (remove space after hyphen)

    p14 top of page sentence preceding 7.5.5

    The full set of status classes is includes in the mandatory standard headers [...]

    -> included

    p16 7.6.2.1 1st para 3rd sentence

    As an
    example, from the URI ” the QosProvider would deduce [...]

    Please clarify - the single quotation mark is not a valid URI.
    I suspect the following might be intended:
    {{As an example, from the URI "file://" the QosProvider would deduce [...]}

    p18 7.8 1st sentence

    The topic packaged defines the classes related to [...]

    -> package

    p18 7.8 6th para

    If the topic is to be created with a QoS different from the default, than the code [...]

    -> from the default then

  • Reported: DDS-PSM-Cxx 1.0 — Sun, 9 Feb 2020 19:39 GMT
  • Updated: Fri, 12 Jun 2020 06:31 GMT

Can structures contain constant declarations?

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 7.3.2.5.1 'Structures' states:

    Structures contain four kinds of declarations:
    • Applied annotations
    • Verbatim text
    • Members
    • Constants

    However section 7.3.1.10 'Structure Types' states:

    Structures as described in this specification are fully compatible with the IDL constructs of the same name.

    IDL (4.3) does not allow constant declarations inside structures. So these two statements are incompatible.

    Also the UML model in 7.2.2.4.4.2 'Structure Types' states structures contain only members. And constant declarations are not members.

    Therefore it seems like the text in Section 7.3.2.5.1 should be modified to remove the bullet about constants.

  • Reported: DDS-XTypes 1.3b1 — Wed, 10 Jun 2020 23:26 GMT
  • Updated: Wed, 10 Jun 2020 23:26 GMT

Editorial corrections

  • Key: DDS15-313
  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    p2 5th para middle sentence

    The purpose of the DDS specification is to
    define the standardized interfaces and behaviors that enable applicaton portability.

    -> application



    p11 Figure 2.5 bottom right class box,
    p58 Figure 2.10 bottom middle class box,
    p125 Figure 2.19 middle right class box

    QueryConditon

    -> QueryCondition



    p61 2.2.2.5.1.4 1st para 3rd sentence

    change of state for an intance that was caused by some internal mechanism

    -> instance



    p61 2.2.2.5.1.4 1st para 4th sentence

    An example of this situation is when the Service [...] and changes the coresponding

    -> corresponding



    p61 2.2.2.5.1.4 2nd para 2nd sentence

    The application can distinguish wether a particular DataSample has data

    -> whether



    (DDS15-195)
    p61 2.2.2.5.1.4 3rd para 1st sentence

    To ensure corerctness and portability, the valid_data flag must be examined

    -> correctness

    p107 2.2.3.13 4th para 3rd sentence

    It may establish new "matchs" that did not exist before, or break existing matchs.

    -> "matches" , matches.



    p110 2nd para 2nd sentence

    [...] For example setting
    max_samples_per_instance to LENGH_UNLIMITED will cause the middleware to [...]

    -> LENGTH_UNLIMITED



    p120 2.2.4.2.2 enumerated list 2nd bullet 2nd sub-bullet

    • the DataWriter that owns it if OWNERSHIP QoS kind=EXLUSIVE, or by

    -> kind=EXCLUSIVE



    p121 Figure 2.16 statebox at right

    StatiusChangedFlag = TRUE

    -> StatusChangedFlag



    p166 top

    Selection        ::=    TOPICNAME
                     |      TOPICTNAME NaturalJoin JoinItem
    

    -> TOPICNAME NaturalJoin JoinItem

  • Reported: DDS 1.4 — Mon, 11 May 2020 03:39 GMT
  • Updated: Thu, 28 May 2020 20:35 GMT

Typo

  • Key: DDS15-199
  • Status: open  
  • Source: Netherlands Aerospace Centre ( Arnoud van Leeuwen)
  • Summary:

    Suspected typo in paragraph 4, last scentece:
    "In other words, the DataReader may miss some data-samples but it will never see the
    value of a data-object change from a newer value to an order value."

    Should the second to last word "order", not be: "older"? The context seems to suggest so.

  • Reported: DDS 1.4 — Fri, 19 Aug 2016 07:53 GMT
  • Updated: Mon, 11 May 2020 03:42 GMT

Default value for WRITER_DATA _LIFECYCLE v should be FALSE

  • Key: DDS15-312
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    According to the Qos table in 2.2.3 'Supported QoS' the default value for autodispose_unregistered_instance is TRUE. We have found a two issues with this

    (1) It is not semantically what people expect. Just because a DataWriter is deleted it does not mean all the instances should be deleted... It could be so for some use-cases, but we found that in the majority of the use-cases it is not an intuitive behavior.

    (2) It is not scalable. If writer with a lot of instances is deleted. it needs to send many messages and potentially wait until they are acknowledged before releasing the DataWriter resources. This makes the data-writer delete operation something that can block for an unbounded time which is not what applications expect.

    It sees it would be better to:
    (a) Change the default value of autodispose_unregistered_instance to FALSE.
    (b) Provide a better/more efficient/scalable way to communicate to the DataReaders that all the instances of a DataWriter have been deleted.

  • Reported: DDS 1.4 — Thu, 30 Apr 2020 21:02 GMT
  • Updated: Fri, 8 May 2020 12:32 GMT

DynamicType should be a value type, not a reference type

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    A type description is conceptually a value type, not a reference type. A type doesn't have a special identity, like for example a DomainParticipant. A type description can be copied, compared for equality, passed by value, etc. That doesn't preclude applications from using a shared_ptr<DynamicType> if they want to.

  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 28 Apr 2020 21:26 GMT
  • Updated: Tue, 28 Apr 2020 21:26 GMT

Confusing description of FINAL on 7.2.3 TypeExtensibilityandMutability

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    In this section there is a bullet stating:

    • A type may be FINAL, indicating that the range of its possible data values is strictly defined. In particular, it is not possible to add elements to members of collection or aggregated types while maintaining type assignability.

    This is confusing. What does it mean that " the range of its possible data values is strictly defined"?
    Moreover, it talks about collection types where Table 12 says that for these types the extensibility kind has no effect.

    It sis recommended that this bullet is rephrased to just say that members cannot be added, removed or reordered.

  • Reported: DDS-XTypes 1.3b1 — Sat, 4 Apr 2020 00:03 GMT
  • Updated: Sat, 4 Apr 2020 00:03 GMT

Add a function that allows releasing any resources created by the DomainParticipantFactory

  • Key: DDS15-311
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The Domain Participant Factory may create resources (e.g. tables that allow looking up or manage created domain participants, etc.)

    These resources need to be released when the application shuts down so that they are not reported as "leaks" by the OS.

    A function should be added that forcefully releases all resources created by the DomainParticipantFactory. This function would have as a pre-requisite that all DomainParticipants have been deleted...

  • Reported: DDS 1.4 — Fri, 27 Mar 2020 21:46 GMT
  • Updated: Fri, 27 Mar 2020 21:46 GMT

The Qos used to publish the BuiltinLoggingTopic is not specicified

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 9.6 'Builtin Logging Plugin' should specify the Qos used to publish and subscribe to the BuiltinLoggingTopic, similar to how it is done for other builtin topics introduced by DDS-Security.

    See for example how it is done for the DCPSParticipantMessageSecure builtin Topic (section 7.4.2) where it refers to the Qos of other builtin Topics and also how it is done for the TopicBuiltinParticipantVolatileMessageSecureWriter and BuiltinParticipantVolatileMessageSecureReader (section 7.4.4.2 ) where it defines it explicitly.

  • Reported: DDS-SECURITY 1.1b1 — Thu, 26 Mar 2020 16:48 GMT
  • Updated: Thu, 26 Mar 2020 16:48 GMT

Define Implied Keys Behavior

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    1. In 7.6.8, the algorithm for creating a KeyHolder states that:

    If there are any key members, then remove the non-key members from FooKeyHolder. Otherwise do not remove any members.

    This seems to say that if there are no fields marked as keys, leave all of them open to be able to be used as keys. That would be consistent with implied key behavior.

    2. There is an example of implied @key in Annex D, where the TopicData types specify BuiltinTopicKey_t as a key, but the single member of BuiltinTopicKey_t is not marked as a key.

    3. At the same time 7.2.2.4.4.4.8 says:

    If a given type has no members designated as key members, then the type—and any DDS Topic that is constructed using it as its type it—has no key.

    It also says that:

    In the event that the type K of a key member of a given type T itself defines key members, only the key of K, and not any other of its members, shall be considered part of the key of T.

    This doesn't go against implied keys, but would be a good place to mention them in addition to the previous sentence.

    4. 7.3.1.2.1.3 says that:

    To declare a member as part of the key, users shall apply the @key annotation...

    7.2.2.4.4.4.8 and 7.3.1.2.1.3 seem to have been written under the assumption that @keys can't be implied. If the specification actually requires this, which it appears that it does given Annex D, then it should say so in those two sections.

    Finally, a couple thoughts/questions came up about implied keys behavior since it is not defined in the spec:

    1. Given a situation like:

    @nested(TRUE)
    struct A

    { @key(FALSE) long a1; long a2; }

    ;

    @nested(FALSE)
    struct B

    { @key A b1; }

    ;

    Shouldn’t a2 be the only element of the key of B, because we’re explicitly saying a1 isn’t part of the key?

    2. Should implied key behavior (potentially including the behavior in the previous point) apply to union discriminators? For example:

    @nested(TRUE)
    union TestUnion switch (long)

    { // ... };

    @nested(TRUE)
    union KeyedTestUnion switch (@key long) { // ... }

    ;

    @nested(TRUE)
    union KeyedFalseTestUnion switch (@key(FALSE) long)

    { // ... }

    ;

    @nested(TRUE)
    struct A

    { TestUnion a1; // discriminator is implied to be part of the key of B KeyedTestUnion a2; // discriminator is explicitly part of the key of B KeyedFalseTestUnion a3; // Not part of the key of B }

    ;

    @nested(FALSE)
    struct B

    { @key TestUnion b1; // discriminator is implied to be part of the key @key KeyedTestUnion b2; // discriminator is explicitly part of the key @key KeyedFalseTestUnion b3; // Not part of the key, maybe an implementation could give a warning? @key A b4; }

    ;

  • Reported: DDS-XTypes 1.3b1 — Tue, 24 Mar 2020 13:53 GMT
  • Updated: Tue, 24 Mar 2020 14:29 GMT

7.4.3.5.3 doesn't define OPTIONS

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    This section should have an explanation or cross-reference to describe what <OPTIONS> is (used in 1st encoding rule in the section)

  • Reported: DDS-XTypes 1.3b1 — Tue, 24 Mar 2020 14:26 GMT
  • Updated: Tue, 24 Mar 2020 14:29 GMT

Spec text unclear

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Beginning of 7.3.1.2.1.11 says “Table 18. In some cases, this is not desirable. This default behavior may be modified using the @ignore_literal_names annotation.” It is unclear what exactly may not be desirable.

  • Reported: DDS-XTypes 1.3b1 — Tue, 24 Mar 2020 14:03 GMT
  • Updated: Tue, 24 Mar 2020 14:03 GMT

Be more precise on meaning of string lengths and bounds

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    In section 7.2.2.2.1.2.4 String<Char8> type
    The specification does not provide a description of the "length" and "bound" values shown in Figure 9.

    In the case of strings, specially String8, there is an ambiguity on whether the "bound" and "length" represent the number of characters, or the number of bytes in the UTF-8 encoding mentioned in 7.2.2.2.1.2.4, or something else.

    an interpretation of the length of the string.

  • Reported: DDS-XTypes 1.3b1 — Thu, 19 Mar 2020 20:23 GMT
  • Updated: Tue, 24 Mar 2020 14:01 GMT

Implementation Defined Default Nested Behavior

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    7.3.1.2.1.7 Nested Types

    By default, aggregated types and aliases to aggregated types defined in IDL are not considered to be nested types.

    ...

    If not present on a module, the value defaults to that of the enclosing module. If a top -level module is not annotated, the default is FALSE.

    ...

    In addition to the above annotations, IDL compilers shall provide the means to change the default value for non-annotated top-level modules.

    Given the fourth sentence, the first and third sentences should also say the nested status of a non-annotated type is implementation defined.

  • Reported: DDS-XTypes 1.3b1 — Tue, 24 Mar 2020 13:55 GMT
  • Updated: Tue, 24 Mar 2020 13:55 GMT

get_discovered_participant_data() should return BAD_PARAMETER instead of PRECONDITION_NOT_MET

  • Key: DDS15-310
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    This issue has to do with the proper code when the function
    get_discovered_participant_data gets passed an invalid handle.

    This function is analogous to get_matched_subscription_data() and get_matched_publication_data() except that that it retrieves information on the matching participant instead of the matching endpoint. All these functions take a handle as an input that refers to the "matching" entity for which information is
    being retrieved.

    Prior to version 1.2 get_matched_subscription_data() was returning PRECONDITION_NOT_MET and get_matched_publication_data BAD_PARAMETER.
    Returning BAD_PARAMETER seemed more appropriate so in version 1.2 (OMG issue 9500) we updated get_matched_subscription_data to also return BAD_PARAMETER.

    However get_discovered_participant_data() was not updated as part of is still returning PRECONDITION_NOT_MET.

    Therefore get_discovered_participant_data() should be updated to also return BAD_PARAMETER when an invalid handle is passed.

  • Reported: DDS 1.4 — Fri, 28 Feb 2020 20:31 GMT
  • Updated: Fri, 28 Feb 2020 20:31 GMT

Need to add an ignore_enum_literal_names in TypeConsistencyEnforcement QosPolicy

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The type assignability rules for Enumerated Types require knowledge of whether the literal names should be considered for assignability.

    Right now this can only be configured when the type is declared using the @ignore_literal_names annotation. However in some cases it may be necessary to change this behavior at run-time for a particular DataReader.

    To support this use-case it would be helpful to add a ignore_enum_literal_names field to the TypeConsistencyEnforcement QosPolicy

  • Reported: DDS-XTypes 1.3b1 — Sat, 2 Mar 2019 00:27 GMT
  • Updated: Fri, 21 Feb 2020 16:27 GMT

Clarify whether the algorithm to compute KeyHash is specific to XTYPES

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    In 7.6.8 'Interoperability of Keyed Topics' it states:

    As described in [RTPS] Clause 9.6.3.8, “KeyHash (PID_KEY_HASH)”, the key hash for a given object of a keyed type is obtained by first serializing the values of the key members in their declaration order. The algorithm described in that clause shall be amended as described below.

    It is not clear whether the intent is that this modification impacts only implementors of the DDS-XTYPES or whether it is intended as a change in RTPS (which would require an issue filed on the DDSI-RTPS specification).

  • Reported: DDS-XTypes 1.3b1 — Fri, 8 Mar 2019 04:13 GMT
  • Updated: Fri, 21 Feb 2020 16:27 GMT

Missing parameter in Annex C operation DynamicDataFactory::create_data

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The IDL declaration of interface DynamicDataFactory in Annex C, declares the operation with no arguments.

    However according to section 7.5.2.10 'DynamicDataFactory' the operation takes a parameter of type DynamicType. Therefore the correct IDL declaration should have been:

            DynamicData create_data(in DynamicType);
    
  • Reported: DDS-XTypes 1.3b1 — Thu, 14 Mar 2019 04:11 GMT
  • Updated: Fri, 21 Feb 2020 16:26 GMT

Extra text left in section 7.2.2.4.4.4.4 Member IDs

  • Key: DDSXTY14-8
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    In DDS-XTYPES 1.3 there was an issue (https://issues.omg.org/browse/DDSXTY13-2) whose resolution added the precise specification of the computation of the memberId. This is now in section 7.3.1.2.1.1 'Member IDs' specifically the three-step algorithm towards the end of the section.

    This algorithm fully uses 32 bits. The 4 MSB are set to zero and the remaining 28 bits computed from a hash. Because of this there is no longer a 'reserved range' for memberIds.

    However the resolution of DDSXTY13-2 still left some text in section 7.2.2.4.4.4.4 that talks about reserved ranges. This text should also have been removed. In fact it seems that there was an instruction in DDSXTY13-2 to remove the paragraph but it either was not applied correctly or it missed a sentence that followed the paragraph. To correct it, the following text should be removed from section 7.2.2.4.4.4.4 'Member IDs'

    The remaining part of the member ID range—from 0 to 268,402,687 (0x0FFFBFFF)—is available for use by application-defined types compliant with this specification.

  • Reported: DDS-XTypes 1.3b1 — Fri, 21 Feb 2020 00:40 GMT
  • Updated: Fri, 21 Feb 2020 00:40 GMT

Typos and Inconsistencies

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Fernando Garcia-Aranda)
  • Summary:

    Section 2 lists four conformance points that are later on explained in Table 2.1:

    • OPC UA to DDS Mapping Basic Conformance
    • OPC UA to DDS Mapping Complete Conformance
    • DDS to OPC UA Mapping Basic Conformance
    • OPC UA to DDS Mapping Complete Conformance

    The last bullet point should be "DDS to OPC UA Mapping Complete Conformance" instead of "OPC UA to DDS Mapping Complete Conformance".

  • Reported: DDS-OPCUA 1.0 — Tue, 11 Feb 2020 17:00 GMT
  • Updated: Tue, 11 Feb 2020 21:29 GMT

class_id string in Authentication/Permissions Tokens should include spec version

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The class_id attribute in various Tokens includes the Plugin Name and a version number. The intention was that the version number would track the specification version so that it could be used to understand the format of the Token.

    However this is not done consistently. Currently the following class_id are used:

    token class_id
    IdentityToken "DDS:Auth:PKI-DH:1.0"
    AuthenticatedPeerCredentialToken "DDS:Auth:PKI-DH:1.0"
    AuthRequestMessageToken "DDS:Auth:PKI-DH:1.0+AuthReq"
    HandshakeRequestMessageToken "DDS:Auth:PKI-DH:1.0+Req"
    HandshakeReplyMessageToken "DDS:Auth:PKI-DH:1.0+Reply"
    HandshakeFinalMessageToken "DDS:Auth:PKI-DH:1.0+Final”
    PermissionsToken "DDS:Access:Permissions:1.0"
    PermissionsCredentialToken "DDS:Access:PermissionsCredential"
    CryptoToken "DDS:Crypto:AES_GCM_GMAC"

    As it can be seen some class_ids are missing the version number. The ones that have it use "1.0" instead of "1.1" which is the version of the spec. Finally when there are multiple tokens with the same class ID a suffix preceded by a "+" is uses to differentiate them, but this is not done in all cases.

    The goal of this issue is to correct this irregularities. So DDS Security version 1.2 should modify the Token as follows:

    token class_id
    IdentityToken "DDS:Auth:PKI-DH:1.2"
    AuthenticatedPeerCredentialToken "DDS:Auth:PKI-DH:1.2+AuthPeer"
    AuthRequestMessageToken "DDS:Auth:PKI-DH:1.2+AuthReq"
    HandshakeRequestMessageToken "DDS:Auth:PKI-DH:1.2+Req"
    HandshakeReplyMessageToken "DDS:Auth:PKI-DH:1.2+Reply"
    HandshakeFinalMessageToken "DDS:Auth:PKI-DH:1.2+Final”
    PermissionsToken "DDS:Access:Permissions:1.2"
    PermissionsCredentialToken "DDS:Access:Permissions:1.2+Cred"
    CryptoToken "DDS:Crypto:AES_GCM_GMAC:1.2"

    Note that this change is not intended to break backwards interoperability. So the proposal could/should be adjusted to ensure that. Specifically the change in the name for the PermissionsCredentialToken should not impact interoperability as this token is not exchanged between participants. The same is true for the addition of the "+AuthPeer" to the AuthenticatedPeerCredentialToken.

  • Reported: DDS-SECURITY 1.1b1 — Tue, 17 Dec 2019 00:26 GMT
  • Updated: Tue, 17 Dec 2019 00:51 GMT

Extra fields in IDL of 7.8.2.1 create_client

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The CLIENT_Representation contains an extra field client_timestamp that is not in the IDL defined in Annex A.

    The AGENT_Representation contains an extra field agent_timestamp that is not in the IDL defined in Annex A.

  • Reported: DDS-XRCE 1.0 — Tue, 29 Oct 2019 01:29 GMT
  • Updated: Tue, 29 Oct 2019 01:29 GMT

Extra fields in IDL of 7.8.2.1 create_client

  • Key: DDSXTY14-6
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The CLIENT_Representation contains an extra field client_timestamp that is not in the IDL defined in Annex A.

    The AGENT_Representation contains an extra field agent_timestamp that is not in the IDL defined in Annex A.

  • Reported: DDS-XTypes 1.3b1 — Tue, 29 Oct 2019 01:04 GMT
  • Updated: Tue, 29 Oct 2019 01:04 GMT

Define InstanceHandle_t and DomainId_t portably

  • Key: DDS15-256
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Define InstanceHandle_t as a structure that contains native data
    Define DomainId_t as an integer

  • Reported: DDS 1.4 — Mon, 5 Aug 2019 11:57 GMT
  • Updated: Thu, 10 Oct 2019 00:04 GMT

InstanceHandle_t/Domain ID

  • Key: DDS15-5
  • Legacy Issue Number: 16266
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    InstanceHandle_t is underspecified, The IDL PSM that should use a struct, so that argument passing is the same for all values

    In the IDL PSM, I see that copying and comparing instance handles is underspecified.

    The same issue applies to domain IDs, actually, which also have unspecified contents in that PSM.)

  • Reported: DDS 1.2 — Thu, 26 May 2011 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:04 GMT

The start time of type Time_t is not defined

  • Key: DDS15-240
  • Status: open   Implementation work Blocked
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    Section 2.3.2 on page 138 contains:

    The two types used to represent time: Duration_t and Time_t are mapped into structures that contain fields for the second and the nanosecond parts.

    However, the standard does not define the calendar time of Time_t at

    { sec = 0, nanosec = 0 }

    .
    This is required in order to convert a Time_t to/from a system's native time (such the the type time_t on Unix systems which has the calendar start time 1970-01-01 00:00:00).

  • Reported: DDS 1.4 — Sat, 21 Jul 2018 07:19 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Wrong name for DataRepresentationQosPolicy field

  • Key: DDS15-251
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 7.6.3.1.3 'DataRepresentationQosPolicy: Platform-Specific API' states:

    The topic, publication, and subscription built-in topic data types shall each indicate the data representation of the associated entity with a new member:

    @id(0x0073) DDS::DataRepresentationQosPolicy representation;

    This does not follow the naming conventions for field names. Instead it should have said that the new member should be:
    @id(0x0073) DDS::DataRepresentationQosPolicy data_representation;

    Likewise in Annex D the declarations of structures TopicBuiltinTopicData, TopicQos, PublicationBuiltinTopicData, DataWriterQos, SubscriptionBuiltinTopicData, and DataReaderQos all have the member:

    @id(0x0073) DDS::DataRepresentationQosPolicy representation;
    

    This should be changed so the member is:

    @id(0x0073) DDS::DataRepresentationQosPolicy data_representation;
    
  • Reported: DDS 1.4 — Wed, 5 Jun 2019 23:44 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Collection of longs misrepresented in 2.2.1.1 MyClass

  • Key: DDS15-246
  • Status: open  
  • Source: Turkish Navy Research Center ( Akif Tokuz)
  • Summary:

    In MyClass table on page4 (pdf page 16/180), param4 is given type long. But the description says above:"‘param4,’ is also an input parameter of type collection of longs"
    So it must be "long []" instead of "long".

    I checked the DDS 1.2 spec (formal/07-01-01), it was correct in that version (pdf page 18/260).

    Akif,

  • Reported: DDS 1.4 — Thu, 3 Jan 2019 13:23 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Names of listener operations are incorrect in UML diagrams

  • Key: DDS15-247
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    In Figures 2.9, 2.10, and 2.17, the Data*Listener classes in the UML incorrectly have functions called

    on_*_match()

    when in fact they should be

    on_*_matched()
  • Reported: DDS 1.4 — Thu, 14 Feb 2019 23:35 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Consider replacing @Choice annotation with XTYPES 1.2 unions

  • Key: DDS15-249
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The DDS-RPC added a @Choice annotation (see 7.5.1.2.1.1 @Choice Annotation) to indicate a Structure with the "single-member" semantics of a union. As stated in the aforementioned section the reason was:

    Using unions to indicate which operation is being invoked is brittle. Operations in an interface have set semantics and have no ordering constraints. Union, however, enforces strict association with discriminator values, which are too strict for set semantics. Further, use of unions leads to ambiguities in case of multiple inheritance of interfaces.

    However XTYPES 1.2 enhanced unions which now support inheritance and are not so brittle anymore. For this reason it makes sense to re-evaluate this decision.

    An advantage of using unions (beyond avoiding a extraneous annotation) is that their API is better oriented to identifying the one branch that is present; whereas in the case of structures there is no standard API available to determine which member is present other than iterating over every member. This would be unnatural for processing the RPC calls.

  • Reported: DDS 1.4 — Mon, 20 May 2019 22:45 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Typo in section 2.2.2.5 Subscription Module

  • Key: DDS15-195
  • Status: open  
  • Source: Technical University of Madrid ( Jesús Rodríguez-Molina)
  • Summary:

    While this is a very minor issue, it is a good idea to mention it. In the line starting with "To ensure corerctness and portability" I guess it is meant "To ensure correctness and portability", thus having a typo in "corerctness". Am I right?

    Kind regards,

    Jesús Rodríguez-Molina

  • Reported: DDS 1.4 — Wed, 16 Mar 2016 11:36 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

DATAWRITER_QOS_USE_TOPIC_QOS and DATAREADER_QOS_USE_TOPIC_QOS

  • Key: DDS15-188
  • Legacy Issue Number: 19651
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    In 7.2.3 the defines DATAWRITER_QOS_USE_TOPIC_QOS
    and DATAREADER_QOS_USE_TOPIC_QOS do exist but they are not mentioned anywhere in the spec. Not sure if they should be removed, or documented

  • Reported: DDS 1.2 — Fri, 31 Oct 2014 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Invalid DURABILITY_SERVICE reference on the DataWriter

  • Key: DDS15-51
  • Legacy Issue Number: 10806
  • Status: open  
  • Source: Anonymous
  • Summary:

    Problem:
    In the QoS table (Section 2.2.3 Supported QoS) the 'concern' row illegally specifies the DataWriter for the DURABILITY_SERVICE QoS.

    Solution:
    Section 2.1.3 Supported QoS, QoS Table:
    Entry for DURABILITY_SERVICE QoS, remove the word 'DataWriter' from the 'Concerns' column.
    If we do this it would need to be removed from the BuiltinPublicationData.

  • Reported: DDS 1.2 — Mon, 5 Mar 2007 05:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

The DDS Specification should define legal DDS Topic Types

  • Key: DDS15-20
  • Legacy Issue Number: 19141
  • Status: open  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The DDS v1.2 specification does not explicitly define the subset of IDL that can be used to express Topic Types. From the specification, it can be inferred – and all vendor have done so – that a topic type is defined by means of a struct and that the IDL types that cannot be used for the attributes of this struct are Value-Types, Any Types and Object References.

    The DDS v1.2 should explicitly state this. Notice the the problem is not solved by the X-Types specification as that introduces a set of types, such as Maps, Optional types, etc. that are not supported by DDS v1.2 implementations.

    This is really a critical matter which is trivial to solve. Just state what is implicitly assumed and should be fixed ASAP.

  • Reported: DDS 1.4 — Thu, 12 Dec 2013 05:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Invalid DURABILITY_SERVICE reference on the DataWriter

  • Key: DDS15-185
  • Legacy Issue Number: 9547
  • Status: open  
  • Source: THALES ( Virginie Watine)
  • Summary:

    Summary:
    In the QoS table (section 2.1.3. Supported QoS) the 'concerns' row illegally specifies the DataWriter for the DURABILITY_SERVICE QoS.

    Proposed Resolution:

    Proposed Revised Text:
    Section 2.1.3 Supported QoS, QoS Table:
    Entry for DURABILITY_SERVICE QoS, remove the word 'DataWriter' from the 'concerns' column.

  • Reported: DDS 1.1 — Mon, 3 Apr 2006 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

subset of OMG IDL

  • Key: DDS15-186
  • Legacy Issue Number: 8892
  • Status: open  
  • Source: nswc.navy.mil ( Traci McDonald)
  • Summary:

    In the DDS specification version 05-03-09, page 2-1 specifies that the PSM is for the OMG IDL platform. In section 2.2.1 (page 2-193), more detail is given as to what this PSM looks like. One area I don't see covered is the subset of OMG IDL that the DDS specification supports from a user's perspective. When a user defines an IDL file, what data types should and shouldn't be used? It looks as though valuetypes are not supported, but is it possible to explicitly specify what OMG IDL types are supported by implementations of the DDS specification?

  • Reported: DDS 1.1 — Thu, 16 Jun 2005 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Typo on description of class TopicDescription

  • Key: DDS15-181
  • Legacy Issue Number: 10359
  • Status: open  
  • Source: Honeywell ( James Richardson)
  • Summary:

    The class description for TopicDescription says "no attributes" but in fact two attributes are listed immediately below.

  • Reported: DDS 1.2 — Fri, 22 Sep 2006 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Clarification of create_multitopic behavior

  • Key: DDS15-182
  • Legacy Issue Number: 10358
  • Status: open  
  • Source: Honeywell ( James Richardson)
  • Summary:

    Context: "The resulting type is specified by the type_name argument." What happens if the specified type is inconsistent with the subscription_expression?

  • Reported: DDS 1.2 — Fri, 22 Sep 2006 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

create_contentfilteredtopic Method Prototype and Description Out

  • Key: DDS15-184
  • Legacy Issue Number: 9964
  • Status: open  
  • Source: Anonymous
  • Summary:

    I was looking at the DDS specification and saw that the name of the first parameter for DomainParticipant's create_contentfilteredtopic method is "name" in the table of methods (section 2.2.2.2.1) and it is "topic_name" in the method description (section 2.2.2.2.1.7). I assume the name should be consistent.

  • Reported: DDS 1.2 — Tue, 25 Jul 2006 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Clarification of instance_state -- Section: 2.1.2.5.1.3

  • Key: DDS15-178
  • Legacy Issue Number: 10362
  • Status: open  
  • Source: Honeywell ( James Richardson)
  • Summary:

    Context: "For each instance the middleware internally maintains an instance_state." Obviously this instance_state could be different for different DomainParticipants. Might it be different for two Subscribers of the same DomainParticipant? How about two DataReaders of the same Subscriber?

  • Reported: DDS 1.2 — Fri, 22 Sep 2006 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Clarify behavior of register_type operation

  • Key: DDS15-179
  • Legacy Issue Number: 10361
  • Status: open  
  • Source: Honeywell ( James Richardson)
  • Summary:

    Context: "The application may pass nil as the value for the type_name. In this case the default typename as defined by the TypeSupport (i.e., the value returned by the get_type_name operation) will be used." What happens if register_type is given a type_name that differs from the result of get_type_name?

  • Reported: DDS 1.2 — Fri, 22 Sep 2006 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Typo in Section: 2.1.3

  • Key: DDS15-174
  • Legacy Issue Number: 10366
  • Status: open  
  • Source: Honeywell ( James Richardson)
  • Summary:

    Context: "And three integers: history_depth, max_samples, max_instances, max_samples_ per_instance" There are four integers here.

  • Reported: DDS 1.2 — Fri, 22 Sep 2006 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Typo on descripton of "read" operation

  • Key: DDS15-176
  • Legacy Issue Number: 10364
  • Status: open  
  • Source: Honeywell ( James Richardson)
  • Summary:

    Context: "The use of this variant allows for zero-copy access to the data and the application will need to “return the loan” to the DataWriter using the return_loan operation (see Section 2.1.2.5.3.20 )." Should be DataReader?

  • Reported: DDS 1.2 — Fri, 22 Sep 2006 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Typo in Section: 2.2.3.14

  • Key: DDS15-172
  • Legacy Issue Number: 10368
  • Status: open  
  • Source: Honeywell ( James Richardson)
  • Summary:

    Context: "In other words, the DataReader may miss some datasamples but it will never see the value of a data-object change from a newer value to an order value." You mean "older".

  • Reported: DDS 1.2 — Fri, 22 Sep 2006 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Typo in description of "persistence" service responsibility

  • Key: DDS15-173
  • Legacy Issue Number: 10367
  • Status: open  
  • Source: Honeywell ( James Richardson)
  • Summary:

    Context: "The “persistence service” is the one responsible for implementing the DURABILITY kinds TRANSIENT and PERSISTENCE." You mean PERSISTENT

  • Reported: DDS 1.2 — Fri, 22 Sep 2006 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

'synchronous' and 'asynchronous' switched

  • Key: DDS15-34
  • Legacy Issue Number: 12465
  • Status: open  
  • Source: Anonymous
  • Summary:

    While reading the DDS specification, 'Data Distribution Service for Real-time Systems Version 1.2 OMG Available Specification formal/07-01-01', I found that the 'synchronous' and 'asynchronous' was switched as highlighted in red in the below paragraph in the spec.

    <section 2.2.1.2.2 'Overall Conceptual Model', page 9, penultimate paragraph>
    On the subscriber's side however, there are more choices: relevant information may arrive when the application is busy doing something else or when the application is just waiting for that information. Therefore, depending on the way the application is designed, asynchronous notifications or synchronous access may be more appropriate. Both interaction modes are allowed, a Listener is used to provide a callback for synchronous access and a WaitSet associated with one or several Condition objects provides asynchronous data access.

  • Reported: DDS 1.2 — Wed, 14 May 2008 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Specify the allowed IDL Types within DDS Topic structs

  • Key: DDS15-35
  • Legacy Issue Number: 12360
  • Status: open  
  • Source: Department of Navy ( Paul Werme)
  • Summary:

    The DDS Spec (as of v1.2) does not specify the set of IDL types that are allowed in a DDS Topic struct. This should be defined and made normative instead of being left as an implementation detail.

    Discussion:

    Because the set of IDL types allowed in a DDS Topic struct is not defined, implementors are at liberty to decide what set of IDL types to support. Concerns about the impact of the lack of standardization in this area have been raised by the computing infrastructure teams on major Navy programs on several occasions particularly in regards to potential impact on code portability across DDS implementations and interoperability between DDS implementations.

    In reviewing the DDS C++ Native Language Mapping RFP, we commented that the RFP provided an opportunity to insert a requirement to define the allowed C++ types within a DDS Topic struct which would indirectly result in defining the set of allowed DDS IDL types due to the RFP requirement for the C++ mapping to be consistent with the IDL mapping. This suggestion was rejected because it was viewed that the correct forum and mechanism for resolving this issue was the DDS RTF. We were requested to submit this as an issue to the RTF since the RTF could probably resolve this issue within the next 6 months.

  • Reported: DDS 1.2 — Mon, 31 Mar 2008 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

DDS typos and omissions

  • Key: DDS15-37
  • Legacy Issue Number: 12212
  • Status: open  
  • Source: Anonymous
  • Summary:

    1. Section 2.2.4.4 Conditions and Wait-sets - Two paragraphs above figure 2.19 is "The blocking behavior of the WaitSet is illustrated in Figure 2.19" I think this is meant to reference figure 2.20 instead.

    2. Section 2.2.6.2.2 Notifications via Conditions and Wait-Sets - starts out with "The first part of Figure 2.22" I think it should be figure 2.23

    3. In section 2.3.3 DCPS PSM : IDL on pages 152 - 153 are definitions of all the IDs and names of the QOS Policies with the exception that "TRANSPORTPRIORITY" has an ID definition but is missing a name definition.
    4. Section 2.2.2.2.2.7 set_qos
    This operation sets the value of the DomainParticipantFactory QoS policies. These policies control the behavior of the object a factory for entities.

  • Reported: DDS 1.2 — Mon, 4 Feb 2008 05:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Definition of BuiltinTopicKey_t

  • Key: DDS15-153
  • Legacy Issue Number: 10581
  • Status: open  
  • Source: MilSOFT ( Ertan Deniz)
  • Summary:

    The PSM mapping of BuiltinTopicKey_t is defined to be as:

    struct BuiltinTopicKey_t { 
        BUILTIN_TOPIC_KEY_TYPE_NATIVE value[3]; 
    }; 
    

    But the DDS Interoperability Wire Protocol (RTPS) specifies that GUID consists of 12 bytes GuidPrefix and 4 bytes EntityId.

    In order to map GUID and BuiltinTopicKey, we should define BuiltinTopicKey as either

    typedef octet BuiltinTopicKey[16];
    

    or else if we really wanted to preserve the definition as an array of longs

    struct BuiltinTopicKey_t { 
        BUILTIN_TOPIC_KEY_TYPE_NATIVE value[4]; 
    }; 
    

    But the latter could cause problems due to different endianess unless we also specified how to place the octets that arrive at the protocol level into the array of long.

  • Reported: DDS 1.2 — Tue, 9 Jan 2007 05:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

DURABILITY history depth should be de-coupled from the KEEP_LAST history depth used for reliability

  • Key: DDS15-235
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The specification provides no way to way to specify a different history depth used for DURABILITY than the used for reliability...

    The HISTORY depth is sometimes needed for reliability in order to accommodate bursts. But this means that the amount of data kept for DURABILITY is affected.

    What is desirable is to have a setting that allows the DURABILITY depth to be decoupled from the RELIABILITY.

  • Reported: DDS 1.4 — Tue, 27 Mar 2018 16:37 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

No specific package definition for the entities of the model in case of JAVA language binding

  • Key: DDS15-32
  • Legacy Issue Number: 13448
  • Status: open  
  • Source: Selex ES ( Dario Di Crescenzo)
  • Summary:

    The DDS specification document does not prescribes a specific package definition for the entities of the model in case of JAVA language binding; in the IDL only a "DDS" module is defined which does not result in a strictly specified package structure (it might only imply that the entities belong to the DDS package/namespace). It would be useful to have a precise statement indicating at least for the JAVA binding the packages to which the DDS Entities must belong in order to have all implementations using the same packages for the same Entities (e.g org.omg.dds.infrastructure, org.omg.dds.domain, etc..)

  • Reported: DDS 1.4 — Fri, 6 Feb 2009 05:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Deprecated usage of IDL in the DDS spec

  • Key: DDS15-33
  • Legacy Issue Number: 12539
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The CORBA specification (08-01-04) in section 7.11.6 deprecates the use of anonymous types, for example the type of the struct field "seq" below:
    struct Foo

    { sequence<octet> seq; }

    ;

    The DDS DCPS IDL uses these in multiple places (the first is DDS::UserDataQosPolicy). These should be replaced with non-deprecated usage such as:
    typedef sequence<octet> OctetSeq;
    struct Foo

    { OctetSeq seq; }

    ;

    This will also increase internal consistency of the DDS spec, since it already uses a DDS::StringSeq typedef in the PartitionQosPolicy struct.

    Furthermore, if the element type of the sequence is a Basic Type or a String Type, the CORBA module already provides these typedefs, so it would be preferable to use them. The example above becomes:
    struct Foo

    { CORBA::OctetSeq seq; }

    ;

  • Reported: DDS 1.2 — Fri, 20 Jun 2008 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Mapping of OMG IDL to C++ for DDS

  • Key: DDS15-31
  • Legacy Issue Number: 13839
  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    The mapping of user written IDL to C++ is not described in the version 1.2 of the DDS standard.

    Is it expected that DDS use the existing CORBA C++ mapping for data types? If so then the standard should state this requirement.

    On the other hand, the CORBA IDL to C++ mapping is fairly old. The new DDS PSM for C++ would suggest a more modern mapping.

    For example, for bounded strings and bounded sequences, C++ classes inspired by the Standard Template Library (STL) could be used. These classes need not necessarily break the DCPS compatibility with the C language mentioned in 8.2.1.1. (Use fixed buffer, avoid virtual methods.) It is not clear whether unbounded data types need be supported, see issues 8892 and 12360.

    In case a new mapping is defined which is independent of the CORBA C++ mapping, there is a problem to address:
    Bridge applications which use both CORBA and DDS would need to translate a single IDL file twice, once for CORBA and again for DDS. Then there is an overlap in the generated names. This problem could be solved by encapsulating all C++ code generated for DDS from user IDL in an extra namespace.

  • Reported: DDS 1.2 — Fri, 27 Mar 2009 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

History and Reliability should be orthogonally independent concerns

  • Key: DDS15-25
  • Legacy Issue Number: 17284
  • Status: open  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The current DDSv1.2 specification provides a slightly different semantics for the history on the writer side and on the reader.

    In addition, the DDS v1.2 specification allows to use the data-writer history as the "reliability-send-queue" – this is combined with the fact that History is (correctly) not an RxO policy leads to a serious bug in the spec (luckily not all DDS implementations follow this path) . Let's try to understand why.

    Firs, it is important to comprehend that unless a data writer uses KeepAll history, reliable data delivery is not guaranteed to matching data readers. This can't be guaranteed even when using Reliable communication (obviously ignoring data-writer crashes for the time being).

    Essentially, under this scheme a DataWriter is allowed send/re-send only what is in its history cache. If a sample is out of history a DataWriter won't do anything, thus leading to potential inconsistencies in case some reader has lost the message.

    Things get very messy when a DataReader with KeepAll History is matching a DataWriter that does uses KeepLast(n). In this case, the poor DataReader which might legitimally expect to have on his history all the samples written by the writers – without holes – might finds him-/her-self surprised by the fact that some samples might be missing.

  • Reported: DDS 1.4 — Thu, 29 Mar 2012 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Wrong definition of GROUPDATA_QOS_POLICY_NAME constant in IDL

  • Key: DDS15-21
  • Legacy Issue Number: 18320
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    GROUPDATA_QOS_POLICY_NAME is given as "TransportPriority", and the corresponding *_POLICY_NAME from TRANSPORTPRIOIRTY is missing.

    Index: dds/DdsDcpsInfrastructure.idl
    ===================================================================
    --- dds/DdsDcpsInfrastructure.idl
    +++ dds/DdsDcpsInfrastructure.idl
    @@ -327,7 +327,8 @@
         const string WRITERDATALIFECYCLE_QOS_POLICY_NAME = "WriterDataLifecycle";
         const string READERDATALIFECYCLE_QOS_POLICY_NAME = "ReaderDataLifecycle";
         const string TOPICDATA_QOS_POLICY_NAME           = "TopicData";
    -    const string GROUPDATA_QOS_POLICY_NAME           = "TransportPriority";
    +    const string GROUPDATA_QOS_POLICY_NAME           = "GroupData";
    +    const string TRANSPORTPRIORITY_QOS_POLICY_NAME   = "TransportPriority";
         const string LIFESPAN_QOS_POLICY_NAME            = "Lifespan";
         const string DURABILITYSERVICE_POLICY_NAME       = "DurabilityService";
    
  • Reported: DDS 1.4 — Mon, 17 Dec 2012 05:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

: #define HANDLE_TYPE_NATIVE long typedef HANDLE_TYPE_NATIVE InstanceHandle_t;

  • Key: DDS15-14
  • Legacy Issue Number: 14165
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The DDS spec defines: #define HANDLE_TYPE_NATIVE long typedef HANDLE_TYPE_NATIVE InstanceHandle_t; We see that some vendors use long, other a struct containing an octet array. This is causing problems when integrating DDS into CCM. A CORBA::Long is passed by value, a struct is passed as const &. At least the way the InstanceHandle_t is passed to methods and returned should be the same. We propose to change this type to: struct NativeInstanceHandle_t

    { // Vendor defined }

    ; typedef NativeInstanceHandle_t InstanceHandle_t; That way we always have a struct passed as const&.

  • Reported: DDS 1.2 — Thu, 30 Jul 2009 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

For ContentFilteredTopic::get_expression_parameters the argument name is not given in the spec

  • Key: DDS15-15
  • Legacy Issue Number: 13951
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    For ContentFilteredTopic::get_expression_parameters the argument name is not given in the spec, this way the IDL isn't complete and compilable Also MultiTopic::get_expression_parameters has the same issue Also DataWriter::get_liveliness_lost_status has this issue

  • Reported: DDS 1.2 — Mon, 8 Jun 2009 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Introduce new typedef for anonymous types

  • Key: DDS15-16
  • Legacy Issue Number: 13950
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    UserDataQosPolicy, TopicDataQosPolicy, and GroupDataQosPolicy use an anonymous sequence, this is deprecated in IDL. A new typedef for this should be introduced

  • Reported: DDS 1.2 — Mon, 8 Jun 2009 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

The get_sample_lost method seems to be part of the Subscriber class

  • Key: DDS15-17
  • Legacy Issue Number: 10980
  • Status: open  
  • Source: KDA ( Ingvill Grefstad)
  • Summary:

    Page 2-70, The get_sample_lost method seems to be part of the Subscriber class. However, according to the UML-diagram page 2-62 and the idl-listing page 2-166 and , the get_sample_lost method should belong to the DataReader class - not the Subscriber.

  • Reported: DDS 1.1 — Wed, 2 May 2007 04:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

DDS should require to annotate IDL to indicate which IDL types are used for dds

  • Key: DDS15-8
  • Legacy Issue Number: 15835
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    In a CCM/DDS4CCM based system not all IDL defined types are intended to be used with dds. At this moment there is not a standardized way to indicate that a type should be usable with DDS. If I now have a large file with a lot of types, DDS just assumes that everything should be transmittable through DDS and generates a lot of code. Just like can indicate the keys of a struct, I think DDS should define a standardized way to annotate the idl so that just some types in a file are handled by the dds tooling

  • Reported: DDS 1.2 — Wed, 17 Nov 2010 05:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

DDS specification should be more precise on NATIVE defines

  • Key: DDS15-9
  • Legacy Issue Number: 15834
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    DDS leaves domainid, handle, and topic key to the dds vendor, each can define their own type for these. The specification has defines for them, but the default is long. If now a vendor uses for example a struct for the InstanceHandle_t, this leads to challenges when writing portable C++ code because the argument passing is different between a long (as value) or a fixed struct (const &). To my idea the dds specification should be more precise on the type, maybe fixed struct to achieve more portability of users code

  • Reported: DDS 1.2 — Wed, 17 Nov 2010 05:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Add DDS::STATUS_MASK_NONE

  • Key: DDS15-10
  • Legacy Issue Number: 15041
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    We want to propose to extend the DDS status masks with DDS::STATUS_MASK_NONE which is defined as 0. This is cleaner for application code.

  • Reported: DDS 1.2 — Mon, 8 Feb 2010 05:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Add new mask which will let DDS callback on the listener to gets its mask

  • Key: DDS15-12
  • Legacy Issue Number: 14814
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    DDS has several methods to create entities and pass a listener. With the listener than a mask has to be passed. It would be much cleaner for some C++ systems when we can pass a special mask which means that DDS will callback on the listener to gets its mask, this reduces the application code and could lead to a cleaner user code architecture

  • Reported: DDS 1.2 — Mon, 23 Nov 2009 05:00 GMT
  • Updated: Thu, 10 Oct 2019 00:03 GMT

Consider referencing DDS-XML for the XML type and data representations

  • Key: DDSXTY14-5
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    DDS-XML defines the XML data representation. See 7.2 of DDS-XML
    DDS-XML defines the XML type representation. See 7.3.3 of DDS-XML

    So these definitions could be removed from DDS-XTYPES and just reference those specs.

    Also the XSD type representation could be deprecated from DDS-XTYPES. This has not been popular in practice. The XML type representation is far more popular...

  • Reported: DDS-XTypes 1.3b1 — Wed, 25 Sep 2019 22:14 GMT
  • Updated: Thu, 26 Sep 2019 08:44 GMT

Extend SampleInfo with sequenceNumber and reception_timestamp

  • Key: DDS15-309
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    Many vendors already extend the SampleInfo with some additional fields:

    • The reception_timestamp
    • The writerSequence number.

    I would propose we make these part of the new standard.

  • Reported: DDS 1.4 — Wed, 25 Sep 2019 20:15 GMT
  • Updated: Wed, 25 Sep 2019 20:15 GMT

Spec lacks definition regarding uniqueness of InstanceHandle_t

  • Key: DDS15-4
  • Legacy Issue Number: 17412
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The spec defines the following:
    7.1.2.1.1.8 get_instance_handle
    This operation returns the InstanceHandle_t that represents the Entity.

    But it doesn't specify in how far this InstanceHandle_t has to be unique. When the user receives an InstanceHandle_t, is it than unique within the same domain participant, within the process or within the complete dds domain? If it is for example just unique within one domain participant, we can't use it for example as key in a map which could contain entities from multiple domain participants

  • Reported: DDS 1.2 — Fri, 8 Jun 2012 04:00 GMT
  • Updated: Wed, 25 Sep 2019 16:57 GMT

Consider replacing @Choice annotation with XTYPES 1.2 unions

  • Key: DDSRPC11-4
  • Status: open  
  • Source: Twin Oaks Computing, Inc. ( Mr. Clark Tucker)
  • Summary:

    The DDS-RPC added a @Choice annotation (see 7.5.1.2.1.1 @Choice Annotation) to indicate a Structure with the "single-member" semantics of a union. As stated in the aforementioned section the reason was:

    Using unions to indicate which operation is being invoked is brittle. Operations in an interface have set semantics and have no ordering constraints. Union, however, enforces strict association with discriminator values, which are too strict for set semantics. Further, use of unions leads to ambiguities in case of multiple inheritance of interfaces.

    However XTYPES 1.2 enhanced unions which now support inheritance and are not so brittle anymore. For this reason it makes sense to re-evaluate this decision.

    An advantage of using unions (beyond avoiding a extraneous annotation) is that their API is better oriented to identifying the one branch that is present; whereas in the case of structures there is no standard API available to determine which member is present other than iterating over every member. This would be unnatural for processing the RPC calls.

  • Reported: DDS-RPC 1.0 — Tue, 24 Sep 2019 13:26 GMT
  • Updated: Tue, 24 Sep 2019 13:26 GMT

Legal characters and length of Topic Name

  • Key: DDS15-197
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The DDS specification states a Topic name is a string but it does not state what the legal characters are. It would therefore be possible to use "unprintable" characters which could create difficulties with printing and logginf messages.
    Because of this it is also possible for multiple vendors to put in place restrictions that could cause incompatibilities.

    For this reason it is desirable that the specification states with characters are legal within a Topic name.

    In addition RTPS version 2.2 defines TopicName as string<256> this should also be reflected in DDS.

  • Reported: DDS 1.4 — Tue, 17 May 2016 21:54 GMT
  • Updated: Mon, 23 Sep 2019 15:42 GMT

TypeSupport::get_type_name should be precisely specified

  • Key: DDS15-1
  • Legacy Issue Number: 18468
  • Status: open  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The description of the TypeSupport::get_type_name operation currently states:

    "This operation returns the default name for the data-type represented by the TypeSupport."

    The problem is that the default name for the data-type is not specified anywhere. One logical choice would be the fully qualified type as per the IDL syntax. As an example org::omg::dds::demo::ShapeType.

    If the specification does not clearly mandate the representation for the topic type interoperability may be hindered unless users explicitly override topic types.

    This is very unfortunate and a critical issue that should be addressed ASAP.

  • Reported: DDS 1.2 — Thu, 21 Feb 2013 05:00 GMT
  • Updated: Wed, 28 Aug 2019 19:37 GMT

behaviour of redefining multiple times the same topic with different QoS not clearly specified

  • Key: DDS15-27
  • Legacy Issue Number: 16098
  • Status: open  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The DDS v1.2 specification does not clearly specify the behaviour of redefining multiple times the same topic with different QoS. As a Topic represents a global assertion, having different applications associating different QoS with the same topic should be flagged as an error.

  • Reported: DDS 1.2 — Fri, 25 Mar 2011 04:00 GMT
  • Updated: Wed, 28 Aug 2019 00:08 GMT

Missing APIs for (read|take)_instance_w_condition

  • Key: DDS15-26
  • Legacy Issue Number: 16607
  • Status: open  
  • Source: Real-Time Innovations ( Kevin Jaeger)
  • Summary:

    For keyed topics, the core set of read or take APIs support read|take, read|take_instance, and read|take_next_instance.

    The corresponding set of API's for read or take with conditions only specified read|take_w_condition and read|take_next_instance_w_condition. The specification lacks the APIs for read|take_instance_w_condition.

    Lack of these APIs deprives the user from the ability to read or take from a specific instance while limiting the sample set to specific conditions.

  • Reported: DDS 1.4 — Fri, 14 Oct 2011 04:00 GMT
  • Updated: Tue, 27 Aug 2019 23:25 GMT

DDS DCPS Issue: PRESENTATION=GROUP and QoS

  • Key: DDS15-43
  • Legacy Issue Number: 10993
  • Status: open  
  • Source: OCI ( Don Busch)
  • Summary:

    Section 7.l.3.6 of the DCPS spec should indicate what happens under the PRESENTATION=GROUP policy when different DataWriters in the group have different QoS settings. Whose settings are followed by the group? The most stringent? The least stringent? Group membership is dynamic, so the group members are not knows until each write() happens

  • Reported: DDS 1.2 — Wed, 9 May 2007 04:00 GMT
  • Updated: Tue, 20 Aug 2019 00:23 GMT

The compatibility rules for the Presentation QoS are too strict

  • Key: DDS15-24
  • Legacy Issue Number: 17362
  • Status: open  
  • Source: Real-Time Innovations ( Mr. Fernando Sanchez)
  • Summary:

    The compatibility rules for the Presentation QosPolicy, specified in section 2.2.3.6 of the DDS Specification prevent a subscriber configured using GROUP access scope from simultaneously matching a publisher configured using GROUP access scope and a publisher configured using TOPIC or INSTANCE access scope.

    Proposed Resolution:
    The addition of a new boolean field called "use_highest_offered_access_scope" to Presentation QosPolicy.

    This boolean is not propagated as part of the discovery information and remains local to the subscriber. Users configure the subscriber to the minimum accepted access scope. When the boolean field is set to true, the subscriber will provide the access_scope offered by the publisher as opposed to its own access_scope value.

    For example: a subscriber wanted to provide GROUP access scope when matched with a GROUP order publisher and with a publisher providing INSTANCE access scope, will use INSTANCE access scope and set the user_highest_offered_access_scope boolean to true.

  • Reported: DDS 1.2 — Tue, 8 May 2012 04:00 GMT
  • Updated: Mon, 19 Aug 2019 23:40 GMT

PARTITION PolicyQos should be in DataReader/DataWriter

  • Key: DDS15-303
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The logic of the PARTITION Qos applies separately to each DataReader/DataWriter and the propagation on the DCPS bultin Topics also happens along with each DataReader and DataWriter.

    Despite this the PARTITION Qos can only be set on the Publisher/Subscriber which impact all the DataWriters/DataReaders they contain. To overcome this we have seen many users create a separate Publisher/Subscriber per DataWriter/DataReader which unnecessarily consumes resources and couples them.

    The recommendation is to allow the PARTITION Qos to be set directly on the DataWriter and DataReader. This would not impact the behavior of partition matching. Just makes it more flexible to use.

    A question is whether we should still allow the Publisher/Subscriber to have a PARTITION Qos. This may be desirable to avoid braking existing code. In this case we could interpret as a 'default" unless ta DataWriter/DataReader specifies it explicitly. This would make current applications work without changes.

  • Reported: DDS 1.4 — Fri, 16 Aug 2019 00:54 GMT
  • Updated: Mon, 19 Aug 2019 14:27 GMT

Coherent updates with best efforts

  • Key: DDS15-194
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Clarify what happens if coherent updates involve best-effors writers. Would missing one sample cause the whole set to be discarded?

    Affects both TOPIC coherence and GROUP coherence if there are some best-efforts writers in the Publisher

  • Reported: DDS 1.4 — Tue, 15 Mar 2016 15:36 GMT
  • Updated: Fri, 16 Aug 2019 00:09 GMT

Clarification of resource management

  • Key: DDS15-183
  • Legacy Issue Number: 10357
  • Status: open  
  • Source: Honeywell ( James Richardson)
  • Summary:

    I don't think that it is explicitly stated anywhere in this spec that each DataWriter and each DataReader maintains its own set of samples. Samples are not maintained by Publishers, Subscribers. It is implied in several places, e.g. the fact that RESOURCE_LIMITS applies to DataWriter and DataReader and not to Publisher and Subscriber. It took me a while to figure this out. It is possible for a Publisher to have more than one DataWriter with the same topic, and a Subscriber to have more than one DataReader with the same topic. The semantics of DataReader.take, for instance, are unclear unless it is understood that each DataReader has its own samples. Evidently a take operation on one DataReader does not disturb the samples of another DataReader with the same Publisher and Topic. Please clarify the specification in this regard. Figure 2-1 and accompanying text would be one place.

  • Reported: DDS 1.2 — Fri, 22 Sep 2006 04:00 GMT
  • Updated: Thu, 15 Aug 2019 23:29 GMT

Section: 2.1.2.5.3 clarification of parameters to 'read/take' operation

  • Key: DDS15-177
  • Legacy Issue Number: 10363
  • Status: open  
  • Source: Honeywell ( James Richardson)
  • Summary:

    Context: DataReader.read operation Why are sample_states, view_states, and instance_states provided as separate parameters? Aren't they contained in sample_infos? More explanation required.

  • Reported: DDS 1.2 — Fri, 22 Sep 2006 04:00 GMT
  • Updated: Thu, 15 Aug 2019 19:31 GMT

Deprecate Basic Service Mapping

  • Key: DDS15-248
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The Basic Service Mapping was included in the specification primarily to support implementations that did not support XTYPES. Now that most DDS support XTYPES this motivation is no longer there.

    Having both a Basic Service Mapping and an Enhance Service Mapping creates significant complexity and ambiguity. It becomes another choice the user must make and another way implementations may not interoperate.

    Furthermore when other specifications map to DDS Services, they must too make a choice of Service Mappings. Hence perpetuating complexity and interoperability issues.

    The Enhanced Service Mapping has significant advantages in terms of performance, scalability, and type-system simplicity. Fundamentally it allows the use of the same types for request reply and RPC, any extra information is added in meta-data so that the types themselves are unpolluted. This is in-line with what other middleware technologies (e.g. JMS) does.

    Therefore the most sensible thing is to deprecate the Basic Service Mapping.

  • Reported: DDS 1.4 — Mon, 20 May 2019 22:31 GMT
  • Updated: Thu, 15 Aug 2019 00:50 GMT

Wrong name for DataRepresentationQosPolicy field

  • Key: DDSXTY14-4
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 7.6.3.1.3 'DataRepresentationQosPolicy: Platform-Specific API' states:

    The topic, publication, and subscription built-in topic data types shall each indicate the data representation of the associated entity with a new member:

    @id(0x0073) DDS::DataRepresentationQosPolicy representation;

    This does not follow the naming conventions for field names. Instead it should have said that the new member should be:
    @id(0x0073) DDS::DataRepresentationQosPolicy data_representation;

    Likewise in Annex D the declarations of structures TopicBuiltinTopicData, TopicQos, PublicationBuiltinTopicData, DataWriterQos, SubscriptionBuiltinTopicData, and DataReaderQos all have the member:

    @id(0x0073) DDS::DataRepresentationQosPolicy representation;
    

    This should be changed so the member is:

    @id(0x0073) DDS::DataRepresentationQosPolicy data_representation;
    
  • Reported: DDS-XTypes 1.3b1 — Thu, 15 Aug 2019 00:46 GMT
  • Updated: Thu, 15 Aug 2019 00:46 GMT

DURABILITYSERVICE_POLICY_NAME

  • Key: DDS15-36
  • Legacy Issue Number: 12276
  • Status: open  
  • Source: lmco.com ( Abdullah Sowayan)
  • Summary:

    noticed an inconsistency while I was reading the DDS spec (version 1.2) last night. My question relates to the following quality of service policy: DURABILITYSERVICE_POLICY_NAME

    The pattern in all QoS names is:

    *_QOS_POLICY_NAME, except for the DURABILITYSERVICE

    The pattern in all QoS IDs is:

    *_QOS_POLICY_ID

    The DURABILITYSERVICE does adhere to the pattern/convention for Qos IDs:

    DURABILITYSERVICE_QOS_POLICY_ID

    But the does NOT adhere to the pattern/convention for Qos names. So, is there a typo in DURABILITYSERVICE_POLICY_NAME, i.e., should it be DURABILITYSERVICE_QOS_POLICY_NAME, or is the lacking of 'QOS' intentional?

  • Reported: DDS 1.2 — Thu, 13 Mar 2008 04:00 GMT
  • Updated: Wed, 14 Aug 2019 19:18 GMT

When using GROUP access scope presentation QoS, allow for read/take outside of begin_access and end_access block

  • Key: DDS15-23
  • Legacy Issue Number: 17363
  • Status: open  
  • Source: Real-Time Innovations ( Mr. Fernando Sanchez)
  • Summary:

    Problem: The DDS specification (section 2.2.2.5.2.8) does not allow access to the DDS cache when the application wants to access data, but does not care about the order across Data Writers.

    Proposed Resolution:
    When using GROUP access scope, allow both access patterns and do not return PRECONDITION_NOT_MET
    error code when called read, take, etc. without first called begin_access.

    Note: This also allows portability for applications which do not care about the order across topics.

  • Reported: DDS 1.2 — Tue, 8 May 2012 04:00 GMT
  • Updated: Fri, 9 Aug 2019 17:33 GMT

Allow for more optimized list returned by get_datareaders()

  • Key: DDS15-22
  • Legacy Issue Number: 17364
  • Status: open  
  • Source: Real-Time Innovations ( Mr. Fernando Sanchez)
  • Summary:

    Found by: Fernando Crespo
    Severity:

    Problem:
    OMG DDS spec (section 2.2.2.5.2.10) states that the sequence returned by
    get_datareaders() will contain list containing each DataReader one or more times.
    For example, if multiple consecutive samples in a group belong to the same DataReader
    the DataReader is repeated in the list returned by get_datareaders().
    Having to process each element, even when they belong to the same DataReader is
    less performant.

    Proposed Resolution:
    Modify the specification to return one DataReader element, instead of a list where
    a DataReader is repeated multiple times, when multiple subsequent samples belong to
    the same DataReader. This allows for more optimized processing where the user calls
    read/take until the return code is NO_DATA.

  • Reported: DDS 1.2 — Tue, 8 May 2012 04:00 GMT
  • Updated: Fri, 9 Aug 2019 16:47 GMT

Organize definitions of Time_t, Duration_t and other common types in the PIM

  • Key: DDS15-266
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The PIM contains definitions for most of the "reference semantic" classes. But it does not directly define the "value semantic" classes such as: Time_t, Duration_t, SequenceNumber_t, InstanceHandle_t, StatusKind, StatusMask, etc.

    Some types like ReturnCode_t are defined. But this is done in an odd place: (section 2.2.1.1 'Format and Conventions').

    The PIM would be more clear if these types were all defined clearly in a centralized place. For example the Infrastructure module.

    This issue should be treated as a "Blocker" so it is resolved ahead of other issues. That way the other issues can refer to the new definitions and organization.

  • Reported: DDS 1.4 — Wed, 7 Aug 2019 11:03 GMT
  • Updated: Wed, 7 Aug 2019 11:03 GMT

Authentication Protocol: Make what is validated in the messages more explicit

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The Builtin Authentication Protocol described in 9.3.4.2 'Protocol description' as well as in Table 52 'Actions undertaken by the operations of the builtin Authentication plugin' should be more explicit about how each of the protocol messages is validated.

    Specifically it should prescribe that:

    • Participant_A shall check the fields inside HandshakeReplyMessageToken and ensure that {Challenge1, Hash(C1), DH1}

      match what Participant A sent in the HandshakeRequestMessageToken.

    • Participant_B shall check the fields inside HandshakeFinalMessageToken and ensure that {Hash(C1), Hash(C2), DH1, DH2, Challenge1, Challenge2}

      match what Participant B sent in the HandshakeRequestMessageToken.

    This should be made clear both in 9.3.4.2 'Protocol description' and in Table 52 'Actions undertaken by the operations of the builtin Authentication plugin'.

  • Reported: DDS-SECURITY 1.1b1 — Tue, 6 Aug 2019 17:13 GMT
  • Updated: Tue, 6 Aug 2019 17:13 GMT

Add several with_profile methods

  • Key: DDS15-7
  • Legacy Issue Number: 15904
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    DDS4CCM adds support for qos xml files. There is no api in dds to create a dp/sub/pub/rd/wr with a qos given from the xml file. We propose to add the following methods to the DDS IDL to create dds entities with a qos xml profile.

        local interface DomainParticipant : Entity {
            Publisher create_publisher_with_profile(
                in string library_name,
                in string profile_name,
                in PublisherListener a_listener,
                in StatusMask mask);
            Subscriber create_subscriber_with_profile(
                in string library_name,
                in string profile_name,
                in SubscriberListener a_listener,
                in StatusMask mask);
            Topic create_topic_with_profile(
                in string topic_name,
                in string type_name,
                in string library_name,
                in string profile_name,
                in TopicListener a_listener,
                in StatusMask mask);
    };
    
    
        local interface DomainParticipantFactory {
            DomainParticipant create_participant_with_profile(
                in DomainId_t domain_id,
                in string library_name,
                in string profile_name,
                in DomainParticipantListener a_listener,
                in StatusMask mask);
            ReturnCode_t set_default_participant_qos_with_profile(
                in string library_name,
                in string profile_name);
    };
    
    
        local interface Publisher : Entity {
            DataWriter create_datawriter_with_profile(
                in Topic a_topic,
                in string library_name,
                in string probile_name,
                in DataWriterListener a_listener,
                in StatusMask mask);
    };
    
    
        local interface Subscriber : Entity {
            DataReader create_datareader_with_profile(
                in TopicDescription a_topic,
                in string library_name,
                in string profile_name,
                in DataReaderListener a_listener,
                in StatusMask mask);
    }; 
    
  • Reported: DDS 1.2 — Tue, 21 Dec 2010 05:00 GMT
  • Updated: Mon, 5 Aug 2019 13:38 GMT

get_type_name, class or object method

  • Key: DDS15-6
  • Legacy Issue Number: 16262
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    It seems that DDS vendors are implementing get_type_name of the TypeSupport interfaces differently. Some do it as static class method in C++, some as a regular method. The spec uses regular IDL, which gives the idea that it is a regular method needed a concrete TypeSupport instance, but I doubt whether that is intended

  • Reported: DDS 1.2 — Tue, 24 May 2011 04:00 GMT
  • Updated: Mon, 5 Aug 2019 13:32 GMT

Add a DomainTag to the PSM

  • Key: DDS15-258
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    RTPS 2.4 added a domainTag (see Table 8.73 - RTPS SPDPdiscoveredParticipantData attributes) this was done to support having the DDS RTF adding it to the next version of the Spec. This task should be completed.

    The domainTag is used to isolate domains even if they are on the same DDS domainId

  • Reported: DDS 1.4 — Mon, 5 Aug 2019 12:22 GMT
  • Updated: Mon, 5 Aug 2019 12:22 GMT

Write with handle_nil underspecified

  • Key: DDS15-3
  • Legacy Issue Number: 17413
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    For write the DDS spec says:

    The special value HANDLE_NIL can be used for the parameter handle. This indicates that the identity of the instance
    should be automatically deduced from the instance_data (by means of the key).

    The case which is not specified is the case where the handle is HANDLE_NIL, but they key we use hasn't been registered with dds yet, will DDS than return an error, or automatically register a new instance?

  • Reported: DDS 1.2 — Fri, 8 Jun 2012 04:00 GMT
  • Updated: Mon, 5 Aug 2019 10:11 GMT

ContentFilteredTopics should be removed. Filtering belongs to DataReaders

  • Key: DDS15-2
  • Legacy Issue Number: 18311
  • Status: open  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The DDS v2.1 introduces the concept of a ContentFilteredTopic in order to express filtering on a DataReder. The ContentFilteredTopic is a local entity that is not distributed via discovery. In addition content filters are already distributed as part of DataReader discovery.

    As such it would be cleaner and more sensible to remove the ContentFilteredTopic and allow to express the filter directly through either DataReader QoS or as a Filter parameter (see DDS-PSM-Cxx for inspiration).

  • Reported: DDS 1.2 — Wed, 12 Dec 2012 05:00 GMT
  • Updated: Mon, 5 Aug 2019 10:09 GMT

Specify more clearly which types have a name and how it is constructed

  • Key: DDSXTY14-2
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 7.2.2.1 'Namespaces' states:

    Modules are namespaces whose contained named elements are types. The concatenation of module names with the name of a type inside of those modules is referred to as the type’s “fully qualified name.”

    This is not enough to fully determine the fully qualified name. How is the "concatenation" done? What character is used to separate the successive module names?

    For example what should be the fully-qualified name of the type described in in the following IDL?

    module A {
    module B {
      struct Foo {
        ...
      };
    };
    };
    

    Assuming "::" is used to separate namespaces it would be "A::B::Foo"

    The issue of type names is a bit broader. Currently it is not so clear that every type has a name. Is that really so? What about anonymous types defined within a structure?

    The definition of MemberDescriptor (7.5.2.7) which is used to describe members of a Structure seems to imply every type must have a name. This is because each MemberDescriptor has an associated DynamicType (7.5.2.7.10 'Property: type') which according to 7.5.2.7.10 it cannot be null. And the DynamicType::get_name() should return the name of the type.

    On the other hand Figure 5 seems to indicate only Modules and ConstructedTypes (according to Fig 5 these are: Alias, AggregateTypes, EnumeratedType, Collection) have a "ScopedIdentifier" which is their name.

    This would mean that PrimitiveTypes, StringType do not have a ScopeIdentifyer/name. This seems problematic,

    • PrimitiveTypes do seem to have a name as it is used when defining struct members of that type.
    • CollectionTypes do not seem to have a name.

    However nothing really says that typenames should be globally unique. They only need to be unique within a compilation unit...

  • Reported: DDS-XTypes 1.3b1 — Sun, 4 Aug 2019 20:29 GMT
  • Updated: Mon, 5 Aug 2019 10:06 GMT

Add Unions to types supported in Queries and Filters

  • Key: DDSXTY14-1
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    "Member Names" (7.6.7.1) is missing support for Unions. Union members can be accessed by name as long as a reserved name is specified for the discriminator. A valid filter expression needs to check the discriminator before accessing another member name (for example u.disc = 3 AND u.val < 100), however the implementation doesn't need to check for this. If evaluating a filter expression causes access to an inactive element of a union, the result is undefined.

  • Reported: DDS-XTypes 1.3b1 — Mon, 22 Jul 2019 15:36 GMT
  • Updated: Mon, 22 Jul 2019 15:36 GMT

Protecting the Source Timestamp

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Currently the INFO_SOURCE can only be protected by RTPS protection. This makes anyone on the Domain able to modify it. Moreover it must be left unprotected when communicating with unsecured participants.

    It would be better if it was included into the DATA / DATA_FRAG submessge as an inlineQos

  • Reported: DDS-SECURITY 1.1b1 — Fri, 27 Jul 2018 12:32 GMT
  • Updated: Tue, 16 Jul 2019 17:28 GMT

What can be done with a disabled Topic?

  • Key: DDS15-255
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Since Topics are Entities, they can exist in a disabled state. Section 2.2.2.1.1.7 is insufficient to define what can (more importantly, can't) be done with a disabled Topic.
    That section defines which operations "may be invoked on it", but more interesting for Topics are the passive uses of these objects as arguments to other operations.
    In particular, it should be explicitly stated that a DataReader or Writer that references a disabled Topic (including, for readers, indirectly via ContentFilteredTopic or MultiTopic) cannot be enabled. In these cases, the enable() operation returns RETCODE_PRECONDITION_NOT_MET.

  • Reported: DDS 1.4 — Tue, 9 Jul 2019 15:56 GMT
  • Updated: Tue, 9 Jul 2019 15:56 GMT

Specify the behavior of instance state machine in case of a disconnect-reconnect scenario

  • Key: DDS15-254
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The DDS specification is very clear what happens in case of a disconnect: the receiver will behave as if the sender unregistered all its instances. But what should the behavior be in case of a reconnect?

    For VOLATILE cases the behavior might still be intuitive: an instance stays NOT_ALIVE_NO_WRITERS until an update has been received, in which case it goes back to ALIVE. And because VOLATILE data is typically periodic data, eventually all my instances will come back alive.

    But what about non-volatile data, that is typically not periodic, or is periodic but with a very low update frequency? Consider the following scenario:

    • Writer A writers 10 samples belonging to 10 different instances.
    • Reader B takes all samples.
    • Writer A disconnects from Reader B.
    • Reader B receives invalid samples indicating all instances are now NOT_ALIVE_NO_WRITERS.
    • Reader B takes these samples.
    • A reconnection is established, and none of the instances have been updated by Writer A.

    You would expect that all instances in Reader B would go back to the ALIVE state, but how do I get them back into the ALIVE state? Since there are no more samples to piggy-bag this instance state change on.

    A couple of approaches are conceivable:

    • Use an invalid sample to bring the instance back alive.
    • Republish the last available sample
    • Do nothing.

    Every approach has its pro's and cons, but the DDS spec should clearly describe which behavior is intended here.

  • Reported: DDS 1.4 — Wed, 19 Jun 2019 12:15 GMT
  • Updated: Wed, 19 Jun 2019 12:15 GMT

Consider adding some of the concepts in the new PSMs to the PIM

  • Key: DDS15-253
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Examples:

    • Selector from C++ PSM
    • Cascading operations to set Qos policies qos.with().with().
    • Dispatch on waitset and conditions (attach a function)
    • "close" operation that is recursive and avoids having a handle to the factory.
      *
  • Reported: DDS 1.4 — Wed, 19 Jun 2019 10:00 GMT
  • Updated: Wed, 19 Jun 2019 10:00 GMT

Missing get_discovered_participants and get_discovered_participant_data functions

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The C++ PSM doesn't provide the following DDS-standard functions:

    • DomainParticipant::get_discovered_participants
    • DomainParticipant::get_discovered_participant_data.

    Proposed resolution
    To be consistent with PSM functions like matched_publications and matched_publication_data, we should add the following functions in the dds::domain namespace:

    dds/domain/discovery.hpp
    dds::core::InstanceHandleSeq discovered_participants(
        DomainParticipant participant);
    
    template <typename FwdIterator>
    FwdIterator discovered_participants(
        DomainParticipant participant,
        FwdIterator begin,
        FwdIterator end);
    
    dds::topic::ParticipantBuiltinTopicData discovered_participant_data(
        DomainParticipant participant,
        const dds::core::InstanceHandle& handle);
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Thu, 14 Jul 2016 18:21 GMT
  • Updated: Sat, 15 Jun 2019 01:16 GMT

Clarify definition of counts in Plain Communication Status

  • Key: DDS15-252
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The second table in 2.2.4.1 (the one that starts with "SampleLostStatus") has confusing definitions of the "counts" in various plain communication status.

    Certain "statuses" simply report events that occur within the Entities. Sample Lost is a good example of this. When a sample is lost, it's lost for good and not coming back. Therefore we expect total_count_change to be nonnegative. In this case the total_count definition is clear.

    Other "status" are ways to report some aspect of the state of the Domain to the application. Inconsistent Topic is an example of this. Since remote Entities can change at any time, the count of inconsistent topics may decrease (for example, when a Topic owned by a remote Participant is deleted). For the "statuses" in this category, the wording of the definition of total_count (and perhaps other attributes) is confusing since it starts with "Total cumulative count..." just like the one for Sample Lost.

  • Reported: DDS 1.4 — Fri, 7 Jun 2019 15:36 GMT
  • Updated: Fri, 7 Jun 2019 15:36 GMT

Instance handle constructor for TopicInstance should be deleted.

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The dds/topic/TopicInstance object is used as a holder for both a sample, and the instance handle to its corresponding instance. There are operations on the DataWriter that accept a TopicInstance as their parameter.

    However, it is possible to instantiate a TopicInstance without sample, by using a constructor that only accepts an instance handle. It is unclear what the behavior of the write operations should be in case they receive a TopicInstance without corresponding sample.

    I therefore propose to either delete the constructor that accepts only an instance handle, and remove the key_value() function that accepts TopicInstance as input parameter (it is already overloaded by another key_value() that accepts an InstanceHandle) or otherwise define an exception when passing a TopicInstance without sample to a write() operation.

  • Reported: DDS-PSM-Cxx 1.0 — Wed, 5 Jun 2019 12:01 GMT
  • Updated: Wed, 5 Jun 2019 12:01 GMT

Unintuitive way to access extension member functions

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    Invoking an extension function in a standard type requires using an overloaded arrow operator. For example:

    // Standard class (in dds namespace)
    dds::domain::DomainParticipant participant(MY_DOMAIN_ID);
    // Call a standard method
    participant.assert_liveliness();
    // Call an extension method:
    participant->vendor_specific_method(...);
    

    The use of the arrow operator is counterintuitive to most people (the variable is not a pointer) and didn't allow an IDE to show the available extensions if the regular dot operator was used.

    We propose adding an "extensions()" function to dds::core::Reference and dds::core::Value that can be used as follows:

    // Call an extension method:
    participant.extensions().register_durable_subscription(...);
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Fri, 10 May 2019 18:32 GMT
  • Updated: Wed, 15 May 2019 16:12 GMT

Condition classes should only be used with WaitSets

  • Legacy Issue Number: 17063
  • Status: open  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The DataReader API provides methods to read samples with a condition. This condition can be either a ReadCondition or a QueryCondition, and in this case the samples returned are either filtered by the status (ReadCondition) or the content+status (QueryCondition).
    The ReadCondition is completely in overlap with the instance/status/view states and its use is really irrelevant when in combination with the DataReader. On the other end the only aspect of the QueryCondition that really matters to a DataReader are the query expression and parameters.

    By looking carefully at the API, it seems apparent that the ReadCondition and the QueryCondition really make sense only when used with a WaitSet. On the other end, their use in conjunction of a DataReader is a stretch and breaks the semantics of the "Condition". On principle a condition is used to "wait" for a particular status to be true, yet the DataReader "read" are – rightfully – always non-blocking. In addition, the API opens up for gratuitous runtime errors as I could write silly code as follows (in C++):

    auto rc = reader.create_readcondition();
    reader2.read(..., rc,...);

    This although silly is allowed by the API and on a proper DDS implementation should raise an exception.

    The same could happen with a QueryCondition!

    Resolution
    ---------------
    Limit the use of Read/QueryCondition to waitsets and put in place a more robust mechanism to do status and content filtering on a data-reader read.

    An example of what could be done is provided below, where I assume that the DataStatus is the former ReaderState:

    reader
    .filter_status(DataStatus::new_data())
    .filter_content(Query("x < 100 AND y < 100"))
    .read();

    Equally, one could write (again legal C++ below with little magic under-cover) :

    reader
    .instance(handle)
    .filter_status(DataStatus::new_data())
    .filter_content(Query("x < 100 AND y < 100"))
    .read();

    Notice that this code, not only is very declarative and thus shows very clearly the intent of the programmer, but in addition does not allow for the silly mistakes shown above. Further more, it really highlights he role of the Sample/Instance/View status as a "filter" on the status of data.

  • Reported: DDS-PSM-Cxx 1.0b2 — Thu, 26 Jan 2012 05:00 GMT
  • Updated: Wed, 15 May 2019 14:16 GMT

Remove templatization for datatype from TopicDescription

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    In the current DDS-PSM-Cxx spec files, the TopicDescription is not only templatized for its Delegate, but also for its datatype. However, none of the functions exposed by the TopicDescription has a dependency on this datatype.

    I therefore suggest to remove the template parameter for the datatype from the TopicDescription.

  • Reported: DDS-PSM-Cxx 1.0 — Wed, 24 Apr 2019 13:01 GMT
  • Updated: Wed, 15 May 2019 14:13 GMT

MERGE CONFLICT: Modify Topic inheritance


Inheritance hierarchy of C++11 PSM conflicts with inheritance hierarchy from DDS PIM

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    In the DDS PIM the Topic inherits from two other classes: TopicDescription and Entity. However, in the C++11 PSM, this double inheritance relationship has been removed by making TopicDescription inherit from Entity, and making Topic only inherit from TopicDescription.

    Although this seems to simplify the inheritance hierarchy, it has a couple of unwanted side-effects, since all TopicDescriptions are now Entities. That means that ContentFilteredTopic and MultiTopic now offer all the operations that an Entity normally offers:

    • They have a StatusCondition
      • However, ContentFilteredTopic and MultiTopic have no statuses that are applicable to this StatusCondition.
    • They offer an operation to extract their instance handle
      • However, ContentFilteredTopic and MultiTopic are not discoverable and therefore do not have an instance handle.
    • Conceptually, Entities are supposed to offer Qos and Listeners, which ContentFilteredTopic and MultiTopic do not do.

    We want to correct for this by removing the inheritance relationship between TopicDescription and Entity and reinstating the double inheritance for Topic on both TopicDescription and Entity.

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 16 Mar 2016 19:27 GMT
  • Updated: Wed, 15 May 2019 14:12 GMT

Use consistent way to refer to vendor specific Delegate

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The current DDS-PSM-Cxx spec often refers to the vendor specific Delegate in the following way:

    • A typedef refers Entity<T> to detail::Entity<T>, which is in a vendor specific file.
    • In detail::Entity, another typedef then substitutes the vendor specific Delegate for the template parameter.

    However, for some unknown reason this pattern is not followed for the DataWriter and QueryCondition classes.

    I propose to apply the same pattern to those classes as well.

  • Reported: DDS-PSM-Cxx 1.0 — Wed, 24 Apr 2019 13:22 GMT
  • Updated: Wed, 15 May 2019 12:50 GMT

Inconsistent ways to set functor in Condition types

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    Conditions have an optional functor handler that WaitSet::dispatch() calls when they're active. But the ways to set this handler vary depending on the Condition type:

    Condition type How you set the handler
    GuardCondition handler(Functor&) setter (therefore mutable)
    ReadCondition In constructor (therefore immutable)
    QueryCondition No way to set it (it seems a oversight; should be same as ReadCondition)
    StatusCondition No way to set it (not clear if it's on purpose or an oversight)

    Note that making the handler mutable or immutable has consequences in the thread-safety requirements of the implementations.

  • Reported: DDS-PSM-Cxx 1.0b2 — Thu, 21 Jul 2016 22:35 GMT
  • Updated: Wed, 15 May 2019 12:24 GMT


StatusCondition should have a singleton delegate

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    Because the DDS-PSM-C++ abandoned the factory pattern, you now have to instantiate your own StatusCondition object, and pass the Entity to which it applies as parameter to its constructor.

    However, DDS spec states that each Entity can have only one StatusCondition, and the get_statuscondition operation is responsible for that. Since with the DDS-PSM-Cxx API I can repeatedly create a StatusCondition for the same Entity, I can potentially break the Singleton pattern.

    I would suggest that we state explicitly that when you instantiate multiple StatusCondition objects to the same Entity, they all end up pointing to the same Delegate.

  • Reported: DDS-PSM-Cxx 1.0 — Wed, 24 Apr 2019 12:51 GMT
  • Updated: Wed, 15 May 2019 12:22 GMT

DataReader semantics for historical data are insufficient

  • Key: DDS15-52
  • Legacy Issue Number: 10805
  • Status: open  
  • Source: Anonymous
  • Summary:

    Problem:
    The current specification provides no solution for the following two use-cases:
    · A Volatile DataReader can receive data from a Transient or persistent DataWriter so it may also be interested in historical data. However a DataReader cannot receive historical data. Just making the DataReader Transient does not solve the problem because the DataReader may also be interested in volatile data.
    · A Transient or Persistent DataReader may not be interested in historical data, there is no way to avoid receiving historical data. A DataReader may be e.g. Transient to avoid receiving data from volatile DataWriters, in addition there may be no interest in historical data.

    Solution:
    Separate the control of receiving historical data from the DataReaders durability interest. The DataReaders Durability interest will specify from which DataWriter it will accept data. A separate call will control (ask for) the retrieval of historical data.
    Add the following method
    ReturnCode_t get_historical_data(Duration_t max_wait)
    And Transient and Persistent DataReaders should not automatically receive historical data. A consequence is that this invalidates the method
    ReturnCode_t wait_for_historical_data(Duration_t max_wait).

  • Reported: DDS 1.2 — Mon, 5 Mar 2007 05:00 GMT
  • Updated: Fri, 3 May 2019 01:36 GMT

MAP_TYPE enumeration constant should be redefined due to clash with POSIX macro

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    On some Linux systems the following enumeration:

    dds::core::xtypes::TypeKind::MAP_TYPE

    clashes with the macro MAP_TYPE defined in <sys/mman.h>

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 24 Apr 2019 14:07 GMT
  • Updated: Fri, 26 Apr 2019 14:52 GMT

DataReader.read should return an Iterable collection, not an Iterator

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The current signature of read() (and take) is:

    public Sample.Iterator<TYPE> read();
    

    This operation should return an Interable collection, to be aligned with the C++PSM:

    public LoanedSamples<T> read();
    

    An Iterable collection can be used in a foreach loop, and it can be managed by a try-with-resources block to return the loan automatically. An Iterator doesn't take advantage of these features.

  • Reported: DDS-Java 1.0b2 — Wed, 24 Apr 2019 21:36 GMT
  • Updated: Wed, 24 Apr 2019 21:38 GMT

API correction required to dds/sub/find.hpp

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The return type of dds::sub::builtin_subscriber() is a const reference, forcing to keep the builtin subscriber as a member in the DomainParticipant.

    We cannot make the subscriber a member of the DomainParticipant because this would cause a shared_ptr loop. This also unnecessarily restricts the implementation of this function.

    Proposed resolution:

    - const dds::sub::Subscriber&
    - builtin_subscriber(const dds::domain::DomainParticipant& dp);
    + dds::sub::Subscriber 
    + builtin_subscriber(const dds::domain::DomainParticipant& dp);
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Thu, 21 Jul 2016 22:12 GMT
  • Updated: Wed, 24 Apr 2019 16:18 GMT

Transform AnyDataWriter and AnyDataReader from wrappers into parent classes.

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    In the current DDS-PSM-Cxx spec, the AnyDataWriter and AnyDataReader classes are untyped wrappers around the typed Writers and Readers that only expose their untyped operations.

    I suggest to make the AnyDataWriter and AnyDataReader the parent classes for the typed Writers and Readers. That makes it much easier to navigate from for example an untyped AnyDataWriter to typed DataWriter and vice versa.

  • Reported: DDS-PSM-Cxx 1.0 — Wed, 24 Apr 2019 13:06 GMT
  • Updated: Wed, 24 Apr 2019 13:56 GMT

Define relationship between Query and QueryCondition

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The current DDS-PSM-Cxx spec distinguishes between Queries and QueryConditions. The former can be used in a Selector, the latter can be used in a WaitSet. However, from the end-user perspective it would make sense that if I want my WaitSet to trigger on incoming data matching my QueryCondition, that I then want to consume the data matching my Query in some way.

    According to the current specification I would need to instantiate both a Query and a QueryCondition based on the same expression. If I then want to modify my Query parameters, I would need to do so consistently for both my Query and my QueryCondition.

    I propose to make QueryCondition extend from Query, and make Query extend from Reference instead of Value. That allows us to store a reference to our internal query state (e.g. to the parse-tree) into the Query object instead of having to redo the whole thing over and over again.

  • Reported: DDS-PSM-Cxx 1.0 — Wed, 24 Apr 2019 13:31 GMT
  • Updated: Wed, 24 Apr 2019 13:31 GMT

CREATE_CLIENT example: typo in hex representation of submessageLength

  • Status: open  
  • Source: private ( Christian Rauch)
  • Summary:

    In the CREATE_CLIENT example, the submessageLength is given as:
    submessageLength = 26 = 0x001B

    While the length is correctly given as 26 bytes, the hexadecimal representation should be 0x001A and not 0x001B.

  • Reported: DDS-XRCE 1.0b1 — Wed, 13 Mar 2019 00:36 GMT
  • Updated: Mon, 8 Apr 2019 16:47 GMT

Serial Transport (section C.1) should be a subsection of 11

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The subsections of Annex C 'Additional Transport Mappings' should be moved to become subsections of section 11. Since section 11 is already covering the Transport mappings. Specifically C.1 should become 7.4 and the reference to C.1 at the end of current 7.4 'Other Transports' should be removed.

  • Reported: DDS-XRCE 1.0b1 — Thu, 21 Mar 2019 15:04 GMT
  • Updated: Tue, 2 Apr 2019 18:53 GMT

Add support for ChaCha20

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The AES-CCM cypher suite used by the built-in authentication plugins is well suited for higher end processors that have hardware support for AES (e.g. the Intel AES-NI instructions and the the AES instructions in ARMv8).

    ARMv7 and other low-end processors don't have hardware support. In these AES can be quite slow.

    To better support lower end processors it would be good to add support for a cypher suite that has reasonable performance without hardware support. The industry seems to be converging around the ChaCha20. See:

    https://tools.ietf.org/html/rfc8439
    https://tools.ietf.org/html/rfc7905

    Gerardo

  • Reported: DDS-SECURITY 1.1b1 — Sat, 16 Mar 2019 05:31 GMT
  • Updated: Sat, 16 Mar 2019 05:31 GMT

Erratum

  • Status: open  
  • Source: eProsima ( Mr. Jaime Martin-Losa)
  • Summary:

    An erratum has been attached with some grammatical mistakes we found.

  • Reported: DDSI-RTPS 2.2 — Wed, 5 Dec 2018 11:26 GMT
  • Updated: Mon, 17 Dec 2018 14:39 GMT
  • Attachments:

Remove the 'default' case in Requst and Return union types

  • Key: DDSRPC11-3
  • Status: open  
  • Source: Twin Oaks Computing, Inc. ( Mr. Clark Tucker)
  • Summary:

    Section 7.5.1.1.4 Mapping of Interfaces to the Request Topic Types, and Section 7.5.1.1.5 Mapping of Interfaces to the Reply Topic Types, each define a union and specify that the union should have a 'default:' case.

    This makes it difficult to extend the union to support interface inheritance.

    The 'default:' case should be removed.

  • Reported: DDS-RPC 1.0 — Wed, 12 Dec 2018 23:42 GMT
  • Updated: Wed, 12 Dec 2018 23:42 GMT

Fix a number of typos in specification document

  • Key: DDSXML11-1
  • Status: open  
  • Source: Real-Time Innovations ( Mr. Fernando Garcia-Aranda)
  • Summary:

    In section 7.3.2.4.4.1, the "Is equivalent to the following XML" paragraph has the wrong style. It should be "Text Body" rather than monospace.

  • Reported: DDS-XML 1.0 — Mon, 29 Oct 2018 15:48 GMT
  • Updated: Mon, 29 Oct 2018 15:48 GMT

Communication Status changes for multiple events

  • Key: DDS15-244
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Plain Communication Status structures may undergo multiple changes between the time the first event occurs and when the application reads/resets the Plain Communication Status. This results in loss of important data that DDS should make available to the application. It is more likely to occur when using the WaitSet/StatusCondition mechanism instead of Listeners, but may occur with Listeners depending on how the implementation determines when to invoke the Listener.

    For example, an application creates a DataReader that uses Deadline QoS. In order to monitor for Deadline violations, the application gets the reader's StatusCondition and adds it to a WaitSet. If that Condition becomes active, the application invokes get_requested_deadline_missed_status to determine which instance experienced the deadline violation (using last_instance_handle). However, in the case that multiple instances have deadline violations since the last time status was checked (total_count_change > 1), the identity of all but the last of those instances is not available to the application.

    This same concept applies to any of the uses of "last_*" in the Plain Communication Status structures.

  • Reported: DDS 1.4 — Tue, 2 Oct 2018 17:44 GMT
  • Updated: Tue, 2 Oct 2018 17:44 GMT

Make use of C++11 final/override/delete

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    In case we have a C+11 or newer compiler we the C+ PSM should also make use of final/override/delete.

  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 26 Jun 2017 06:50 GMT
  • Updated: Sun, 30 Sep 2018 23:31 GMT

Small correctes to the specification

  • Legacy Issue Number: 19586
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Some small fixes to the spec

    Section 7.1, change "sup- ported" to "supported"

    Section 7.4.3, C+11 talks about strong typed enums, so change "C+11 enumeration
    classes" to "C++11 strongly typed enums"

    Section 7.5.1.2, why let the user initialize a null reference by assigning dds::core::null, wouldn't be be easier to say "The trivial constructor for reference types will initialize it to a null reference"

    Section 8.2, constructor of RadarTrack doesn't use optional for argument z

  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 25 Aug 2014 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:31 GMT

Normative references not complete and out of date

  • Legacy Issue Number: 19585
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The normative references lack the listing of the IDL2C++11 specification which is referred in several sections of the spec, this should refer to at least the V1.1 version of this spec. For DDS4CCM the reference should be updated to the V1.1 of the specification

  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 25 Aug 2014 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:31 GMT

Missing TBuiltinTopicTypes

  • Legacy Issue Number: 19801
  • Status: open  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    The built-in topics are defined in dds/core/BuiltinTopicTypes.hpp as:
    #include <dds/core/TBuiltinTopicTypes.hpp>

    namespace dds { namespace core

    { typedef TBytesTopicType<detail::BytesTopicType> BytesTopicType; typedef TStringTopicType<detail::StringTopicType> StringTopicType; typedef TKeyedBytesTopicType<detail::KeyedBytesTopicType> KeyedBytesTopicType; typedef TKeyedStringTopicType<detail::KeyedStringTopicType> KeyedStringTopicType; }

    }

    But dds/core/TBuiltinTopicTypes.hpp and the types TBytesTopicType, TStringTopicType, etc. don't exist.

  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Jun 2015 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Provide extension constructors for standard classes

  • Status: open  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    The specification does not seem to provide any "standard" way to pass vendor-specific arguments to constructors of standard classes. As constructor is a special function, the trick of overloading operator -> (used for vendor-specific member functions) does not work.

    Take DataState for example: We need to pass more that just InstanceState, ViewState, and SampleState.

    Proposed Resolution: (1) Add overly-generic template constructors that accepts any number of generic arguments. For instance,

    template <class Arg1, class Arg2, class Arg3>
    Class(Arg1 &, Arg2 &, Arg3 &);

    Some classes like DataState may be extended with operator >> template. This style is used in DataReaderQos and DataWriterQos.

    RTI is not thrilled about this option. However, it may solve similar problems in all the classes that need vendor-specific constructors.

    Alternatively, (2) Allow vendor-specific constructors and member-functions in standard classes. The standard simply needs to say that it is allowed.

  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 4 Jan 2016 20:20 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

EntityQos is overly general

  • Legacy Issue Number: 18445
  • Status: open  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    EntityQos template is a rather overly general way of setting and getting policies. Member template functions generate the code depending upon the policy type. If you pass a wrong type, it eventually ends up showing a link-time error as opposed to a compile-time error. For instance, there is a link-time error in the code below because DataWriterQos has no presentation policy.

    dds::pub::qos::DataWriterQos dwqos;
    dds::core::policy::Deadline d;
    dds::core::policy::Presentation p;
    dwqos >> p; /// Linker error here. No compile-time error
    dwqos >> d; /// Fine!

    Additionally, the dot operator provides no help for syntax completion because the policy function is a member template. Consequently, the end-user might be tempted to use the -> operator, which does provide syntax completion depending upon the implementation of the delegate. As a result, for standard policies -> will be used, which is unintended.

    Proposed Resolution:

    1. Add template classes DataReaderQos, DataWriterQoS, PublisherQos, SubscriberQos, DomainParticipantQos in the dds namespace.

    2. Support non-template member functions for setting and getting respective policies. For instance. dwqos.deadline() and dwqos.deadline(d) should be supported.

    3. Define operator << and operator >> outside the QoS class and overload for the respective policies.

    4. The templated verions of policy getters/setters can still be supported. However, I seriously doubt their usefulness. If we decide to keep them, at least I would like to turn the linker error into compiler error using a meta-programming technique described here:

    http://cpptruths.googlecode.com/svn/trunk/cpp/entityqos.cpp

  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 12 Feb 2013 05:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Names of the generated headers

  • Legacy Issue Number: 19753
  • Status: open  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    To ensure application portability, the names of the generated header files should be standard. For example, for Foo.idl, generate Foo.h. The spec does not specify a standard naming scheme.

  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 27 Apr 2015 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Default Constructors

  • Status: open  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    Reference types do not have default constructors, forcing the use of nullptr to construct null references. This runs counter to modern C++ conventions; for example, consider C++11 smart pointers. Forcing explicit initialization also prevents the sensible use of compiler-generated default constructors for objects containing DDS objects as members.

    To get the behavior I want, I've to define constructor and destructor for a struct for no purpose other than to initialize a member instance handle to null, or just make it a std::unique_ptr<dds::core::InstanceHandle> and circumvent the API.

  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 25 Jan 2016 19:02 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API corrections required to src/hpp/dds/core/Exception.hpp

  • Legacy Issue Number: 18612
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    API requires warning suppression with MS Visual Studio.
    MS symbol export macros missing.
    Missing constructor.
    Incorrect comments.
    Some in-line definition remaining in declaration only file.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/Exception.hpp b/src/hpp/dds/core/Exception.hpp
    index 84c7c28..22b05ab 100644
    --- a/src/hpp/dds/core/Exception.hpp
    +++ b/src/hpp/dds/core/Exception.hpp
    @@ -23,194 +23,261 @@
     #include <string>
     #include <dds/core/macros.hpp>
    
    -namespace dds { namespace core {
    +#if defined _MSC_VER
    +#   pragma warning (push)
    +#   pragma warning (disable:4275) // non dll-interface class 'std::foo_error' used as base for dll-interface class 'dds::core::BarError'
    +#endif
    
    -  /**
    -   * This files contains the exceptions corresponding to DDS errors.
    -   * In the DDS-PSM-Cxx in place of DDS errors the associated expcetion
    -   * should be raised. Please section 7.5.5 of the DDS-PSM-C++ specification.
    -   */
    +namespace dds
    +{
    +namespace core
    +{
    
    -  class Exception
    -  {
    -  protected:
    +/**
    + *
    + * DDS PIM Return Code            | DDS-PSM-CXX Exception Class   | std C++ Parent Exception
    + * -------------------            | ---------------------------   | ------------------------
    + * RETCODE_OK                     | Normal return; no exception   | N/A
    + * RETCODE_NO_DATA                | Normal return with informational state attached    | N/A
    + * RETCODE_ERROR                  | Error                         | std::logic_error
    + * RETCODE_BAD_PARAMETER          | InvalidArgumentError          | std::invalid_argument
    + * RETCODE_TIMEOUT                | TimeoutError                  | std::runtime_error
    + * RETCODE_UNSUPPORTED            | UnsupportedError              | std::logic_error
    + * RETCODE_ALREADY_DELETED        | AlreadyClosedError            | std::logic_error
    + * RETCODE_ILLEGAL_OPERATION      | IllegalOperationError         | std::logic_error
    + * RETCODE_NOT_ENABLED            | NotEnabledError               | std::logic_error
    + * RETCODE_PRECONDITION_NOT_MET   | PreconditionNotMetError       | std::logic_error
    + * RETCODE_IMMUTABLE_POLICY       | ImmutablePolicyError          | std::logic_error
    + * RETCODE_INCONSISTENT_POLICY    | InconsistentPolicyError       | std::logic_error
    + * RETCODE_OUT_OF_RESOURCES       | OutOfResourcesError           | std::runtime_error
    + *
    + * The DDS-PSM-Cxx maps error codes to C++ exceptions defined in the dds::core namespace and
    + * inheriting from a base Exception class and the appropriate standard C++ exception.
    + * Table 7.3 lists the mapping between error codes as defined in the DDS PIM and C++ exceptions
    + * as used in this specification. Exceptions have value semantics; this means that they must
    + * always have deep copy semantics.
    + * The full list of exceptions is included in the file dds/core/Exceptions.hpp.
    + *
    + */
    +
    +class OMG_DDS_API Exception
    +{
    +protected:
         Exception();
    -  public:
    -    virtual ~Exception() throw ();
    +public:
    +    virtual ~Exception() throw();
    
    -  public:
    -    virtual const char* what() const throw () = 0;
    -  };
    +public:
    +    virtual const char* what() const throw() = 0;
    +};
    
    -  class Error : public Exception, public std::exception
    -  {
    -  public:
    -    Error();
    +/**
    + *  Generic, unspecified error.
    + */
    +class OMG_DDS_API Error : public Exception, public std::logic_error
    +{
    +public:
    +    explicit Error(const std::string& msg);
         Error(const Error& src);
    -  public:
    -    virtual ~Error() throw ();
    -
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +    virtual ~Error() throw();
    
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class AlreadyClosedError : public Exception, public std::logic_error
    -  {
    -  public:
    +/**
    + * The object target of this operation has already been closed
    + */
    +class OMG_DDS_API AlreadyClosedError : public Exception, public std::logic_error
    +{
    +public:
         explicit AlreadyClosedError(const std::string& msg);
         AlreadyClosedError(const AlreadyClosedError& src);
    -    virtual ~AlreadyClosedError() throw ();
    -
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +    virtual ~AlreadyClosedError() throw();
    
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class IllegalOperationError : public Exception, public std::logic_error
    -  {
    -  public:
    +/**
    + * An operation was invoked on an inappropriate object or at an inappropriate time
    + * (as determined by policies set by the specification or the Service implementation).
    + * There is no precondition that could be changed to make the operation succeed.
    + */
    +class OMG_DDS_API IllegalOperationError : public Exception, public std::logic_error
    +{
    +public:
         explicit IllegalOperationError(const std::string& msg);
         IllegalOperationError(const IllegalOperationError& src);
    -    virtual ~IllegalOperationError() throw ();
    -
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +    virtual ~IllegalOperationError() throw();
    
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class ImmutablePolicyError : public Exception, public std::logic_error
    -  {
    -  public:
    +/**
    + * Application attempted to modify an immutable QosPolicy
    + */
    +class OMG_DDS_API ImmutablePolicyError : public Exception, public std::logic_error
    +{
    +public:
         explicit ImmutablePolicyError(const std::string& msg);
         ImmutablePolicyError(const ImmutablePolicyError& src);
    -    virtual ~ImmutablePolicyError() throw ();
    -
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +    virtual ~ImmutablePolicyError() throw();
    
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class InconsistentPolicyError : public Exception, public std::logic_error
    -  {
    -  public:
    +/**
    + * Application specified a set of policies that are not
    + * consistent with each other
    + */
    +class OMG_DDS_API InconsistentPolicyError : public Exception, public std::logic_error
    +{
    +public:
         explicit InconsistentPolicyError(const std::string& msg);
         InconsistentPolicyError(const InconsistentPolicyError& src);
    -    virtual ~InconsistentPolicyError() throw ();
    -
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +    virtual ~InconsistentPolicyError() throw();
    
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class InvalidArgumentError : public Exception, public std::invalid_argument
    -  {
    -  public:
    +/**
    + * Application is passing an invalid argument
    + */
    +class OMG_DDS_API InvalidArgumentError : public Exception, public std::invalid_argument
    +{
    +public:
         explicit InvalidArgumentError(const std::string& msg);
         InvalidArgumentError(const InvalidArgumentError& src);
    -    virtual ~InvalidArgumentError() throw ();
    -
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +    virtual ~InvalidArgumentError() throw();
    
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class NotEnabledError : public Exception, public std::logic_error
    -  {
    -  public:
    +/**
    + * Operation invoked on an Entity that is not yet enabled
    + */
    +class OMG_DDS_API NotEnabledError : public Exception, public std::logic_error
    +{
    +public:
         explicit NotEnabledError(const std::string& msg);
         NotEnabledError(const NotEnabledError& src);
    -    virtual ~NotEnabledError() throw ();
    -
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +    virtual ~NotEnabledError() throw();
    
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class OutOfResourcesError : public Exception, public std::runtime_error
    -  {
    -  public:
    +/**
    + * Service ran out of the resources needed to complete the
    + * operation
    + */
    +class OMG_DDS_API OutOfResourcesError : public Exception, public std::runtime_error
    +{
    +public:
         explicit OutOfResourcesError(const std::string& msg);
         OutOfResourcesError(const OutOfResourcesError& src);
    -    virtual ~OutOfResourcesError() throw ();
    -
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    -
    +    virtual ~OutOfResourcesError() throw();
    
    -  class PreconditionNotMetError : public Exception, public std::logic_error
    -  {
    -  public:
    -    explicit PreconditionNotMetError(const std::string& msg) : std::logic_error(msg) { }
    -    PreconditionNotMetError(const PreconditionNotMetError& src) : std::logic_error(src.what()) {}
    -    virtual ~PreconditionNotMetError() throw () { }
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  public:
    -    virtual const char* what() const throw () {
    -      return this->std::logic_error::what();
    -    }
    
    -  };
    -
    -
    -  class TimeoutError : public Exception, public std::runtime_error
    -  {
    -  public:
    +/**
    + * A pre-condition for the operation was not met
    + */
    +class OMG_DDS_API PreconditionNotMetError : public Exception, public std::logic_error
    +{
    +public:
    +    explicit PreconditionNotMetError(const std::string& msg);
    +    PreconditionNotMetError(const PreconditionNotMetError& src);
    +    virtual ~PreconditionNotMetError() throw();
    +
    +public:
    +    virtual const char* what() const throw();
    +};
    +
    +/**
    + * The operation timed out
    + */
    +class OMG_DDS_API TimeoutError : public Exception, public std::runtime_error
    +{
    +public:
         explicit TimeoutError(const std::string& msg);
         TimeoutError(const TimeoutError& src);
    -    virtual ~TimeoutError() throw ();
    +    virtual ~TimeoutError() throw();
    
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -
    -  class UnsupportedError : public Exception, public std::logic_error
    -  {
    -  public:
    +/**
    + * Unsupported operation. Can only be returned by operations that are optional.
    + */
    +class OMG_DDS_API UnsupportedError : public Exception, public std::logic_error
    +{
    +public:
         explicit UnsupportedError(const std::string& msg);
         UnsupportedError(const UnsupportedError& src);
    -    virtual ~UnsupportedError() throw ();
    +    virtual ~UnsupportedError() throw();
    
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class InvalidDowncastError : public Exception, public std::runtime_error
    -  {
    -  public:
    +/**
    + * Application has attempted to cast incompatible types
    + */
    +class OMG_DDS_API InvalidDowncastError : public Exception, public std::runtime_error
    +{
    +public:
         explicit InvalidDowncastError(const std::string& msg);
         InvalidDowncastError(const InvalidDowncastError& src);
         virtual ~InvalidDowncastError() throw();
    
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -  class NullReferenceError : public Exception, public std::runtime_error
    -  {
    -  public:
    +/**
    + * Application returned a null reference
    + */
    +class OMG_DDS_API NullReferenceError : public Exception, public std::runtime_error
    +{
    +public:
         explicit NullReferenceError(const std::string& msg);
         NullReferenceError(const NullReferenceError& src);
         virtual ~NullReferenceError() throw();
    
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +public:
    +    virtual const char* what() const throw();
    +};
    
    -
    -  class InvalidDataError : public Exception, public std::logic_error
    -  {
    -  public:
    +/**
    + * Application returned invalid data
    + */
    +class OMG_DDS_API InvalidDataError : public Exception, public std::logic_error
    +{
    +public:
         explicit InvalidDataError(const std::string& msg);
         InvalidDataError(const InvalidDataError& src);
    -    virtual ~InvalidDataError() throw ();
    +    virtual ~InvalidDataError() throw();
    +
    +public:
    +    virtual const char* what() const throw();
    +};
    +
    +}
    +}
    
    -  public:
    -    virtual const char* what() const throw ();
    -  };
    +#if defined _MSC_VER
    +#   pragma warning (pop)
    +#endif
    
    -}}
    
     #endif /* OMG_DDS_CORE_EXCEPTION_HPP_ */
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API corrections required to src/hpp/dds/core/TQosProvider.hpp

  • Legacy Issue Number: 18616
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    Incorrect comments.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/TQosProvider.hpp
    b/src/hpp/dds/core/TQosProvider.hpp
    index ef2a3e3..9cdda28 100644
    --- a/src/hpp/dds/core/TQosProvider.hpp
    +++ b/src/hpp/dds/core/TQosProvider.hpp
    @@ -47,8 +47,8 @@ public:
        * For instance, the following code:
        * <pre><code>
              QosProvider xml_file_provider("file:///somewhere/on/disk/qos-config.xml");
    -         QosProvider json_file_provider(""file:///somewhere/on/disk/json-config.json");
    -         QosProvider json_http_provider(""http:///somewhere.org/here/json-config.json");
    +         QosProvider json_file_provider("file:///somewhere/on/disk/json-config.json");
    +         QosProvider json_http_provider("http:///somewhere.org/here/json-config.json");
           </code></pre>
    
    
        * The URI determines the how the Qos configuration is fetched and the
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API corrections required to src/hpp/dds/core/TInstanceHandle.hpp

  • Legacy Issue Number: 18615
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    Incorrect comment.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/TInstanceHandle.hpp
    b/src/hpp/dds/core/TInstanceHandle.hpp
    index c4c4014..b93975d 100644
    --- a/src/hpp/dds/core/TInstanceHandle.hpp
    +++ b/src/hpp/dds/core/TInstanceHandle.hpp
    @@ -44,7 +44,7 @@ public:
       TInstanceHandle(const TInstanceHandle& other);
    
    
       /**
    -   * Distructor
    +   * Destructor
        */
       ~TInstanceHandle();
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Documentation comments corrections required to src/hpp/dds/domain/discovery.hpp & find.hpp

  • Legacy Issue Number: 18635
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Comment correction required.

    Suggested resolution:

    diff --git a/src/hpp/dds/domain/discovery.hpp b/src/hpp/dds/domain/discovery.hpp
    index e43d28d..97943ec 100644
    --- a/src/hpp/dds/domain/discovery.hpp
    +++ b/src/hpp/dds/domain/discovery.hpp
    @@ -26,7 +26,7 @@
     namespace dds { namespace domain {
    
    
       /**
    -   * This function allows to express the will to ignore the entity
    +   * This function allows one to express the will to ignore the entity
        * represented by the given <code>InstanceHandle</code> for the specific
        * <code>DomainParticipant</code>.
        *
    @@ -40,7 +40,7 @@ namespace dds { namespace domain {
       void ignore(const dds::domain::DomainParticipant& dp, const dds::core::InstanceHandle& handle);
    
    
       /**
    -   * This function allows to express the will to ignore a series of entities
    +   * This function allows one to express the will to ignore a series of entities
        * whose instance handles are made available via the provided iterators.
        *
        * @param dp      the <code>DomainParticipant</code> for which the remote
    diff --git a/src/hpp/dds/domain/find.hpp b/src/hpp/dds/domain/find.hpp
    index 112d67c..2043f04 100644
    --- a/src/hpp/dds/domain/find.hpp
    +++ b/src/hpp/dds/domain/find.hpp
    @@ -27,7 +27,7 @@ namespace dds { namespace domain {
       /**
        * This operation retrieves a previously created <code>DomainParticipant</code>
        * belonging to specified domain_id. If no such DomainParticipant
    -   * exists, the operation will return a <it>nil</it> value.
    +   * exists, the operation will return a @a nil value.
        *
        * @param id the domain id
        */
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/dds.hpp

  • Legacy Issue Number: 18632
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    File has left over mistaken vendor include.

    Could probably do with a nice comment, whilst we're here.

    Suggested resolution:

    diff --git a/src/hpp/dds/dds.hpp b/src/hpp/dds/dds.hpp
    index 9de7249..b6bf026 100644
    --- a/src/hpp/dds/dds.hpp
    +++ b/src/hpp/dds/dds.hpp
    @@ -1,6 +1,28 @@
    +/* Copyright 2010, Object Management Group, Inc.
    + * Copyright 2010, PrismTech, Corp.
    + * Copyright 2010, Real-Time Innovations, Inc.
    + * All rights reserved.
    + *
    + * Licensed under the Apache License, Version 2.0 (the "License");
    + * you may not use this file except in compliance with the License.
    + * You may obtain a copy of the License at
    + *
    + *     http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
     #ifndef __OMG_DDS_DDS_HPP__
     #define __OMG_DDS_DDS_HPP__
    
    
    +/**
    + * @file
    + * This utility header includes the headers of all the DDS DCPS modules.
    + */
    +
     #include <dds/core/ddscore.hpp>
     #include <dds/domain/ddsdomain.hpp>
     #include <dds/topic/ddstopic.hpp>
    @@ -9,7 +14,5 @@
     #include <dds/pub/ddspub.hpp>
    
    
     #include <dds/core/QosProvider.hpp>
    -#include <org/opensplice/topic/TopicTraits.hpp>
    -
    
    
     #endif /* __OMG_DDS_DDS_HPP__ */
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/status/TStatus.hpp

  • Legacy Issue Number: 18630
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Vestigial implementation code needs removing to fix compilation.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/status/TStatus.hpp b/src/hpp/dds/core/status/TStatus.hpp
    index 638e188..6d6122f 100644
    --- a/src/hpp/dds/core/status/TStatus.hpp
    +++ b/src/hpp/dds/core/status/TStatus.hpp
    @@ -138,7 +138,7 @@ namespace dds { namespace core { namespace status {
       template <typename D>
       class TPublicationMatchedStatus : public dds::core::Value<D> {
       public:
    -    TPublicationMatchedStatus() : dds::core::Value<D>();
    +    TPublicationMatchedStatus();
    
    
       public:
         int32_t total_count() const;
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/status/State.hpp

  • Legacy Issue Number: 18628
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Vestigial implementation code (and comments) need removing for consistency and to fix compilation.

    Header include missing.

    Required inline operation missing.

    Windows export macros required.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/status/State.hpp b/src/hpp/dds/core/status/State.hpp
    index 8ac4475..ab8d1cf 100644
    --- a/src/hpp/dds/core/status/State.hpp
    +++ b/src/hpp/dds/core/status/State.hpp
    @@ -21,19 +21,20 @@
    
    
     #include <bitset>
     #include <dds/core/macros.hpp>
    +#include <dds/core/types.hpp>
    
    
    
     namespace dds { namespace core { namespace status {
    
    
    
    -  class SampleRejectedState : public std::bitset<OMG_DDS_STATE_BIT_COUNT> {
    +  class OMG_DDS_API SampleRejectedState : public std::bitset<OMG_DDS_STATE_BIT_COUNT> {
       public:
         typedef std::bitset<OMG_DDS_STATE_BIT_COUNT> MaskType;
    
    
       public:
    -    SampleRejectedState() : MaskType() { }
    -    SampleRejectedState(const SampleRejectedState& src) : MaskType(static_cast<int>(src.to_ulong())) { }
    -    SampleRejectedState(const MaskType& src) : MaskType(static_cast<int>(src.to_ulong())) { }
    +    SampleRejectedState();
    +    SampleRejectedState(const SampleRejectedState& src);
    +    SampleRejectedState(const MaskType& src);
    
    
       public:
         inline static const SampleRejectedState not_rejected() {
    @@ -50,29 +51,29 @@ namespace dds { namespace core { namespace status {
         }
    
    
       private:
    -    // @TODO
    -    // -- This Ctor should be fixed as currently there is this
    -    // -- cast only to avoid an error when compiling with the  MS vC++ compiler
    -    SampleRejectedState(uint32_t s)
    -    : MaskType((uint64_t)s)
    -    { }
    -
    +    SampleRejectedState(uint32_t s);
       };
    
    
    
       // StatusMask create_status_mask(uint64_t);
    
    
    -  class StatusMask : public std::bitset<OMG_DDS_STATUS_COUNT> {
    +  class OMG_DDS_API StatusMask : public std::bitset<OMG_DDS_STATUS_COUNT> {
       public:
         typedef std::bitset<OMG_DDS_STATUS_COUNT> MaskType;
    
    
       public:
    -    StatusMask() { }
    -    explicit StatusMask(uint64_t mask) : std::bitset<OMG_DDS_STATUS_COUNT>(mask) { }
    -    StatusMask(const StatusMask& other) : MaskType(static_cast<int>(other.to_ulong())) { }
    -    ~StatusMask() { }
    +    StatusMask();
    +    explicit StatusMask(uint32_t mask);
    +    StatusMask(const StatusMask& other);
    +    ~StatusMask();
    
    
       public:
    +    inline StatusMask& operator << (const dds::core::status::StatusMask& mask)
    +    {
    +        *this |= mask;
    +        return *this;
    +    }
    +
         inline static const StatusMask all() {
           return StatusMask(0x7fe7u);
         }
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/policy/TCorePolicy.hpp

  • Legacy Issue Number: 18627
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Compilation fixes and corrections to API documentation comments required.

    Incorrect default reliability duration (infinite). Should be 100 milliseconds per table in section "7.1.3 Supported QoS" (formal 07-01-01)

    Suggested resolution:

    diff --git a/src/hpp/dds/core/policy/TCorePolicy.hpp b/src/hpp/dds/core/policy/TCorePolicy.hpp
    index 382e521..1313b32 100644
    --- a/src/hpp/dds/core/policy/TCorePolicy.hpp
    +++ b/src/hpp/dds/core/policy/TCorePolicy.hpp
    @@ -47,7 +47,7 @@ namespace dds { namespace core { namespace policy {
         /**
          * Create a <code>UserData</code> instance with an empty user data.
          */
    -    TUserData() : dds::core::Value<D>();
    +    TUserData();
    
    
         /**
          * Create a <code>UserData</code> instance.
    @@ -56,7 +56,7 @@ namespace dds { namespace core { namespace policy {
          */
         explicit TUserData(const dds::core::ByteSeq& seq);
    
    
    -    //@TODO Implement
    +    /** @todo Implement this */
         TUserData(const uint8_t* value_begin, const uint8_t* value_end);
    
    
         TUserData(const TUserData& other);
    @@ -102,16 +102,16 @@ namespace dds { namespace core { namespace policy {
       class TGroupData : public dds::core::Value<D> {
       public:
         /**
    -     * Create a <code>GroupData<code> instance.
    +     * Create a <code>GroupData</code> instance.
          */
    -    TGroupData() : dds::core::Value<D>();
    +    TGroupData();
    
    
         /**
    -     * Create a <code>GroupData<code> instance.
    +     * Create a <code>GroupData</code> instance.
          *
          * @param seq the group data value
          */
    -    explicit TGroupData(const dds::core::ByteSeq& seq) : dds::core::Value<D>(seq);
    +    explicit TGroupData(const dds::core::ByteSeq& seq);
    
    
         TGroupData(const TGroupData& other);
    
    
    @@ -160,7 +160,7 @@ namespace dds { namespace core { namespace policy {
       template <typename D>
       class TTopicData : public dds::core::Value<D> {
       public:
    -    TTopicData() : dds::core::Value<D>();
    +    TTopicData();
    
    
         explicit TTopicData(const dds::core::ByteSeq& seq);
    
    
    @@ -219,7 +219,7 @@ namespace dds { namespace core { namespace policy {
       template <typename D>
       class TEntityFactory : public dds::core::Value<D> {
       public:
    -    TEntityFactory() :dds::core::Value<D>(true);
    +    TEntityFactory();
         explicit TEntityFactory(bool the_auto_enable);
         TEntityFactory(const TEntityFactory& other);
    
    
    @@ -255,7 +255,7 @@ namespace dds { namespace core { namespace policy {
       public:
         explicit TTransportPriority(int32_t prio);
    
    
    -    TTransportPriority() : dds::core::Value<D>(0);
    +    TTransportPriority();
    
    
         TTransportPriority(const TTransportPriority& other);
    
    
    @@ -554,7 +554,7 @@ namespace dds { namespace core { namespace policy {
         const dds::core::Duration max_blocking_time() const;
    
    
       public:
    -    static TReliability Reliable(const dds::core::Duration& d = dds::core::Duration::infinite());
    +    static TReliability Reliable(const dds::core::Duration& d = dds::core::Duration(0, 100000000));
         static TReliability BestEffort();
       };
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/sub/AnyDataReaderListener.hpp

  • Legacy Issue Number: 18643
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Vestigial implementation code needs removing to be consistent with other No-op listener declarations.

    Missing headers required to fix compilation.

    Suggested resolution:

    diff --git a/src/hpp/dds/sub/AnyDataReaderListener.hpp b/src/hpp/dds/sub/AnyDataReaderListener.hpp
    index 4646bfd..aabd71a 100644
    --- a/src/hpp/dds/sub/AnyDataReaderListener.hpp
    +++ b/src/hpp/dds/sub/AnyDataReaderListener.hpp
    @@ -19,6 +19,8 @@
      * limitations under the License.
      */
    
    
    +#include <dds/core/refmacros.hpp>
    +#include <dds/core/status/Status.hpp>
    
    
     namespace dds { namespace sub {
    
    
    @@ -59,37 +61,36 @@ namespace dds { namespace sub {
             const dds::core::status::SampleLostStatus& status) = 0;
       };
    
    
    -
       class NoOpAnyDataReaderListener : public virtual AnyDataReaderListener {
       public:
    -    virtual ~NoOpAnyDataReaderListener() { }
    +    virtual ~NoOpAnyDataReaderListener();
    
    
       public:
         virtual void on_requested_deadline_missed(
             AnyDataReader& the_reader,
    -        const dds::core::status::RequestedDeadlineMissedStatus& status) { }
    +        const dds::core::status::RequestedDeadlineMissedStatus& status);
    
    
         virtual void on_requested_incompatible_qos(
             AnyDataReader& the_reader,
    -        const dds::core::status::RequestedIncompatibleQosStatus& status) { }
    +        const dds::core::status::RequestedIncompatibleQosStatus& status);
    
    
         virtual void on_sample_rejected(
             AnyDataReader& the_reader,
    -        const dds::core::status::SampleRejectedStatus& status) { }
    +        const dds::core::status::SampleRejectedStatus& status);
    
    
         virtual void on_liveliness_changed(
             AnyDataReader& the_reader,
    -        const dds::core::status::LivelinessChangedStatus& status) { }
    +        const dds::core::status::LivelinessChangedStatus& status);
    
    
    -    virtual void on_data_available(AnyDataReader& the_reader) { }
    +    virtual void on_data_available(AnyDataReader& the_reader);
    
    
         virtual void on_subscription_matched(
             AnyDataReader& the_reader,
    -        const dds::core::status::SubscriptionMatchedStatus& status) { }
    +        const dds::core::status::SubscriptionMatchedStatus& status);
    
    
         virtual void on_sample_lost(
             AnyDataReader& the_reader,
    -        const dds::core::status::SampleLostStatus& status) { }
    +        const dds::core::status::SampleLostStatus& status);
       };
     } }
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Missing file dds/pub/detail/find.hpp referenced in src/hpp/dds/pub/find.hpp

  • Legacy Issue Number: 18641
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Missing include - fails to compile.

    Suggested resolution:

    Add vendor example file and remove below comment.

    diff --git a/src/hpp/dds/pub/find.hpp b/src/hpp/dds/pub/find.hpp
    index 6c10f59..6a50fad 100644
    --- a/src/hpp/dds/pub/find.hpp
    +++ b/src/hpp/dds/pub/find.hpp
    @@ -21,9 +21,9 @@
    
    
     #include <string>
    
    
    +/** @todo This does not compile - no such example file (in spec). Need to add one */
     #include <dds/pub/detail/find.hpp>
    
    
    -
     namespace dds { namespace pub {
    
    
       /**
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Documentation comments corrections to src/hpp/dds/pub/TPublisher.hpp

  • Legacy Issue Number: 18638
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Corrections to documentation comments required.

    Suggested resolution:

    diff --git a/src/hpp/dds/pub/TPublisher.hpp b/src/hpp/dds/pub/TPublisher.hpp
    index 3534a29..d872370 100644
    --- a/src/hpp/dds/pub/TPublisher.hpp
    +++ b/src/hpp/dds/pub/TPublisher.hpp
    @@ -97,16 +97,16 @@ public:
        *
        * @param pqos the new publisher QoS
        */
    -  TPublisher& operator <<(const dds::pub::qos::PublisherQos& the_qos);
    +  TPublisher& operator <<(const dds::pub::qos::PublisherQos& pqos);
    
    
       /**
        * Get the publisher qos policies.
        */
    -  TPublisher& operator >> (dds::pub::qos::PublisherQos& the_qos);
    +  TPublisher& operator >> (dds::pub::qos::PublisherQos& qos);
    
    
       /**
    -   * This operation sets a default value of the <code>DataWriterQos<\code>
    -   * which will be used for newly created <core>DataWriter<code>entities
    +   * This operation sets a default value of the <code>DataWriterQos</code>
    +   * which will be used for newly created <code>DataWriter</code>entities
        * for which no <code>DataWriterQos</code> is provided in the constructor.
        * This operation will check that the resulting policies are self consistent;
        * if they are not, the operation will have no effect and raise an
    @@ -115,7 +115,7 @@ public:
       TPublisher& default_writer_qos(const dds::pub::qos::DataWriterQos& dwqos);
    
    
       /**
    -   * This operation retrieves the default value of the <code>DataWriterQos<\code>,
    +   * This operation retrieves the default value of the <code>DataWriterQos</code>,
        * that is, the QoS policies which will be used for newly created DataWriter
        * that don't provide a QoS parameter in the constructor.
        */
    @@ -155,7 +155,7 @@ public:
       //==========================================================================
    
    
       /**
    -   * Return the <code>DomainParticipant<code> that owns this Publisher.
    +   * Return the <code>DomainParticipant</code> that owns this Publisher.
        */
       const dds::domain::DomainParticipant& participant() const;
    
    @@ -143,19 +159,21 @@ public:
         * This operation blocks the calling thread until either all data written
         * by the reliable DataWriter entities is acknowledged by all matched
         * reliable DataReader entities, or else the duration specified by the
    -     * max_wait parameter elapses, whichever happens first.
    +     * timeout parameter elapses, whichever happens first.
         * A normal return indicates that all the samples written have been
    -     * acknowledged by all reliable matched data readers; A TimeoutError
    -     * indicates that max_wait elapsed before all the data was acknowledged.
    +     * acknowledged by all reliable matched data readers. A TimeoutError
    +     * indicates that timeout elapsed before all the data was acknowledged.
    +     *
    +     * @param timeout the time out duration
         */
        void wait_for_acknowledgments(const dds::core::Duration& timeout);
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/sub/LoanedSamples.hpp

  • Legacy Issue Number: 18646
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Compilation fixes required to code.

    Suggested resolution:

    diff --git a/src/hpp/dds/sub/LoanedSamples.hpp b/src/hpp/dds/sub/LoanedSamples.hpp
    index 633f065..1456e57 100644
    — a/src/hpp/dds/sub/LoanedSamples.hpp
    +++ b/src/hpp/dds/sub/LoanedSamples.hpp
    @@ -9,7 +9,7 @@
    namespace dds {
    namespace sub {
    template <typename T,

    • template <typename Q> class DELEGATE = detail::LoanedSamples>
      + template <typename Q> class DELEGATE = dds::sub::detail::LoanedSamples>
      class LoanedSamples;

    // Used by C++11 compilers to allow for using LoanedSamples
    @@ -67,8 +67,8 @@ private:
    namespace dds {
    namespace sub

    { template <typename T, template <typename Q> class D> - LoanedSamples<T, D<T> > - move(LoanedSamples<T, D<T> >& a); + LoanedSamples<T, D > + move(LoanedSamples<T, D >& a); }

    }
    #endif /* OMG_DDS_SUB_TLOANED_SAMPLES_HPP_ */

  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

DataReader.hpp, ContentFilteredTopic.hpp, Topic.hpp, TopicDescription.hpp o not compile with MS Visual Studio

  • Legacy Issue Number: 18644
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    In src/hpp/dds/sub/DataReader.hpp; src/hpp/dds/topic/ContentFilteredTopic.hpp; src/hpp/dds/topic/Topic.hpp; src/hpp/dds/topic/TopicDescription.hpp

    ... the template header file includes need to be moved as MSVC appears to ignore any attempt to 're-declare' a template class with a 'new' default argument and only considers defaults on the first time of asking.

    Without the move the compiler emits an error in each case like something like e.g.:

    dds/topic/detail/AnyTopicDescription.hpp(48): error C2976: 'dds::topic::TopicDescription' : too few template arguments
    dds/topic/TTopicDescription.hpp(41) : see declaration of 'dds::topic::TopicDescription'

    Suggested resolutions:

    diff --git a/src/hpp/dds/sub/DataReader.hpp b/src/hpp/dds/sub/DataReader.hpp
    index b38ddaa..b476779 100644
    --- a/src/hpp/dds/sub/DataReader.hpp
    +++ b/src/hpp/dds/sub/DataReader.hpp
    @@ -1,10 +1,8 @@
     #ifndef OMG_DDS_SUB_DATA_READER_HPP_
     #define OMG_DDS_SUB_DATA_READER_HPP_
    
    
    -#include <dds/sub/TDataReader.hpp>
     #include <dds/sub/detail/DataReader.hpp>
    
    
    -
     namespace dds {
       namespace sub {
         template <typename T,
    @@ -15,6 +13,7 @@ namespace dds {
       }
     }
    
    
    +#include <dds/sub/TDataReader.hpp>
    
    
     // = Manipulators
     namespace dds {
    
    
    diff --git a/src/hpp/dds/topic/ContentFilteredTopic.hpp b/src/hpp/dds/topic/ContentFilteredTopic.hpp
    index 057a2f6..cbc5cfc 100644
    --- a/src/hpp/dds/topic/ContentFilteredTopic.hpp
    +++ b/src/hpp/dds/topic/ContentFilteredTopic.hpp
    @@ -20,11 +20,12 @@
      */
    
    
     #include <dds/topic/detail/ContentFilteredTopic.hpp>
    -#include <dds/topic/TContentFilteredTopic.hpp>
    
    
     namespace dds { namespace topic {
       template <typename T, template <typename Q> class DELEGATE = dds::topic::detail::ContentFilteredTopic>
       class ContentFilteredTopic;
     } }
    
    
    +#include <dds/topic/TContentFilteredTopic.hpp>
    +
     #endif /* OMG_DDS_TOPIC_CONTENT_FILTERED_TOPIC_HPP_ */
    
    
    diff --git a/src/hpp/dds/topic/Topic.hpp b/src/hpp/dds/topic/Topic.hpp
    index cd69316..5545f76 100644
    --- a/src/hpp/dds/topic/Topic.hpp
    +++ b/src/hpp/dds/topic/Topic.hpp
    @@ -2,11 +2,12 @@
     #define OMG_DDS_TOPIC_TOPIC_HPP_
    
    
     #include <dds/topic/detail/Topic.hpp>
    -#include <dds/topic/TTopic.hpp>
    
    
     namespace dds { namespace topic {
       template <typename T, template <typename Q> class DELEGATE = dds::topic::detail::Topic>
       class Topic;
     } }
    
    
    +#include <dds/topic/TTopic.hpp>
    +
     #endif /* OMG_DDS_TOPIC_TOPIC_HPP_ */
    
    
    diff --git a/src/hpp/dds/topic/TopicDescription.hpp b/src/hpp/dds/topic/TopicDescription.hpp
    index 47e2dd1..6e908b0 100644
    --- a/src/hpp/dds/topic/TopicDescription.hpp
    +++ b/src/hpp/dds/topic/TopicDescription.hpp
    @@ -20,7 +20,6 @@
      */
    
    
     #include <dds/topic/detail/TopicDescription.hpp>
    -#include <dds/topic/TTopicDescription.hpp>
    
    
     namespace dds { namespace topic {
       template <typename T,
    @@ -28,5 +27,6 @@ namespace dds { namespace topic {
       class TopicDescription;
     } }
    
    
    +#include <dds/topic/TTopicDescription.hpp>
    
    
     #endif /* OMG_DDS_TOPIC_TOPIC_DESCRIPTION_HPP_ */
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/cond/detail/GuardCondition.hpp

  • Legacy Issue Number: 18620
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    Code incorrect.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/cond/detail/GuardCondition.hpp b/src/hpp/dds/core/cond/detail/GuardCondition.hpp
    index a9143fa..fdc8b98 100644
    — a/src/hpp/dds/core/cond/detail/GuardCondition.hpp
    +++ b/src/hpp/dds/core/cond/detail/GuardCondition.hpp
    @@ -20,13 +20,13 @@
    */

    #include <dds/core/cond/TGuardCondition.hpp>
    -#include <foo/bar/core/cond/GuardConditionImpl.hpp>
    +#include <foo/bar/core/cond/GuardCondition.hpp>

    namespace dds {
    namespace core {
    namespace cond {
    namespace detail

    { - typedef dds::core::cond::TGuardCondition<foo::bar::core::cond::GuardConditionl> GuardCondition; + typedef dds::core::cond::TGuardCondition<foo::bar::core::cond::GuardCondition> GuardCondition; }

    }
    }

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Inconsistent use of Type/type - fix compilation

  • Legacy Issue Number: 18614
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    Code in src/hpp/dds/core/SafeEnumeration.hpp and
    src/hpp/dds/core/policy/PolicyKind.hpp does not compile.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/SafeEnumeration.hpp
    b/src/hpp/dds/core/SafeEnumeration.hpp
    index 3f7ca67..0d443c2 100644
    --- a/src/hpp/dds/core/SafeEnumeration.hpp
    +++ b/src/hpp/dds/core/SafeEnumeration.hpp
    @@ -1,29 +1,76 @@
    +/* Copyright 2010, Object Management Group, Inc.
    +* Copyright 2010, PrismTech, Corp.
    +* Copyright 2010, Real-Time Innovations, Inc.
    +* All rights reserved.
    +*
    +* Licensed under the Apache License, Version 2.0 (the "License");
    +* you may not use this file except in compliance with the License.
    +* You may obtain a copy of the License at
    +*
    +*     http://www.apache.org/licenses/LICENSE-2.0
    +*
    +* Unless required by applicable law or agreed to in writing, software
    +* distributed under the License is distributed on an "AS IS" BASIS,
    +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +* See the License for the specific language governing permissions and
    +* limitations under the License.
    +*/
    
     #ifndef OMG_DDS_CORE_SAFEENUMERATION_HPP_
     #define OMG_DDS_CORE_SAFEENUMERATION_HPP_
    
    namespace dds {
    namespace core {
    +/**
    + * safe_enum provides a wrapper for enumerated types in a typesafe
    + * manner.
    + * safe_enums allow specification of the underlying type,
    + * do not implictly convert to integers, and resolve scoping issues.
    + */
    -    template<typename def, typename inner = typename def::type>
    +    template<typename def, typename inner = typename def::Type>
         class safe_enum : public def
         {
    -      typedef typename def::type type;
    +      typedef typename def::Type type;
           inner val;
    
         public:
    diff --git a/src/hpp/dds/core/policy/PolicyKind.hpp
    b/src/hpp/dds/core/policy/PolicyKind.hpp
    index 6928742..9537d78 100644
    --- a/src/hpp/dds/core/policy/PolicyKind.hpp
    +++ b/src/hpp/dds/core/policy/PolicyKind.hpp
    @@ -25,7 +25,7 @@
     namespace dds { namespace core { namespace policy {
    
    
       struct OwnershipKind_def {
    -    enum type {
    +    enum Type {
           SHARED
    
    
     #ifdef  OMG_DDS_OWNERSHIP_SUPPORT
    @@ -37,7 +37,7 @@ namespace dds { namespace core { namespace policy {
       typedef dds::core::safe_enum<OwnershipKind_def> OwnershipKind;
    
    
       struct DurabilityKind_def {
    -    enum type {
    +    enum Type {
           VOLATILE,
           TRANSIENT_LOCAL
    
    
    @@ -46,8 +46,7 @@ namespace dds { namespace core { namespace policy {
           TRANSIENT,
           PERSISTENT
     #endif  // #ifdef  OMG_DDS_PERSISTENCE_SUPPORT
    -    };
    -  };
    +    }; };
       typedef dds::core::safe_enum<DurabilityKind_def> DurabilityKind;
    
    
       struct PresentationAccessScopeKind_def  {
    @@ -60,11 +59,11 @@ namespace dds { namespace core { namespace policy {
           GROUP
     #endif  // OMG_DDS_OBJECT_MODEL_SUPPORT
         }; };
    -
    +  typedef dds::core::safe_enum<PresentationAccessScopeKind_def>
    PresentationAccessScopeKind;
    
    
    
       struct ReliabilityKind_def {
    -    enum type {
    +    enum Type {
           BEST_EFFORT,
           RELIABLE
         };
    @@ -73,7 +72,7 @@ namespace dds { namespace core { namespace policy {
    
    
    
       struct DestinationOrderKind_def {
    -    enum type {
    +    enum Type {
           BY_RECEPTION_TIMESTAMP,
           BY_SOURCE_TIMESTAMP
         }; };
    @@ -81,7 +80,7 @@ namespace dds { namespace core { namespace policy {
       typedef dds::core::safe_enum<DestinationOrderKind_def>
    DestinationOrderKind;
    
    
       struct HistoryKind_def {
    -    enum type {
    +    enum Type {
           KEEP_LAST,
           KEEP_ALL
         };};
    @@ -89,7 +88,7 @@ namespace dds { namespace core { namespace policy {
       typedef dds::core::safe_enum<HistoryKind_def> HistoryKind;
    
    
       struct LivelinessKind_def {
    -    enum type {
    +    enum Type {
           AUTOMATIC,
           MANUAL_BY_PARTICIPANT,
           MANUAL_BY_TOPIC
    @@ -97,7 +96,7 @@ namespace dds { namespace core { namespace policy {
       typedef dds::core::safe_enum<LivelinessKind_def> LivelinessKind;
    
    
       struct TypeConsistencyEnforcementKind_def {
    -    enum type {
    +    enum Type {
           EXACT_TYPE_TYPE_CONSISTENCY,
           EXACT_NAME_TYPE_CONSISTENCY,
           DECLARED_TYPE_CONSISTENCY,
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/Optional.hpp

  • Legacy Issue Number: 18613
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    Escape '@' annotation in comment

    Suggested resolution:

    diff --git a/src/hpp/dds/core/Optional.hpp b/src/hpp/dds/core/Optional.hpp
    index 5e563d0..7f1a1fc 100644
    --- a/src/hpp/dds/core/Optional.hpp
    +++ b/src/hpp/dds/core/Optional.hpp
    @@ -24,7 +24,7 @@ namespace dds { namespace core {
    
    
       /**
        * The optional class is used to wrap attributes annotated with the
    -   * @optional annotation. This class provides a simple and safe way of
    +   * \@optional annotation. This class provides a simple and safe way of
        * accessing, setting and resetting the stored attribute.
        */
       template <typename T, template <typename Q> class DELEGATE>
       class optional : public dds::core::Value< DELEGATE<T> >
       {
       public:
         optional(const T& t);
    
       public:
         /**
          * Returns true only if the attribute is set.
          */
         bool is_set() const;
    
         /**
    -     * Reset the attribute
    +     * Reset the attribute.
    
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Example vendor code is incorrect

  • Legacy Issue Number: 18625
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Suggested resolution:

    diff --git a/src/hpp/dds/core/cond/detail/StatusCondition.hpp b/src/hpp/dds/core/cond/detail/StatusCondition.hpp
    index 400c6c8..06f0198 100644
    --- a/src/hpp/dds/core/cond/detail/StatusCondition.hpp
    +++ b/src/hpp/dds/core/cond/detail/StatusCondition.hpp
    @@ -27,7 +27,7 @@ namespace dds {
       namespace core {
         namespace cond {
           namespace detail {
    -        typedef dds::core::cond::StatusCondition<foo::bar::core::cond::StatusCondition> StatusCondition;
    +        typedef dds::core::cond::TStatusCondition<foo::bar::core::cond::StatusCondition> StatusCondition;
           }
         }
       }
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/cond/TWaitSet.hpp

  • Legacy Issue Number: 18619
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    Code does not compile.
    Comments incorrect.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/cond/TWaitSet.hpp b/src/hpp/dds/core/cond/TWaitSet.hpp
    index dfb05a2..a7fa3ee 100644
    --- a/src/hpp/dds/core/cond/TWaitSet.hpp
    +++ b/src/hpp/dds/core/cond/TWaitSet.hpp
    @@ -22,7 +22,9 @@
     #include <vector>
    
    
     #include <dds/core/types.hpp>
    +#include <dds/core/Duration.hpp>
     #include <dds/core/cond/Condition.hpp>
    +#include <dds/core/cond/WaitSet.hpp>
    
    
     namespace dds {
       namespace core {
    
    @@ -39,209 +44,207 @@ namespace dds {
      * the attached Condition objects has a trigger_value of TRUE or else
      * until the timeout expires.
      * A WaitSet is not necessarily associated with a single DomainParticipant
    - * and could be used to wait on Condition objects associated with different
    + * and could be used to wait for Condition objects associated with different
      * DomainParticipant objects.
    
     public:
    -  OMG_DDS_REF_TYPE(TWaitSet, dds::core::Reference, DELEGATE)
    + OMG_DDS_REF_TYPE_PUBLIC(TWaitSet, dds::core::Reference, DELEGATE)
    
     public:
    -  /**
    -   * Creates a new waitset.
    -   */
    -  TWaitSet();
    -
       ~TWaitSet();
    
    
     public:
     public:
      /**
       * This operation allows an application thread to wait for the occurrence
    -   * of certain conditions. If none of the conditions attached to the
    +  * of certain Conditions. If none of the Conditions attached to the
       * WaitSet have a trigger_value of TRUE, the wait operation will block
       * suspending the calling thread.
         *
         * The wait operation takes a timeout argument that specifies the maximum
    -    * duration for the wait. It this duration is exceeded and none of
    +    * duration for the wait. If this duration is exceeded and none of
         * the attached Condition objects is true, wait will continue and the
         * returned ConditionSeq will be empty.
         *
         * It is not allowed for more than one application thread to be waiting
         * on the same WaitSet. If the wait operation is invoked on a WaitSet that
    -     * already has a thread blocking on it, the operation will raise
    -     * immediately an exception PreconditionNotMet.
    +     * already has a thread blocking on it, the operation will immediately 
    +     * raise a PreconditionNotMet exception.
         *
         * The result of the wait operation is the list of all the attached
    -     * conditions that have a trigger_value of TRUE (i.e., the conditions
    +     * Conditions that have a trigger_value of TRUE (i.e., the Conditions
         * that unblocked the wait).
         *
         * @param timeout the maximum amount of time for which the wait
    -     * should block while waiting for a condition to be triggered.
    +     * should block while waiting for a Condition to be triggered.
         *
    -     * @raise PreconditionNotMetException when multiple thread try to invoke
    -     *        the method concurrently.
    +     * @throws PreconditionNotMetException when multiple threads try to invoke
    +     *        the function concurrently.
         *
    -     * @return a vector containing the triggered conditions
    +     * @return a vector containing the triggered Conditions
         */
    
    @@ -95,11 +92,6 @@ public:
       /**
        * This operation allows an application thread to wait for the occurrence
    -    * of certain conditions. If none of the conditions attached to the
    +   * of certain Conditions. If none of the Conditions attached to the
        * WaitSet have a trigger_value of TRUE, the wait operation will block
        * suspending the calling thread.
        *
    -   * The wait operation takes a timeout argument that specifies the maximum
    -   * duration for the wait. It this duration is exceeded and none of
    -   * the attached Condition objects is true, wait will continue and the
    -   * returned ConditionSeq will be empty.
    -   *
        * It is not allowed for more than one application thread to be waiting
        * on the same WaitSet. If the wait operation is invoked on a WaitSet that
    -     * already has a thread blocking on it, the operation will raise
    -     * immediately an exception PreconditionNotMet.
    +     * already has a thread blocking on it, the operation will immediately 
    +     * raise a PreconditionNotMet exception.
        *
        * The result of the wait operation is the list of all the attached
    -    * conditions that have a trigger_value of TRUE (i.e., the conditions
    +    * Conditions that have a trigger_value of TRUE (i.e., the Conditions
        * that unblocked the wait).
        *
    -   * @param timeout the maximum amount of time for which the wait
    -   * should block while waiting for a condition to be triggered.
    -   *
    -   * @raise PreconditionNotMetException when multiple thread try to invoke
    +   * @throws PreconditionNotMetException when multiple threads try to invoke
        *        the method concurrently.
        *
    -    * @return a vector containing the triggered conditions
    +    * @return a vector containing the triggered Conditions
    @@ -142,7 +131,7 @@ public:
       /**
        * This operation allows an application thread to wait for the occurrence
    -    * of certain conditions. If none of the conditions attached to the
    +    * of certain Conditions. If none of the Conditions attached to the
        * WaitSet have a trigger_value of TRUE, the wait operation will block
        * suspending the calling thread.
        *
        * The wait operation takes a timeout argument that specifies the maximum
    -    * duration for the wait. It this duration is exceeded and none of
    +    * duration for the wait. If this duration is exceeded and none of
        * the attached Condition objects is true, wait will continue and the
        * returned ConditionSeq will be empty.
        *
        * It is not allowed for more than one application thread to be waiting
        * on the same WaitSet. If the wait operation is invoked on a WaitSet that
    -     * already has a thread blocking on it, the operation will raise
    -     * immediately an exception PreconditionNotMet.
    +     * already has a thread blocking on it, the operation will immediately 
    +     * raise a PreconditionNotMet exception.
        *
        * The result of the wait operation is the list of all the attached
    -    * conditions that have a trigger_value of TRUE (i.e., the conditions
    +    * Conditions that have a trigger_value of TRUE (i.e., the Conditions
        * that unblocked the wait).
    +    *
    +    * @param triggered a ConditionSeq in which to put Conditions that were
    +    * triggered during the wait.
        *
        * @param timeout the maximum amount of time for which the wait
    -    * should block while waiting for a condition to be triggered.
    +    * should block while waiting for a Condition to be triggered.
        *
    -   * @raise PreconditionNotMetException when multiple thread try to invoke
    +   * @throws PreconditionNotMetException when multiple threads try to invoke
        *        the method concurrently.
        *
    -    * @return a vector containing the triggered conditions
    +    * @return a vector containing the triggered Conditions
    @@ -173,7 +162,7 @@ public:
        * This operation allows an application thread to wait for the occurrence
    -    * of certain conditions. If none of the conditions attached to the
    +    * of certain Conditions. If none of the Conditions attached to the
        * WaitSet have a trigger_value of TRUE, the wait operation will block
        * suspending the calling thread.
        *
        * The wait operation takes a timeout argument that specifies the maximum
    -    * duration for the wait. It this duration is exceeded and none of
    +    * duration for the wait. If this duration is exceeded and none of
        * the attached Condition objects is true, wait will continue and the
        * returned ConditionSeq will be empty.
        *
        * It is not allowed for more than one application thread to be waiting
        * on the same WaitSet. If the wait operation is invoked on a WaitSet that
    -     * already has a thread blocking on it, the operation will raise
    -     * immediately an exception PreconditionNotMet.
    +     * already has a thread blocking on it, the operation will immediately 
    +     * raise a PreconditionNotMet exception.
        *
        * The result of the wait operation is the list of all the attached
    -    * conditions that have a trigger_value of TRUE (i.e., the conditions
    +    * Conditions that have a trigger_value of TRUE (i.e., the Conditions
        * that unblocked the wait).
        *
    +    * @param triggered a ConditionSeq in which to put Conditions that were
    +    * triggered during the wait.
    -    *
    -    * @param timeout the maximum amount of time for which the wait
    -    * should block while waiting for a condition to be triggered.
        *
    -   * @raise PreconditionNotMetException when multiple thread try to invoke
    +   * @throws PreconditionNotMetException when multiple threads try to invoke
        *        the method concurrently.
        *
    -    * @return a vector containing the triggered conditions
    +    * @return a vector containing the triggered Conditions
        ConditionSeq& wait(ConditionSeq& triggered);
    
    public:
        /**
    -     * Waits for at least one of the attached conditions to trigger and then
    -     * dispatches the events.
    +     * Waits for at least one of the attached Conditions to trigger and then
    +     * dispatches the functor associated with the Condition.
         */
        void dispatch();
    
        /**
    -     * Waits for at least one of the attached conditions to trigger and then
    -     * dispatches the events, or, times out and unblocks.
    +    * Waits for at least one of the attached Conditions to trigger and then
    +     * dispatches the functor associated with the Condition, or, times
    +     * out and unblocks.*
         */
        void dispatch(const dds::core::Duration& timeout);
    
    @@ -199,12 +188,12 @@ public:
       /**
        * A synonym for attach_condition.
        */
    -  WaitSet& operator +=(const dds::core::cond::Condition& cond);
    +  TWaitSet& operator +=(const dds::core::cond::Condition& cond);
    
    
       /**
        * A synonym for detach_condition.
        */
    -  WaitSet& operator -=(const dds::core::cond::Condition& cond);
    +  TWaitSet& operator -=(const dds::core::cond::Condition& cond);
    
    
       /**
        * Attaches a Condition to the WaitSet. It is possible to attach a
    @@ -216,7 +205,7 @@ public:
       /**
        * Attaches a Condition to the WaitSet. It is possible to attach a
        * Condition on a WaitSet that is currently being waited upon
        * (via the wait operation). In this case, if the Condition has a
    -    * trigger_value of TRUE, then attaching the condition will unblock
    +    * trigger_value of TRUE, then attaching the Condition will unblock
        * the WaitSet. Adding a Condition that is already attached to the WaitSet
        * has no effect.
        *
    -    * @param cond the condition to be attached to this waitset.
    +    * @param cond the Condition to be attached to this WaitSet.
    +    *
    +    * @return the WaitSet itself so that attaching Conditions
    +    * can be chained.
        */
    -  WaitSet& attach_condition(const dds::core::cond::Condition& cond);
    +  TWaitSet& attach_condition(const dds::core::cond::Condition& cond);
    
    
       /**
        * Detaches a Condition from the WaitSet. If the Condition was not
        * attached to the WaitSet, the operation will return false.
        *
    -    * @param cond the condition to detach from this WaitSet
    +    * @param cond the Condition to detach from this WaitSet
        *
    -    * @return true if the condition was found and detached, false if the
    -    *         condition was not part of the WaitSet.
    +    * @return true if the Condition was found and detached, false if the
    +    *         Condition was not part of the WaitSet.
        */
       bool detach_condition(const dds::core::cond::Condition& cond);
    
       /**
    -    * This operation retrieves the list of attached conditions.
    +   * This operation retrieves the list of attached Conditions.
        *
    -    * @return the list of attached conditions.
    +    * @return the list of attached Conditions.
        */
    -   const ConditionSeq conditions();
    +   const ConditionSeq conditions() const;
    
       /**
    -    * This operation retrieves the list of attached conditions.
    +    * This operation retrieves the list of attached Conditions.
        *
    +    * @param conds a ConditionSeq in which to put the attached
    +    * Conditions.
    +    *
    -    * @return the list of attached conditions.
    +    * @return the list of attached Conditions.
        */
       ConditionSeq& conditions(ConditionSeq& conds) const;
    };
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/cond/StatusCondition.hpp

  • Legacy Issue Number: 18618
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    Does not compile.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/cond/StatusCondition.hpp b/src/hpp/dds/core/cond/StatusCondition.hpp
    index 4e33b3d..e500e39 100644
    --- a/src/hpp/dds/core/cond/StatusCondition.hpp
    +++ b/src/hpp/dds/core/cond/StatusCondition.hpp
    @@ -22,7 +22,7 @@
     #include <dds/core/cond/TStatusCondition.hpp>
    
    
     namespace dds { namespace core { namespace cond {
    -  typedef TStatusCondition<detail::StatusCondition> StatusCondition;
    +  typedef detail::StatusCondition StatusCondition;
     } } }
    
    
     #endif /* OMG_DDS_CORE_STATUSCONDITION_HPP_ */
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Code in src/hpp/dds/core/array.hpp does not compile

  • Legacy Issue Number: 18617
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Name: Simon McQueen
    Employer: PrismTech
    Specification: DDS CXX PSM RTF
    FormalNumber: ptc/12-10-03
    Nature: Revision

    Issues:

    Does not compile

    Suggested resolution:

    diff --git a/src/hpp/dds/core/array.hpp b/src/hpp/dds/core/array.hpp
    index cd39d02..dfa910b 100644
    --- a/src/hpp/dds/core/array.hpp
    +++ b/src/hpp/dds/core/array.hpp
    @@ -219,6 +219,8 @@ namespace dds {
         template<std::size_t _Int, typename _Tp>
            class tuple_element;
    
    
    +    template <typename _Tp> class tuple_size;
    +
         template<typename _Tp, std::size_t _Nm>
            struct tuple_size<array<_Tp, _Nm> >
            { static const std::size_t value = _Nm; };
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 3 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/pub/AnyDataWriter.hpp

  • Legacy Issue Number: 18637
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Incorrect and unnecessary operator declaration should be removed.

    Suggested resolution:

    diff --git a/src/hpp/dds/pub/AnyDataWriter.hpp b/src/hpp/dds/pub/AnyDataWriter.hpp
    index b6bbde2..6d0bad5 100644
    --- a/src/hpp/dds/pub/AnyDataWriter.hpp
    +++ b/src/hpp/dds/pub/AnyDataWriter.hpp
    @@ -72,9 +72,6 @@ public:
       template <typename T> AnyDataWriter&
       operator =(const dds::pub::DataWriter<T>& rhs);
    
    
    -  template <typename T>
    -  AnyDataWriter& operator =(const AnyDataWriter& rhs);
    -
       inline AnyDataWriter& operator =(AnyDataWriter rhs);
    
    
     public:
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/domain/qos/detail/DomainParticipantQos.hpp

  • Legacy Issue Number: 18636
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Example vendor code is incorrect.

    Suggested resolution:

    diff --git a/src/hpp/dds/domain/qos/detail/DomainParticipantQos.hpp b/src/hpp/dds/domain/qos/detail/DomainParticipantQos.hpp
    index 9007702..c57454d 100644
    --- a/src/hpp/dds/domain/qos/detail/DomainParticipantQos.hpp
    +++ b/src/hpp/dds/domain/qos/detail/DomainParticipantQos.hpp
    @@ -28,7 +28,7 @@ namespace dds {
       namespace domain {
         namespace qos {
           namespace detail {
    -      typedef ::dds::core::qos::TEntityQos< foo::bar::domain::qos::DomainParticipantQos >
    +      typedef ::dds::core::TEntityQos< foo::bar::domain::qos::DomainParticipantQos >
           DomainParticipantQos;
           }
         }
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/domain/TDomainParticipant.hpp

  • Legacy Issue Number: 18634
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Vestigial implementation code needs removing to fix compilation.

    Correct comments.

    Suggested resolution:

    diff --git a/src/hpp/dds/domain/TDomainParticipant.hpp
    b/src/hpp/dds/domain/TDomainParticipant.hpp
    index ce51ea9..3bf7bb0 100644
    --- a/src/hpp/dds/domain/TDomainParticipant.hpp
    +++ b/src/hpp/dds/domain/TDomainParticipant.hpp
    @@ -75,8 +75,7 @@ public:
        *           <code>DomainParticipant</code>.
        *
        */
    -  TDomainParticipant(uint32_t did)
    -  : ::dds::core::TEntity<DELEGATE>(new DELEGATE(did));
    +  TDomainParticipant(uint32_t id);
    
    
       /**
        * Create a new <code>DomainParticipant</code> object.
    @@ -103,11 +102,11 @@ public:
     public:
    
    
       /**
    -   * Register a listener with the <core>DomainParticipant</code>.
    +   * Register a listener with the <code>DomainParticipant</code>.
        * The notifications received by the listener depend on the
        * status mask with which it was registered.
        *
        * @param listener the listener
        * @param event_mask the mask defining the events for which the listener
        *  will be notified.
        */
    -    void listener(Listener* the_listener,listener,
    +    void listener(Listener* listener,listener,
                      const ::dds::core::status::StatusMask& event_mask);
    
    @@ -144,19 +151,18 @@ public:
    
        /**
         * This operation manually asserts the liveliness of the DataWriter.
    -     * This is used in combination with the LIVELINESS QoS policy
    +     * This is used in combination with the Liveliness QoS policy
         * (see Section 7.1.3, Supported QoS, on page 96) to indicate to the
         * Service that the entity remains active.
         * This operation need only be used if the LIVELINESS setting is either
         * MANUAL_BY_PARTICIPANT or MANUAL_BY_TOPIC. Otherwise, it has no effect.
         *
    -     * <b>Note</b> Writing data via the write operation on a DataWriter
    +     * Note: Writing data via the write operation on a DataWriter
         * asserts liveliness on the DataWriter itself and its DomainParticipant.
         * Consequently the use of assert_liveliness is only needed if the
         * application is not writing data regularly.
         */
        void assert_liveliness();
    
    
        /**
    
    @@ -187,17 +193,70 @@ public:
    +    /**
    +     * Set the QoS associated with this DomainParticipant.
    +     * @param qos the new DomainParticipant QoS
    +     */
    +    dds::domain::qos::DomainParticipantQos& operator << (const dds::domain::qos::DomainParticipantQos& qos);
    +
    +    /**
    +     * Get the QoS associated with this DomainParticipant.
    +     *
    +     * @param qos the current DomainParticipant QoS
    +     */
    +    const TDomainParticipant& operator >> (dds::domain::qos::DomainParticipantQos& qos) const;
    
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

src/hpp/dds/domain/TDomainId.hpp should be removed from the API

  • Legacy Issue Number: 18633
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    uint32_t is used as the Domain ID throughout the spec so TDomainId.hpp is no longer required.

    Suggested resolution:

    diff --git a/src/hpp/dds/domain/TDomainId.hpp b/src/hpp/dds/domain/TDomainId.hpp
    deleted file mode 100644
    index dc6d9af..0000000
    --- a/src/hpp/dds/domain/TDomainId.hpp
    +++ /dev/null
    @@ -1,29 +0,0 @@
    -#ifndef OMG_DDS_DOMAIN_T_DOMAIN_ID_HPP_
    -#define OMG_DDS_DOMAIN_T_DOMAIN_ID_HPP_
    -
    -#include <dds/core/Value.hpp>
    -
    -namespace dds { namespace domain {
    -  template <typename DELEGATE>
    -  class TDomainId;
    -} }
    -
    -
    -template <typename DELEGATE>
    -class dds::domain::TDomainId : public dds::core::Value<DELEGATE> {
    -public:
    -
    -  template <typename ARG0>
    -  TDomainId(ARG0 id) : dds::core::Value<DELEGATE>(id);
    -
    -  template <typename ARG0, typename ARG1>
    -  TDomainId(ARG0 arg0, ARG1 arg1);
    -
    -  operator uint32_t () const;
    -
    -  uint32_t value() const;
    -
    -  static const TDomainId default_domain();
    -};
    -
    -#endif /* OMG_DDS_DOMAIN_T_DOMAIN_ID_HPP_ */
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/types.hpp

  • Legacy Issue Number: 18631
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Windows export macros required.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/types.hpp b/src/hpp/dds/core/types.hpp
    index c58e002..90c56f4 100644
    --- a/src/hpp/dds/core/types.hpp
    +++ b/src/hpp/dds/core/types.hpp
    @@ -33,8 +33,8 @@ namespace dds { namespace core {
       typedef std::vector<std::string> StringSeq;
    
    
       // DDS Null-Reference
    -  class null_type { };
    -  extern const null_type null;
    +  class OMG_DDS_API null_type { };
    +  extern const null_type OMG_DDS_API null;
    
    
    
     #ifdef OMG_DDS_EXTENSIBLE_AND_DYNAMIC_TOPIC_TYPE_SUPPORT
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/ref_traits.hpp

  • Legacy Issue Number: 18629
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Advisory comment is inadvertently and inappropriately documenting namespace.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/ref_traits.hpp b/src/hpp/dds/core/ref_traits.hpp
    index 5a34f6f..ff469d1 100644
    --- a/src/hpp/dds/core/ref_traits.hpp
    +++ b/src/hpp/dds/core/ref_traits.hpp
    @@ -19,11 +19,13 @@
      * limitations under the License.
      */
    
    
    -/**
    +
    +namespace  dds { namespace core {
    +
    +/*
      * These traits have to be provided by compliant implementations
      * to enable safe polymorphic casts.
      */
    -namespace  dds { namespace core {
    
    
       template <typename T1, typename T2>
       struct is_base_of;
    
    @@ -38,12 +43,12 @@ namespace  dds { namespace core {
    TO  polymorphic_cast(FROM& from);
    
    
    }
    } /* namespace dds / namespace core */
    
    
    // This include should stay here as it provides implementations
    -// for the declaration just above.
    +// for the declaration immediately above.
    #include <dds/core/detail/ref_traits.hpp>
    
    #endif /* OMG_DDS_CORE_REF_TRAITS_H_ */
    
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/core/detail/conformance.hpp

  • Legacy Issue Number: 18626
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Example vendor file is missing a conformance point macro used elsewhere in the API.

    Suggested resolution:

    diff --git a/src/hpp/dds/core/detail/conformance.hpp b/src/hpp/dds/core/detail/conformance.hpp
    index f8b5f9b..bb8e974 100644
    --- a/src/hpp/dds/core/detail/conformance.hpp
    +++ b/src/hpp/dds/core/detail/conformance.hpp
    @@ -22,6 +22,7 @@
     #define OMG_DDS_OBJECT_MODEL_SUPPORT                        FULL
     #define OMG_DDS_EXTENSIBLE_AND_DYNAMIC_TOPIC_TYPE_SUPPORT   FULL
     #define OMG_DDS_X_TYPES_DYNANIC_TYPE_SUPPORT                FULL
    +#define OMG_DDS_X_TYPES_BUILTIN_TOPIC_TYPES_SUPPORT         FULL
     #define OMG_DDS_HAS_PRETTY_PRINT_COUT 1
    
    
     #endif /* OMG_DDS_CORE_DETAIL_CONFORMANCE_HPP_ */
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/pub/qos/detail/DataWriterQos.hpp & PublisherQos.hpp

  • Legacy Issue Number: 18642
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Example vendor code is incorrect in these two files.

    Suggested resolution:

    diff --git a/src/hpp/dds/pub/qos/detail/DataWriterQos.hpp b/src/hpp/dds/pub/qos/detail/DataWriterQos.hpp
    index 67483ec..2f7a23e 100644
    --- a/src/hpp/dds/pub/qos/detail/DataWriterQos.hpp
    +++ b/src/hpp/dds/pub/qos/detail/DataWriterQos.hpp
    @@ -23,7 +23,7 @@
     #include <foo/bar/pub/qos/DataWriterQos.hpp>
    
    
     namespace dds { namespace pub { namespace qos { namespace detail {
    -  typedef dds::core::qos::TEntityQos<foo::bar::pub::qos::DataWriterQos> DataWriterQos;
    +  typedef dds::core::TEntityQos<foo::bar::pub::qos::DataWriterQos> DataWriterQos;
     } } } }
    
    
     #endif /* OMG_DDS_QOS_DETAIL_DATA_WRITER_QOS_HPP_ */
    diff --git a/src/hpp/dds/pub/qos/detail/PublisherQos.hpp b/src/hpp/dds/pub/qos/detail/PublisherQos.hpp
    index 1abff41..a60635b 100644
    --- a/src/hpp/dds/pub/qos/detail/PublisherQos.hpp
    +++ b/src/hpp/dds/pub/qos/detail/PublisherQos.hpp
    @@ -23,7 +23,7 @@
     #include <foo/bar/pub/qos/PublisherQos.hpp>
    
    
     namespace dds { namespace pub { namespace qos { namespace detail {
    -  typedef dds::core::qos::TEntityQos<foo::bar::pub::qos::PublisherQos> PublisherQos;
    +  typedef dds::core::TEntityQos<foo::bar::pub::qos::PublisherQos> PublisherQos;
     } } } }
    
    
     #endif /* OMG_DDS_PUB_QOS_DETAIL_PUBLISER_QOS_HPP_ */
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

Documentation comments corrections to src/hpp/dds/pub/discovery.hpp

  • Legacy Issue Number: 18640
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Corrections to documentation comments required.

    Suggested resolution:

    diff --git a/src/hpp/dds/pub/discovery.hpp b/src/hpp/dds/pub/discovery.hpp
    index f50e179..5a8eb28 100644
    --- a/src/hpp/dds/pub/discovery.hpp
    +++ b/src/hpp/dds/pub/discovery.hpp
    @@ -40,8 +40,6 @@ namespace dds { namespace pub {
        * @param dp      the <code>DomainParticipant</code> for which the remote
        *                entity will be ignored
        *
    -   * @param handle  the <code>InstanceHandle</code> of the remote entity that
    -   *                has to be ignored
        */
       template <typename FwdIterator>
       void ignore(const dds::domain::DomainParticipant& dp, FwdIterator begin, FwdIterator end);
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/pub/TSuspendedPublication.hpp

  • Legacy Issue Number: 18639
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Destructor declaration incorrect.

    Suggested resolution:

    diff --git a/src/hpp/dds/pub/TSuspendedPublication.hpp b/src/hpp/dds/pub/TSuspendedPublication.hpp
    index fcd096b..ac4ea26 100644
    --- a/src/hpp/dds/pub/TSuspendedPublication.hpp
    +++ b/src/hpp/dds/pub/TSuspendedPublication.hpp
    @@ -72,7 +72,7 @@ public:
        * suspend_publications. Otherwise the operation will return the
        * error PRECONDITION_NOT_MET.
        */
    -  ~SuspendedPublication();    // resumes publications implicitly
    +  ~TSuspendedPublication();    // resumes publications implicitly
     };
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/sub/TDataReader.hpp

  • Legacy Issue Number: 18649
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Duplicate function definition to remove.

    Missing header required to fix compilation.

    Correct comments.

    Suggested resolution:

    diff --git a/src/hpp/dds/sub/TDataReader.hpp b/src/hpp/dds/sub/TDataReader.hpp
    index e10705c..ca592bb 100644
    — a/src/hpp/dds/sub/TDataReader.hpp
    +++ b/src/hpp/dds/sub/TDataReader.hpp
    @@ -23,6 +23,7 @@
    #include <dds/topic/ContentFilteredTopic.hpp>
    #include <dds/topic/TopicInstance.hpp>
    #include <dds/sub/LoanedSamples.hpp>
    +#include <dds/sub/Subscriber.hpp>

    namespace dds {
    namespace sub {
    @@ -56,7 +57,6 @@ public:
    Selector(DataReader& dr);

    Selector& instance(const dds::core::InstanceHandle& h);

    • Selector& instance(const dds::core::InstanceHandle& h);
      Selector& state(const dds::sub::status::DataState& s);
      Selector& content(const dds::sub::Query& query);
      Selector& max_samples(uint32_t n);
      @@ -220,7 +220,7 @@ public:

    /**

    • Returns the default read-state (if not changed, it is set to
    • * ReaderState::any()).
      + * DataState::any()).
      */
      const dds::sub::status::DataState& default_filter_state();

    @@ -258,7 +258,7 @@ public:

    • Read all samples using the default filter state. The memory used for
    • storing the sample may be loaned by the middleware thus allowing zero
    • copy operations.
    • * Implementation should strike to makethis read implementation
      + * Implementors should strive to make this read implementation
    • exception safe.
      */
      LoanedSamples<T> read();
      @@ -267,7 +267,7 @@ public:
    • Take all samples using the default filter state. The memory used for
    • storing the sample may be loaned by the middleware thus allowing zero
    • copy operations.
    • * Implementation should strike to make this read implementation
      + * Implementors should strive to make this take implementation
    • exception safe.
      */
      LoanedSamples<T> take();
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/sub/SubscriberListener.hpp

  • Legacy Issue Number: 18648
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Missing header includes are required for this header to compile.

    Suggested resolution:

    diff --git a/src/hpp/dds/sub/SubscriberListener.hpp b/src/hpp/dds/sub/SubscriberListener.hpp
    index b185342..77f3e08 100644
    — a/src/hpp/dds/sub/SubscriberListener.hpp
    +++ b/src/hpp/dds/sub/SubscriberListener.hpp
    @@ -19,6 +19,8 @@

    • limitations under the License.
      */

    +#include <dds/sub/AnyDataReaderListener.hpp>
    +#include <dds/sub/Subscriber.hpp>

    namespace dds { namespace sub {

  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/sub/DataReaderListener.hpp

  • Legacy Issue Number: 18645
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Code needs compilation fixes.

    Suggested resolution:

    diff --git a/src/hpp/dds/sub/DataReaderListener.hpp b/src/hpp/dds/sub/DataReaderListener.hpp
    index 17c620e..70b2777 100644
    --- a/src/hpp/dds/sub/DataReaderListener.hpp
    +++ b/src/hpp/dds/sub/DataReaderListener.hpp
    @@ -32,10 +32,10 @@ namespace dds { namespace sub {
     template <typename T>
     class dds::sub::DataReaderListener {
     public:
    -  typedef ::dds::core::smart_ptr_traits<DataReaderListener>::ref_type ref_type;
    +  typedef typename ::dds::core::smart_ptr_traits<DataReaderListener>::ref_type ref_type;
    
    
     public:
    -  virtual ~DataReaderListener();
    +  virtual ~DataReaderListener() = 0;
    
    
     public:
       virtual void on_requested_deadline_missed(
    @@ -69,7 +69,7 @@ public:
     template <typename T>
     class dds::sub::NoOpDataReaderListener : public virtual DataReaderListener<T> {
     public:
    -  typedef ::dds::core::smart_ptr_traits<NoOpDataReaderListener>::ref_type ref_type;
    +  typedef typename ::dds::core::smart_ptr_traits<NoOpDataReaderListener>::ref_type ref_type;
    
    
     public:
       virtual ~NoOpDataReaderListener();
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API correction required to src/hpp/dds/sub/SharedSamples.hpp

  • Legacy Issue Number: 18647
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    Compilation fixes required to code.

    Suggested resolution:

    diff --git a/src/hpp/dds/sub/SharedSamples.hpp b/src/hpp/dds/sub/SharedSamples.hpp
    index c48271a..8c517c8 100644
    — a/src/hpp/dds/sub/SharedSamples.hpp
    +++ b/src/hpp/dds/sub/SharedSamples.hpp
    @@ -30,7 +30,7 @@ public:
    typedef typename DELEGATE<T>::iterator iterator;
    typedef typename DELEGATE<T>::const_iterator const_iterator;

    -
    + typedef typename dds::core::smart_ptr_traits< DELEGATE<T> >::ref_type DELEGATE_REF_T;

    public:
    /**
    @@ -44,7 +44,7 @@ public:

    • @param ls the loaned samples.
      *
      */
    • SharedSamples(LoanedSamples ls);
      + SharedSamples(dds::sub::LoanedSamples<T> ls);

    ~SharedSamples();

  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 9 Apr 2013 04:00 GMT
  • Updated: Sun, 30 Sep 2018 23:30 GMT

API needs a standardized way of downcasting API entities

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    Right now, API entities are wrapper templates around the actual Delegate implementation, as in (depicted a bit simplified):

    typedef TEntity<EntityDelegate> Entity;
    typedef TPublisher<PublisherDelegate> Publisher;

    If I have an entity of type Entity, and I want to widen it to a type Publisher, I cannot use a regular cast because I need to cast both the wrapper and its Delegate.

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 16 Mar 2016 19:03 GMT
  • Updated: Sun, 30 Sep 2018 23:28 GMT

Name clash between Topic discovery functions

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The discovery functions for Topics (dds/topic/discovery.hpp) has a name clash between the function to discover a single topic by name (first function) and the function to discover all topics using a back-inserting iterator (third function):

    template <typename TOPIC>
    TOPIC discover(const dds::domain::DomainParticipant& dp,
                   const std::string& name,
                   const dds::core::Duration& timeout = dds::core::Duration::infinite());
    
    template <typename ANYTOPIC, typename BinIterator>
    uint32_t discover(const dds::domain::DomainParticipant& dp, BinIterator begin);
    

    The first function has a default value for the 3rd parameter, but when you try to invoke it with only 2 parameters, the compiler picks the latter function because it considers that one a better match. (It matches both the amount and the type of the parameters, since the 2nd parameter is templatized and accepts any type).

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 16 Mar 2016 19:53 GMT
  • Updated: Sun, 30 Sep 2018 23:28 GMT

dds::topic::TBuiltinTopicKey should be completely customizable.

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    In the DDS 1.4 specification, the IDL file describing the builtin topics consists of two parts:

    • A section with #define statements where certain datatypes may be customized by the different vendors.
    • A section where these customized datatypes are actually embedded in the builtin topic declarations.

    All builtin topics contain a key field of type BuiltinTopicKey_t that is defined in the following way:

    #define BUILTIN_TOPIC_KEY_TYPE_NATIVE long
    
    module DDS {
        struct BuiltinTopicKey_t {
            BUILTIN_TOPIC_KEY_TYPE_NATIVE value[3];
        };
    };
    

    This implies that vendors may specify part of the key (the array element type), but they may not specify it to be anything else than an array of three of those vendor specific datatypes.

    Right now, different vendors have specified the BuiltinTopicKey_t in various different ways: some uses an array of 16 octets to directly reflect the RTPS GUID, but the official DDS spec does not allow for this.

    For the DDS 1.4 specification, this has been files as a separate issue (see DDS15-206). For the Cxx PSM for DDS, this also needs to be addressed which is the purpose of this ticket. Right now, for the Cxx PSM specifies the dds::topic::BuiltinTopicKey as a vendor spefic instantiation of the dds::topic::TBuiltinTopicKey template in the following way:

    template <typename D>
    class dds::topic::TBuiltinTopicKey : public ::dds::core::Value<D>
    {
    public:
        /**
         * Gets the BuiltinTopicKey.
         *
         * @return the BuiltinTopicKey
         */
        const int32_t* value() const;
    
        /**
         * Sets the BuiltinTopicKey.
         *
         * @param v the value to set
         */
        void value(const int32_t v[]);
    };
    

    It is clear from this description that although the size of the array is unspecified, it is still implied that the key is an array of int32_t. This conflicts with the original DDS specification that explicitly allows for the builtin topic key type to be customizable by the user.

  • Reported: DDS-PSM-Cxx 1.0b2 — Tue, 5 Dec 2017 19:29 GMT
  • Updated: Sun, 30 Sep 2018 23:28 GMT

dds/core/cond/TCondition.hpp should have virtual methods

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The operations of the dds::core::cond::TCondition.hpp class should be virtual:

    public:
    -   ~TCondition();
    +   virtual ~TCondition();
    
    public:
        /**
         * Dispatches the functors that have been registered with the condition.
         */
    -   void dispatch();
    +   virtual void dispatch();
    
        /**
         * This operation retrieves the trigger_value of the Condition.
         */
    -   bool trigger_value() const;
    +   virtual bool trigger_value() const;
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 20 Apr 2015 09:54 GMT
  • Updated: Sun, 30 Sep 2018 23:28 GMT

Ownership label SHARED is already defined as a macro in some SUN compilers

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    Some SUN compilers have predefined a macro called SHARED. This clashes with the definition of the enumeration label SHARED for the OwnershipKind_def struct.

    We suggest to add some conditional code to undef the SUN macro in that case.

    git diff:

    --- a/include/dds/core/policy/PolicyKind.hpp
    +++ b/include/dds/core/policy/PolicyKind.hpp
    @@ -29,6 +29,10 @@ namespace core
     namespace policy
     {
    
    +/** @todo raise spec issue **/
    +#if defined (__SUNPRO_CC) && defined(SHARED)
    +#   undef SHARED
    +#endif
     struct OwnershipKind_def
     {
         enum Type
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 13 Apr 2015 15:32 GMT
  • Updated: Sun, 30 Sep 2018 23:28 GMT

Compilation error in dds/core/policy/PolicyKind.hpp

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The enumeration for the TypeConsistencyEnforcementKind_def is not scoped by a struct, as all the other enumerations, but by a namespace. This should be fixed.

    git diff:

    @@ -96,7 +96,7 @@ namespace dds { namespace core { namespace policy {
         }; };
       typedef dds::core::safe_enum<LivelinessKind_def> LivelinessKind;
    
    -  namespace TypeConsistencyEnforcementKind_def {
    +  struct TypeConsistencyEnforcementKind_def {
         enum type {
           EXACT_TYPE_TYPE_CONSISTENCY,
           EXACT_NAME_TYPE_CONSISTENCY,
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 13 Apr 2015 13:46 GMT
  • Updated: Sun, 30 Sep 2018 23:28 GMT

dds/core/array.hpp is licensed under LGPL

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    According to the comments mentioned in dds/core/array.hpp, it contains code that is licensed under LGPL. This may cause legal issues for users that do not want to have their code impacted by LGPL license conditions.

  • Reported: DDS-PSM-Cxx 1.0b2 — Fri, 9 Feb 2018 16:25 GMT
  • Updated: Sun, 30 Sep 2018 23:28 GMT

Reference should provide comparison operators

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    dds::core::Reference<D> should provide comparison operators beyond == and !=. operator< is especially useful to make reference types the key of std::map.

    Proposed solution: add the following lines to Reference.hpp, inside the dds::core namespace:

    template <class T, class U>
    bool operator <(
            const dds::core::Reference<T>& a,
            const dds::core::Reference<U>& b) OMG_NOEXCEPT
    {
        return a.delegate().get() < b.delegate().get();
    }
    
    template <class T, class U>
    bool operator <=(
            const dds::core::Reference<T>& a,
            const dds::core::Reference<U>& b) OMG_NOEXCEPT
    {
        return a.delegate().get() <= b.delegate().get();
    }
    
    template <class T, class U>
    bool operator >(
            const dds::core::Reference<T>& a,
            const dds::core::Reference<U>& b) OMG_NOEXCEPT
    {
        return a.delegate().get() > b.delegate().get();
    }
    
    template <class T, class U>
    bool operator >=(
            const dds::core::Reference<T>& a,
            const dds::core::Reference<U>& b) OMG_NOEXCEPT
    {
        return a.delegate().get() >= b.delegate().get();
    }
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Fri, 5 Jan 2018 18:24 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

Missing constants/functions to obtain the built-in topic names

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The API should provide a way to obtain the built-in topic names:

    • "DCPSParticipant"
    • "DCPSTopic"
    • "DCPSPublication"
    • "DCPSSubscription"

    Proposed resolution:

    Add the following free-standing functions to the dds::topic namespace:

    namespace dds { namespace topic {
    
    /** 
     * @brief Participant builtin topic name 
     *  
     * Topic name of the builtin dds::sub::DataReader for the 
     * dds::topic::ParticipantBuiltinTopicData type 
     */
    OMG_DDS_API std::string participant_topic_name();
    
    /** 
     * @brief Topic topic name 
     *  
     * Topic name of the builtin dds::sub::DataReader for the 
     * dds::topic::TopicBuiltinTopicData type 
     */
    OMG_DDS_API std::string topic_topic_name();
    
    /** 
     * @brief  Publication topic name 
     *  
     * Topic name of the builtin dds::sub::DataReader for the 
     * dds::topic::PublicationBuiltinTopicData type 
     */
    OMG_DDS_API std::string publication_topic_name();
    
    /** 
     * @brief Subscription topic name 
     *  
     * Topic name of the builtin dds::sub::DataReader for the 
     * dds::topic::SubscriptionBuiltinTopicData type 
     */
    OMG_DDS_API std::string subscription_topic_name();
    
    } }  // namespace dds::topic
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Fri, 15 Jul 2016 18:50 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

API corrections required to dds/core/Duration.hpp

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The class Duration needs the following corrections:

    • Add missing operator!=
    • Replace type of member sec_ from uint32_t to int32_t.

    We also suggest adding the following implicit constructor that allows interchanging C++11 chrono types and Duration throughout the API:

        /**
         * @brief Allow implicit creation from std::chrono::duration
         *
         * For example:
         * \code
         * dds::core::cond::WaitSet waitset;
         * // ...
         * waitset.wait(std::chrono::seconds(1) + std::chrono::milliseconds(250));
         * \endcode
         *
         */
        template <typename Rep, typename Period>
        /* implicit */ Duration(const std::chrono::duration<Rep, Period>& duration)
            : sec_(static_cast<int32_t>(
                  std::chrono::duration_cast<std::chrono::seconds, Rep, Period>(duration).count())),
              nsec_(static_cast<uint32_t>(
                  (std::chrono::nanoseconds(duration) % 1000000000).count()))
        {
        }
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 13 Jul 2016 22:46 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

API correction required to dds/core/Time.hpp

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The dds::core::Time structure declares the sec field as an int64_t, but in the DDS spec, Time is defined as:

    struct Time_t {
    long sec;
    unsigned long nanosec;
    };
    

    It should be replaced with int32_t.

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 13 Jul 2016 18:12 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

API corrections required to dds/sub/AnyDataReader.hpp

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    This class is missing most methods:

    • qos() — getter and setter
    • topic_name()
    • type_name()
    • subscriber()
    • operator== and !=
    • close()
    • retain()
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 13 Jul 2016 18:07 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

API does not provide functionality from the DomainParticipantFactory

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:
    • There isn't a way to create DomainParticipants in disabled state, because there isn't a DomainParticipantFactory to set its EntityFactory policy.
    • There isn't a placeholder for extensions to the DomainParticipantFactoryQos.
    • There isn't any function that allows releasing global resources that in other APIs are contained in the DomainParticipantFactory.

    Proposed solution:

    • Create dds::domain::qos::DomainParticipantFactoryQos in a new file, dds/domain/qos/DomainParticipantFactoryQos.hpp}}
    • Add the following static methods to the DomainParticipant
      TDomainParticipant.hpp
          /**
           * @brief Set the 
           * dds::domain::qos::DomainParticipantFactoryQos
           *  
           * @param qos The DomainParticipantFactoryQos to set.
           */
          static void participant_factory_qos(
             const dds::domain::qos::DomainParticipantFactoryQos& qos)
          {
              DELEGATE::participant_factory_qos(qos);
          }
      
          /**
           * @brief Get the current dds::domain::qos::DomainParticipantFactoryQos
           *  
           * @return The current DomainParticipantFactoryQos 
           */
          static dds::domain::qos::DomainParticipantFactoryQos participant_factory_qos()
      
          /**
           * @brief Finalize the DomainParticipantFactory. 
           *  
           * The DomainParticipantFactory is a singleton that the C++ API 
           * uses implicitly to create participants. This operation allows releasing any memory allocated by this singleton.
           *
           */
          static void finalize_participant_factory();
      
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 13 Jul 2016 17:57 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

Correction required to dds/sub/ddssub.hpp

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    Missing include:

    + #include <dds/sub/discovery.hpp>
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Thu, 21 Jul 2016 22:04 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

API correction required to dds/topic/TBuiltinTopic.hpp

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    Missing const qualifier for TTopicBuiltinTopicData::key():

    Resolution:

    - const dds::topic::BuiltinTopicKey& key();
    + const dds::topic::BuiltinTopicKey& key() const;
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 18 Jul 2016 22:03 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

Selector missing next_instance() function

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The Selector class is missing the following member function:

    Selector& next_instance(const dds::core::InstanceHandle& h)
    

    Note that ManipulatorSelector does have it.

  • Reported: DDS-PSM-Cxx 1.0b2 — Thu, 14 Jul 2016 23:06 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT


Declaring Reference::operator new() private causes undesired side effects

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    Reference makes the new operator private to disallow dynamic allocation for reference types.

    However, this makes some compilers unable to find the placement-new operator (operator new (size_t, void*)), whose usage is still valid (for example, in STL containers):

    /local/VxWorks/GPP-3.6/gnu/4.1.2-vxworks-6.6/sun4-solaris2/bin/../../lib/gcc/../../include/c++/4.1/xmemory:37: error: no matching function for call to 'dds::core::TEntity<rti::core::Entity>::operator new(unsigned int, void*&)'
    ../../../hpp/dds/core/Reference.hpp:184: note: candidates are: static void* dds::core::Reference<DELEGATE>::operator new(size_t) [with DELEGATE = rti::core::Entity]
    

    We haven't found yet a solution other than not making new private.

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 13 Jul 2016 23:54 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

Generic InstanceHandle constructor should be explicit

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    Replace:

    dds/core/TInstanceHandle.hpp
      template <typename ARG0>
      TInstanceHandle(const ARG0& arg0);
    

    with:

      template <typename ARG0>
      explicit TInstanceHandle(const ARG0& arg0);
    

    An implicit constructor like that one indicates the compiler that it can implicitly convert any type to InstanceHandle, which severely interferes with the compiler's template substitution procedures and error reporting.

  • Reported: DDS-PSM-Cxx 1.0b2 — Mon, 19 Sep 2016 16:59 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

Method SampleInfo::valid() should be renamed SampleInfo::valid_data()

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    There are several reasons for this:

    (1) The DDS-PIM defines the information in the SampleInfo as a "valid_data" flag therefore when mapped to the C++ PSM the same name should be retained.

    (2) This is consistent with the other PSMs.

    (3) Semantically SampleInfo::valid() is incorrect. The SampleInfo is always valid. What is invalid is the associated SampleData. Hence the correct name would be SampleInfo::valid_data()

  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 13 Jul 2016 23:07 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

API corrections required to ManipulatorSelector and related functions

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    The free-standing functions read() and take() should not be templates.

    They are meant to be passed as function pointers to the streaming ManipulatorSelector API:

    dr >> read >> ... >> loaned_samples;
    

    This syntax is not possible with the current definition of read() and take(), because they require an explicit template argument.

    Proposed solution:
    Remove the template argument, but leave a dummy argument to avoid users passing in any no-argument function.

    DataReader.hpp
    -  template <typename SELECTOR>
    -  SELECTOR& read(SELECTOR& selector);
    +  OMG_DDS_API
    +  bool read(dds::sub::ReadModeDummyType);
    
    -  template <typename SELECTOR>
    -  SELECTOR& take(SELECTOR& selector);
    +  OMG_DDS_API
    +  bool take(dds::sub::ReadModeDummyType);
    
    TDataReader.hpp
    +class ReadModeDummyType {};
    
    …
    
    -  ManipulatorSelector
    -  operator >> (ManipulatorSelector& (manipulator)(ManipulatorSelector&));
    +        ManipulatorSelector&
    +        operator >>(bool(*manipulator)(ReadModeDummyType))
    
  • Reported: DDS-PSM-Cxx 1.0b2 — Wed, 13 Jul 2016 17:41 GMT
  • Updated: Sun, 30 Sep 2018 23:27 GMT

Dispose for topics without key

  • Key: DDS15-243
  • Status: open  
  • Source: Central Research Laboratory, Bharat Electronics Ltd ( Saurabh Bansal)
  • Summary:

    Behavior of dispose is not specified for topics without key.
    As per section "2.2.1.2.2 Overall Conceptual Model",. If no key is provided, the data set associated with the Topic is restricted to a single instance.

    If data set is considered as a single instance than dispose of that instance shall be possible.

  • Reported: DDS 1.4 — Wed, 19 Sep 2018 17:08 GMT
  • Updated: Thu, 20 Sep 2018 17:58 GMT

Use of Stateful versus Stateless Endpoints

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The specification defines two reference implementations for RTPS Readers and Writers:

    • Stateless Writer (section 8.4.8)
    • Stateless Reader (section 8.4.11)
    • Stateful Writer (section 8.4.9)
    • Stateful Reader (section 8.4.12)

    Section 8.4.3 (Implementing the RTPS Protocol) indicates that it is an implementation decision whether to have the implementation match either the "Stateful" or "Stateless" reference behaviors. There are tradeoff with regards to the scalability and resources that may dictate which is preferable. But it does not impact interoperability.

    While that is true, there are still some observable behavioral differences that users have encountered and been surprised by.

    For example a BestEffort StatelessReader can add to the ReaderCache samples that arrive out of order. If the Reader has PRESENTATION access_scope=INSTANCE and the out of order samples are for different instances then they can be received by DDS.

    A BestEffort StatefulReader will drop the out of order sample when this happens.

    The problem is that in some cases the users are sensitive to this difference in behavior. This is specially a problem for best-efforts when you mix samples that require fragmentation with some not requiring fragmentation. In this case a later "non-fragmented" sample can arrive ahead of a fragment in the "fragmented sample", or be prioritized by the receiver stack ahead of the re-assembly...

    Because of this there is a desire to be able to somehow indicate or configure the use of a Stateless Reader versus a StatefulReader. This does not mean the user's require that there is a portable configuration mechanism (e.g via DDS Qos) rather that they know that all implementations will provide some means to configure it.

    A possible way to address this would be to add a sub-section to 8.4.15 (Implementation Guidelines) that discusses the selection of Stateful versus Stateless readers, especially for the best-effort case, and recommends that the choice is configurable using the DDS layer.

  • Reported: DDSI-RTPS 2.2 — Thu, 6 Sep 2018 19:01 GMT
  • Updated: Thu, 6 Sep 2018 21:36 GMT

Errors in non-normative IDL of section 7.5.1.2.3 Mapping of Operations to the ReplyTopic Types

  • Key: DDSRPC11-2
  • Status: open  
  • Source: Real-Time Innovations ( Mr. Alejandro Campos)
  • Summary:

    Section 7.5.1.2.3 Mapping of Operations to the ReplyTopic Types cotntains the following IDL:

    @Choice @Autoid
    struct RobotControl_command_Result { 
        RobotControl_command_Out result;
    };@Choice @Autoid
    struct RobotControl_stop_Result { 
        RobotControl_getSpeed_Out result;
    };
    };@Choice @Autoid
    struct RobotControl_setSpeed_Result {
          RobotControl_setSpeed_Out result;
          TooFast toofast_ex;
    };
    };@Choice @Autoid
    struct RobotControl_getSpeed_Result {
          RobotControl_getStatus_Out result;
    };
    

    This IDL is not correct. It contains extra "};" preceding the @Choice annotations in several places.

    In Addition in IDL42 all annotations are lower case. Specifically @autoid is defined there.

    Therefore the correct IDL would be:

    @choice @autoid
    struct RobotControl_command_Result { 
        RobotControl_command_Out result;
    };
    
    @choice @autoid
    struct RobotControl_stop_Result { 
        RobotControl_getSpeed_Out result;
    };
    
    @choice @autoid
    struct RobotControl_setSpeed_Result {
          RobotControl_setSpeed_Out result;
          TooFast toofast_ex;
    };
    
    @choice @autoid
    struct RobotControl_getSpeed_Result {
          RobotControl_getStatus_Out result;
    };
    
  • Reported: DDS-RPC 1.0 — Thu, 6 Sep 2018 00:04 GMT
  • Updated: Thu, 6 Sep 2018 00:04 GMT

Invalid IETF RFC document reference.

  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The "Domain Governance Document" and "DomainParticipant permissions document" chapters contain references to "IETF RFC 5761". This doesn't seem correct.

    It seems that it should be "IETF RFC 2633". At least then the mentioned RFC sections fit.

  • Reported: DDS-SECURITY 1.1b1 — Tue, 4 Sep 2018 10:56 GMT
  • Updated: Tue, 4 Sep 2018 10:56 GMT

IDL should be updated to match IDL 4.2

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The IDL used by the specification should be updated to the latest IDL 4.2 syntax.

    This specially impacts annotations. For example @Extensibility(MUTABLE_EXTENSIBILITY) has been replace with @mutable.

  • Reported: DDS-SECURITY 1.1b1 — Wed, 29 Aug 2018 00:44 GMT
  • Updated: Wed, 29 Aug 2018 00:44 GMT

set_expression_parameters on ContentFilteredTopic, MultiTopic

  • Key: DDS15-242
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    When expression parameters change, should any data stored in associated DataReaders be re-evaluated using the new parameters? Or do the DataReaders reflect the state of the parameters at the time the data was received?

  • Reported: DDS 1.4 — Wed, 22 Aug 2018 20:27 GMT
  • Updated: Wed, 22 Aug 2018 20:27 GMT

Multiple grants in a permissions document

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    There is only one <permissions> element in a permissions document, but it can contain multiple <grant> elements. Section 9.4.1.3.2.1 states "Each subject name can only appear in a single <permissions> Section"... which should be "single <grant> Section" and "A permissions Section with a subject name that doesn't match" should be "A grant Section with a subject name that doesn't match."

  • Reported: DDS-SECURITY 1.1b1 — Mon, 20 Aug 2018 15:41 GMT
  • Updated: Mon, 20 Aug 2018 15:41 GMT

serialized_local_participant_data passed to Auth plugin

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    When the middleware calls Auth plugin operations begin_handshake_request and begin_handshake_reply, it must provide serialized_local_participant_data as an OctetSeq according to serialization rules described in 8.3.2.11.4-5. However, these sections do not specify that padding bytes in the serialized data should be initialized to 0. This is desirable so that the OctetSeq can be hashed with consistent results.

    Alternatively, revisit the choice to use OctetSeq here in the plugin API. It seems like it would be fine to pass the structure ParticipantBuiltInTopicDataSecure directly to the plugin, as is already done with Access Control.

  • Reported: DDS-SECURITY 1.1b1 — Thu, 9 Aug 2018 16:01 GMT
  • Updated: Thu, 9 Aug 2018 16:01 GMT

Clarify when a dispose or unregister may be omitted for a Reader

  • Key: DDS15-241
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    If a writer disposes an instance that it never sent to a reader, should it still send the dispose to the reader?

    In general sending it would cause an scalability problem. So it would be better not to.

    However there are cases where it may be needed. For example if a Writer sets an alarm and a different writer that never created it wants to dispose it.

    Perhaps this behavior something is something that should be configurable on the Reader or Writer.

  • Reported: DDS 1.4 — Wed, 8 Aug 2018 15:25 GMT
  • Updated: Wed, 8 Aug 2018 17:47 GMT

Inconsistent descriptions of Data Tagging

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Section 8.7 specifies the optional Data Tagging model, but the details of how this works really reside in the Access Control plugin. Sections 1.2 and 2.3 need to be updated to remove references to a Data Tagging "Plugin." Also update section 8.1.1. For clarity, update section 8.7.2 to add a reference to Access Control.

  • Reported: DDS-SECURITY 1.1b1 — Mon, 6 Aug 2018 16:58 GMT
  • Updated: Mon, 6 Aug 2018 17:01 GMT

Builtin Auth dependency on Access Control details

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    (This may be a moot point depending on the resolution of DDSSEC12-13.)

    The row of Table 52 that describes validate_local_identity states that the QoS it receives must contain the properties defined in section 9.3.1. These properties are the ones starting with dds.sec.auth.

    The problem is that for begin_handshake_* (either variant) to work, validate_local_identity must also receive the property dds.sec.access.permissions. This should be noted in the requirements for validate_local_identity: it must store the QoS, or at least this property, in a location that can be looked up by IdentityHandle so that handshake tokens can be created. Alternatively, the begin_handshake_* operations could be extended to receive this info separately.

    Another connection between the two plugins is made by the PermissionsCredentialToken. If the intent is to use this data when generating handshake handles, that should be noted in tables 49-50 (c.perm) instead of referencing QoS policies there.

  • Reported: DDS-SECURITY 1.1b1 — Mon, 23 Jul 2018 16:19 GMT
  • Updated: Mon, 23 Jul 2018 16:41 GMT

Add restrictions and guidelines that are required when writing GROUP coherent sets

  • Key: DDS15-238
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    RTPS 2.4 added support for GROUP ordered access and coherent access. As part of this effort, a number of restrictions and guidelines were identified that should be added to DDS in order to properly support these features.

    The restrictions include:

    • Writers shall not be created and/or deleted from the time a GROUP Publisher called begin_coherent_changes() to end_coherent_changes()
    • Readers belonging to a subscriber with PRESENTATION access_scope=GROUP must all have the same value for DESTINATION_ORDER, RELIABILITY?, DURABILITY, OWNERSHIP
    • Writers belonging to a Publisher with PRESENTATION access_scope=GROUP should have the same value for OWNERSHIP, DURABILITY, RELIABILITY?, DESTINATION_ORDER?
      • With OWNERSHIP: kind (i.e. all SHARED or all EXCLUSIVE) and in the case they are exclusive all Writers must have value of the the same OWNERSHIP_STRENGTH.
    • All samples in the coherent set should have the same reception_timestamp and source_timestamp:
      • If access_scope = GROUP the reception and source timestamp are equal to that of the EndCoherentChanges sample.
      • If access_scope < GROUP the reception and source timestamp correspond to the ones from the last sample in the coherent set which may or may not be the EndCoherentChanges sample.

    Guidelines:

    • Adding a note for users that it may often be required to change the HISTORY kind/depth from KEEP_LAST,1. This is because a publisher that is quickly publishing coherent sets which update the same instances could very easily invalidate a coherent set that has not been fully delivered to the subscribers. Replacing a sample in history that is part of a coherent set invalidates that coherent set. It may be worth adding a callback that is called when a writer removes a coherent set from its queue
      • In general, writers that are part of a GROUP Publisher should be configured homogeneously.
  • Reported: DDS 1.4 — Fri, 20 Jul 2018 16:55 GMT
  • Updated: Fri, 20 Jul 2018 17:49 GMT

Add resource limits related to coherent changes

  • Key: DDS15-239
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    RTPS 2.4 added support for GROUP ordered access and coherent access. It may be useful to consider adding some resource limits specifically associated with coherent sets.
    For example, limiting the maximum number of samples that can be outstanding per DataReader and per Subscriber.

    These resource limits would help to prevent a (potentially ill-intentioned) Writer from filling up the entire reader queue with a never-ending coherent set since the reader must store the coherent set until it is complete.

  • Reported: DDS 1.4 — Fri, 20 Jul 2018 16:58 GMT
  • Updated: Fri, 20 Jul 2018 17:49 GMT

Add explanation of how to use the secureWriterSet to support GROUP ordered access

  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    RTPS 2.4 added support for GROUP ordered access and coherent access. Part of this work added fields to the heartbeat submessage, one of which is a secureWriterSet.

    This field shall contain the 32-bit xxHash32 of all of the writer EntityIds that are sent via secure discovery.

    The use of this field should be mentioned somewhere in the security spec as the RTPS spec refers to the security specification to define the use of this field.

    A new inline QoS was also added: PID_SECURE_WRITER_GROUP_INFO. This inline QoS should also be added to the security spec.

    See the revised RTPS text here: DDSIRTP23-117

  • Reported: DDS-SECURITY 1.1b1 — Fri, 20 Jul 2018 16:44 GMT
  • Updated: Fri, 20 Jul 2018 17:49 GMT

Misleading description of Crypto Key Exchange (8.5.1.8)

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Section 8.8.9 specifies that when the crypto tokens are sent on the network,
    BuiltinParticipantVolatileMessageSecureWriter is used so they are not sent in the clear. This detail is also described in 8.5.1.8.1 and other parts of 8.5.1.8.

    Section 8.5.1.8.1 (2nd pgh) contains
    ...intended for transmission in "clear text" to the remote...
    which contradicts 8.8.9.

    To resolve this issue, remove a few unnecessary parts of 8.5.1.8:

    • 8.5.1.8.1 2nd sentence of 2nd pgh "The returned CryptoToken sequence is intended..."
    • 8.5.1.8.2 latter half of 2nd pgh starting "The CryptoToken sequence may contain..."
    • 8.5.1.8.4 (similar content to 8.5.1.8.2)
    • 8.5.1.8.6 (similar content to 8.5.1.8.2)
  • Reported: DDS-SECURITY 1.1b1 — Fri, 13 Jul 2018 17:02 GMT
  • Updated: Fri, 13 Jul 2018 17:02 GMT

IDL struct ParticipantSecurityAttributes contains ac_endpoint_properties

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The name of field ac_endpoint_properties in ParticipantSecurityAttributes should be ac_participant_properties as specified in Table 27.

  • Reported: DDS-SECURITY 1.1b1 — Wed, 11 Jul 2018 16:47 GMT
  • Updated: Wed, 11 Jul 2018 16:47 GMT

validate_remote_permissions interaction with Authentication Plugin

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Table 63's entry for validate_remote_permissions describes a required interaction with the authentication plugin in order to obtain an AuthenticatedPeerCredentialToken. This appears to be an artifact of a previous spec revision, since the current API for validate_remote_permissions already provides the AuthenticatedPeerCredentialToken.

    So that validate_remote_permissions makes more sense, remove the auth_plugin and remote_identity_handle parameters (Table 32, section 8.4.2.9.2, Table 63, IDL).

  • Reported: DDS-SECURITY 1.1b1 — Fri, 6 Jul 2018 21:56 GMT
  • Updated: Fri, 6 Jul 2018 21:56 GMT

get_topic_sec_attributes 3rd parameter type

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    In the IDL get_topic_sec_attributes's 3rd parameter has type TopicSecurityAttributes. In table 32 it appears as EndpointSecurityAttributes which seems to be an error.

    Also Figure 10 calls this method get_topic_security_attributes instead of using "sec".

  • Reported: DDS-SECURITY 1.1b1 — Fri, 6 Jul 2018 21:47 GMT
  • Updated: Fri, 6 Jul 2018 21:47 GMT

Operation: set_permissions_credential_and_token

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Section 8.3.2.11.11 has no description of the permissions_token parameter

  • Reported: DDS-SECURITY 1.1b1 — Fri, 6 Jul 2018 21:42 GMT
  • Updated: Fri, 6 Jul 2018 21:42 GMT

How to handle some GROUP ordered Subcriber scenarios

  • Key: DDS15-237
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    When using a GROUP ordered Subscriber, how do you access the samples in the order in which they are produced? The DDS1.4 specification says the following thing about this:.

    "If the PRESENTATION QosPolicy of the Subscriber to which the DataReader belongs has the access_scope set to ‘GROUP.’ This operation should only be invoked inside a begin_access/end_access block. Otherwise it will return the error PRECONDITION_NOT_MET. Depending on the setting of the PRESENTATION QoS policy (see 2.2.3.6), the returned collection of DataReader objects may be a ‘set’ containing each DataReader at most once in no specified order, or a ‘list’ containing each DataReader one or more times in a specific order.

    1. If PRESENTATION access_scope is INSTANCE or TOPIC the returned collection is a ‘set.’
    2. If PRESENTATION access_scope is GROUP and ordered_access is set to TRUE, then the returned collection is a ‘list.’
      This difference is due to the fact that, in the second situation it is required to access samples belonging to different DataReader objects in a particular order. In this case, the application should process each DataReader in the same order it appears in the ‘list’ and read or take exactly one sample from each DataReader. The patterns that an application should use to access data is fully described in 2.2.2.5.1, Access to the data."

    The big question here is: what happens when the user does not follow this scenario exactly? Here is a couple of potential deviations from the described scenario:

    1. Reading more than one sample from every listed reader (i.e. use read/take with max_samples > 1)
      • We could state that no matter what the size of max_samples is, you get one sample at max.
    2. Reading/Taking samples with different sample/view/instance state masks than passed to the get_datareaders() call.
    3. Reading/Taking samples from a different reader than next one in the reader list.
    4. you invoke get_datareaders() before having fully iterated through the previous reader list.

    We should specify what happens if an application (intentionally or non-intentionally) does not follow the scenario laid out in the spec, or we should come up with an alternative reading mechanism that does not allow you stray off the correct path in these ways for example by introducing new function calls.

  • Reported: DDS 1.4 — Fri, 6 Jul 2018 19:34 GMT
  • Updated: Fri, 6 Jul 2018 19:34 GMT

Request/Offered behavior of DURABILITY Qos does not match use-cases

  • Key: DDS15-236
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The DURABILITY Qos is defined as Request/Offered. If a DataWriter offers a kind, the DataReader 'request' kind must be 'less or equal'. Otherwise they will not match, for this comparison it is considered that
    VOLATILE < TRANSIENT_LOCAL < TRANSIENT < PERSISTENT.

    This is not intuitive to users and does not match many of the use-cases observed in practice.

    What users expect is for a DataWriter to configure its durability without impact on the matching (very much like HISTORY). The setting would just control whether the DataWriter keeps a local copy of the data for late joiners and whether it sends the data to the persistence services.

    The reader in the other hand should simple state whether it wants "historical data" meaning data that was published before the reader joined the domain. This could just be a "boolean" or maybe a boolean plus some extra information that controls how much "historical data" to get.

    If the DataWriter enabled durability then it would get the data that the DataWriters have on their "historical cache" that includes data from the Persistence services.

    If a DataWriter set DURABILITY to TRANSIENT or PERSISTENT, then it would send its data to the PERSISTENCE services. It it was 'TRANSIENT LOCAL" then the Persistence service would not match the writer.

    Ideally this could be done as an extension so it has minimal impact in current behavior or interoperabiity

  • Reported: DDS 1.4 — Tue, 27 Mar 2018 20:09 GMT
  • Updated: Tue, 27 Mar 2018 20:09 GMT

Incorporate common elements from DDS Security to the Builtin Topics

  • Key: DDS15-234
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    DDS Security added information to the builtin-topic data.
    Some if this information is generic and not specific to DDS Security. An example of this is DataTags. Even if those are things DDS Security can associate permissions with, the tags themselves are generic and would make sense for any DDS implementation.

    The purpose of this issue is to identify those "generic" additions made by DDS Security and incorporate them to the DDS specification.

  • Reported: DDS 1.4 — Wed, 7 Mar 2018 19:02 GMT
  • Updated: Wed, 7 Mar 2018 19:02 GMT

Add DataTagQosPolicy

  • Key: DDS15-208
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The DDS Security specification (see 7.2.5) added a DataTagQosPolicy defined as:

    @extensibility(APPENDABLE)
    struct Tag {
        string name;
        string value;
    };
    
    typedef sequence<Tag> TagSeq;
    
    @extensibility(APPENDABLE)
    struct DataTags {
        TagSeq tags;
    };
    
    typedef DataTags DataTagQosPolicy
    

    This is actually a generic policy that does not require DDS Security. It makes sense even without security as a way to associate tags with DataWriters and DataReaders.

    Therefore it would be better to move that definition to the DDS specification. This is a user-visible API that is expected to be explicitly set. If it is not part of the DDS API than applications would not be directly portable between DDS and DDS security.

    The spec should also define values for DATATAG_QOS_POLICY_NAME and DATATAG_QOS_POLICY_ID. For example:

     const string DATATAG_QOS_POLICY_NAME = "DataTag";
     const QosPolicyId_t  DATATAG_QOS_POLICY_ID = 25;
    

    Note that currently DDS-XTYPES defines IDs 23 and 24. Probably XTYPES should have used numbers in a different range so the IDs in DDS could remain contiguous.

    See also DDS15-209.

  • Reported: DDS 1.4 — Thu, 18 Jan 2018 23:05 GMT
  • Updated: Thu, 18 Jan 2018 23:14 GMT

Define ranges of QosPolicyId_t

  • Key: DDS15-209
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    DDS defines values of QosPolicyId_t from 0 to 22. Other specs (e.g. XTYPES) define additional values (23 and 24) and vendors potentially also define values.

    To avoid confusion and collision DDS should allocate ranges for each of these. For example:
    0-499 for DDS
    500-999 for Other OMG specs
    1000- for vendor extensions.

    If we go with this proposal we need to file an issue with XTYPES to change the policy ID values to to the reserved range for "other specifications"

  • Reported: DDS 1.4 — Thu, 18 Jan 2018 23:13 GMT
  • Updated: Thu, 18 Jan 2018 23:13 GMT

Add name attribute to Entity

  • Key: DDS15-50
  • Legacy Issue Number: 10807
  • Status: open  
  • Source: Anonymous
  • Summary:

    Problem:
    For system management it is very useful that Entities can be identified by a logical application defined name. This attribute should ideal be set via the factory create call but if changing API's is not desired it can also be set via a QoS policy. This attribute should also be supported by the built-in Topics

    Solution:
    Introduction of a new Properties QoS that can be used for a name, but also for other things. The new QoS would contain a sequence of "properties" where each property is a pair of strings:
    (property_name, property_value)
    This Properties QoS can be used very much the same as the USER_DATA, but because each property is named, multiple things can be stored without conflicting with each other. This also provides an extensibility mechanism for the DDS spec. We can reserve the property-names with the prefix "DDS." To indicate "built-in" properties that should not be used by applications.
    We can use this mechanism with the built-in property name "DDS.EntityName" to implement the name attribute.

  • Reported: DDS 1.2 — Mon, 5 Mar 2007 05:00 GMT
  • Updated: Wed, 17 Jan 2018 02:48 GMT

Schema appears to be missing root element

  • Status: open  
  • Source: JHU/APL ( Michael Leatherman)
  • Summary:

    The document seems to missing the dds element at the very end of the schema.

    Probably OBE, but the 1.0 version of the PDF also is missing the element. In the xsd version of the 1.0 spec, the root element is dds_ccm, which doesn't match the XML File Syntax section (page 46 of the version 1.0 PF).

    Finally, the XSD download for 1.1 is not working when I click on the link on http://www.omg.org/spec/DDS4CCM/1.1/ Only the UML document is available in the informative machine consumable documents section.

    Thanks.

  • Reported: DDS4CCM 1.1 — Fri, 8 Dec 2017 07:09 GMT
  • Updated: Thu, 4 Jan 2018 16:40 GMT

Durability section typos

  • Key: DDS15-207
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    2.2.3.4 DURABILITY

    paragraph 5: "serviced" should be "service"

    paragraph 8: "data-instances" should be "data-instance"

    item #3: "longer that" should be "longer than"

    last paragraph: "disposition" should be "disposal" or "dispose operation"

  • Reported: DDS 1.4 — Thu, 14 Dec 2017 22:54 GMT
  • Updated: Thu, 14 Dec 2017 22:54 GMT

BuiltinTopicKey_t should be completely customizable.

  • Key: DDS15-206
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The IDL file describing the builtin topics consists of two parts:

    • A section with #define statements where certain datatypes may be customized by the different vendors.
    • A section where these customized datatypes are actually embedded in the builtin topic declarations.

    All builtin topics contain a key field of type BuiltinTopicKey_t that is defined in the following way:

    #define BUILTIN_TOPIC_KEY_TYPE_NATIVE long
    
    module DDS {
        struct BuiltinTopicKey_t {
            BUILTIN_TOPIC_KEY_TYPE_NATIVE value[3];
        };
    };
    

    This implies that vendors may specify part of the key (the array element type), but they may not specify it to be anything else than an array of three of those vendor specific datatypes.

    Right now, different vendors have specified the BuiltinTopicKey_t in various different ways: some uses an array of 16 octets to directly reflect the RTPS GUID, but the official DDS spec does not allow for this.

    In order to allow for these kinds of vendor specific customizations, the entire BuiltinTopicKey_t should be declared as a vendor specific #define statement.

    As some context: this issue was filed in the RTPS RTF working group during the Dec 2017 San Fransisco OMG meeting. Basically the consensus was that indeed the builtin topic key type should be fully customizable. How this is exactly gonna be achieved was left to the DDS RTF working group.

  • Reported: DDS 1.4 — Tue, 5 Dec 2017 19:50 GMT
  • Updated: Wed, 6 Dec 2017 07:00 GMT

Specify behavior of filters and queries relative of lifecycle events

  • Key: DDS15-205
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    How are dispose and unregister samples treated for DataReaders that use a ContentFilteredTopic or a QueryCondition?

    Should these "lifecycle" notification samples pass all filters? Should the "key part" of the filter be considered when propagating these notifications?

  • Reported: DDS 1.4 — Tue, 5 Dec 2017 18:50 GMT
  • Updated: Tue, 5 Dec 2017 18:50 GMT

Add API for "directed writes"

  • Key: DDS15-204
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The DDS-RTPS protocol supports directing samples to a specific DataReader. However there is no way to exercise this feature using standard DDS API.

    The idea is to add an additional operation to the DataWriter allowing the specification of the destination DataReader. This could be a specific write_directed() operation or a more generic write_with_parameters() that allows additional parameters to be specified.

  • Reported: DDS 1.4 — Sat, 2 Dec 2017 00:33 GMT
  • Updated: Sat, 2 Dec 2017 00:34 GMT

Topic Names are Restricted to Characters, Digits, and Hyphens

  • Key: DDS15-203
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    SQL grammar in BNF in clause B.2 limits topic names to the following characters: [A-Za-z0-9\-]+.

    The DDS specification should add support for more characters. Some candidates are "/", ":", ".", "_". The latter is actually used in the DDS-XTYPES as a separator in the mapping of interfaces to request and reply topics.

  • Reported: DDS 1.4 — Tue, 28 Nov 2017 16:13 GMT
  • Updated: Thu, 30 Nov 2017 14:35 GMT

Multiple DataReaders per topic on secured Participant

  • Status: open   Implementation work Blocked
  • Source: ZettaScale Technology ( Mr. Julien Enoch)
  • Summary:

    Looking at the datareader_crypto parameter description of the preprocess_secure_submsg operation:

    "If secure_submessage_category is DATAWRITER_SUBMESSAGE, the datareader_crypto shall be the DatareaderCryptoHandle returned by a previous call to register_local_datareader for the DataReader that is the destination of the RTPS Submessage."

    It seems that only a single DatareaderCryptoHandle can be returned. This implies that a secure DATAWRITER_SUBMESSAGE should be at destination of a single DataReader.

    How to deal with several DataReaders in a Participant matching the same DataWriter ? Most of the time, the submessage destination is ENTITY_UNKOWN. As a consequence a clarification is required.

  • Reported: DDS-SECURITY 1.0 — Tue, 29 Aug 2017 15:45 GMT
  • Updated: Wed, 30 Aug 2017 15:16 GMT

Relationship between begin/end coherent changes and presentation.coherent_access==true

  • Key: DDS15-202
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    We observe differences between DDS vendors related to begin/end_coherent_changes and presentation.coherent_access==true. The question is how begin_coherent_changes() should behave when presentation.coherent_access==false. Some vendors are silent and the operation just works, some return a RETCODE_ERROR saying begin_coherent_changes may only be called when presentation.coherent_access==true. To our idea the DDS spec should be precise so that users who separate code and qos (like DDS4CCM) do know what behavior they get

  • Reported: DDS 1.4 — Tue, 28 Mar 2017 15:05 GMT
  • Updated: Fri, 31 Mar 2017 16:55 GMT

No specification for unregister_type for TypeSupport interface

  • Key: DDS15-201
  • Status: open  
  • Source: DSTO ( Michael Mathers)
  • Summary:

    Currently there is no specification on the TypeSupport interface for an unregister_type operation as a companion to the register_type operation. This leads to variation between vendor implementations with respect to the lifecycle of type registrations. In the case of component-based architectural approaches it is desirable to be able to unload components to free resources. With no clear ability to unregister a type, it is not safe to unload component libraries while a container or manager of DDS infrastructure may still hold a reference to a no longer used type.

  • Reported: DDS 1.4 — Sun, 15 Jan 2017 23:13 GMT
  • Updated: Thu, 26 Jan 2017 21:03 GMT

Remove key_fields

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    We propose to remove key_fields completely from the DDS_TopicBase connector. The knowledge which fields are a key is specified in IDL using annotations and shouldn't be set again on the connector instance. This is duplicate information which could only lead to inconsistencies and possible problems. Until now we also have not seen any use case which require this information to be available as StringSeq as part of a connector instance.

  • Reported: DDS4CCM 1.1 — Mon, 7 Nov 2016 12:19 GMT
  • Updated: Fri, 18 Nov 2016 20:33 GMT

Syntax for Topic Names

  • Key: DDS15-200
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    For portability & interoperability it is necessary to know what the valid syntax of topic names can be, including valid characters. Some vendors support characters like '.' '/', ':' while others don't.

    The spec should make clear which characters are supported by all vendors

    Note that Appendix B does include a TOPICNAME syntax, but this section appears only related to content filters it is not clear if this would limit a Topic name in general. In Appendix B it says:

    TOPICNAME - A topic name is an identifier for a topic, and is defined as any series of characters ‘a’, ..., ‘z’, ‘A’, ..., ‘Z’, ‘0’, ..., ‘9’, ‘-’ but may not start with a digit.

    This seems limiting and also the "-" seems like an odd choice or perhaps a typo. "_" would be a more natural choice...

    Also it seems very restrictive to not allow things like "." or "/" or ":" given that large systems would want to organize their topic names and take advantage of this.

  • Reported: DDS 1.4 — Fri, 21 Oct 2016 14:29 GMT
  • Updated: Fri, 21 Oct 2016 14:37 GMT

Add a write_sequence() operation to DataWriter

  • Key: DDS15-198
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The DDS PIM DataReader read/take operations return a sequence. However there is no similar operation on the DataWriter.

    This makes the API non-symmetric.

    In fact the new DDS C++ PSM added a write() operation that takes a forward iterator. Which now is only available in this PSM and not the others.

    This operation should be added to the PIM as it is a generic capability that should be available on all PSMs.

  • Reported: DDS 1.4 — Fri, 1 Jul 2016 01:12 GMT
  • Updated: Fri, 1 Jul 2016 01:12 GMT

Correct inconsistency on the URLs for the machine readable documents

  • Status: open  
  • Source: Real-Time Innovations ( Sumant Tambe)
  • Summary:

    The machine-readable file URLs on the
    FTF report (ptc/15-09-21) and FTF 2 convenience document
    (ptc/15-09-13) disagree.

    The correct ones are the ones used in the FTF 2 document because these are consistent which the reference schema files that appear in the XML files also included as part of the specification.

    If nothing is done the URLs on the cover of the report (ptc/15-09-21) take precedence over the ones in the FTF2 specification, so it is imperative to re-issue the report to correct this.

  • Reported: DDS-Java 1.0 — Thu, 19 May 2016 00:35 GMT
  • Updated: Thu, 19 May 2016 00:37 GMT

Clarify behavior of "take" operation

  • Key: DDS15-175
  • Legacy Issue Number: 10365
  • Status: open  
  • Source: Honeywell ( James Richardson)
  • Summary:

    Context: "The act of taking a sample removes it from the DataReader so it cannot be ‘read’ or ‘taken’ again." See my earlier comment. Apparently if there are other DataReaders for the same Topic and the same Subscriber, their samples are not disturbed. Assuming this is true, it should be stated.

  • Reported: DDS 1.2 — Fri, 22 Sep 2006 04:00 GMT
  • Updated: Tue, 17 May 2016 18:40 GMT

Behavior of multiple calls to create_topic -- Section: 2.1.2.3.2

  • Key: DDS15-180
  • Legacy Issue Number: 10360
  • Status: open  
  • Source: Honeywell ( James Richardson)
  • Summary:

    Context: "A Topic is identified by its name, which must be unique in the whole Domain." There is nothing in the description of create_topic that indicates that this constraint is enforced. Is it possible for multiple domain_participants to execute create_topic with the same name? What happens if they specify different types?

  • Reported: DDS 1.2 — Fri, 22 Sep 2006 04:00 GMT
  • Updated: Sat, 2 Apr 2016 20:36 GMT

Clarify RxO behavior for DURABILITY Qos

  • Key: DDS15-196
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    This issue was reported by email by Virginie Watine from THALES.

    Assume a DW is TRANSIENT and a DR is VOLATILE.
    According to the RxO policy attached to that QoS, they should match (all the other factors being OK). Is it correct?
    (at least that is what the spec says)

    But what are the first samples that are provided to the DR? I assume it receives only the ones that are produced after its creation (as opposed to a DR with TRANSIENT which receives also the ones that have been produced before its creation). Is it correct?
    (that point is not explained in the spec – or at least is not easy to find)

  • Reported: DDS 1.4 — Thu, 31 Mar 2016 18:04 GMT
  • Updated: Thu, 31 Mar 2016 18:07 GMT

[DDS] Data types permissible as topic key fields

  • Key: DDS15-30
  • Legacy Issue Number: 14089
  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    The DDS 1.2 standard does not mention which IDL data types are permissible as
    key fields for topic data types.

    As the data types for keys, at least enumeration types and integral types
    (octet/short/long etc.) should be permissible.
    However, it would be desirable to also allow simple (non-array) typedefs
    of these types.

  • Reported: DDS 1.2 — Wed, 22 Jul 2009 04:00 GMT
  • Updated: Tue, 15 Mar 2016 16:05 GMT

Force KEEP_ALL to be RELIABLE Section: 2.1.3.18

  • Key: DDS15-171
  • Legacy Issue Number: 10369
  • Status: open  
  • Source: Honeywell ( James Richardson)
  • Summary:

    Context: "If the kind is set to KEEP_ALL, then the Service will attempt to maintain and deliver all the values of the instance to existing subscribers. The resources that the Service can use to keep this history are limited by the settings of the RESOURCE_LIMITS QoS. If the limit is reached, then the behavior of the Service will depend on the RELIABILITY QoS. If the reliability kind is BEST_EFFORT, then the old values will be discarded." This violates the ordinary English meaning of KEEP_ALL. Can't the same effect be achieved by specifying KEEP_LAST with history_depth=max_samples_per_instance? If so, then KEEP_ALL should not be allowed for RELIABILITY=BEST_EFFORT.

  • Reported: DDS 1.2 — Fri, 22 Sep 2006 04:00 GMT
  • Updated: Tue, 15 Mar 2016 14:41 GMT

Cancel coherent update

  • Key: DDS15-45
  • Legacy Issue Number: 10812
  • Status: open  
  • Source: Anonymous
  • Summary:

    Problem:
    It is possible that a transaction needs to be canceled, for example because one of the participating writers gets blocked and finally stops while returning a timeout. This might lead to the situation in which you want to cancel all preceding writes as well.

    Solution:
    To be able to cancel such a transaction, we propose to add an additional operation like e.g. cancel_coherent_changes would then remove all samples that have already been written since the last begin_coherent_changes.

  • Reported: DDS 1.2 — Mon, 5 Mar 2007 05:00 GMT
  • Updated: Tue, 15 Mar 2016 14:23 GMT

Specify Publishers with PRESENTATION access_scope GROUP should use same order for DataWriters

  • Key: DDS15-190
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    When PRESENTATION access_scope is GROUP samples need to e ordered across DataWriters. This is very hard/impossible if some writers use source_timestamp and others reception timestamp order

    Propose that this is not allowed. If PRESENTATION access_scope is GROUP then all writers must have same ORDER. E.g. as writers are created if one is not consistent it should give an error

  • Reported: DDS 1.4 — Tue, 15 Mar 2016 14:11 GMT
  • Updated: Tue, 15 Mar 2016 14:11 GMT

The file dds-xtypes_type_definition.xsd should not define a targetNamespace

  • Key: DDSWEB11-2
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    This is the so called "Chameleon" Schema and it is best for XSDs that define "building blocks of XSD types" which may be then imported/included (included) by other XSDs.

    See http://www.xfront.com/ZeroOneOrManyNamespaces.html

    The issue is this. If a XSD is imported into another one that has a different target namespaces it will cause some "usability problems" in the resulting XML documents. This is only an issue when the XSD is imported in order to be a building block of the resulting XSD and is not natural for the end user to have to understand the original XSDs as separate conceptual units.

    For example if we wanted to create a "dds.xsd" that used a target namespace such as http://www.omg.org/dds/ and this imports XSDs like XTYPES with target namespace http://www.omg.org/xtypes/ and dds4ccm with target namespece (http://www.omg.org/dds4ccm). Note these are not the actual namespaces in those documents. I am selecting this to simplify the description.

    Then each time an element from a different namespace it would need to explicitly add the attribute xmlns to the element. This would happen for both for the included DDS_QosProfiles.xsd (it uses the namespace http://www.omg.org/dds4ccm) and for dds-xtypes_type_definition.xsd (it uses the namespace http://www.omg.org/xtypes/) the resulting references to elements in that XSD would need to specify the namespace using the "xmlns" attribute as in:
    <publisher name="ShapePublisher">
    <publisher_qos>
    <partition xmlns="http://www.omg.org/dds4ccm/">
    <name>
    <element>A</element>
    </name>
    </partition>
    <publisher_qos>
    </publisher>

    This is cumbersome and hard to get right for the user. Also many XML editors do not provide assistance with it. The best solution would have been for the referenced standards (DD4CCM and XTYPES) to define their XSD schemas without a targetNamespace. This would have allowed the namespace to be defined in the XSD that includes them.

    This is a common approach known as using “Chameleon Schemas”. These specifications could also preserve the use of their namespace by putting the namespace in a separate XSD that “includes” the Chameleon Schema. To address this an issue should be filed against those specifications to change their schemas into Chameleon schemas.

    There is no loss of generality as it is always possible to define another XSD that simply includes the Chameleon one and adds the namespace.

  • Reported: DDS-WEB 1.0b1 — Sat, 19 Sep 2015 06:07 GMT
  • Updated: Thu, 8 Oct 2015 14:21 GMT

JSON Missing

  • Key: DDSWEB11-1
  • Legacy Issue Number: 19246
  • Status: open  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    Pratically nobody uses XML in combination with REST today, yet the mars/13-05-21 only provides for this option.

    This is a critical issue that makes the submissing practically useless.

  • Reported: DDS-WEB 1.0b1 — Fri, 21 Feb 2014 05:00 GMT
  • Updated: Thu, 8 Oct 2015 14:21 GMT
  • Attachments:

missing space "eachother"

  • Legacy Issue Number: 19818
  • Status: open  
  • Source: Anonymous
  • Summary:

    There is a missing space in paragraph 5 of "eachother" should be "each other"

  • Reported: DDSI-RTPS 2.0b1 — Wed, 22 Jul 2015 04:00 GMT
  • Updated: Wed, 22 Jul 2015 16:01 GMT

Semantics instance liveliness and ownership unclear

  • Key: DDS15-49
  • Legacy Issue Number: 10808
  • Status: open  
  • Source: Anonymous
  • Summary:

    Problem:
    From the OMG DDS specification the semantic of the liveliness of a reader instance is not clear, when it is exclusively owned by a writer. The LivelinessChangedStatus of the reader indicates how many active and inactive writers communicate with the reader. In case of exclusive ownership it is unclear whether only the reader sees the strongest writer as an active writer, or when it must see all available writers, since the reader will only receive samples from the strongest writer.

    Solution:
    Do we need to clarify this?

  • Reported: DDS 1.2 — Mon, 5 Mar 2007 05:00 GMT
  • Updated: Mon, 20 Apr 2015 12:40 GMT

Get entity enabled state

  • Key: DDS15-44
  • Legacy Issue Number: 10813
  • Status: open  
  • Source: Anonymous
  • Summary:

    Problem:
    It should be possible to obtain the "enabled" state of an Entity

    Solution:
    We propose to add a boolean operation to the Entity called something like is_enabled().

  • Reported: DDS 1.2 — Mon, 5 Mar 2007 05:00 GMT
  • Updated: Mon, 20 Apr 2015 12:40 GMT

All IDL should use local interfaces

  • Key: DDS15-29
  • Legacy Issue Number: 15945
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    DDS uses IDL and defines its interface as regular interfaces, but these should all be local interfaces

  • Reported: DDS 1.4 — Thu, 13 Jan 2011 05:00 GMT
  • Updated: Mon, 20 Apr 2015 12:40 GMT

Inconsistent lookup semantics

  • Key: DDS15-47
  • Legacy Issue Number: 10810
  • Status: open  
  • Source: Anonymous
  • Summary:

    Problem:
    There is inconsistency in the spec: on page 2-24 there is a list of operations that is allowed when the DomainParticipant is in the disabled state. This list does not include any lookup operations. However, on page 2-14 there is also a list of operations which may be invoked when Entity has not yet been enabled, and here the 'lookup' operations are mentioned. So the questions are whether the DomainParticipant should be allowed to perform "find_topic" and "lookup_topicdescription" operations when it is in disabled state.

    Solution:
    Our proposal is that find_topic should not be allowed in this case, but lookup_topicdescription should be allowed. Also all delete operations including the delete_contained_entities should be allowed

  • Reported: DDS 1.2 — Mon, 5 Mar 2007 05:00 GMT
  • Updated: Mon, 20 Apr 2015 12:40 GMT

Missing TypeSupport operations

  • Key: DDS15-48
  • Legacy Issue Number: 10809
  • Status: open  
  • Source: Anonymous
  • Summary:

    Problem:
    In IDL, the operations on the TypeSupport interface are commented out: all operations are defined in its specialized sub-classes. That is strange, since all TypeSupport operations have a signature that is completely independent of this specific type.

    Solution:
    We propose to promote all these operations to the TypeSupport class itself, and thus to uncomment these operations in the TypeSupport interface.

  • Reported: DDS 1.2 — Mon, 5 Mar 2007 05:00 GMT
  • Updated: Mon, 20 Apr 2015 12:40 GMT

Extend Topic with method to retrieve key fields

  • Key: DDS15-11
  • Legacy Issue Number: 14829
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    For template meta programming as we are doing for the dds4ccm spec, it is needed to know at runtime time of the user program whether a topic has a key or not, because behaviour is dependent on that. we propose to add methods to the Topic to get its key fields

  • Reported: DDS 1.2 — Wed, 2 Dec 2009 05:00 GMT
  • Updated: Mon, 20 Apr 2015 12:40 GMT

Attributes_on_the_data

  • Key: DDS11-10
  • Legacy Issue Number: 6733
  • Status: open  
  • Source: Boeing ( Matthew Liu)
  • Summary:

    Attributes_on_the_data Issue [Boeing SOSCOE] ? The DDS API forces the data to be written to be encapsulated into a single IDL structure. Moreover IDL-generated structures do not support pointers to other structures. ? These limitations are constraining the kinds of things that a layer such as SOSCOE can do. For example, it would be desirable to allow the DDS DataWriter to filter or perform other actions on information that is not “part of the data”. Not “being part of the data” means the attributes: • Are propagated along with the message (1-to-1 relationship) to the reader. • May be used for filtering, or intercepted by layers above DDS (e.g. SOSCOE). • Do not get passed to the read or take calls ? The problem is that since the DataWriter takes a single “compacted” data-structure, any additional information, whether introduced by the user-app or the SOSCOE layer must be somehow copied into the data and thus force the introduction of new data-types. ? In other words it would be desirable for DDS so provide some hook that would allow a user or a layer such as SOSCOE to add additional information to the “user-level” data that is then used by DDS to filter on. The filtering would then occur on the additional information provided by the SOSCOE layer and not by the application that is writing the data. There are three main ways to use this • The additional SOSCOE information, would be supplied in conjunction with every write operation. So the filtering is evaluated on every write. This may be too inefficient in some cases and therefore there should also be a way to turn off the filtering also (e.g. by providing an empty set of attributes). • The additional SOSCOE information is provided by some other means than a parameter to the write (e.g. a set_attributes(InstanceHandle_t, Attributes)) call on the DataWriter) so that the filtering does not examine every data-sample for filtering; rather it is performed on information that changes at much slower rate. For example, there is the concept of a “geographical region” in which the information lives; the filtering applies to getting information that is within our region of interest, and re-evaluation of the filter only occurs each time the region changes which is much rarer than the actual data changing. • The attributes could be attached to the instance by means of a separate API. These additional attributes would then be passed to the serialization as well as the filter operations. The deserialization would also need to handle them. This approach would meet SOSCOE’s requirements and has the advantage of not forcing filters to be re-evaluated each write; they would only be evaluated if the attributes change. Proposal [Boeing SOSCOE] ? Add a set of attributes (name-value pairs) (ref Issue#2035) that are provided separately from the data and can then be used to do the filtering. ? This allows reusing the same data with different attributes and thus filter it differently. ? Name-value pair representation would also potentially allow sending a partial list of attributes ? Filtering can be done on this name-attribute pairs. Similar to ContentFilteredTopic but the filtering is done on the attributes, not the data. Note that the ContentFilteredTopic may not know enough about the data. The data may be marshaled and encrypted. The brokering of the data may be done by nodes that do not know how to unmarshal/decrypt the data.

  • Reported: DDS 1.0b1 — Thu, 18 Dec 2003 05:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

Make all arguments inout

  • Legacy Issue Number: 15287
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    In order to have the same memory management for the single data and datum operations, we propose to make all out arguments inout. This impacts:
    Reader::read_one_last, info to inout
    Getter::get_one, all arguments to inout

  • Reported: DDS4CCM 1.0 — Thu, 10 Jun 2010 04:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

DDS_TopicBase connector lacks type_name

  • Legacy Issue Number: 18499
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    When registering a topic to DDS we need to use an unique combination of domain id, topic name, and typename. Recent discussions revealed that there is no standard for a default typename, but also there could be reasons why an user don't want to use the default type_name. We propose to add to the DDS_TopicBase connector a type_name attribute, which when set, will be used as type_name, if not set, the DDS vendor default type_name will be used for the topic type

  • Reported: DDS4CCM 1.0 — Sun, 24 Feb 2013 05:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

Name patterns should support underscores and scoping

  • Legacy Issue Number: 17399
  • Status: open  
  • Source: Northrop Grumman ( Trent Nadeau)
  • Summary:

    The name patterns in the normative XML schema in Annex C do not support underscores. For detailed or lengthy profile names (especially including internal acronyms), using underscores significantly improves readability.

    In addition, the elementName type is used both for the name and base_name attributes of the qosProfile type; however, the pattern for the elementName type does not support scoping, which is needed for inheritance between profiles in different libraries.

    In order to address these, I propose that the elementName and topicNameFilter patterns be changed from:

    "([a-zA-Z0-9 ])+"

    to:

    "^((:?([a-zA-Z0-9_])(:[a-zA-Z0-9_]))*)$"

    The latter is the currently commented-out pattern in the schema with the addition of the underscore.

  • Reported: DDS4CCM 1.0 — Wed, 30 May 2012 04:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

Ref-232 Allow_reader_to_access_partition_of_writer

  • Key: DDS11-2
  • Legacy Issue Number: 6860
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Some applications would like to see originating partition as part of
    sample info. Thisis specially important if the application subscribes
    with wildcards to any partition

    There is a concern, however, with putting the information in the
    SampleInfo as it is a cost that has to be paid every time a sample is
    returned.

    Perhaps the SampleInfo is just an interface so that there are
    operations to access stuff and the cost can be performed as needed.

    **PROPOSAL**

    No concrete proposal as it would be hard to represent in IDL but it
    would be nice if such API was offered.

  • Reported: DDS 1.0b1 — Tue, 23 Dec 2003 05:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

ref-1053 Missing is_composition

  • Key: DDS11-3
  • Legacy Issue Number: 7065
  • Status: open  
  • Source: THALES ( Virginie Watine)
  • Summary:

    The is_composition operation is described in the PIM, but is not in the IDL.
    It concerns the valuettype RefRelation, ListRelatrion, IntMapRelation, and
    StrMapRelation.

        • Proposal
          add the following operation
          boolean is_composition(); on those valuetypes
  • Reported: DDS 1.0 — Thu, 4 Mar 2004 05:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

Make topic_name changeable

  • Legacy Issue Number: 16603
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    In some systems they are receiving the topic_name after startup, at some moment they just get it and want to set it to a new value. We propose to remove topic_name, there seems to be no technical or structural reason not to allow the user to change the topic_name after the connector fragment has been initialized

  • Reported: DDS4CCM 1.1 — Fri, 14 Oct 2011 04:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

Section 8.4.4 talks about threading, but this section is really under specified

  • Legacy Issue Number: 14060
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Section 8.4.4 talks about threading, but this section is really under specified. It should be much clearer how threading works and what guarantees are given.

  • Reported: DDS4CCM 1.0b1 — Wed, 8 Jul 2009 04:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

Detection_of_dynamic_qos_failure Issue

  • Key: DDS11-4
  • Legacy Issue Number: 6737
  • Status: open  
  • Source: Boeing ( Matthew Liu)
  • Summary:

    Issue# 2080 Detection_of_dynamic_qos_failure Issue [Boeing SOSCOE] ? DDS does not provide the complete means for a user of the DDS API to detect “dynamic” failure of QoS and other “configuration” changes that may be important. For example: • LATENCY_BUDGET (on the receiver side). • Messages dropped due to lack of resources (on the receiver side) • Messages lost when QoS is RELIABLE KEEP_ALL (related to Issue# 2070) • Changes on the ownership of data-instances. • Addition of a remote DataReader that matches a local DataWriter. Removal of a remote DataReader that matches a local DataWriter. • Addition of a remote DataWriter to a local DataReader; removal of a remote DataWriter to a local DataReader. • Changes in “liveliness” of a remote DataReader of a local DataWriter. The symmetric situation, that is changes in liveliness of a remote DataWriter to a local DataReader does have a listener in the DataReader. Proposal [Boeing SOSCOE] ? Add the missing operations to the proper listeners

  • Reported: DDS 1.0b1 — Thu, 18 Dec 2003 05:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

Let the user be able to instantiate one dds connector

  • Legacy Issue Number: 15238
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Currently the DDS4CCM specification puts within the Typed module the extended ports, but also the dds connectors. The drawback of this approach is that when the user instantiates this templated module he gets both connectors, even when he is only interested in using one. We propose to move the DDS_State and DDS_Event to their own typed module so that the end user can instantiate just one of these connectors. This also makes it easier for a code generator to just generate the implementation for a specific connector, at this moment there is nothing in idl which can be used to determine whether the end user wants to use DDS_Event and/or DDS_State

  • Reported: DDS4CCM 1.0 — Mon, 3 May 2010 04:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

Extension_to_the_query_language

  • Key: DDS11-12
  • Legacy Issue Number: 6732
  • Status: open  
  • Source: Boeing ( Matthew Liu)
  • Summary:

    Issue# 2035 Extension_to_the_query_language Issue [Boeing SOSCOE] ? SOSCOE has a need to allow function expressions to be added to the query language ? SOSCOE has created a provider property class that allows applications to have attributes with typed values; it becomes a triplet (name, type, value). Currently the “type” only supports simple types, but the intent is to extend it to well-known structured types. Proposal [Boeing] ? Extend the query language to allow user defined function expressions ? Extend the query language to allow user defined structured types

  • Reported: DDS 1.0b1 — Thu, 18 Dec 2003 05:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

Ref-167 Malloc_required_for_get_default_qos

  • Key: DDS11-1
  • Legacy Issue Number: 6852
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The problem is with the QoS that have dynamically-sized things inside,
    namely PARTITION (string) and USER_DATA (sequence). These fields force
    a "malloc" each time the structure is copied out (even if a
    pre-allocated structure is passed in)

    Moreover copies may also result in memory allocation and frees. Can't
    this be avoided?

    In the C mapping copies would then require the use of an explicit
    function rather than direct assignment

    One possibility would be to refactor the USER_DATA and PARTITION into
    a more generic NAME-value pair infrastructure. Allow these to be set
    with a different API (i.e. not by means of QoS, but as direct
    operation on the Entity). These avoids all the above problems

    **PROPOSAL**

    No concrete proposal yet

  • Reported: DDS 1.0b1 — Tue, 23 Dec 2003 05:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

Additional_qos_THROUGHPUT Issue

  • Key: DDS11-5
  • Legacy Issue Number: 6741
  • Status: open  
  • Source: Boeing ( Matthew Liu)
  • Summary:

    Issue# 2110 Additional_qos_THROUGHPUT Issue [Boeing SOSCOE] ? The DDS specification has no provision to control the amount of bandwidth that the different entities can consume. ? Ideally the user of the DDS API could indicate bandwidth limits and also reserve bandwidth in a way that could then be mapped by the service into the underlying transport facilities, for the cases where those facilities are there. ? At a minimum the user would like to indicate bandwidth limits in bytes per second. Although low level, this kind of unit would make more sense than something like messages-per-second because each data-type, or maybe even each particular write to an instance may be of a different size. ? There is also the case where the communication infrastructure needs to communicate to the application how much bandwidth it can expect to have. This can also change dynamically based on current network conditions. The application can then take advantage of this knowledge to configure itself so that only the more important messages are sent. ? All we need is something that can be passed to the API; the middleware does not need to do anything with it. ? Not clear how it can be implemented or how it interacts with things. But there is a requirement that there is a way to specify this QoS. This comes from streaming type applications. They want to be able to reserve some bandwidth.

    Proposal [Boeing SOSCOE] ? No concrete action is proposed at this time. The precise definition is fairly involved. However there is a general desire to be able to allocate and control bandwidth utilization so it would be nice if approaches would be explored. Comment [RTI] ? The fundamental problem is how to map this to the DDS model. The DDS spec. does not have a model for the Transport or expose to the user which entities (writers / readers) are associated with each transport. It is in fact possible that a single write to an Entity may result on multiple messages each over a different transport, its all hidden from the application. ? So the first thing would be to introduce some model on how the entities interact with the transport. Where are the TranportPlugins installed (globally, per participant, per Connector), what are the transport “resources” (e.g. in RTI’s TPI the SendResource, and ReceiveResource) and how they map to the DDS entities. ? Introducing a QoS that limits the bandwidth used by each DataWriter would be straightforward. Similarly for a QoS that attempts to reserve certain amount of bandwidth for a particular DataWriter. The DDS implementation who knows what transports it is associated with would then map it to the appropriate transport calls. The problem is that it would apply indiscriminately to all transports. ? For the case of EndpointConnectors if transports were explicitly associated with the connector, then it may also be possible to set this kind of QoS. It would then apply to all the DataReaders and DataWriters in the EndpointConnector. ? Regarding the listeners, presumably the callbacks would refer to the bandwidth changes on each transport resource. So for the user of the DDS API to make sense of this they would need that mode/map to DDS entities.

  • Reported: DDS 1.0b1 — Thu, 18 Dec 2003 05:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

DDS ISSUE# 50] Multiple observers sharing a datareader

  • Key: DDS11-8
  • Legacy Issue Number: 6850
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Ref-166 Allow_multiple_observers_on_a_datareader

    Currently there can only be one "observer" on each DataReader. In
    other words, it is not possible to have some independent application
    observe the data that a DataReader gets without at the same time
    affecting the sample-state and this the behavior of other
    data-readers.

    It is often the case that debugging tool, an interceptor or some other
    utility would like to access the data available on the DataReader
    without making its presence noted and thus changing the behavior of
    other readers. This is particularly relevant for the built-in topics.

    **PROPOSAL**

    Add an operation: DataReader:: create_view that returns a
    DataReader. This affects 2.2.2.4.1 and the IDL in 2.2.3

    This DataReader is a view on the same DataReader so it has the same
    QoS and listeners.

    The application can use the original DataReader or a view to perform
    any operations allowed on a DataReader.

    A change of QoS or listener in one view or on the main object affects
    the main object and all views.

    Read and Take operations act independently on each view. The
    application must take the data from all views before it can be removed
    from the infrastructure and the resources reclaimed.

  • Reported: DDS 1.0b1 — Tue, 23 Dec 2003 05:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

Filtered_out_lifecycle_state Issue

  • Key: DDS11-11
  • Legacy Issue Number: 6734
  • Status: open  
  • Source: Boeing ( Matthew Liu)
  • Summary:

    Issue# 2050 Filtered_out_lifecycle_state Issue [Boeing SOSCOE] ? Sometimes the receiving application needs to know that data is being filtered-out. In some use cases this situation is different from the case where data is not being produced. ? A related question is whether the presence of filters (content-based, time-based) can be the cause of a DataReader to miss a requested deadline. It depends whether the deadline is interpreted to mean that data is produced at that rate, or else that data that passes the filter must be produced at that rate. ? SOSCOE thinks that the filter should not cause a deadline to be missed, rather the reader should receive explicit notification that the data was filtered-out. At least that data is starting to be filtered-out, not necessarily each time something is filtered out. ? In any case filters should not cause loss of liveliness. ? A typical use-case may be that a display-device is showing the tanks in a certain area (the one relevant to that particular display). The display has a filter to indicate that region of interest. When the tank leaves the region of interest, the display wants to know that. That way it can stop displaying it; however the display does not want to internally discard all the information about the tank immediately in case the tank appears again. The display needs to therefore know that the data for that tank instance is being filtered out. This situation is different from missing a deadline which may indicate that the data is not being generated as intended. ? Note that if a filter is present and a deadline is set, it would be necessary for the implementation to send some information to the reader so that the deadline would not fire. However, bandwidth is very important in some cases, so sending any information when the data is being filtered may be too expensive. ? One option may be to have the application change the deadline to a larger value when it finds out that the data is being filtered. Another possibility is to specify two values of the deadline, one when the data is not filtered and the other when the data is being filtered (the second one could be specified along with the filter). In this case the information that the middleware implementation sends to avoid missing the deadline could be sent at the lower rate. ? This facility may be hard to implement for all cases. For example in the case where the filter is applied at the source and the reliability QoS is BEST_EFFORTS it is not guaranteed that said notification would be received by the reader. If this is indeed the case then we would not require the filtered-out notification to be guaranteed if the reliability setting is BEST_EFFORTS. Proposal [Boeing SOSCOE] ? Add FILTERED_OUT lifecycle state to allow user to know that data is being filtered out. The usage of this state should be an option for the user. ? If the option is on, the state is set on a sample when the sample was filtered out and the previous sample was not filtered out. Only one notification of filtering is required, not one per sample being filtered. ? Optionally introduce a deadline_while_filtered QoS on the ContentFilteredTopic which would transition the deadline to a larger value when the data is being filtered.

  • Reported: DDS 1.0b1 — Thu, 18 Dec 2003 05:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

StateListenerControl:: is_filter_interpreted should be documented as optional

  • Legacy Issue Number: 15313
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    is_filter_interpreted has to be documented as optional, not just the filtering of out.

    This is because there is no required feature in the DDS core or part of the DDS DCPS specification which provides the INSTANCE_FILTERED_IN or INSTANCE_FILTERED_OUT status. Near as I can tell, this functionality comes as part of the DLRL layer "Selection_Listener" object (8.1.6.3.13).

  • Reported: DDS4CCM 1.0 — Tue, 29 Jun 2010 04:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

Layout issue test

  • Legacy Issue Number: 15286
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    See page 35, line 35,

    read_one_last returns the last sample of a given instanceThe targeted

    Missing dot after instance

  • Reported: DDS4CCM 1.0 — Thu, 10 Jun 2010 04:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

DDS ISSUE# 51] Avoid use of dynamic memory for manipulating QoS

  • Key: DDS11-9
  • Legacy Issue Number: 6851
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Ref-122 Make_incompatible_qos_fixed_size

    The structures RequestedIncompatibleQosStatus and
    RequestedIncompatibleQosStatus each contain a sequence listing each
    QoS and the corresponding count.

    However given that we have explicitly enumerated all the QoS policies
    it would be far simpler to replace this hard-to-use sequence with the
    actual counts for each QoS

    One possibility would be to Replace this "policies" sequence with
    explicit count for each QoS. Anotehr possibility would be to use the
    mask. To state which QoS are incompatible but loose the count.

    **PROPOSAL**

    No concrete proposal yet

  • Reported: DDS 1.0b1 — Tue, 23 Dec 2003 05:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

attributes as part of porttype do appear on port and mirrorport

  • Legacy Issue Number: 15282
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    This version of DDS4CCM adds the functionality to specify attributes as part of a porttype. This porttype can than be used by a component or connector as port or as mirrorport. The problem we see is that the attribute appears on the component/connector that uses the porttype as port or mirrorport. To our opinion the grammer should be more specific where the attribute appear, we propose to add the attribute by default to the component that uses the porttype as port, when the attribute has to appear on the component that uses the port as mirrorport we propose to define the attribute as:
    mirror attribute my_attribute;

    In case of DDS4CCM we see that the dds4ccm DDS_State connector gets 4 attributes which is what we want, but any user component using the porttype also gets a filter attribute

  • Reported: DDS4CCM 1.0 — Tue, 8 Jun 2010 04:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

Key_separate_from_data Issue

  • Key: DDS11-7
  • Legacy Issue Number: 6742
  • Status: open  
  • Source: Boeing ( Matthew Liu)
  • Summary:

    Issue# 2120 Key_separate_from_data Issue [Boeing SOSCOE] ? Keyed data is important but having the key being part of the data leads to duplication or copying into other types of structures. ? Note that this issue is not too critical. SOSCOE has worked around it by creating a container type that copies the data inside. Proposal [Boeing SOSCOE] ? Split the keys out from the data type. The idea would be to have the write operations take two parameters, one for the data and the other for the key. The same would apply to the reader side. Comment [RTI] ? Maybe this can already be accommodated with a small extension of the DDS API. If we had a DataReader::register_type that took only the key, then we could say that provided that the InstanceHandle_t is passed to the write() operation it is not required for the data to contain the key. ? This issue is exacerbated by the fact that IDL does not allow structures to contain pointers to other structures. If this limitation was not present, then it would reasonable for the user of the DDS API to define a wrapper data-type that would just contain pointers to the Key and to the data-blub. Note that there are other languages’ such as ITU’s ODL (object description language) that are extension to OMG’s IDL and do allow this pointer syntax. However, for now we would have to rely on the individual vendors to implement this feature which would be technically quite simple. ? Separating the key from the data would require DDS that the definition of a Topic would involve not just the specification of the data-type, but also the key-type. Also the implied IDL that represents the type-specific data-writers and data-readers would need to now be generated for each combination of data-type and key-type. There is no standard way to indicate in the IDL file what those combinations are so it would not be so simple for the code-generator to determine this. These problems do not arise if we followed the first approach to allow pointers within the structures. Comment [Boeing SOSCOE] ? The register instance_by_key, would also help this particular scenario.

  • Reported: DDS 1.0b1 — Thu, 18 Dec 2003 05:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

DDS ISSUE# 47] Allow application to not specify a timstamp

  • Key: DDS11-6
  • Legacy Issue Number: 6847
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Ref-157 Ability_of_the_application_to_not_specify_a_timestamp

    Getting a timestamp can be an expensive operation. It is desirable
    that the application can configure a datawriter such that it does not
    get/send the timestamp

    The option of letting the application not set a timestamp by means of
    calling write_w_timestamp() and passing TIME_INVALID is not good
    because certain QoS such as DESTINATION_ORDER BY_SOURCE_TIMESTAMP
    require this. Also it would be hard to manage if the application could
    sometimes specify a timestamp and sometimes not for the same
    DataWriter/instance.

    **PROPOSAL**

    Add an "receptionTimestamp" field to the SampleInfo.

    Make the DESTINATION_ORDER also an offered QoS on the DataWriter. For
    compatibility BY_SOURCE_TIMESTAMP>BY_DESTINATION_TIMESTAMP, that is if
    you offer SOURCE_TIMESTAMP you can accommodate both kinds or readers.

    Add the QoS WRITER_TIMESTAMP and READER_TIMESTAMP.

    The SOURCE_TIMESTAMP has a kind that can be NOT_PROVIDED and PROVIDED.
    And is set on both the DataWriter and the DataReader and also on
    Topic. It has request/offered semantics where PROVIDED > NOT_PROVIDED.

    The RECEPTION_TIMESTAMP is only set in the DataReader or Topic and has
    a kind that can be NOT_PROVIDED and PROVIDED.

    The SOURCE _TIMESTAMP indicates that data must be timestamped when
    sent.

    The RECEPTION_TIMESTAMP indicates that data must be timestamped when
    received.

    DESTINATION_ORDER BY_SOURCE_TIMESTAMP requires that the SOURCE
    _TIMESTAMP is set to PROVIDED otherwise we will flag an INCOMPATIBLE
    QoS.

    If SOURCE _TIMESTAMP.kind== NOT_PROVIDED, then the DataWriter ::write
    operation does not put any timestamp and the xxx_w_timestamp operation
    silently ignores the timestamp and behaves normally. Upon reception
    the sourceTimestamp field in the SampleInfo will be TIME_INVALID

    If SOURCE _TIMESTAMP.kind== PROVIDED, then the write operation will
    automatically get the timestamp by some means (i.e. the middleware
    will do it), the xxx_w_timestamp will allow the application to provide
    the timestamp. In either case the data will be sent with a timestamp
    and the SampleInfo.sourceTimestamp field will never be TIME_INVALID

    It is allowed for RECEPTION_TIMESTAMP to be NOT_PROVIDED and the the
    DESTINATION_ORDER to be BY_RECEPTION_TIMESTAMP because what matter is
    the relative order and that does not require to get a true
    timestamp. If this is too confusing we could rename
    BY_RECEPTION_TIMESTAMP to be BY_RECEPTION_ORDER

    If RECEPTION_TIMESTAMP is NOT_PROVIDED then the
    SampleInfo.receptionTimestamp will always be TIME_INVALID. Otherwise
    it will never be TIME_INVALID By default the source-timestamp is
    provided.

  • Reported: DDS 1.0b1 — Tue, 23 Dec 2003 05:00 GMT
  • Updated: Wed, 11 Mar 2015 11:15 GMT

proposed simple spec extension for common DDS use case

  • Legacy Issue Number: 18992
  • Status: open  
  • Source: THALES ( Virginie Watine)
  • Summary:

    In paragraph 7.2.2.1.2, a note about interface Reader says:

    << Note: This interface is the basis for a passive data reader (i.e. a component that just looks at the data as they are). It is also very useful for the reactive data getters (i.e. components that need to react to new data, whether they choose to get them in pull mode or be notified in push mode) in their initialization phase. This is the reason why all the DDS ports on the subscribing side will embed a Reader basic port.>>

    This note may let people think that it is ONLY useful in initialisation phase, which is not true. A clarification sentence would avoid that misunderstanding.

  • Reported: DDS4CCM 1.1 — Wed, 9 Oct 2013 04:00 GMT
  • Updated: Fri, 6 Mar 2015 20:58 GMT

The model file ptc/11-02-11 is not valid UML – it has eclipse namespace and extraneous elements

  • Legacy Issue Number: 16092
  • Status: open  
  • Source: Adaptive ( Mr. Pete Rivett)
  • Summary:

    The model file ptc/11-02-11 is not valid UML – it has eclipse namespace and extraneous elements

  • Reported: DDS4CCM 1.0 — Mon, 21 Mar 2011 04:00 GMT
  • Updated: Fri, 6 Mar 2015 20:58 GMT

'synchrobnous' and 'asynchronous' switched

  • Key: DDS11-14
  • Legacy Issue Number: 12529
  • Status: open  
  • Source: Anonymous
  • Summary:

    While reading the DDS specification, 'Data Distribution Service for Real-time Systems Version 1.2 OMG Available Specification formal/07-01-01', I found that the 'synchrobnous' and 'asynchronous' was switched as highlighted in red in the below paragraph in the spec.

    <para #4, page 11>
    On the subscriber’s side however, there are more choices: relevant information may arrive when the application is busy doing something else or when the application is just waiting for that information. Therefore, depending on the way the application is designed, asynchronous notifications or synchronous access may be more appropriate. Both interaction modes are allowed, a Listener is used to provide a callback for synchronous access and a WaitSet associated with one or several Condition objects provides asynchronous data access

  • Reported: DDS 1.1 — Wed, 14 May 2008 04:00 GMT
  • Updated: Fri, 6 Mar 2015 20:58 GMT

section 2.1.2.5.2.16 "get_default_datareader_qos"

  • Key: DDS11-13
  • Legacy Issue Number: 10088
  • Status: open  
  • Source: Vanderbilt University ( Joe Hoffert)
  • Summary:

    I just wanted to let someone know about a typographical error I saw in the DDS spec 05-12-04-1. In section 2.1.2.5.2.16 "get_default_datareader_qos" The second paragraph reads in part

    "The values retrieved get_default_datareader_qos will match the set of values specified
    on the last successful call to get_default_datareader_qos, ..."

    I believe that last function should be "set_default_datareader_qos" rather than "get_default_datareader_qos". This is consistent with other sections of the specification and makes sense. I just wanted to point this out. It looks like there used to be this same kind of error for set_default_datawriter_qos but was fixed in 05-12-04-1. I didn't see this listed in the DDS issues.

  • Reported: DDS 1.1 — Tue, 8 Aug 2006 04:00 GMT
  • Updated: Fri, 6 Mar 2015 20:58 GMT

Inconsistency in close() operations wrt. "throw java.io.IOException" declaration

  • Legacy Issue Number: 18424
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Julien Enoch)
  • Summary:

    The Entity interface inherits from java.io.Closeable and overrides the close() operation to NOT throw java.io.IOException. But some inherited entities such as DataReader and DataWriter might have to throw IOException on closure as their implementation might use sockets.

    On the other hand the Sample.Iterator interface also inherits from java.io.Closeable but its close() operation declare to throw IOException. There should not be any IOException in this case since the Samples are already received by the DaraReader

  • Reported: DDS-Java 1.0 — Wed, 6 Feb 2013 05:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT

Operations with Collection as parameter should provide a "varargs" alternative

  • Legacy Issue Number: 18423
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Julien Enoch)
  • Summary:

    The use of Collection for providing a single "parameter" is rather cumbersome and could be greatly improved by providing a "varargs" alternative.

    Here is an example that showcases the issue:
    p = dp.createPublisher(
    dp.getDefaultPublisherQos().withPolicy(
    pf.Partition().withName(Arrays.asList("MyPartition"))
    ));

    In this case a withName(String... names) operation will simplify the code as shown below:
    p = dp.createPublisher(
    dp.getDefaultPublisherQos().withPolicy(
    pf.Partition().withName("MyPartition")
    ));

    Moreover the use of Collection type could lead to compilation error as in the following case:

    statusCondition.setEnabledStatuses(Arrays.toList(DataAvailableStatus.class));

  • Reported: DDS-Java 1.0 — Wed, 6 Feb 2013 05:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT

StatusCondition should be immutable and have fluent API

  • Legacy Issue Number: 18430
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Julien Enoch)
  • Summary:

    The StatusCondition should be immutable and follow the same pattern than QoS policies:

    public interface StatusCondition<ENTITY extends Entity<?, ?>>
    extends Condition

    { /* statuses accessor */ public Set<Class<? extends Status>> getEnabledStatuses(); /* parent accessor */ public ENTITY getParent(); /* Copy this StatusCondition and override the value of the statuses */ public StatusCondition<ENTITY> withEnabledStatuses(Class<? extends Status>... statuses); }

    This allow simpler code such as following:
    waitset.attachCondition(
    reader.getStatusCondition().withEnabledStatuses(DataAvailableStatus.class));

  • Reported: DDS-Java 1.0 — Wed, 6 Feb 2013 05:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT

Error in Javadoc of DomainParticipantFactory.createParticipant(domain, qos, listener, statuses)

  • Legacy Issue Number: 18429
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Julien Enoch)
  • Summary:

    The Javadoc description of the DomainParticipantFactory.createParticipant(domain, qos, listener, statuses) operation is following:

    "This operation creates a new DomainParticipant object having default QoS and no listener..."

    It should be replaced with following:

    "This operation creates a new DomainParticipant object with the specified QoS and the specified listener..."

  • Reported: DDS-Java 1.0 — Wed, 6 Feb 2013 05:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT

In DomainParticipantFactoryQoS interface withPolicy() and withPolicies() have wrong parameters types

  • Legacy Issue Number: 18426
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Julien Enoch)
  • Summary:

    In DomainParticipantFactoryQoS interface the following operation are defined:

    public DomainParticipantFactoryQos withPolicy(
    QosPolicy.ForDataWriter policy);

    public DomainParticipantFactoryQos withPolicies(
    QosPolicy.ForDataWriter... policy);

    In both operations the correct parameter type should be QosPolicy.ForDomainParticipantFactory.

  • Reported: DDS-Java 1.0 — Wed, 6 Feb 2013 05:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT

The PolicyFactory class misses operations for Presentation and TopicData creation

  • Legacy Issue Number: 18425
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Julien Enoch)
  • Summary:

    The PolicyFactory class provides operation to create all Policies but Presentation and TopicData.

    Also, the Representation() operation should be renamed as DataRepresentation() to ensure consistency with the other factory operations (each is named accordingly to the type it returns).

  • Reported: DDS-Java 1.0 — Wed, 6 Feb 2013 05:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT

Missing "not"

  • Legacy Issue Number: 18652
  • Status: open  
  • Source: Software Pearls BVBA ( Laurence Vanhelsuwe)
  • Summary:

    "many of which do support Java EE"

    should be

    "many of which do not support Java EE"

  • Reported: DDS-Java 1.0b1 — Thu, 11 Apr 2013 04:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT

The resolution of the FTF Issue 15966 was partially applied

  • Legacy Issue Number: 18582
  • Status: open  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The resolution for the ISSUE 15996 required to remove all the operations of the kind:

    "public void setQos(String qosLibraryName, String qosProfileName);"

    from all DDS entities since this operation pollutes the DDS API with a specific way of configuring QoS policies. The accepted resolution was to introduce the concept of a QoSProvider that could provide QoS settings by fetching them from a URI.

    That said the type org.omg.dds.core.Entity still contains the operation:

    public void setQos(String qosLibraryName, String qosProfileName);

    This should be removed!

  • Reported: DDS-Java 1.0 — Wed, 27 Mar 2013 04:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT

The DataReaderQos interface misses a getReliability() operation

  • Legacy Issue Number: 18428
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Julien Enoch)
  • Summary:

    The DataReaderQos specifies accessors for all QosPolicy.ForDataReader policies but Reliability.

  • Reported: DDS-Java 1.0 — Wed, 6 Feb 2013 05:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT

Error in implementation of TypeSupport.newTypeSupport()

  • Legacy Issue Number: 18427
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Julien Enoch)
  • Summary:

    In TypeSupport class the newTypeSupport() operation is implemented as following:

    public static <TYPE> TypeSupport<TYPE> newTypeSupport(
    Class<TYPE> type,
    ServiceEnvironment env)

    { return newTypeSupport(type, type.getClass().getName(), env); }

    The correct implementation should be:

    public static <TYPE> TypeSupport<TYPE> newTypeSupport(
    Class<TYPE> type,
    ServiceEnvironment env)

    { return newTypeSupport(type, type.getName(), env); }

    Since type.getClass().getName() always return "java.lang.Class".

  • Reported: DDS-Java 1.0 — Wed, 6 Feb 2013 05:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT

In WaitSet all waitForCondition() operations should return the triggered conditions

  • Legacy Issue Number: 18432
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Julien Enoch)
  • Summary:

    In WaitSet class, all waitForCondition() operation should return a Collection of the triggered conditions. The "activeConditions" parameter should be removed.

  • Reported: DDS-Java 1.0 — Wed, 6 Feb 2013 05:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT

WaitSet should be aligned to the ISO C++ IDDS PSM

  • Legacy Issue Number: 18431
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Julien Enoch)
  • Summary:

    The WaitSet class should be aligned to the ISO C++ IDDS PSM with regard to the dispatch() operation and associated functor.

  • Reported: DDS-Java 1.0 — Wed, 6 Feb 2013 05:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT

ModifiableInstanceHandle should be removed

  • Legacy Issue Number: 18420
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Julien Enoch)
  • Summary:

    The ModifiableInstanceHandle was not removed along with all other modifiable types.
    As such it should be removed for consistency, useability and performances.

    Specificaly the following methods should be removed:

    • ServiceEnvironment.newInstanceHandle()
    • DataReader.lookupInstance(ModifiableInstanceHandle handle, TYPE keyHolder)
    • DataWriter.lookupInstance(ModifiableInstanceHandle handle, TYPE keyHolder)

    And the following method should be modified to return InstanceHandle:

    • Sample.getInstanceHandle()
    • Sample.getPublicationHandle()

    Notice: the returning ModifialbeInstanceHandle forces defensive copying with obvious consequences in term of performances.

  • Reported: DDS-Java 1.0 — Wed, 6 Feb 2013 05:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT

The current Java PSM makes an implicit assumptions on member ordering

  • Legacy Issue Number: 16096
  • Status: open  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The current Java PSM makes an implicit assumptions on member ordering when defining DDS Types in POJO that is not inherently guaranteed by the Java Language Specification. The possible resolution for this issue is to require @ID annotations when defining DDS Types using POJOs. In this case the ID would be used to uniquely defining the order to the attribute members.

  • Reported: DDS-Java 1.0b1 — Fri, 25 Mar 2011 04:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT

Bucket accessors shall be removed

  • Legacy Issue Number: 18422
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Julien Enoch)
  • Summary:

    Bucket accessors were supposed to be removed for all types (with exception of Time) as part of the FTF.
    Apparently some bucket accessors are still present (in some cases as the only possibility - e.g. Subscriber.getDataReaders()).

    This is very unfortunate since it forces defensive copies with the obvious performance impacts.
    Furthermore it makes the API inconsistent.

  • Reported: DDS-Java 1.0 — Wed, 6 Feb 2013 05:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT

RequestOffered.requestedOfferedContract() semantic should be removed

  • Legacy Issue Number: 18421
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Julien Enoch)
  • Summary:

    Instead of providing the requestedOfferedContract() method for RxO comparison, the inherited Compare implementation should follow the RxO rules.

    For instance: Deadline(2) > Deadline(5)
    This change simplify the API and avoids the creation of temporary object when trying to evaluate RxO. Notice that, in this case, the natural ordering is still available via the Duration type.

  • Reported: DDS-Java 1.0 — Wed, 6 Feb 2013 05:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT

Durability Implementation Description does not consider the role of partitions

  • Key: DDS15-187
  • Legacy Issue Number: 19649
  • Status: open  
  • Source: ZettaScale Technology ( Angelo Corsaro, PhD.)
  • Summary:

    The third paragraph of the DURABILITY section (2.1.3.4) describes the semantics that has to be provided by a durability service for TRANSIENT and PERSISTENT topics. Specifically, it states that given a Topic T with DURABILITY QoS set to TRANSIENT or PERSISTENT then the "built-in fictitious" DataReader and DataWriter used by the Durability Service to receive/distribute data have to be created with the same QoS T. Yet, nothing is said with respect to the role of the PARTITION QoS. Section 2.1.3.13 clearly states that:

    "For a DataReader to see the changes made to an instance by a DataWriter, not only the Topic must match, but also they must share a common partition."

    Thus based on the current specification the Durability Service DataReader and DataWriter would only match the applications DataReader and DataWriter that are in the default partition.

  • Reported: DDS 1.4 — Wed, 29 Oct 2014 04:00 GMT
  • Updated: Fri, 6 Mar 2015 20:57 GMT