32. Why Distribution Middleware?
1.0 Common Services
1.0 Common Services
RDR IFF ESM SAFE
RDR IFF ESM SAFE
DIA NAV MCP IPCC
DIA NAV MCP IPCC
DWC
Grouping the modules into functional clusters does nothing to change that reality
and ease software integration
UNCLASSIFIED
Hawkeye has functionally
oriented software modules
Each module talks to many
other modules
RIP TRK MSI
WAC TDA
L4 L11 L16 SEN DSC
HMI ACIS
MUX
FIL TDM
Adding new
functionality
cascades integration
re-work across many
other modules
CEC
8.0 Training
5.0 Communications
2.0 Sensors
3.0 Fusion
4.0 BMC2
7.0 Visualization
6.0 Sensor Control
RIP CEC TRK MSI
WAC TDA RAIDER
CHAT
SEN DSC
Distributed Data Framework
L4 L11 L16 IPv6
HMI ACIS T4O
MUX
FIL TDM aADNS TIS
Changing the communication between the modules can ease integration, when the
new ‘Publish Subscribe’ approach is used – each module publishes its output w/o
regard to who is receiving it, in contrast to the point-to-point approach of traditional
inter-process communication
It’s about an architecture that can assimilate evolving functionality,
rather than remaining set in time
60. Service
Plugin
Purpose Interactions
Authentication Authenticate the principal that is
joining a DDS Domain.
Handshake and establish
shared secret between
participants
The principal may be an
application/process or the user
associated with that
application or process.
Participants do mutual
authentication and establish
shared secret
Access Control Decide whether a principal is
allowed to perform a protected
operation.
Protected operations include
joining a specific DDS domain,
creating a Topic, reading a
Topic, writing a Topic, etc.
Cryptography Perform the encryption and
decryption operations. Create &
Exchange Keys. Compute digests,
compute and verify Message
Authentication Codes. Sign and
verify signatures of messages.
Invoked by DDS middleware
to encrypt data, compute and
verify MAC, compute & verify
Digital Signatures
Logging Log all security relevant events Invoked by middleware to log
Data Tagging Add a data tag for each data
91. DDS has a number of
desirable technical
characteristics for use in real-time
systems and real-time
control problems. It has
demonstrated very low
latency or time delay and
message delivery between
DDS nodes. It can also be
implemented without the use
of intermediate-level nodes
or servers, which reduces
system requirements and
complexity. DDS has already
been adopted and
incorporated into the UAS
I-IPT common grounds
control system standard.
92.
93. FACE Approach
The FACE approach is a government-industry software standard
and business strategy to:
• Acquire affordable software systems
• Rapidly integrate portable capabilities across global defense
programs
• Attract innovation and deploy it quickly and affordably
93 http://www.opengroup.org/face Distro A, Approved for Public Release NAVAIR 2014-088
118. XTypes: Mutable Types
Connext DDS 5.1
@Extensibility(Mutable_EXTENSIBILITY)
struct TrackData {
long id; //@ID 1
long x; //@ID 2
long y; //@ID 3
};
@Extensibility(Mutable_EXTENSIBILITY)
struct TrackData {
long id; //@ID 1
long x; //@ID 2
long y; //@ID 3
long z; //@ID 4
};
@Extensibility(Mutable_EXTENSIBILITY)
struct TrackData {
long id; //@ID 1
long x; //@ID 2
long y; //@ID 3
};
@Extensibility(Mutable_EXTENSIBILITY)
struct TrackData {
long id; //@ID 1
long x; //@ID 2
long z; //@ID 4
long y; //@ID 3
};
4-byte or 12-byte per member extra overhead on the wire.
119. XTypes: Optional Members
@Extensibility(MUTABLE_E
XTENSIBILITY)
struct TrackData {
long id;
long x;
long y;
long z; //@Optional
};
typedef struct TrackData {
DDS_Long id;
DDS_Long x;
DDS_Long y;
DDS_Long * z;
};
NULL value
means there is no
value because
logically the value
is not there
C/C++
Bandwidth overhead per member
FINAL/EXTENSIBLE MUTABLE
SET 4/12-byte HEADER + VALUE 4/12-byte HEADER + VALUE
NOT SET 4/12-byte HEADER 0-byte
120. Builtin QoS Profiles
Baseline Generic
BASELINE_
ROOT
BASELINE
BASELINE_
5_0_0
BASELINE_
5_1_0
GENERIC_
COMMON
GENERIC_
MONITORING
GENERIC__
CONNEXT_MICRO
_COMPATIBILITY
GENERIC_
CONNEXT_OTHER
DDS_VENDOR_
COMPATIBILITY
Pattern
PERIODIC_DATA
STREAMING
RELIABLE_
STREAMING
ALARM_EVENT
EVENT
ALARM_STATUS
STATUS
LAST_VALUE_
CACHE
Experimental
Basic
KEEP_LAST_
RELIABLE
STRICT_RELIIABLE_LOW
_LATENCY
KEEP_LAST_RELIABLE_
TRANSIENT_LOCAL
KEEP_LAST_RELIABLE_
TRANSIENT
KEEP_LAST_RELIABLE_
PERSISTENT
STRICT_RELIABLE_LARGE_
DATA_FAST_FLOW
STRICT_RELIABLE_LARGE_
DATA_MEDIUM_FLOW
STRICT_RELIABLE_LARGE_
DATA_SLOW_FLOW
KEEP_LAST_RELIABLE_
LARGE_DATA_FAST_FLO
W
KEEP_LAST_RELIABLE_LAR
GE_DATA_MEDIUM_
FLOW
KEEP_LAST_RELIABLE_
LARGE_DATA_SLOW_
FLOW
STRICT_RELIABLE
BEST_EFFORT
STRICT_RELIABLE_
HIGH_THROUGHPUT
Durability
Large Data
PARTICIPANT_
LARGE_DATA
STRICT_RELIABLE_
LARGE_DATA
PARTICIPANT_LARGE_
DATA_MONITORING
KEEP_LAST_RELIABLE
_
LARGE_DATA
Performance
AUTO_TUNING
Large Data with
Flow Control
123. Turbo Mode (Experimental)
DataWriter Batching Disabled
Samples written
Time
Samples sent
Connext DDS 5.0
• Only during higher frequency will data
be batched to trade away low latency in
favor of better throughput
• Measures frequency every N samples
DataWriter Turbo Mode Enabled
Time
Samples written
Samples sent
High
frequency
Low
frequency
Connext DDS 5.1
Low throughput!
DataWriter Batching Enabled
Time
Samples written
Samples sent
Finite max_flush_delay
High latency! High latency!
124. Auto Throttle (Experimental)
• Motivation
– When system condition changes, automatically adjust
QoS to maintain optimal performance
– Improves latency average and jitter in high throughput
conditions
125. Prototyper with LUA (Experimental)
XML
Settings
Prototyper (“Container”)
Lua Engine
1. -- Interface: parameters, inputs, outputs
2. local A, B, C = 30, 30, 10 -- Change the 'C' parameter to to see various flower shapes
3. local ShapeWriter = CONTAINER.WRITER[3] -- Triangles
4.
5. -- Global counter (preserved across invocations)
6. if not count then count = 0 else count = count + 1 end
7.
8. local shape = ShapeWriter.instance;9. local angle = count % 360;
Lua
10.
11. shape['x'] = 120 + (A+B) * math.cos(angle) + B * math.cos((A/B-C)*angle)
12. shape['y'] Component
= 120 + (A+B) * math.sin(angle) + B * math.sin((A/B-C)*angle)
13.
14. shape['shapesize'] = 5
15. shape['color'] = "RED"
16.
17. ShapeWriter:write()
DDS
127. 5.1 Migration Considerations
• Transport:
– Default message_size_max for UDPv4, UDPv6, TCP, Secure WAN, and
shared-memory transports changed to provide better out-of-the-box
performance
• To go back to default 5.0.0 settings use built-in profile:
BuiltinQosLib::Baseline.5.0.0
• Integrity not affected by this change
• ContentFilteredTopics:
– JAVA with -package: DataWriters in 4.5x and below will not be able to
perform writer-side filtering for Connext 5.1.0 DataReaders using
ContentFilteredTopics
• package is not part of the TypeCode name anymore
• Code generation:
– Moving to 5.1.0 requires regenerating the code