Merge branch 'master' into merge2

Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
This commit is contained in:
Martin Bremmer 2019-09-03 11:44:50 +02:00
commit 3fc777e631
477 changed files with 31941 additions and 32175 deletions

12
docs/CMakeLists.txt Normal file
View file

@ -0,0 +1,12 @@
#
# Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0 which is available at
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
# v. 1.0 which is available at
# http://www.eclipse.org/org/documents/edl-v10.php.
#
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
add_subdirectory(manual)

View file

@ -0,0 +1,645 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="12.8333 4 541.5057 712.21" width="541.5057" height="712.21">
<defs>
<filter id="Shadow" filterUnits="userSpaceOnUse" x="12.8333" y="4">
<feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/>
<feOffset in="blur" result="offset" dx="0" dy="2"/>
<feFlood flood-color="black" flood-opacity=".5" result="flood"/>
<feComposite in="flood" in2="offset" operator="in"/>
</filter>
<linearGradient x1="0" x2="1" id="Gradient" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#ebebeb"/>
<stop offset="1" stop-color="#ebebeb"/>
</linearGradient>
<linearGradient id="Obj_Gradient" xl:href="#Gradient" gradientTransform="translate(409.77374 564.667) rotate(90) scale(104)"/>
<font-face font-family="Gill Sans" font-size="9" panose-1="2 11 9 2 3 0 4 2 2 3" units-per-em="1000" underline-position="-75.19531" underline-thickness="49.80469" slope="0" x-height="501.46484" cap-height="681.6406" ascent="922.8516" descent="-234.86328" font-weight="700">
<font-face-src>
<font-face-name name="GillSans-Bold"/>
</font-face-src>
</font-face>
<font-face font-family="Gill Sans" font-size="9" panose-1="2 11 5 2 2 1 4 2 2 3" units-per-em="1000" underline-position="-75.19531" underline-thickness="49.80469" slope="0" x-height="449.70703" cap-height="687.0117" ascent="917.9688" descent="-230.46875" font-weight="400">
<font-face-src>
<font-face-name name="GillSans"/>
</font-face-src>
</font-face>
<font-face font-family="Gill Sans" font-size="7" panose-1="2 11 5 2 2 1 4 2 2 3" units-per-em="1000" underline-position="-75.19531" underline-thickness="49.80469" slope="0" x-height="449.70703" cap-height="687.0117" ascent="917.9688" descent="-230.46875" font-weight="400">
<font-face-src>
<font-face-name name="GillSans"/>
</font-face-src>
</font-face>
<font-face font-family="Gill Sans" font-size="9" panose-1="2 11 5 2 2 1 4 9 2 3" units-per-em="1000" underline-position="-75.19531" underline-thickness="49.80469" slope="-888.8889" x-height="456.0547" cap-height="686.5234" ascent="909.1797" descent="-229.98047" font-style="italic" font-weight="400">
<font-face-src>
<font-face-name name="GillSans-Italic"/>
</font-face-src>
</font-face>
<marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" stroke-linejoin="miter" stroke-miterlimit="10" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black">
<g>
<path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
</g>
</marker>
<font-face font-family="Helvetica" font-size="7" units-per-em="1000" underline-position="-75.68359" underline-thickness="49.316406" slope="0" x-height="522.9492" cap-height="717.28516" ascent="770.0195" descent="-229.98047" font-weight="400">
<font-face-src>
<font-face-name name="Helvetica"/>
</font-face-src>
</font-face>
<marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" stroke-linejoin="miter" stroke-miterlimit="10" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="#ebebeb">
<g>
<path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
</g>
</marker>
<marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="DimensionArrow_Marker" stroke-linejoin="miter" stroke-miterlimit="10" viewBox="-1 -6 10 12" markerWidth="10" markerHeight="12" color="black">
<g>
<path d="M 0 0 L 8 0 M 8 5 L 8 -5 M 0 2 L 7 0 L 0 -2" fill="none" stroke="currentColor" stroke-width="1"/>
</g>
</marker>
<marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="DimensionArrow_Marker_2" stroke-linejoin="miter" stroke-miterlimit="10" viewBox="-9 -6 10 12" markerWidth="10" markerHeight="12" color="black">
<g>
<path d="M 0 0 L -8 0 M -8 -5 L -8 5 M 0 -2 L -7 0 L 0 2" fill="none" stroke="currentColor" stroke-width="1"/>
</g>
</marker>
<linearGradient id="Obj_Gradient_2" xl:href="#Gradient" gradientTransform="translate(409.77374 564.667) rotate(90) scale(104)"/>
</defs>
<metadata> Produced by OmniGraffle 7.7.1
<dc:date>2018-07-04 12:39:41 +0000</dc:date>
</metadata>
<g id="Canvas_3" fill-opacity="1" stroke-dasharray="none" stroke="none" stroke-opacity="1" fill="none">
<title>rbuf</title>
<rect fill="white" x="12.8333" y="4" width="541.5057" height="712.21"/>
<g id="Canvas_3: Layer 1">
<title>Layer 1</title>
<g id="Graphic_75_shadow" filter="url(#Shadow)">
<rect x="155.25301" y="25.3334" width="97.8255" height="18" fill="white"/>
<rect x="155.25301" y="25.3334" width="97.8255" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_74_shadow" filter="url(#Shadow)">
<rect x="155.25301" y="88.6667" width="97.8255" height="54" fill="white"/>
<rect x="155.25301" y="88.6667" width="97.8255" height="54" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_73_shadow" filter="url(#Shadow)">
<rect x="172.418" y="129.33299" width="80.6604" height="13.3336" fill="white"/>
<rect x="172.418" y="129.33299" width="80.6604" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_72_shadow" filter="url(#Shadow)">
<rect x="155.25301" y="142.66701" width="97.8255" height="241.333" fill="#cbcbcb"/>
<rect x="155.25301" y="142.66701" width="97.8255" height="241.333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_71_shadow" filter="url(#Shadow)">
<rect x="360.861" y="202.667" width="97.8255" height="181.333" fill="#cbcbcb"/>
<rect x="360.861" y="202.667" width="97.8255" height="181.333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_70_shadow" filter="url(#Shadow)">
<rect x="360.861" y="202.667" width="97.8256" height="13.3336" fill="white"/>
<rect x="360.861" y="202.667" width="97.8256" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_68_shadow" filter="url(#Shadow)">
<rect x="172.418" y="116" width="80.6604" height="13.3336" fill="white"/>
<rect x="172.418" y="116" width="80.6604" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_67_shadow" filter="url(#Shadow)">
<rect x="360.861" y="384" width="97.8255" height="126.667" fill="#cbcbcb"/>
<rect x="360.861" y="384" width="97.8255" height="126.667" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_66_shadow" filter="url(#Shadow)">
<rect x="360.861" y="384" width="97.8256" height="13.3336" fill="white"/>
<rect x="360.861" y="384" width="97.8256" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_63_shadow" filter="url(#Shadow)">
<rect x="155.25301" y="142.66701" width="97.8255" height="77.3333" fill="white"/>
<rect x="155.25301" y="142.66701" width="97.8255" height="77.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_62_shadow" filter="url(#Shadow)">
<rect x="155.25301" y="220" width="97.8255" height="13.3336" fill="white"/>
<rect x="155.25301" y="220" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_61_shadow" filter="url(#Shadow)">
<rect x="360.861" y="288.833" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="288.833" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_60_shadow" filter="url(#Shadow)">
<rect x="155.25301" y="233.334" width="97.8255" height="13.3336" fill="white"/>
<rect x="155.25301" y="233.334" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_59_shadow" filter="url(#Shadow)">
<rect x="360.861" y="245.752" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="245.752" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_58_shadow" filter="url(#Shadow)">
<rect x="155.25301" y="246.667" width="97.8255" height="13.3336" fill="white"/>
<rect x="155.25301" y="246.667" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_53_shadow" filter="url(#Shadow)">
<rect x="155.25301" y="310.144" width="97.8255" height="13.3336" fill="white"/>
<rect x="155.25301" y="310.144" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_52_shadow" filter="url(#Shadow)">
<rect x="155.25301" y="43.3334" width="97.8255" height="45.3333" fill="#ebebeb"/>
<rect x="155.25301" y="43.3334" width="97.8255" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_51_shadow" filter="url(#Shadow)">
<rect x="155.25301" y="271.406" width="97.8255" height="13.3336" fill="white"/>
<rect x="155.25301" y="271.406" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_48_shadow" filter="url(#Shadow)">
<rect x="42.3334" y="326.667" width="45.3335" height="45.3333" fill="white"/>
<rect x="42.3334" y="326.667" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_43_shadow" filter="url(#Shadow)">
<rect x="360.861" y="184.667" width="97.8255" height="18" fill="white"/>
<rect x="360.861" y="184.667" width="97.8255" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_42_shadow" filter="url(#Shadow)">
<rect x="360.861" y="423.661" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="423.661" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_36_shadow" filter="url(#Shadow)">
<rect x="360.861" y="410.327" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="410.327" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_32_shadow" filter="url(#Shadow)">
<rect x="251.528" y="506.667" width="45.3335" height="45.3333" fill="white"/>
<rect x="251.528" y="506.667" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_31_shadow" filter="url(#Shadow)">
<rect x="360.861" y="455.333" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="455.333" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_29_shadow" filter="url(#Shadow)">
<rect x="360.861" y="491.334" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="491.334" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_20_shadow" filter="url(#Shadow)">
<rect x="155.25301" y="382.667" width="97.8255" height="30" fill="#ebebeb"/>
<rect x="155.25301" y="382.667" width="97.8255" height="30" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_19_shadow" filter="url(#Shadow)">
<rect x="360.861" y="564.667" width="97.8255" height="104" fill="url(#Obj_Gradient)"/>
<rect x="360.861" y="564.667" width="97.8255" height="104" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_16_shadow" filter="url(#Shadow)">
<rect x="360.861" y="510.667" width="97.8255" height="54" fill="white"/>
<rect x="360.861" y="510.667" width="97.8255" height="54" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_15_shadow" filter="url(#Shadow)">
<rect x="378.026" y="551.333" width="80.6604" height="13.3336" fill="white"/>
<rect x="378.026" y="551.333" width="80.6604" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_14_shadow" filter="url(#Shadow)">
<rect x="378.026" y="538" width="80.6604" height="13.3336" fill="white"/>
<rect x="378.026" y="538" width="80.6604" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_13_shadow" filter="url(#Shadow)">
<rect x="360.861" y="343.334" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="343.334" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_12_shadow" filter="url(#Shadow)">
<rect x="360.861" y="316.667" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="316.667" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_11_shadow" filter="url(#Shadow)">
<rect x="360.861" y="330" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="330" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_76">
<rect x="501.339" y="4" width="53" height="16" fill="#515151"/>
<text transform="translate(503.339 7)" fill="#cbcbcb">
<tspan font-family="Gill Sans" font-size="9" font-weight="700" fill="#cbcbcb" x=".23388672" y="8">rbuf, rdata</tspan>
</text>
</g>
<g id="Graphic_75">
<rect x="155.25301" y="25.3334" width="97.8255" height="18" fill="white"/>
<rect x="155.25301" y="25.3334" width="97.8255" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(160.25301 29.3334)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="22.69815" y="8">rbuf header</tspan>
</text>
</g>
<g id="Graphic_74">
<rect x="155.25301" y="88.6667" width="97.8255" height="54" fill="white"/>
<rect x="155.25301" y="88.6667" width="97.8255" height="54" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(160.25301 90.6667)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="35.00943" y="8">rmsg</tspan>
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x="2.35025" y="16">(counts derived rdatas still to </tspan>
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x="25.4711" y="24">be delivered)</tspan>
</text>
</g>
<g id="Graphic_73">
<rect x="172.418" y="129.33299" width="80.6604" height="13.3336" fill="white"/>
<rect x="172.418" y="129.33299" width="80.6604" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(177.418 130.99979)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="16.877563" y="8">chunk hdr</tspan>
</text>
</g>
<g id="Graphic_72">
<rect x="155.25301" y="142.66701" width="97.8255" height="241.333" fill="#cbcbcb"/>
<rect x="155.25301" y="142.66701" width="97.8255" height="241.333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(160.25301 349.5)" fill="#929292">
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="#929292" x="1.7560117" y="8">(this level of gray: packed </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="#929292" x="2.760162" y="18">with more receiver state, </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="#929292" x="6.124176" y="28">sampleinfo, rdata, &amp;c.)</tspan>
</text>
</g>
<g id="Graphic_71">
<rect x="360.861" y="202.667" width="97.8255" height="181.333" fill="#cbcbcb"/>
<rect x="360.861" y="202.667" width="97.8255" height="181.333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_70">
<rect x="360.861" y="202.667" width="97.8256" height="13.3336" fill="white"/>
<rect x="360.861" y="202.667" width="97.8256" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(365.861 204.3338)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="25.460163" y="8">chunk hdr</tspan>
</text>
</g>
<g id="Line_69">
<path d="M 253.5784 135.99979 L 265.4784 135.99979 L 348.4784 135.99979 L 348.4784 209.3338 L 348.961 209.3338 L 350.961 209.3338" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_68">
<rect x="172.418" y="116" width="80.6604" height="13.3336" fill="white"/>
<rect x="172.418" y="116" width="80.6604" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(177.418 117.6668)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="18.316772" y="8">lastchunk</tspan>
</text>
</g>
<g id="Graphic_67">
<rect x="360.861" y="384" width="97.8255" height="126.667" fill="#cbcbcb"/>
<rect x="360.861" y="384" width="97.8255" height="126.667" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_66">
<rect x="360.861" y="384" width="97.8256" height="13.3336" fill="white"/>
<rect x="360.861" y="384" width="97.8256" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(365.861 385.6668)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="25.460163" y="8">chunk hdr</tspan>
</text>
</g>
<g id="Line_65">
<path d="M 458.6866 209.3338 L 470.5866 209.3338 L 474.333 209.3338 L 474.333 271.406 L 474.333 388.4445 L 470.5866 388.4445 L 468.5866 388.4445" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_64">
<path d="M 253.0784 122.6668 L 264.9784 122.6668 L 360.861 122.667 L 477.667 122.667 L 477.667 124 L 477.667 392.8891 L 470.5866 392.8891 L 468.5866 392.8891" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_63">
<rect x="155.25301" y="142.66701" width="97.8255" height="77.3333" fill="white"/>
<rect x="155.25301" y="142.66701" width="97.8255" height="77.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(160.25301 176.33366)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="24.06485" y="8">raw packet</tspan>
</text>
</g>
<g id="Graphic_62">
<rect x="155.25301" y="220" width="97.8255" height="13.3336" fill="white"/>
<rect x="155.25301" y="220" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(160.25301 221.6668)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="10.567047" y="8">ddsi receiver state</tspan>
</text>
</g>
<g id="Graphic_61">
<rect x="360.861" y="288.833" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="288.833" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(365.861 290.4998)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="10.567047" y="8">ddsi receiver state</tspan>
</text>
</g>
<g id="Graphic_60">
<rect x="155.25301" y="233.334" width="97.8255" height="13.3336" fill="white"/>
<rect x="155.25301" y="233.334" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(160.25301 235.0008)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="24.598785" y="8">sampleinfo</tspan>
</text>
</g>
<g id="Graphic_59">
<rect x="360.861" y="245.752" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="245.752" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(365.861 247.4188)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="34.56558" y="8">rdata</tspan>
</text>
</g>
<g id="Graphic_58">
<rect x="155.25301" y="246.667" width="97.8255" height="13.3336" fill="white"/>
<rect x="155.25301" y="246.667" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(160.25301 248.3338)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="34.56558" y="8">rdata</tspan>
</text>
</g>
<g id="Line_57">
<path d="M 155.25301 278.0728 L 143.35301 278.0728 L 143.35301 256.6672 L 145.35301 256.6672" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_56">
<line x1="253.0785" y1="256.6672" x2="350.96135" y2="255.8362" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_55">
<rect x="280.82043" y="252.3086" width="29" height="8" fill="white"/>
<text transform="translate(280.82043 252.3086)" fill="black">
<tspan font-family="Helvetica" font-size="7" font-weight="400" fill="black" x=".10180664" y="6">fragchain</tspan>
</text>
</g>
<g id="Line_54">
<path d="M 253.0785 240.0008 C 258.77977 238.22305 270.184 236.88912 270.184 234.667 C 270.184 233.40666 266.51523 231.86014 262.29918 230.271" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_53">
<rect x="155.25301" y="310.144" width="97.8255" height="13.3336" fill="white"/>
<rect x="155.25301" y="310.144" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(160.25301 311.8108)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="19.125396" y="8">sample.defrag</tspan>
</text>
</g>
<g id="Graphic_52">
<rect x="155.25301" y="43.3334" width="97.8255" height="45.3333" fill="#ebebeb"/>
<rect x="155.25301" y="43.3334" width="97.8255" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(160.25301 61.00005)" fill="#929292">
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="#929292" x="23.89566" y="8">(free space)</tspan>
</text>
</g>
<g id="Graphic_51">
<rect x="155.25301" y="271.406" width="97.8255" height="13.3336" fill="white"/>
<rect x="155.25301" y="271.406" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(160.25301 273.0728)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="27.275055" y="8">defrag_iv</tspan>
</text>
</g>
<g id="Line_50">
<line x1="204.16576" y1="310.144" x2="204.16576" y2="294.6396" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_49">
<text transform="translate(204.194 296.145)" fill="black">
<tspan font-family="Helvetica" font-size="7" font-weight="400" fill="black" x=".2138672" y="6">interval tree</tspan>
</text>
</g>
<g id="Graphic_48">
<rect x="42.3334" y="326.667" width="45.3335" height="45.3333" fill="white"/>
<rect x="42.3334" y="326.667" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(47.3334 339.33364)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.469484" y="8">defrag</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.74634" y="18">admin</tspan>
</text>
</g>
<g id="Line_47">
<line x1="88.13729" y1="340.9961" x2="145.93927" y2="320.16704" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_46">
<text transform="translate(96.1434 330.26626) rotate(-19.816747)" fill="black">
<tspan font-family="Helvetica" font-size="7" font-weight="400" fill="black" x=".15698242" y="6">tree (seq no)</tspan>
</text>
</g>
<g id="Line_45">
<path d="M 253.0785 250.00037 L 264.9785 250.00037 L 277.861 250.00037 L 277.861 233.334 L 277.861 155.5559 L 264.9785 155.5559 L 262.9785 155.5559" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_44">
<rect x="268.50888" y="156.10669" width="48" height="24" fill="white" fill-opacity=".73"/>
<text transform="translate(268.50888 156.10669)" fill="black">
<tspan font-family="Helvetica" font-size="7" font-weight="400" fill="black" x="11.158691" y="6">data ref:</tspan>
<tspan font-family="Helvetica" font-size="7" font-weight="400" fill="black" x="3.9211426" y="14">offset+length</tspan>
<tspan font-family="Helvetica" font-size="7" font-weight="400" fill="black" x=".07592773" y="22">relative to rmsg</tspan>
</text>
</g>
<g id="Graphic_43">
<rect x="360.861" y="184.667" width="97.8255" height="18" fill="white"/>
<rect x="360.861" y="184.667" width="97.8255" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(365.861 188.667)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="22.69815" y="8">rbuf header</tspan>
</text>
</g>
<g id="Graphic_42">
<rect x="360.861" y="423.661" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="423.661" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(365.861 425.3278)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="34.56558" y="8">rdata</tspan>
</text>
</g>
<g id="Line_41">
<path d="M 360.861 252.41875 L 348.961 252.41875 L 323.961 252.41875 L 323.961 181.33366 L 264.9785 181.33366 L 262.9785 181.33366" marker-end="url(#FilledArrow_Marker_2)" stroke="#ebebeb" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_40">
<path d="M 360.861 430.3278 L 348.961 430.3278 L 320.333 430.3278 L 320.333 316.706 L 320.333 207.11142 L 264.9785 207.11142 L 262.9785 207.11142" marker-end="url(#FilledArrow_Marker_2)" stroke="#ebebeb" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_39">
<path d="M 360.861 249.08536 L 348.961 249.08536 L 335.667 249.08536 L 335.667 162 L 335.667 13.3333 L 263 13.3333 L 143.35301 13.3333 L 143.35301 97.6667 L 145.35301 97.6667" marker-end="url(#FilledArrow_Marker_2)" stroke="#ebebeb" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_38">
<path d="M 360.861 426.9944 L 353.861 426.9944 L 335.667 426.9944 L 335.667 234.83393 L 335.667 227.83393" stroke="#ebebeb" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_37">
<path d="M 155.25301 250.00037 L 143.35301 250.00037 L 143.35301 97.6667 L 145.35301 97.6667" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_36">
<rect x="360.861" y="410.327" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="410.327" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(365.861 411.9938)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="24.598785" y="8">sampleinfo</tspan>
</text>
</g>
<g id="Line_35">
<path d="M 360.861 416.9938 L 348.961 416.9938 L 339.667 416.9938 L 339.667 340.289 L 339.667 295.4998 L 348.961 295.4998 L 350.961 295.4998" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_34">
<line x1="135.66701" y1="96.6667" x2="135.66701" y2="134.66701" marker-end="url(#DimensionArrow_Marker)" marker-start="url(#DimensionArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_33">
<text transform="translate(128.286 131.667) rotate(-90)" fill="black">
<tspan font-family="Helvetica" font-size="7" font-weight="400" fill="black" x=".4104004" y="6">fixed size</tspan>
</text>
</g>
<g id="Graphic_32">
<rect x="251.528" y="506.667" width="45.3335" height="45.3333" fill="white"/>
<rect x="251.528" y="506.667" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(256.528 519.33364)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="3.3911152" y="8">reorder</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.74634" y="18">admin</tspan>
</text>
</g>
<g id="Graphic_31">
<rect x="360.861" y="455.333" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="455.333" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(365.861 456.9998)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="20.771148" y="8">sample chain</tspan>
</text>
</g>
<g id="Line_30">
<path d="M 458.6865 459.7775 L 470.5865 459.7775 L 470.5865 416.9938 L 468.5865 416.9938" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_29">
<rect x="360.861" y="491.334" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="491.334" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(365.861 493.0008)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="16.047027" y="8">sample.reorder</tspan>
</text>
</g>
<g id="Line_28">
<path d="M 360.861 495.7785 L 348.961 495.7785 L 348.961 464.2221 L 350.961 464.2221" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_27">
<line x1="297.33548" y1="521.56084" x2="351.47626" y2="503.37536" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_26">
<text transform="translate(305.11867 510.5073) rotate(-18.566818)" fill="black">
<tspan font-family="Helvetica" font-size="7" font-weight="400" fill="black" x=".2138672" y="6">interval tree</tspan>
<tspan font-family="Helvetica" font-size="7" font-weight="400" fill="black" x="5.6604004" y="14">(seq no)</tspan>
</text>
</g>
<g id="Line_25">
<path d="M 360.861 459.7775 L 348.961 459.7775 L 348.961 433.6612 L 350.961 433.6612" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_24">
<line x1="490.617" y1="392" x2="490.617" y2="502.667" marker-end="url(#DimensionArrow_Marker)" marker-start="url(#DimensionArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_23">
<text transform="translate(497.997 401.179) rotate(90)" fill="black">
<tspan font-family="Helvetica" font-size="7" font-weight="400" fill="black" x=".4501953" y="6">last chunk as small as possible</tspan>
</text>
</g>
<g id="Line_22">
<line x1="490.237" y1="210.667" x2="490.237" y2="374.917" marker-end="url(#DimensionArrow_Marker)" marker-start="url(#DimensionArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_21">
<text transform="translate(497.617 224.63) rotate(90)" fill="black">
<tspan font-family="Helvetica" font-size="7" font-weight="400" fill="black" x=".10546875" y="6">fixed size chunks; larger than max packet size</tspan>
</text>
</g>
<g id="Graphic_20">
<rect x="155.25301" y="382.667" width="97.8255" height="30" fill="#ebebeb"/>
<rect x="155.25301" y="382.667" width="97.8255" height="30" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(160.25301 392.667)" fill="#929292">
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="#929292" x="18.127838" y="8">(leftover space)</tspan>
</text>
</g>
<g id="Graphic_19">
<rect x="360.861" y="564.667" width="97.8255" height="104" fill="url(#Obj_Gradient_2)"/>
<rect x="360.861" y="564.667" width="97.8255" height="104" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(365.861 606.667)" fill="#929292">
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="#929292" x="22.871734" y="8">(next packet</tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="#929292" x="26.473053" y="18">goes here)</tspan>
</text>
</g>
<g id="Line_18">
<line x1="121.333" y1="51.3334" x2="121.333" y2="404.667" marker-end="url(#DimensionArrow_Marker)" marker-start="url(#DimensionArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_17">
<text transform="translate(113.9531 257.812) rotate(-90)" fill="black">
<tspan font-family="Helvetica" font-size="7" font-weight="400" fill="black" x=".35913086" y="6">large enough for storing &amp; processing a largish number of packets</tspan>
</text>
</g>
<g id="Graphic_16">
<rect x="360.861" y="510.667" width="97.8255" height="54" fill="white"/>
<rect x="360.861" y="510.667" width="97.8255" height="54" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(365.861 512.667)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="35.00943" y="8">rmsg</tspan>
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x="13.52359" y="16">(counts refs by rdata)</tspan>
</text>
</g>
<g id="Graphic_15">
<rect x="378.026" y="551.333" width="80.6604" height="13.3336" fill="white"/>
<rect x="378.026" y="551.333" width="80.6604" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(383.026 552.9998)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="16.877563" y="8">chunk hdr</tspan>
</text>
</g>
<g id="Graphic_14">
<rect x="378.026" y="538" width="80.6604" height="13.3336" fill="white"/>
<rect x="378.026" y="538" width="80.6604" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(383.026 539.6668)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="18.316772" y="8">lastchunk</tspan>
</text>
</g>
<g id="Graphic_13">
<rect x="360.861" y="343.334" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="343.334" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(365.861 345.0008)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="20.771148" y="8">sample chain</tspan>
</text>
</g>
<g id="Graphic_12">
<rect x="360.861" y="316.667" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="316.667" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(365.861 318.3338)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="24.598785" y="8">sampleinfo</tspan>
</text>
</g>
<g id="Graphic_11">
<rect x="360.861" y="330" width="97.8255" height="13.3336" fill="white"/>
<rect x="360.861" y="330" width="97.8255" height="13.3336" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(365.861 331.6668)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="34.56558" y="8">rdata</tspan>
</text>
</g>
<g id="Line_10">
<path d="M 458.6865 464.2221 L 470.5865 464.2221 L 479 464 L 479 405.333 L 478.333 405.333 L 348.961 405.333 L 348.961 352.2231 L 350.961 352.2231" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_9">
<path d="M 360.861 347.77853 L 348.961 347.77853 L 348.961 340.0002 L 350.961 340.0002" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_8">
<path d="M 458.6865 347.77853 L 470.5865 347.77853 L 470.5865 323.3338 L 468.5865 323.3338" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_7">
<path d="M 360.861 336.6668 L 348.961 336.6668 L 321.667 336.6668 L 321.667 326.667 L 321.667 194.22258 L 264.9785 194.22258 L 262.9785 194.22258" marker-end="url(#FilledArrow_Marker_2)" stroke="#ebebeb" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_6">
<line x1="360.36117" y1="333.32017" x2="335.667" y2="332.66652" stroke="#ebebeb" stroke-linecap="butt" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_5">
<path d="M 360.861 323.3338 L 353.861 323.3338 L 346.667 323.33346 L 339.667 323.33346" stroke="black" stroke-linecap="butt" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_4">
<rect x="12.8333" y="452.21" width="228.361" height="264" fill="#ebebeb"/>
<text transform="translate(14.8333 454.21)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">A receive thread has a pool of receive buffers, </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="black" y="8">rbuf</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" y="8">s, each </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">large enough to contain several network packets and derived </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">administrative data.</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">Before requesting a packet from the kernel, a receive thread </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">allocates an </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="black" y="48">rmsg</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" y="48"> from the buffer, which is the administrative </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="58">entity representing a raw packet along with additional </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="68">derived data.</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="78">During processing the packet, an </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="black" y="78">rdata</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" y="78"> is created for each </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="88">Data/DataFrag submessage. These </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="black" y="88">rdata</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" y="88"> entries contain a </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="98">reference to the </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="black" y="98">rmsg</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" y="98"> and a byte range within the packet at </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="108">which the serialized payload is stored.</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="118">For each sample (i.e., sequence number), a </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="black" y="118">sampleinfo</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" y="118"> </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="128">containing various metadata on the sample is allocated. The </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="black" x="0" y="138">sampleinfo</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" y="138"> includes a reference to the receiver state as </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="148">described in the DDSI specification, which contains, a.o., time </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="158">stamps and source addresses.</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="168">For fragmented data, </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="black" y="168">rdata</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" y="168"> are chained together into a </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="black" x="0" y="178">fragchain</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" y="178">, using interval tree pointed to by a </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="black" y="178">sample.defrag</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" y="178">.</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="188">Completed samples that have been received out of order are </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="198">linked into chains of consecutive samples, with the sample </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="208">chains organized into an interval tree using </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="black" y="208">sample.reorder</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" y="208">.</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="218">Once a sample has been delivered, the reference count of the </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="black" x="0" y="228">rmsg</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" y="228">s pointed to by its fragchain are decremented, eventually </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="238">freeing the original network packets and recovering space in </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="248">the </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="black" y="248">rbuf</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" y="248">s.</tspan>
</text>
</g>
<g id="Graphic_3">
<rect x="339" y="14" width="89" height="64" fill="#ebebeb"/>
<text transform="translate(341 16)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">Note: there is no </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">conceptual difference </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">between light grey </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">arrows and black </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">arrows: it is merely to </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="58">reduce visual clutter</tspan>
</text>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 49 KiB

View file

@ -0,0 +1,745 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="3.5 3.62656 552.188 773.3154" width="552.188" height="773.3154">
<defs>
<filter id="Shadow" filterUnits="userSpaceOnUse" x="3.5" y="3.62656">
<feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/>
<feOffset in="blur" result="offset" dx="0" dy="2"/>
<feFlood flood-color="black" flood-opacity=".5" result="flood"/>
<feComposite in="flood" in2="offset" operator="in"/>
</filter>
<radialGradient cx="0" cy="0" r="1" id="Gradient" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="white"/>
<stop offset="1" stop-color="#b9b9b9"/>
</radialGradient>
<radialGradient id="Obj_Gradient" xl:href="#Gradient" gradientTransform="translate(40.56155 234.29126) scale(43.81581)"/>
<radialGradient id="Obj_Gradient_2" xl:href="#Gradient" gradientTransform="translate(515.99976 234.29025) scale(43.81581)"/>
<radialGradient id="Obj_Gradient_3" xl:href="#Gradient" gradientTransform="translate(515.9997 148.67415) scale(43.81581)"/>
<font-face font-family="Gill Sans" font-size="9" panose-1="2 11 5 2 2 1 4 9 2 3" units-per-em="1000" underline-position="-75.19531" underline-thickness="49.80469" slope="-888.8889" x-height="456.0547" cap-height="686.5234" ascent="909.1797" descent="-229.98047" font-style="italic" font-weight="400">
<font-face-src>
<font-face-name name="GillSans-Italic"/>
</font-face-src>
</font-face>
<marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" stroke-linejoin="miter" stroke-miterlimit="10" viewBox="-1 -2 4 4" markerWidth="4" markerHeight="4" color="#929292">
<g>
<path d="M 1.44 0 L 0 -.54 L 0 .54 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
</g>
</marker>
<font-face font-family="Gill Sans" font-size="9" panose-1="2 11 5 2 2 1 4 2 2 3" units-per-em="1000" underline-position="-75.19531" underline-thickness="49.80469" slope="0" x-height="449.70703" cap-height="687.0117" ascent="917.9688" descent="-230.46875" font-weight="400">
<font-face-src>
<font-face-name name="GillSans"/>
</font-face-src>
</font-face>
<marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" stroke-linejoin="miter" stroke-miterlimit="10" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="#929292">
<g>
<path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
</g>
</marker>
<marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_3" stroke-linejoin="miter" stroke-miterlimit="10" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black">
<g>
<path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
</g>
</marker>
<radialGradient id="Obj_Gradient_4" xl:href="#Gradient" gradientTransform="translate(40.56155 234.29126) scale(43.81581)"/>
<font-face font-family="Gill Sans" font-size="5" panose-1="2 11 5 2 2 1 4 2 2 3" units-per-em="1000" underline-position="-75.19531" underline-thickness="49.80469" slope="0" x-height="449.70703" cap-height="687.0117" ascent="917.9688" descent="-230.46875" font-weight="400">
<font-face-src>
<font-face-name name="GillSans"/>
</font-face-src>
</font-face>
<marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_4" stroke-linejoin="miter" stroke-miterlimit="10" viewBox="-1 -2 4 4" markerWidth="4" markerHeight="4" color="#929292">
<g>
<path d="M 1.12 0 L 0 -.42 L 0 .42 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
</g>
</marker>
<font-face font-family="Gill Sans" font-size="9" panose-1="2 11 9 2 3 0 4 2 2 3" units-per-em="1000" underline-position="-75.19531" underline-thickness="49.80469" slope="0" x-height="501.46484" cap-height="681.6406" ascent="922.8516" descent="-234.86328" font-weight="700">
<font-face-src>
<font-face-name name="GillSans-Bold"/>
</font-face-src>
</font-face>
<font-face font-family="Gill Sans" font-size="7" panose-1="2 11 5 2 2 1 4 2 2 3" units-per-em="1000" underline-position="-75.19531" underline-thickness="49.80469" slope="0" x-height="449.70703" cap-height="687.0117" ascent="917.9688" descent="-230.46875" font-weight="400">
<font-face-src>
<font-face-name name="GillSans"/>
</font-face-src>
</font-face>
<radialGradient id="Obj_Gradient_5" xl:href="#Gradient" gradientTransform="translate(515.99976 234.29025) scale(43.81581)"/>
<radialGradient id="Obj_Gradient_6" xl:href="#Gradient" gradientTransform="translate(515.9997 148.67415) scale(43.81581)"/>
<font-face font-family="Gill Sans" font-size="7" panose-1="2 11 9 2 3 0 4 2 2 3" units-per-em="1000" underline-position="-75.19531" underline-thickness="49.80469" slope="0" x-height="501.46484" cap-height="681.6406" ascent="922.8516" descent="-234.86328" font-weight="700">
<font-face-src>
<font-face-name name="GillSans-Bold"/>
</font-face-src>
</font-face>
</defs>
<metadata> Produced by OmniGraffle 7.7.1
<dc:date>2018-07-04 12:39:41 +0000</dc:date>
</metadata>
<g id="receive_path" fill-opacity="1" stroke-dasharray="none" stroke="none" stroke-opacity="1" fill="none">
<title>receive path</title>
<rect fill="white" x="3.5" y="3.62656" width="552.188" height="773.3154"/>
<g id="receive_path: Layer 1">
<title>Layer 1</title>
<g id="Graphic_86_shadow" filter="url(#Shadow)">
<rect x="128.343" y="389.813" width="143.495" height="45.3333" fill="white"/>
<rect x="128.343" y="389.813" width="143.495" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_84_shadow" filter="url(#Shadow)">
<circle cx="40.5615" cy="412.48" r="27.0000431433512" fill="white"/>
<circle cx="40.5615" cy="412.48" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_83_shadow" filter="url(#Shadow)">
<rect x="117.956" y="211.624" width="45.3335" height="45.3333" fill="white"/>
<rect x="117.956" y="211.624" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_82_shadow" filter="url(#Shadow)">
<rect x="227.423" y="211.624" width="45.3335" height="45.3333" fill="white"/>
<rect x="227.423" y="211.624" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_81_shadow" filter="url(#Shadow)">
<rect x="227.423" y="265.96" width="45.3335" height="45.3333" fill="white"/>
<rect x="227.423" y="265.96" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_78_shadow" filter="url(#Shadow)">
<rect x="227.423" y="331.441" width="45.3335" height="45.3333" fill="white"/>
<rect x="227.423" y="331.441" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_76_shadow" filter="url(#Shadow)">
<rect x="169.179" y="272.557" width="45.3335" height="45.3333" fill="white"/>
<rect x="169.179" y="272.557" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_74_shadow" filter="url(#Shadow)">
<rect x="133.343" y="396.479" width="31.3335" height="16" fill="white"/>
<rect x="133.343" y="396.479" width="31.3335" height="16" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_73_shadow" filter="url(#Shadow)">
<rect x="199.883" y="396.922" width="31.3335" height="16" fill="white"/>
<rect x="199.883" y="396.922" width="31.3335" height="16" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_72_shadow" filter="url(#Shadow)">
<rect x="233.587" y="396.922" width="31.3335" height="16" fill="white"/>
<rect x="233.587" y="396.922" width="31.3335" height="16" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_68_shadow" filter="url(#Shadow)">
<rect x="17.8948" y="196.794" width="45.3335" height="74.9945" fill="url(#Obj_Gradient)"/>
<rect x="17.8948" y="196.794" width="45.3335" height="74.9945" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_66_shadow" filter="url(#Shadow)">
<rect x="389.465" y="212.24" width="45.3335" height="45.3333" fill="white"/>
<rect x="389.465" y="212.24" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_62_shadow" filter="url(#Shadow)">
<rect x="389.465" y="132.159" width="45.3335" height="45.3333" fill="white"/>
<rect x="389.465" y="132.159" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_60_shadow" filter="url(#Shadow)">
<rect x="117.956" y="143.599" width="45.3335" height="45.3333" fill="white"/>
<rect x="117.956" y="143.599" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_57_shadow" filter="url(#Shadow)">
<circle cx="363.231" cy="627.66675" r="27.0000431433512" fill="white"/>
<circle cx="363.231" cy="627.66675" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_56_shadow" filter="url(#Shadow)">
<circle cx="471.226" cy="627.66675" r="27.0000431433512" fill="white"/>
<circle cx="471.226" cy="627.66675" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_55_shadow" filter="url(#Shadow)">
<circle cx="471.226" cy="728.3328" r="27.0000431433512" fill="white"/>
<circle cx="471.226" cy="728.3328" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_47_shadow" filter="url(#Shadow)">
<rect x="169.179" y="143.599" width="45.3335" height="45.3333" fill="white"/>
<rect x="169.179" y="143.599" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_44_shadow" filter="url(#Shadow)">
<circle cx="275" cy="652.5" r="27.0000431433512" fill="white"/>
<circle cx="275" cy="652.5" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_43_shadow" filter="url(#Shadow)">
<rect x="158.345" y="629.833" width="45.3335" height="45.3333" fill="white"/>
<rect x="158.345" y="629.833" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_41_shadow" filter="url(#Shadow)">
<circle cx="217.461" cy="739.5" r="27.0000431433512" fill="white"/>
<circle cx="217.461" cy="739.5" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_40_shadow" filter="url(#Shadow)">
<rect x="99.3061" y="716.833" width="45.3335" height="45.3333" fill="white"/>
<rect x="99.3061" y="716.833" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_38_shadow" filter="url(#Shadow)">
<circle cx="40.5615" cy="706.45435" r="27.0000431433512" fill="white"/>
<circle cx="40.5615" cy="706.45435" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_37_shadow" filter="url(#Shadow)">
<rect x="17.8948" y="601.9997" width="45.3335" height="45.3333" fill="white"/>
<rect x="17.8948" y="601.9997" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_27_shadow" filter="url(#Shadow)">
<rect x="166.179" y="396.479" width="31.3335" height="16" fill="white"/>
<rect x="166.179" y="396.479" width="31.3335" height="16" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_26_shadow" filter="url(#Shadow)">
<rect x="117.956" y="325.333" width="45.3335" height="45.3333" fill="white"/>
<rect x="117.956" y="325.333" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_19_shadow" filter="url(#Shadow)">
<rect x="297.723" y="212.292" width="45.3335" height="45.3333" fill="white"/>
<rect x="297.723" y="212.292" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_10_shadow" filter="url(#Shadow)">
<rect x="493.333" y="196.793" width="45.3335" height="74.9945" fill="url(#Obj_Gradient_2)"/>
<rect x="493.333" y="196.793" width="45.3335" height="74.9945" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_8_shadow" filter="url(#Shadow)">
<rect x="493.333" y="111.1769" width="45.3335" height="74.9945" fill="url(#Obj_Gradient_3)"/>
<rect x="493.333" y="111.1769" width="45.3335" height="74.9945" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_89">
<path d="M 18 593.333 L 74.3333 593.333 C 80.960715 593.333 86.3333 598.7056 86.3333 605.333 L 86.3333 762.442 C 86.3333 769.0694 80.960715 774.442 74.3333 774.442 L 18 774.442 C 11.372583 774.442 6 769.0694 6 762.442 L 6 605.333 C 6 598.7056 11.372583 593.333 18 593.333 Z" stroke="#ebebeb" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="10.0,10.0" stroke-width="5"/>
<text transform="translate(11 739.942)" fill="#929292">
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="#929292" x="5.894676" y="8">NIY: done by recv </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="#929292" x="7.99746" y="18">and timed-event </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="#929292" x="22.640038" y="28">threads</tspan>
</text>
</g>
<g id="Line_88">
<line x1="40.561506" y1="439.98" x2="40.56154" y2="586.7997" marker-end="url(#FilledArrow_Marker)" stroke="#929292" stroke-linecap="butt" stroke-linejoin="round" stroke-width="5"/>
</g>
<g id="Graphic_87">
<path d="M 159.14098 617.4479 L 297.64098 617.4479 C 304.2684 617.4479 309.64098 622.8205 309.64098 629.4479 L 309.64098 675.5517 C 309.64098 682.17915 304.2684 687.5517 297.64098 687.5517 L 159.14098 687.5517 C 152.51356 687.5517 147.14098 682.17915 147.14098 675.5517 L 147.14098 629.4479 C 147.14098 622.8205 152.51356 617.4479 159.14098 617.4479 Z" stroke="#ebebeb" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="10.0,10.0" stroke-width="5"/>
</g>
<g id="Graphic_86">
<rect x="128.343" y="389.813" width="143.495" height="45.3333" fill="white"/>
<rect x="128.343" y="389.813" width="143.495" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(133.343 420.6463)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="118.68104" y="8">rbuf</tspan>
</text>
</g>
<g id="Line_85">
<path d="M 150.46324 395.98617 C 158.90464 346.66238 169.65168 282.42376 175.79 248 C 180.77737 220.0307 182.7247 211.7302 185.33672 199.12874" marker-end="url(#FilledArrow_Marker_2)" stroke="#929292" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_84">
<circle cx="40.5615" cy="412.48" r="27.0000431433512" fill="white"/>
<circle cx="40.5615" cy="412.48" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(23.9615 402.48)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="8.810693" y="8">recv</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x=".14907227" y="18">thread(s)</tspan>
</text>
</g>
<g id="Graphic_83">
<rect x="117.956" y="211.624" width="45.3335" height="45.3333" fill="white"/>
<rect x="117.956" y="211.624" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(122.956 224.29064)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="7.111086" y="8">proxy</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.225588" y="18">writer</tspan>
</text>
</g>
<g id="Graphic_82">
<rect x="227.423" y="211.624" width="45.3335" height="45.3333" fill="white"/>
<rect x="227.423" y="211.624" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(232.423 219.29064)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="5.6674824" y="8">reader</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.557375" y="18">match</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="2.347414" y="28">(in sync)</tspan>
</text>
</g>
<g id="Graphic_81">
<rect x="227.423" y="265.96" width="45.3335" height="45.3333" fill="white"/>
<rect x="227.423" y="265.96" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(232.423 268.62664)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="5.6674824" y="8">reader</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.557375" y="18">match</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="5.4938984" y="28">(not in </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="8.28882" y="38">sync)</tspan>
</text>
</g>
<g id="Line_80">
<line x1="163.7895" y1="234.29064" x2="217.523" y2="234.29064" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_79">
<path d="M 198.48438 234.29064 C 204.15235 235.74928 211.71728 232.9382 215.49 238.667 C 219.26274 244.39583 219.13437 260.34122 221.123 268.667 C 222.11576 272.82337 223.1641 276.14625 224.22633 279.25966" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_78">
<rect x="227.423" y="331.441" width="45.3335" height="45.3333" fill="white"/>
<rect x="227.423" y="331.441" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(229.423 344.10766)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="1.9746113" y="8">secondary </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.391115" y="18">reorder</tspan>
</text>
</g>
<g id="Line_77">
<line x1="250.08975" y1="311.2933" x2="250.08975" y2="321.041" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_76">
<rect x="169.179" y="272.557" width="45.3335" height="45.3333" fill="white"/>
<rect x="169.179" y="272.557" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(174.179 285.22366)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="3.37134" y="8">primary </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="3.3911152" y="18">reorder</tspan>
</text>
</g>
<g id="Line_75">
<line x1="159.99908" y1="257.34002" x2="166.09895" y2="264.5962" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_74">
<rect x="133.343" y="396.479" width="31.3335" height="16" fill="white"/>
<rect x="133.343" y="396.479" width="31.3335" height="16" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(138.343 399.479)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="1.7634297" y="8">rmsg</tspan>
</text>
</g>
<g id="Graphic_73">
<rect x="199.883" y="396.922" width="31.3335" height="16" fill="white"/>
<rect x="199.883" y="396.922" width="31.3335" height="16" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(204.883 399.922)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="1.319582" y="8">rdata</tspan>
</text>
</g>
<g id="Graphic_72">
<rect x="233.587" y="396.922" width="31.3335" height="16" fill="white"/>
<rect x="233.587" y="396.922" width="31.3335" height="16" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(238.587 399.922)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="1.319582" y="8">rdata</tspan>
</text>
</g>
<g id="Line_71">
<line x1="196.84924" y1="318.37903" x2="211.6245" y2="386.7566" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_70">
<line x1="249.70862" y1="377.27424" x2="249.55645" y2="386.5234" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_69">
<line x1="158.05976" y1="211.22514" x2="168.63969" y2="197.23012" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_68">
<rect x="17.8948" y="196.794" width="45.3335" height="74.9945" fill="url(#Obj_Gradient_4)"/>
<rect x="17.8948" y="196.794" width="45.3335" height="74.9945" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(22.8948 219.29126)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="10.215822" y="8">guid</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="9.514895" y="18">hash </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="8.855715" y="28">table</tspan>
</text>
</g>
<g id="Line_67">
<line x1="63.7283" y1="234.29112" x2="107.556" y2="234.29085" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_66">
<rect x="389.465" y="212.24" width="45.3335" height="45.3333" fill="white"/>
<rect x="389.465" y="212.24" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(394.465 229.90666)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="5.6674824" y="8">reader</tspan>
</text>
</g>
<g id="Graphic_65">
<rect x="6" y="276.631" width="98.4011" height="94" fill="#ebebeb"/>
<text transform="translate(8 278.631)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">guid hash table maps all </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">(local &amp; proxy) endpoint </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">and participant guids to </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">the corresponding object. </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">Pointers to such objects </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="58">must be derived from the </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="68">guid hash, and may not be </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="78">retained across thread </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="88">liveliness state updates.</tspan>
</text>
</g>
<g id="Graphic_64">
<rect x="177.16536" y="23.140272" width="188.277" height="114" fill="#ebebeb"/>
<text transform="translate(179.16536 25.140272)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">discovery maintains the set of readers that match </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">the proxy writer and an array of reader pointers </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">that the data from this proxy writer must be </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">delivered to. This should be versioned, so </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">partition changes are (can be) precise. Currently </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="58">there is no versioning.</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="78">implementation: possibly by using the sequence </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="88">number of the writer data as a version number: </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="98">that allows for a very simple, parallel, garbage </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="108">collector for these sets.</tspan>
</text>
</g>
<g id="Graphic_63">
<rect x="289.334" y="298.8" width="262.712" height="64" fill="#ebebeb"/>
<text transform="translate(291.334 300.8)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">proxy-writer  reader matches switch between not-in-sync and in-</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">sync; the general idea being that the in-sync ones are only relevant to </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">heartbeat processing and need not be touched by Data(Frag) </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">processing. (&quot;Too new&quot; data always gets stored in the primary reorder </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">admin, whereas the not-in-sync ones are generally interested in old </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="58">data and track old data in the secondary reorder admins.)</tspan>
</text>
</g>
<g id="Graphic_62">
<rect x="389.465" y="132.159" width="45.3335" height="45.3333" fill="white"/>
<rect x="389.465" y="132.159" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(394.465 149.82565)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="8.196535" y="8">QOS</tspan>
</text>
</g>
<g id="Line_61">
<line x1="412.13174" y1="211.74" x2="412.13174" y2="187.8923" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_60">
<rect x="117.956" y="143.599" width="45.3335" height="45.3333" fill="white"/>
<rect x="117.956" y="143.599" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(122.956 161.26565)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="8.196535" y="8">QOS</tspan>
</text>
</g>
<g id="Line_59">
<line x1="140.62276" y1="211.124" x2="140.62276" y2="199.3323" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_58">
<rect x="18.017" y="128.304" width="87.4385" height="64" fill="#ebebeb"/>
<text transform="translate(20.017 130.304)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">&quot;reader&quot; is a DDSI </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">reader, which is a </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">proxy for a local </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">DCPS reader; &quot;proxy </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">writer&quot; is a proxy for </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="58">a remote DDSI writer.</tspan>
</text>
</g>
<g id="Graphic_57">
<circle cx="363.231" cy="627.66675" r="27.0000431433512" fill="white"/>
<circle cx="363.231" cy="627.66675" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(346.631 622.66675)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="8.118555" y="8">INIT</tspan>
</text>
</g>
<g id="Graphic_56">
<circle cx="471.226" cy="627.66675" r="27.0000431433512" fill="white"/>
<circle cx="471.226" cy="627.66675" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(454.626 617.66675)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x=".17324219" y="8">NOT-IN-</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="5.1214844" y="18">SYNC</tspan>
</text>
</g>
<g id="Graphic_55">
<circle cx="471.226" cy="728.3328" r="27.0000431433512" fill="white"/>
<circle cx="471.226" cy="728.3328" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(454.626 718.3328)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="10.506982" y="8">IN-</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="5.1214844" y="18">SYNC</tspan>
</text>
</g>
<g id="Line_54">
<line x1="390.731" y1="627.66674" x2="433.826" y2="627.66674" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_53">
<line x1="383.34723" y1="646.4178" x2="443.868" y2="702.8314" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_52">
<path d="M 457.8112 704.31875 C 453.28325 696.2132 444.09224 688.7 444.226 679.9998 C 444.3198 673.8994 448.9981 667.21296 453.43886 660.5573" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_51">
<path d="M 485.2489 651.33034 C 491.24066 661.4415 502.9707 672.6146 503.226 681.66675 C 503.39934 687.8123 498.2839 692.9829 493.2658 698.1709" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_50">
<text transform="translate(387.77764 653.1469) rotate(42.98837)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">not trans. local conn.</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">or proxy writer has</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">no old msgs</tspan>
</text>
</g>
<g id="Graphic_49">
<text transform="translate(446.56 670.5217)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="1.4763203" y="8">rejects </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.033449" y="18">data</tspan>
</text>
</g>
<g id="Graphic_48">
<text transform="translate(546.7041 632.1206) rotate(90)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.994972" y="8">next-to-be-delivered</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="4.4505385" y="18">for this conn. matches</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.994972" y="28">next-to-be-delivered</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="14.452492" y="38">for proxy-writer</tspan>
</text>
</g>
<g id="Graphic_47">
<rect x="169.179" y="143.599" width="45.3335" height="45.3333" fill="white"/>
<rect x="169.179" y="143.599" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(171.179 151.26565)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="10.851564" y="8">rdary</tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="#929292" x="4.064211" y="18">versioning </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="#929292" x="14.283693" y="28">NIY</tspan>
</text>
</g>
<g id="Line_46">
<path d="M 215.0125 166.11568 L 343.0565 165.28677 L 392.7294 205.67865" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_45">
<rect x="404.3573" y="619.66674" width="19" height="16" fill="white"/>
<text transform="translate(406.3573 622.66674)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x=".47094727" y="8">else</tspan>
</text>
</g>
<g id="Graphic_44">
<circle cx="275" cy="652.5" r="27.0000431433512" fill="white"/>
<circle cx="275" cy="652.5" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(258.4 636.5)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="2.2540527" y="8">delivery </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="4.789697" y="18">thread</tspan>
<tspan font-family="Gill Sans" font-size="5" font-weight="400" fill="black" x="1.435205" y="25">store in reader </tspan>
<tspan font-family="Gill Sans" font-size="5" font-weight="400" fill="black" x="3.0697266" y="31">history cache</tspan>
</text>
</g>
<g id="Graphic_43">
<rect x="158.345" y="629.833" width="45.3335" height="45.3333" fill="white"/>
<rect x="158.345" y="629.833" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(163.345 632.49966)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="4.959963" y="8">regular </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="10.033449" y="18">data </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="3.3208027" y="28">delivery </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.605715" y="38">queue</tspan>
</text>
</g>
<g id="Line_42">
<line x1="204.1785" y1="652.49974" x2="221.79999" y2="652.4998" marker-end="url(#FilledArrow_Marker_4)" stroke="#929292" stroke-linecap="butt" stroke-linejoin="round" stroke-width="10"/>
</g>
<g id="Graphic_41">
<circle cx="217.461" cy="739.5" r="27.0000431433512" fill="white"/>
<circle cx="217.461" cy="739.5" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(197.861 724.5)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="7.12832" y="8">builtin/</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="2.2547852" y="18">discovery </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.058252" y="28">threads</tspan>
</text>
</g>
<g id="Graphic_40">
<rect x="99.3061" y="716.833" width="45.3335" height="45.3333" fill="white"/>
<rect x="99.3061" y="716.833" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(101.3061 719.4997)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="8.19507" y="8">builtin/</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="3.321535" y="18">discovery </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.320803" y="28">delivery </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="7.87427" y="38">queues</tspan>
</text>
</g>
<g id="Line_39">
<line x1="145.1396" y1="739.4997" x2="164.26099" y2="739.4998" marker-end="url(#FilledArrow_Marker_4)" stroke="#929292" stroke-linecap="butt" stroke-linejoin="round" stroke-width="10"/>
</g>
<g id="Graphic_38">
<circle cx="40.5615" cy="706.45435" r="27.0000431433512" fill="white"/>
<circle cx="40.5615" cy="706.45435" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(20.9615 686.45435)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="9.490381" y="8">ack &amp; </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="2.079004" y="18">heartbeat </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="10.6" y="28">proc. </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="7.789697" y="38">thread</tspan>
</text>
</g>
<g id="Graphic_37">
<rect x="17.8948" y="601.9997" width="45.3335" height="45.3333" fill="white"/>
<rect x="17.8948" y="601.9997" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(19.8948 614.66634)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="3.145754" y="8">heartbeat </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="9.605715" y="18">queue</tspan>
</text>
</g>
<g id="Line_36">
<line x1="40.561536" y1="647.833" x2="40.561536" y2="664.2543" marker-end="url(#FilledArrow_Marker)" stroke="#929292" stroke-linecap="butt" stroke-linejoin="round" stroke-width="5"/>
</g>
<g id="Line_35">
<line x1="181.08965" y1="629.333" x2="181.78388" y2="422.87894" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_34">
<rect x="251.7911" y="710.442" width="144.33299" height="64" fill="#ebebeb"/>
<text transform="translate(253.7911 712.442)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">delivery queues are filled by recv </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">thread (by shuffling rdata references </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">around); heartbeats and acks are a </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">special case: they have no associated </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">rdata and are processed as quickly as </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="58">possible</tspan>
</text>
</g>
<g id="Line_33">
<path d="M 336.71404 593.2246 C 335.14285 598.14925 336.4519 601.6301 332 608 C 327.5481 614.3699 313.3227 627.629 310 631.448 C 306.6773 635.267 311.37456 631.0934 312.06173 630.91616" stroke="#ebebeb" stroke-linecap="round" stroke-linejoin="round" stroke-width="6"/>
</g>
<g id="Graphic_32">
<rect x="289.334" y="381.146" width="266.354" height="54" fill="#515151"/>
<text transform="translate(291.334 383.146)" fill="#cbcbcb">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="#cbcbcb" x="0" y="8">Major differences from current implementation:</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="#cbcbcb" x="0" y="18">- proxy writer stores all its reader matches currently in a single tree, </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="#cbcbcb" x="0" y="28">not discriminating between sync/not-in-sync</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="#cbcbcb" x="0" y="38">- all recv processing currently in a single thread</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="#cbcbcb" x="0" y="48">- no QoS changes yet, no versioning of QoS&apos;s</tspan>
</text>
</g>
<g id="Graphic_31">
<rect x="494.688" y="3.62656" width="61" height="16" fill="#515151"/>
<text transform="translate(496.688 6.62656)" fill="#cbcbcb">
<tspan font-family="Gill Sans" font-size="9" font-weight="700" fill="#cbcbcb" x=".8818359" y="8">receive path</tspan>
</text>
</g>
<g id="Group_28">
<g id="Graphic_30">
<rect x="297.723" y="529.2246" width="98.4011" height="64" fill="#ebebeb"/>
<text transform="translate(299.723 531.2246)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">potentially many delivery </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">threads: if a writer always </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">delivers via the same </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">queue, all expected </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">ordering properties are </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="58">retained </tspan>
</text>
</g>
<g id="Graphic_29">
<rect x="396.124" y="529.2246" width="98.4011" height="64" fill="#ebebeb"/>
<text transform="translate(398.124 531.2246)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">given that the kernel can </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">only do groupWrite, and </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">not deliver data to an </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">individual reader, might as </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">well design to that </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="58">behaviour</tspan>
</text>
</g>
</g>
<g id="Graphic_27">
<rect x="166.179" y="396.479" width="31.3335" height="16" fill="white"/>
<rect x="166.179" y="396.479" width="31.3335" height="16" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(171.179 399.479)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="1.319582" y="8">rdata</tspan>
</text>
</g>
<g id="Graphic_26">
<rect x="117.956" y="325.333" width="45.3335" height="45.3333" fill="white"/>
<rect x="117.956" y="325.333" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(122.956 342.99966)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.469484" y="8">defrag</tspan>
</text>
</g>
<g id="Line_25">
<line x1="140.62276" y1="257.4573" x2="140.62276" y2="314.933" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_24">
<line x1="157.4614" y1="371.0702" x2="169.87544" y2="388.07857" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_23">
<path d="M 75.66665 412.47993 C 79.22184 421.8747 80.29301 405.9726 86.3333 440.667 C 92.37359 475.36136 99.98693 587.1401 111.912 620.667 C 117.52051 636.4351 124.63402 640.49495 132.19055 641.10625" marker-end="url(#FilledArrow_Marker_4)" stroke="#929292" stroke-linecap="butt" stroke-linejoin="round" stroke-width="10"/>
</g>
<g id="Line_22">
<path d="M 106.66374 599.9968 C 108.4129 610.5231 111.96686 616.9879 111.91174 631.57895 C 111.85662 646.17 105.8176 673.4242 106.333 687.552 C 106.39159 689.1579 106.51156 690.6469 106.68244 692.0388" marker-end="url(#FilledArrow_Marker_4)" stroke="#929292" stroke-linecap="butt" stroke-linejoin="round" stroke-width="10"/>
</g>
<g id="Line_21">
<path d="M 122.31713 716.3331 L 123.667 625.5 L 181.1809 602.19506" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_20">
<rect x="7.39499" y="448.185" width="278.001" height="134" fill="#eaeaea" fill-opacity=".89"/>
<text transform="translate(9.39499 450.185)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">the receive thread requests the O/S kernel to dump the data in large rbufs, </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">each containing any number of messages; the decoding appends some </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">information, both for Data and DataFrag sub-messages (the </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="black" y="28">rdata</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" y="28"> </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">elements), and for the embedded QoS lists.</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="58">Each </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="black" y="58">rdata</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" y="58"> contains all that is necessary to track it in defragmenting and </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="68">reordering admins, and to link it into the delivery queue. This ensures no </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="78">(heap) memory allocations are necessary to track an arbitrary number of </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="88">messages/fragments in the normal case.</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="108">The deserializer operates from the </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="black" y="108">rdata</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" y="108"> elements, it gets a little bit nasty </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="118">when a primitive is split over mulitple fragments, but so be it. </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="#929292" y="118">NIY: currently </tspan>
<tspan font-family="Gill Sans" font-size="9" font-style="italic" font-weight="400" fill="#929292" x="0" y="128">malloc + memcpy</tspan>
</text>
</g>
<g id="Graphic_19">
<rect x="297.723" y="212.292" width="45.3335" height="45.3333" fill="white"/>
<rect x="297.723" y="212.292" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(302.723 214.95866)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="7.111086" y="8">proxy </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.225588" y="18">writer</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.557375" y="28">match</tspan>
</text>
</g>
<g id="Graphic_18">
<rect x="194.88436" y="229.13047" width="11" height="11" fill="white"/>
<text transform="translate(195.88436 230.63047)" fill="black">
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x=".3112793" y="6">set</tspan>
</text>
</g>
<g id="Line_17">
<path d="M 272.7565 234.29064 L 284.6565 234.29064 L 285.396 234.29064 L 285.396 258 L 285.396 275.333 L 404.357 275.333 L 412.13175 275.333 L 412.13175 269.4733 L 412.13175 267.4733" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2.0,2.0" stroke-width="1"/>
</g>
<g id="Line_16">
<path d="M 272.7565 288.62664 L 279.7565 288.62664 L 285.396 288.62664 L 285.396 280.9991 L 285.396 273.9991" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2.0,2.0" stroke-width="1"/>
</g>
<g id="Graphic_15">
<rect x="389.82868" y="269.833" width="14" height="11" fill="white"/>
<text transform="translate(390.82868 271.333)" fill="black">
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x=".20483398" y="6">guid</tspan>
</text>
</g>
<g id="Line_14">
<line x1="389.465" y1="234.90666" x2="352.9565" y2="234.94757" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_13">
<text transform="translate(366.55264 227.55205) rotate(-.064198986)" fill="black">
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x=".3112793" y="6">set</tspan>
</text>
</g>
<g id="Line_12">
<path d="M 320.38974 212.292 L 320.38974 200.392 L 203.678 200.392 L 203.678 214 L 203.678 226.8435 L 175.66546 226.8435 L 173.66546 226.8435" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2.0,2.0" stroke-width="1"/>
</g>
<g id="Graphic_11">
<rect x="183.48657" y="221.3435" width="14" height="11" fill="white"/>
<text transform="translate(184.48657 222.8435)" fill="black">
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x=".20483398" y="6">guid</tspan>
</text>
</g>
<g id="Graphic_10">
<rect x="493.333" y="196.793" width="45.3335" height="74.9945" fill="url(#Obj_Gradient_5)"/>
<rect x="493.333" y="196.793" width="45.3335" height="74.9945" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(498.333 219.29025)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="10.215822" y="8">guid</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="9.514895" y="18">hash</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="8.855715" y="28">table</tspan>
</text>
</g>
<g id="Line_9">
<path d="M 492.833 234.4661 L 480.933 234.4661 L 446.6985 234.90666 L 444.6985 234.90666" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_8">
<rect x="493.333" y="111.1769" width="45.3335" height="74.9945" fill="url(#Obj_Gradient_6)"/>
<rect x="493.333" y="111.1769" width="45.3335" height="74.9945" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(498.333 133.67415)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.750734" y="8">DCPS </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="5.6674824" y="18">reader </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="7.306643" y="28">entity</tspan>
</text>
</g>
<g id="Line_7">
<line x1="492.96545" y1="169.92073" x2="442.07555" y2="216.86104" marker-end="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="butt" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_6">
<rect x="456.96417" y="35.27039" width="81.70233" height="54" fill="#ebebeb"/>
<text transform="translate(458.96417 37.27039)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">DCPS reader entity </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">owns the DDSI </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">reader and stores a </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">pointer and the </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">GUID</tspan>
</text>
</g>
<g id="Line_5">
<line x1="68.06151" y1="412.47995" x2="102.143" y2="412.47987" marker-end="url(#FilledArrow_Marker_4)" stroke="#929292" stroke-linecap="butt" stroke-linejoin="round" stroke-width="10"/>
</g>
<g id="Graphic_4">
<text transform="translate(70.91174 408.4799)" fill="black">
<tspan font-family="Gill Sans" font-size="7" font-weight="700" fill="black" x=".10498047" y="6">rmsg, rdata</tspan>
</text>
</g>
<g id="Graphic_3">
<text transform="translate(380.9639 193.7023) rotate(40)" fill="black">
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x=".3112793" y="6">set</tspan>
</text>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 59 KiB

View file

@ -0,0 +1,587 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="4.5 4 549.839 724.8999" width="549.839" height="724.8999">
<defs>
<filter id="Shadow" filterUnits="userSpaceOnUse" x="4.5" y="4">
<feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/>
<feOffset in="blur" result="offset" dx="0" dy="2"/>
<feFlood flood-color="black" flood-opacity=".5" result="flood"/>
<feComposite in="flood" in2="offset" operator="in"/>
</filter>
<radialGradient cx="0" cy="0" r="1" id="Gradient" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="white"/>
<stop offset="1" stop-color="#b9b9b9"/>
</radialGradient>
<radialGradient id="Obj_Gradient" xl:href="#Gradient" gradientTransform="translate(30.66675 135.04605) scale(43.81581)"/>
<radialGradient id="Obj_Gradient_2" xl:href="#Gradient" gradientTransform="translate(525.18726 181.97665) scale(43.81581)"/>
<radialGradient id="Obj_Gradient_3" xl:href="#Gradient" gradientTransform="translate(30.66675 225.1939) scale(43.81581)"/>
<font-face font-family="Gill Sans" font-size="9" panose-1="2 11 5 2 2 1 4 2 2 3" units-per-em="1000" underline-position="-75.19531" underline-thickness="49.80469" slope="0" x-height="449.70703" cap-height="687.0117" ascent="917.9688" descent="-230.46875" font-weight="400">
<font-face-src>
<font-face-name name="GillSans"/>
</font-face-src>
</font-face>
<marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" stroke-linejoin="miter" stroke-miterlimit="10" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black">
<g>
<path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
</g>
</marker>
<font-face font-family="Gill Sans" font-size="9" panose-1="2 11 9 2 3 0 4 2 2 3" units-per-em="1000" underline-position="-75.19531" underline-thickness="49.80469" slope="0" x-height="501.46484" cap-height="681.6406" ascent="922.8516" descent="-234.86328" font-weight="700">
<font-face-src>
<font-face-name name="GillSans-Bold"/>
</font-face-src>
</font-face>
<font-face font-family="Gill Sans" font-size="7" panose-1="2 11 5 2 2 1 4 2 2 3" units-per-em="1000" underline-position="-75.19531" underline-thickness="49.80469" slope="0" x-height="449.70703" cap-height="687.0117" ascent="917.9688" descent="-230.46875" font-weight="400">
<font-face-src>
<font-face-name name="GillSans"/>
</font-face-src>
</font-face>
<marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" stroke-linejoin="miter" stroke-miterlimit="10" viewBox="-1 -2 4 4" markerWidth="4" markerHeight="4" color="#929292">
<g>
<path d="M 1.12 0 L 0 -.42 L 0 .42 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
</g>
</marker>
<marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_3" stroke-linejoin="miter" stroke-miterlimit="10" viewBox="-3 -2 4 4" markerWidth="4" markerHeight="4" color="#929292">
<g>
<path d="M -1.12 0 L 0 .42 L 0 -.42 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
</g>
</marker>
<font-face font-family="Helvetica" font-size="7" units-per-em="1000" underline-position="-75.68359" underline-thickness="49.316406" slope="0" x-height="522.9492" cap-height="717.28516" ascent="770.0195" descent="-229.98047" font-weight="400">
<font-face-src>
<font-face-name name="Helvetica"/>
</font-face-src>
</font-face>
<radialGradient id="Obj_Gradient_4" xl:href="#Gradient" gradientTransform="translate(30.66675 135.04605) scale(43.81581)"/>
<radialGradient id="Obj_Gradient_5" xl:href="#Gradient" gradientTransform="translate(525.18726 181.97665) scale(43.81581)"/>
<radialGradient id="Obj_Gradient_6" xl:href="#Gradient" gradientTransform="translate(30.66675 225.1939) scale(43.81581)"/>
</defs>
<metadata> Produced by OmniGraffle 7.7.1
<dc:date>2018-07-04 12:39:41 +0000</dc:date>
</metadata>
<g id="transmit_path" fill-opacity="1" stroke-dasharray="none" stroke="none" stroke-opacity="1" fill="none">
<title>transmit path</title>
<rect fill="white" x="4.5" y="4" width="549.839" height="724.8999"/>
<g id="transmit_path: Layer 1">
<title>Layer 1</title>
<g id="Graphic_77_shadow" filter="url(#Shadow)">
<circle cx="255.33376" cy="696.3999" r="27.0000431433512" fill="white"/>
<circle cx="255.33376" cy="696.3999" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_76_shadow" filter="url(#Shadow)">
<rect x="436.5671" y="159.31" width="45.3335" height="45.3333" fill="white"/>
<rect x="436.5671" y="159.31" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_75_shadow" filter="url(#Shadow)">
<rect x="150.8911" y="222.644" width="45.3335" height="45.3333" fill="white"/>
<rect x="150.8911" y="222.644" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_73_shadow" filter="url(#Shadow)">
<rect x="79.5157" y="368.833" width="45.3335" height="45.3333" fill="white"/>
<rect x="79.5157" y="368.833" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_71_shadow" filter="url(#Shadow)">
<rect x="79.5157" y="159.31" width="45.3335" height="45.3333" fill="white"/>
<rect x="79.5157" y="159.31" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_62_shadow" filter="url(#Shadow)">
<rect x="79.5157" y="97.5488" width="45.3335" height="45.3333" fill="white"/>
<rect x="79.5157" y="97.5488" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_60_shadow" filter="url(#Shadow)">
<rect x="436.5671" y="93.9485" width="45.3335" height="45.3333" fill="white"/>
<rect x="436.5671" y="93.9485" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_53_shadow" filter="url(#Shadow)">
<rect x="436.5671" y="224.672" width="45.3335" height="45.3333" fill="white"/>
<rect x="436.5671" y="224.672" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_50_shadow" filter="url(#Shadow)">
<rect x="219.6961" y="221.071" width="45.3335" height="45.3333" fill="white"/>
<rect x="219.6961" y="221.071" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_47_shadow" filter="url(#Shadow)">
<rect x="330.52844" y="673.7333" width="45.3335" height="45.3333" fill="white"/>
<rect x="330.52844" y="673.7333" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_45_shadow" filter="url(#Shadow)">
<circle cx="157.66701" cy="559.636" r="27.0000431433512" fill="white"/>
<circle cx="157.66701" cy="559.636" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_41_shadow" filter="url(#Shadow)">
<rect x="424.05664" y="673.7333" width="45.3335" height="45.3333" fill="white"/>
<rect x="424.05664" y="673.7333" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_36_shadow" filter="url(#Shadow)">
<rect x="152.1731" y="284.405" width="45.3335" height="45.3333" fill="white"/>
<rect x="152.1731" y="284.405" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_35_shadow" filter="url(#Shadow)">
<rect x="152.1731" y="346.167" width="45.3335" height="45.3333" fill="white"/>
<rect x="152.1731" y="346.167" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_23_shadow" filter="url(#Shadow)">
<rect x="289.58743" y="159.31" width="45.3335" height="45.3333" fill="white"/>
<rect x="289.58743" y="159.31" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_22_shadow" filter="url(#Shadow)">
<rect x="219.6961" y="159.31" width="45.3335" height="45.3333" fill="white"/>
<rect x="219.6961" y="159.31" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_13_shadow" filter="url(#Shadow)">
<rect x="8" y="97.5488" width="45.3335" height="74.9945" fill="url(#Obj_Gradient)"/>
<rect x="8" y="97.5488" width="45.3335" height="74.9945" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_11_shadow" filter="url(#Shadow)">
<rect x="502.5205" y="144.4794" width="45.3335" height="74.9945" fill="url(#Obj_Gradient_2)"/>
<rect x="502.5205" y="144.4794" width="45.3335" height="74.9945" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_9_shadow" filter="url(#Shadow)">
<rect x="8" y="187.69666" width="45.3335" height="74.9945" fill="url(#Obj_Gradient_3)"/>
<rect x="8" y="187.69666" width="45.3335" height="74.9945" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_7_shadow" filter="url(#Shadow)">
<rect x="232.667" y="536.684" width="45.3335" height="45.3333" fill="white"/>
<rect x="232.667" y="536.684" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_88_shadow" filter="url(#Shadow)">
<rect x="186.6224" y="85.03937" width="45.3335" height="45.3333" fill="white"/>
<rect x="186.6224" y="85.03937" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_85_shadow" filter="url(#Shadow)">
<rect x="293.7291" y="85.03937" width="45.3335" height="45.3333" fill="white"/>
<rect x="293.7291" y="85.03937" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_84_shadow" filter="url(#Shadow)">
<rect x="152.1731" y="31.454248" width="45.3335" height="45.3333" fill="white"/>
<rect x="152.1731" y="31.454248" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_77">
<circle cx="255.33376" cy="696.3999" r="27.0000431433512" fill="white"/>
<circle cx="255.33376" cy="696.3999" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(238.73376 681.3999)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.195947" y="8">timed </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="4.99624" y="18">events</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="4.789697" y="28">thread</tspan>
</text>
</g>
<g id="Graphic_76">
<rect x="436.5671" y="159.31" width="45.3335" height="45.3333" fill="white"/>
<rect x="436.5671" y="159.31" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(441.5671 171.97665)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="7.111086" y="8">proxy</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="5.6674824" y="18">reader</tspan>
</text>
</g>
<g id="Graphic_75">
<rect x="150.8911" y="222.644" width="45.3335" height="45.3333" fill="white"/>
<rect x="150.8911" y="222.644" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(155.8911 235.31065)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.225588" y="8">writer </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="4.830324" y="18">history</tspan>
</text>
</g>
<g id="Line_74">
<line x1="174.03683" y1="268.4772" x2="174.15116" y2="274.00722" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_73">
<rect x="79.5157" y="368.833" width="45.3335" height="45.3333" fill="white"/>
<rect x="79.5157" y="368.833" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(84.5157 381.49966)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="9.451174" y="8">dest. </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="2.811037" y="18">locators</tspan>
</text>
</g>
<g id="Line_72">
<line x1="102.18245" y1="204.6433" x2="102.18245" y2="358.433" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_71">
<rect x="79.5157" y="159.31" width="45.3335" height="45.3333" fill="white"/>
<rect x="79.5157" y="159.31" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(84.5157 176.97665)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.225588" y="8">writer</tspan>
</text>
</g>
<g id="Graphic_62">
<rect x="79.5157" y="97.5488" width="45.3335" height="45.3333" fill="white"/>
<rect x="79.5157" y="97.5488" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(84.5157 115.21545)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="8.196535" y="8">QOS</tspan>
</text>
</g>
<g id="Line_61">
<line x1="102.18246" y1="159.31" x2="102.18246" y2="153.2821" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_60">
<rect x="436.5671" y="93.9485" width="45.3335" height="45.3333" fill="white"/>
<rect x="436.5671" y="93.9485" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(441.5671 111.61515)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="8.196535" y="8">QOS</tspan>
</text>
</g>
<g id="Line_59">
<line x1="459.23386" y1="159.31" x2="459.23386" y2="149.6818" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_58">
<rect x="8" y="27.1209" width="105" height="54" fill="#ebebeb"/>
<text transform="translate(10 29.1209)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">&quot;writer&quot; is a DDSI writer, </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">which is a proxy for a local </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">DCPS writer; &quot;proxy </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">reader&quot; is a proxy for a </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">remote DDSI reader.</tspan>
</text>
</g>
<g id="Graphic_57">
<rect x="486.339" y="4" width="68" height="16" fill="#515151"/>
<text transform="translate(488.339 7)" fill="#cbcbcb">
<tspan font-family="Gill Sans" font-size="9" font-weight="700" fill="#cbcbcb" x=".7363281" y="8">transmit path</tspan>
</text>
</g>
<g id="Line_55">
<line x1="125.20452" y1="197.43954" x2="143.50043" y2="215.55298" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_54">
<text transform="translate(160.79105 277.54747)" fill="black">
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x=".3112793" y="6">set</tspan>
</text>
</g>
<g id="Graphic_53">
<rect x="436.5671" y="224.672" width="45.3335" height="45.3333" fill="white"/>
<rect x="436.5671" y="224.672" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(441.5671 242.33865)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="2.811037" y="8">locators</tspan>
</text>
</g>
<g id="Line_52">
<line x1="459.23386" y1="205.1433" x2="459.23386" y2="214.272" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_51">
<rect x="96.68245" y="344.1505" width="11" height="11" fill="white"/>
<text transform="translate(97.68245 345.6505)" fill="black">
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x=".3112793" y="6">set</tspan>
</text>
</g>
<g id="Graphic_50">
<rect x="219.6961" y="221.071" width="45.3335" height="45.3333" fill="white"/>
<rect x="219.6961" y="221.071" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(224.6961 238.73765)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="3.5690938" y="8">ack info</tspan>
</text>
</g>
<g id="Line_49">
<line x1="242.36284" y1="204.6433" x2="242.36284" y2="220.571" stroke="black" stroke-linecap="butt" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_48">
<rect x="54.878296" y="271.20758" width="86.5643" height="84" fill="#ebebeb"/>
<text transform="translate(56.878296 273.20758)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">serdata is CDR </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">encoded data and a </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">separate copy of its </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">key (except for </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">discovery message </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="58">where it uses the </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="68">DDSI &quot;parameter-list&quot; </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="78">encoding).</tspan>
</text>
</g>
<g id="Graphic_47">
<rect x="330.52844" y="673.7333" width="45.3335" height="45.3333" fill="white"/>
<rect x="330.52844" y="673.7333" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(335.52844 691.3999)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="5.38843" y="8">xpacks</tspan>
</text>
</g>
<g id="Graphic_46">
<rect x="289.58743" y="536.97" width="101.82944" height="44" fill="#ebebeb"/>
<text transform="translate(291.58743 538.97)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">an xmsg either references </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">the destination address </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">set of a writer, or a </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">locator of a proxy-reader.</tspan>
</text>
</g>
<g id="Graphic_45">
<circle cx="157.66701" cy="559.636" r="27.0000431433512" fill="white"/>
<circle cx="157.66701" cy="559.636" r="27.0000431433512" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(137.06701 549.636)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="1.1410156" y="8">application </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="9.209375" y="18">writes</tspan>
</text>
</g>
<g id="Graphic_41">
<rect x="424.05664" y="673.7333" width="45.3335" height="45.3333" fill="white"/>
<rect x="424.05664" y="673.7333" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(429.05664 691.3999)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="4.074465" y="8">sockets</tspan>
</text>
</g>
<g id="Line_40">
<line x1="376.36194" y1="696.39995" x2="397.85664" y2="696.39996" marker-end="url(#FilledArrow_Marker_2)" stroke="#929292" stroke-linecap="butt" stroke-linejoin="round" stroke-width="10"/>
</g>
<g id="Line_39">
<line x1="271.80967" y1="582.4242" x2="321.78458" y2="652.4112" marker-end="url(#FilledArrow_Marker_2)" stroke="#929292" stroke-linecap="butt" stroke-linejoin="round" stroke-width="10"/>
</g>
<g id="Graphic_38">
<rect x="202.68253" y="292.01617" width="141.67799" height="54" fill="#ebebeb"/>
<text transform="translate(204.68253 294.01617)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">writer history indexed by sequence </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">number (seqidx; for retransmitting </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">on request) and by key (tlidx)—key </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">used only for retaining/dropping data </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">when new data comes in</tspan>
</text>
</g>
<g id="Graphic_37">
<rect x="274.6073" y="211.32974" width="123.92361" height="74" fill="#ebebeb"/>
<text transform="translate(276.6073 213.32974)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">ack info: highest sequence </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">number ack&apos;d so far; writer can </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">drop non-TL msgs from the </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">WHC with sequence numbers </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">less than the minimum over all </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="58">matched readers; unreliable </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="68">readers have it fixed at MAX.</tspan>
</text>
</g>
<g id="Graphic_36">
<rect x="152.1731" y="284.405" width="45.3335" height="45.3333" fill="white"/>
<rect x="152.1731" y="284.405" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(157.1731 297.07165)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="10.20923" y="8">whc </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="8.484377" y="18">node</tspan>
</text>
</g>
<g id="Graphic_35">
<rect x="152.1731" y="346.167" width="45.3335" height="45.3333" fill="white"/>
<rect x="152.1731" y="346.167" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(157.1731 363.83364)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="3.828371" y="8">ser.data</tspan>
</text>
</g>
<g id="Line_34">
<line x1="174.83984" y1="330.2383" x2="174.83984" y2="335.767" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_33">
<path d="M 232.46164 536.3293 C 219.19582 522.97695 201.72312 520.32145 192.66022 496.2682 C 184.42926 474.423 183.1305 434.9163 179.32072 401.81236" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_32">
<line x1="255.33374" y1="608.2173" x2="255.33374" y2="643.1999" marker-end="url(#FilledArrow_Marker_2)" marker-start="url(#FilledArrow_Marker_3)" stroke="#929292" stroke-linecap="round" stroke-linejoin="round" stroke-width="10"/>
</g>
<g id="Line_31">
<line x1="282.83377" y1="696.3999" x2="304.32844" y2="696.3999" marker-end="url(#FilledArrow_Marker_2)" stroke="#929292" stroke-linecap="butt" stroke-linejoin="round" stroke-width="10"/>
</g>
<g id="Line_30">
<path d="M 232.26851 541.87096 C 217.144 530.40905 205.76133 528.6965 186.89047 507.4818 C 169.61184 488.0571 146.04586 452.27173 124.83041 422.59963" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_29">
<path d="M 278.39072 540.8781 C 303.72457 520.58136 325.99877 525.04676 354.39987 479.9818 C 381.5931 436.8334 414.41877 348.2532 444.7834 279.49982" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="4.0,4.0" stroke-width="1"/>
</g>
<g id="Graphic_28">
<path d="M 187.40198 447.2858 L 191.95046 480.98016 L 184.02237 482.0504 L 179.47389 448.356 Z" fill="white"/>
<text transform="translate(187.40198 447.2858) rotate(82.31199)" fill="black">
<tspan font-family="Helvetica" font-size="7" font-weight="400" fill="black" x=".4604492" y="6">refcounted</tspan>
</text>
</g>
<g id="Graphic_27">
<path d="M 197.07822 514.35035 L 225.4233 533.12683 L 221.0053 539.79626 L 192.66022 521.0198 Z" fill="white"/>
<text transform="translate(197.07822 514.35035) rotate(33.521466)" fill="black">
<tspan font-family="Helvetica" font-size="7" font-weight="400" fill="black" x=".4604492" y="6">refcounted</tspan>
</text>
</g>
<g id="Graphic_26">
<rect x="308.46117" y="513.4885" width="21" height="8" fill="white"/>
<text transform="translate(308.46117 513.4885)" fill="black">
<tspan font-family="Helvetica" font-size="7" font-weight="400" fill="black" x=".1862793" y="6">copied</tspan>
</text>
</g>
<g id="Line_25">
<line x1="185.1669" y1="559.55565" x2="206.46712" y2="559.4934" marker-end="url(#FilledArrow_Marker_2)" stroke="#929292" stroke-linecap="butt" stroke-linejoin="round" stroke-width="10"/>
</g>
<g id="Graphic_23">
<rect x="289.58743" y="159.31" width="45.3335" height="45.3333" fill="white"/>
<rect x="289.58743" y="159.31" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(294.58743 171.97665)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.225588" y="8">writer</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.557375" y="18">match</tspan>
</text>
</g>
<g id="Graphic_22">
<rect x="219.6961" y="159.31" width="45.3335" height="45.3333" fill="white"/>
<rect x="219.6961" y="159.31" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(224.6961 161.97665)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="7.111086" y="8">proxy </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="5.6674824" y="18">reader</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.557375" y="28">match</tspan>
</text>
</g>
<g id="Line_21">
<path d="M 312.25418 159.31 L 312.25418 147.41 L 201.61905 147.41 L 201.61905 168.24872 L 201.61905 174.42108 L 136.7492 174.42108 L 134.7492 174.42108" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2.0,2.0" stroke-width="1"/>
</g>
<g id="Graphic_20">
<rect x="155.60654" y="168.92108" width="14" height="11" fill="white"/>
<text transform="translate(156.60654 170.42108)" fill="black">
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x=".20483398" y="6">guid</tspan>
</text>
</g>
<g id="Line_19">
<path d="M 242.36284 159.31 L 242.36284 147.41 L 242.36284 140.89899 L 326.25967 140.89899 L 381.5601 140.89899 L 381.5601 168.8379 L 381.5601 174.42108 L 424.6671 174.42108 L 426.6671 174.42108" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2.0,2.0" stroke-width="1"/>
</g>
<g id="Graphic_18">
<rect x="389.4236" y="168.92108" width="14" height="11" fill="white"/>
<text transform="translate(390.4236 170.42108)" fill="black">
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x=".20483398" y="6">guid</tspan>
</text>
</g>
<g id="Line_17">
<line x1="436.5671" y1="181.97663" x2="344.82093" y2="181.97665" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_16">
<text transform="translate(355.39987 174.59637) rotate(-12184817e-12)" fill="black">
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x=".3112793" y="6">set</tspan>
</text>
</g>
<g id="Line_15">
<line x1="124.8492" y1="181.97663" x2="209.7961" y2="181.97665" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_14">
<text transform="translate(195.35885 174.77682)" fill="black">
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x=".3112793" y="6">set</tspan>
</text>
</g>
<g id="Graphic_13">
<rect x="8" y="97.5488" width="45.3335" height="74.9945" fill="url(#Obj_Gradient_4)"/>
<rect x="8" y="97.5488" width="45.3335" height="74.9945" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(13 120.04605)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="10.215822" y="8">guid</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="9.514895" y="18">hash </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="8.855715" y="28">table</tspan>
</text>
</g>
<g id="Line_12">
<line x1="53.72278" y1="153.63052" x2="71.807925" y2="168.20817" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_11">
<rect x="502.5205" y="144.4794" width="45.3335" height="74.9945" fill="url(#Obj_Gradient_5)"/>
<rect x="502.5205" y="144.4794" width="45.3335" height="74.9945" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(507.5205 166.97665)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="10.215822" y="8">guid</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="9.514895" y="18">hash</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="8.855715" y="28">table</tspan>
</text>
</g>
<g id="Line_10">
<line x1="502.0205" y1="181.97664" x2="492.3006" y2="181.97664" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_9">
<rect x="8" y="187.69666" width="45.3335" height="74.9945" fill="url(#Obj_Gradient_6)"/>
<rect x="8" y="187.69666" width="45.3335" height="74.9945" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(13 215.1939)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.750734" y="8">DCPS </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.225588" y="18">writer</tspan>
</text>
</g>
<g id="Line_8">
<line x1="53.737336" y1="208.35144" x2="71.51976" y2="195.36954" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="butt" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_7">
<rect x="232.667" y="536.684" width="45.3335" height="45.3333" fill="white"/>
<rect x="232.667" y="536.684" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(237.667 554.3507)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="8.295412" y="8">xmsg</tspan>
</text>
</g>
<g id="Graphic_5">
<rect x="86.41696" y="664.3999" width="134.14865" height="64" fill="#ebebeb"/>
<text transform="translate(88.41696 666.3999)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">timed events: xmsgs for delayed </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">transmission (delay can be 0), </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">heartbeat, ack generation, </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">automatic liveliness &quot;participant </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">message&quot; generation, SPDP </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="58">generation, &amp;c.</tspan>
</text>
</g>
<g id="Graphic_4">
<rect x="194.35884" y="424.00696" width="115.22485" height="74" fill="#ebebeb"/>
<text transform="translate(196.35884 426.00696)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">an xmsg for transmitting a </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">sample references a serdata </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">along with a base+length pair; </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">large samples are fragmented </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">&quot;on-the-fly&quot;, each fragment </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="58">references a different range of </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="68">the CDR encoded data.</tspan>
</text>
</g>
<g id="Graphic_3">
<rect x="339.29965" y="604.3396" width="107.68215" height="64" fill="#ebebeb"/>
<text transform="translate(341.29965 606.3396)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">xpacks bundle xmsgs into </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">DDSI messages, copying </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">some things and leaving </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">others as references; xmsgs </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="48">included in an xpack are </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="58">explicitly tracked. </tspan>
</text>
</g>
<g id="Graphic_88">
<rect x="186.6224" y="85.03937" width="45.3335" height="45.3333" fill="white"/>
<rect x="186.6224" y="85.03937" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(191.6224 97.70602)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="5.6674824" y="8">reader</tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="6.557375" y="18">match</tspan>
</text>
</g>
<g id="Line_87">
<line x1="124.8492" y1="166.86554" x2="179.47242" y2="114.55348" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_86">
<line x1="124.8492" y1="166.86554" x2="160.574" y2="86.29488" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Graphic_85">
<rect x="293.7291" y="85.03937" width="45.3335" height="45.3333" fill="white"/>
<rect x="293.7291" y="85.03937" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(298.7291 102.70602)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="5.6674824" y="8">reader</tspan>
</text>
</g>
<g id="Graphic_84">
<rect x="152.1731" y="31.454248" width="45.3335" height="45.3333" fill="white"/>
<rect x="152.1731" y="31.454248" width="45.3335" height="45.3333" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(154.1731 49.1209)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="10.851564" y="8">rdary</tspan>
</text>
</g>
<g id="Line_83">
<path d="M 198.00657 53.855693 L 284.20933 52.86887 L 299.6776 76.73198" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</g>
<g id="Line_82">
<path d="M 231.9559 107.70602 L 243.8559 107.70602 L 281.8291 107.70602 L 283.8291 107.70602" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2.0,2.0" stroke-width="1"/>
</g>
<g id="Graphic_81">
<rect x="266.37113" y="102.20602" width="14" height="11" fill="white"/>
<text transform="translate(267.37113 103.70602)" fill="black">
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x=".20483398" y="6">guid</tspan>
</text>
</g>
<g id="Graphic_80">
<text transform="translate(286.85544 54.08646) rotate(54)" fill="black">
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x=".3112793" y="6">set</tspan>
</text>
</g>
<g id="Graphic_89">
<text transform="translate(162.93762 127.70598) rotate(-42)" fill="black">
<tspan font-family="Gill Sans" font-size="7" font-weight="400" fill="black" x=".3112793" y="6">set</tspan>
</text>
</g>
<g id="Graphic_90">
<rect x="205.51181" y="4" width="105" height="44" fill="#ebebeb"/>
<text transform="translate(207.51181 6)" fill="black">
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="8">The local delivery path is </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="18">essentially the same for </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="28">local writers &amp; for proxy </tspan>
<tspan font-family="Gill Sans" font-size="9" font-weight="400" fill="black" x="0" y="38">writers</tspan>
</text>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 43 KiB

13698
docs/dev/data path.graffle Normal file

File diff suppressed because it is too large Load diff

103
docs/dev/freertos.md Normal file
View file

@ -0,0 +1,103 @@
# FreeRTOS
[FreeRTOS][1] is real-time operating system kernel for embedded devices. Think
of it as a thread library rather than a general purpose operating system like
Linux or Microsoft Windows. Out-of-the-box, FreeRTOS provides support for
tasks (threads), mutexes, semaphores and software times. Third-party modules
are available to add features. e.g. [lwIP][2] can be used to add networking.
> FreeRTOS+lwIP is currently supported by Eclipse Cyclone DDS. Support for other
> network stacks, e.g. [FreeRTOS+TCP][3], may be added in the future.
> Eclipse Cyclone DDS does not make use of [FreeRTOS+POSIX][4] because it was
> not available at the time. Future versions of Eclipse Cyclone DDS may or may
> not require FreeRTOS+POSIX for compatibility when it becomes stable.
[1]: https://www.freertos.org/
[2]: https://savannah.nongnu.org/projects/lwip/
[3]: https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/index.html
[4]: https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_POSIX/index.html
## Target
FreeRTOS provides an operating system kernel. Batteries are not included. i.e.
no C library or device drivers. Third-party distributions, known as board
support packages (BSP), for various (hardware) platforms are available though.
Board support packages, apart from FreeRTOS, contain:
* C library. Often ships with the compiler toolchain, e.g.
[IAR Embedded Workbench][5] includes the DLIB runtime, but open source
libraries can also be used. e.g. The [Xilinx Software Development Kit][6]
includes newlib.
* Device drivers. Generally available from the hardware vendor, e.g. NXP or
Xilinx. Device drivers for extra components, like a real-time clock, must
also be included in the board support package.
[5]: https://www.iar.com/iar-embedded-workbench/
[6]: https://www.xilinx.com/products/design-tools/embedded-software/sdk.html
A board support package is linked with the application by the toolchain to
generate a binary that can be flashed to the target.
### Requirements
Eclipse Cyclone DDS requires certain compile-time options to be enabled in
FreeRTOS (`FreeRTOSConfig.h`) and lwIP (`lwipopts.h`) for correct operation.
The compiler will croak when a required compile-time option is not enabled.
Apart from the aforementioned compile-time options, the target and toolchain
must provide the following.
* Support for thread-local storage (TLS) from the compiler and linker.
* Berkeley socket API compatible socket interface.
* Real-time clock (RTC). A high-precision real-time clock is preferred, but
the monotonic clock can be combined with an offset obtained from e.g. the
network if the target lacks an actual real-time clock. A proper
`clock_gettime` implementation is required to retrieve the wall clock time.
### Thread-local storage
FreeRTOS tasks are not threads and compiler supported thread-local storage
(tls) might not work as desired/expected under FreeRTOS on embedded targets.
i.e. the address of a given variable defined with *__thread* may be the same
for different tasks.
The compiler generates code to retrieve a unique address per thread when it
encounters a variable defined with *__thread*. What code it generates depends
on the compiler and the target it generates the code for. e.g. `iccarm.exe`
that comes with IAR Embedded Workbench requires `__aeabi_read_tp` to be
implemented and `mb-gcc` that comes with the Xilinx SDK requires
`__tls_get_addr` to be implemented.
The implementation for each of these functions is more-or-less the same.
Generally speaking they require the number of bytes to allocate, call
`pvTaskGetThreadLocalStoragePointer` and return the address of the memory
block to the caller.
## Simulator
FreeRTOS ports for Windows and POSIX exist to test compatibility. How to
cross-compile Eclipse Cyclone DDS for the [FreeRTOS Windows Port][7] or
the unofficial [FreeRTOS POSIX Port][8] can be found in the msvc and
[posix](/ports/freertos-posix) port directories.
[7]: https://www.freertos.org/FreeRTOS-Windows-Simulator-Emulator-for-Visual-Studio-and-Eclipse-MingW.html
[8]: https://github.com/shlinym/FreeRTOS-Sim.git
## Known Limitations
Triggering the socket waitset is not (yet) implemented for FreeRTOS+lwIP. This
introduces issues in scenarios where it is required.
* Receive threads require a trigger to shutdown or a thread may block
indefinitely if no packet arrives from the network.
* Sockets are created dynamically if ManySocketsMode is used and a participant
is created, or TCP is used. A trigger is issued after the sockets are added
to the set if I/O multiplexing logic does not automatically wait for data
on the newly created sockets as well.

View file

@ -0,0 +1,23 @@
#
# Copyright(c) 2006 to 2019 ADLINK Technology Limited and others
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0 which is available at
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
# v. 1.0 which is available at
# http://www.eclipse.org/org/documents/edl-v10.php.
#
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
if(BUILD_DOCS)
find_package(Sphinx REQUIRED breathe)
sphinx_add_docs(
docs
BREATHE_PROJECTS ddsc_api_docs
BUILDER html
SOURCE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
install(
DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/docs/"
DESTINATION "${CMAKE_INSTALL_DOCDIR}/manual"
COMPONENT dev)
endif()

View file

@ -0,0 +1,316 @@
..
Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v. 2.0 which is available at
http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
v. 1.0 which is available at
http://www.eclipse.org/org/documents/edl-v10.php.
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
.. _`HelloWorld`:
.. raw:: latex
\newpage
#########################################
Building Eclipse Cyclone DDS applications
#########################################
.. .. contents::
***********************************
Building the *Hello World!* example
***********************************
To test the :ref:`installation <TestYourInstallation>`, a small
*Hello World!* application is used. This application will also be used
as an introduction to DDS.
This chapter explains how to build this example, without details
regarding the source code. The next chapter will explain what has
to be done to code the *Hello World!* example.
The procedure used to build the *Hello World!* example can also be
used for building your own applications.
:Windows: ...
:Linux: It is advised to have copied the Eclipse Cyclone DDS examples to a user-friendly
location as described in :ref:`this <CopyLinuxExamplesToUserFriendlyLocation>`
paragraph when actively building the Eclipse Cyclone DDS examples on Linux.
This chapter refers to the Eclipse Cyclone DDS examples installed
in the user-defined location.
Build Files
===========
Three files are available *Hello World!* root directory to support
building the example. Both
:ref:`Windows native <WindowsNativeBuild>` (HelloWorld.sln) and
:ref:`Linux native <LinuxNativeBuild>` (Makefile) build files
will only be available for this *Hello World!* example. All the
other examples make use of the :ref:`CMake <CMakeIntro>` build
system and thus only have the CMakeLists.txt build related file.
.. _`LinuxNativeBuild`:
Linux Native Build
==================
A Linux native :code:`Makefile` is provided in the
:code:`examples/helloworld` directory within the destination location
entered in the
:ref:`vdds_install_examples script <CopyLinuxExamplesToUserFriendlyLocation>`.
In a terminal, go to that directory and type
::
make
The build process should have access to the include files and
the ddsc library. The Makefile expects them to be present at
system default locations so that it can find them automatically.
If this isn't the case on your machine, then please
update the commented out :code:`CFLAGS` and :code:`LDFLAGS` within the
:code:`Makefile` to point to the proper locations.
This will build the HelloworldSubscriber and HelloworldPublisher
executables in the helloworld source directory (not the bin
directory that contains the pre-build binaries).
The *Hello World!* example can now be executed,
like described in :ref:`Test your installation <TestYourInstallation>`,
using the binaries that were just build. Be sure to use the right directories.
.. _`WindowsNativeBuild`:
Windows Native Build
====================
For the Windows Native Build, a Visual Studio solution file is
available in the :code:`examples/helloworld` directory. Use a
file explorer to navigate to that directory and double click on
the :code:`HelloWorld.sln` file. Visual Studio should now start
with the HelloWorld solution that contains three projects.
+----------------------+-------------------------------------------------+
| Project | Description |
+======================+=================================================+
| HelloWorldPublisher | Information to build the example publisher. |
+----------------------+-------------------------------------------------+
| HelloWorldSubscriber | Information to build the example subcriber. |
+----------------------+-------------------------------------------------+
| HelloWorldType | Information to (re)generate |
| | :ref:`HelloWorldData_Msg <HelloWorldDataFiles>` |
| | data type. |
+----------------------+-------------------------------------------------+
Creating the *Hello World!* example executables is as simple as
selecting the required configuration and building the solution.
:code:`helloworld\vs\directories.props` contains the location of where
the Eclipse Cyclone DDS header files and libraries are be placed. These locations
are based on the default installation directory structure. When Eclipse Cyclone DDS
is installed in a different directory, the following paths in
:code:`helloworld\vs\directories.props` should be changed, like:
.. code-block:: xml
<CycloneDDS_lib_dir>C:/Path/To/CycloneDDS/Installation/lib</CycloneDDS_lib_dir>
<CycloneDDS_inc_dir>C:/Path/To/CycloneDDS/Installation/include</CycloneDDS_inc_dir>
<CycloneDDS_idlc_dir>C:/Path/To/CycloneDDS/Installation/share/CycloneDDS/idlc</CycloneDDS_idlc_dir>
To run the example, Visual Studio should run both the publisher
and subscriber simultaneously. It is capable of doing so, but
it's not its default setting. To change it, open the HelloWorld
solution property page by right clicking the solution and
selecting :code:`Properties`. Then go to :code:`Common Properties`
-> :code:`Startup Project`, select :code:`Multiple startup project`
and set :code:`Action "Start"` for HelloWorldPublisher and
HelloWorldSubscriber. Finish the change by selecting :code:`OK`.
Visual Studio is now ready to actually run the *Hello World!*
example, which can be done by selecting :code:`Debug` ->
:code:`Start without debugging`.
Both the HelloworldSubscriber and the HelloworldPublisher will be
started and the HelloworldPublisher will write a message that is
received by the HelloworldSubscriber.
.. _`BuildingWithCMake`:
*******************
Building With CMake
*******************
In the earlier chapters, building the *Hello World!* example is done
natively. However, the *Hello World!* example can also be build using the
`CMake tool <http://cmake.org>`_. This is what is recommended. In fact,
all the other examples don't provide native makefiles, only CMake files.
.. _`CMakeIntro`:
CMake
=====
`CMake <http://cmake.org>`_ is an open-source, cross-platform
family of tools designed to build, test and package software.
CMake is used to control the software compilation process using
simple platform and compiler independent configuration files,
and generate native makefiles and workspaces that can be used
in the compiler environment of your choice.
In other words, CMake's main strength is build portability.
CMake uses the native tools, and other than requiring itself,
does not require any additional tools to be installed. The same
CMake input files will build with GNU make, Visual studio 6,7,8
IDEs, borland make, nmake, and XCode.
An other advantage of CMake is building out-of-source. It simply
works out-of-the-box. There are two important reasons to choose
this:
1. Easy cleanup (no cluttering the source tree). Simply remove
the build directory if you want to start from scratch.
2. Multiple build targets. It's possible to have up-to-date
Debug and Release targets, without having to recompile the
entire tree. For systems that do cross-platform compilation,
it is easy to have up-to-date builds for the host and target
platform.
There are a few other benefits to CMake, but that is out of the
scope of this document.
.. _`CycloneDdsPackage`:
Hello World! CMake (CycloneDDS Package)
=======================================
After the CMake digression, we're back with the *Hello World!*
example. Apart from the native build files, CMake build files
are provided as well. See
:code:`examples/helloworld/CMakeLists.txt`
.. literalinclude:: ../../../examples/helloworld/CMakeLists.export
:linenos:
:language: cmake
It will try to find the :code:`CycloneDDS` CMake package. When it
has found it, every path and dependencies are automatically set.
After that, an application can use it without fuss. CMake will
look in the default locations for the code:`CycloneDDS` package.
.. _`IdlcGenerate`:
The :code:`CycloneDDS` package provides the :code:`ddsc` library
that contains the DDS API that the application needs. But apart
from that, it also contains helper functionality
(:code:`idlc_generate`) to generate library targets from IDL
files. These library targets can be easily used when compiling
an application that depends on a data type described
in an IDL file.
Two applications will be created, :code:`HelloworldPublisher`
and :code:`HelloworldSubscriber`. Both consist only out of one
source file.
Both applications need to be linked to the :code:`ddsc` library
in the :code:`CycloneDDS` package and :code:`HelloWorldData_lib`
that was generated by the call to :code:`idlc_generate`.
.. _`HelloWorldBuilding`:
Hello World! Configuration
==========================
The *Hello World!* example is prepared to be built by CMake
through the use of its :code:`CMakeLists.txt` file. The first
step is letting CMake configure the build environment.
It's good practice to build examples or applications
out-of-source. In order to do that, create a :code:`build`
directory in the :code:`examples/helloworld` directory and go
there, making our location :code:`examples/helloworld/build`.
Here, we can let CMake configure the build environment for
us by typing:
::
cmake ../
.. note::
CMake does a pretty good job at guessing which generator to use, but some
environments require that you supply a specific generator. For example, only
64-bit libraries are shipped for Windows, but CMake will generate a 32-bit
project by default, resulting in linker errors. When generating a
Visual Studio project keep in mind to append **Win64** to the generator.
The example below shows how to generate a Visual Studio 2015 project.
::
cmake -G "Visual Studio 14 2015 Win64" ..
.. note::
CMake generators can also create IDE environments. For instance,
the "Visual Studio 14 2015 Win64" will generate a Visual Studio
solution file. Other IDE's are also possible, like Eclipse.
CMake will use the CMakeLists.txt in the helloworld directory
to create makefiles that fit the native platform.
Since everything is prepared, we can actually build the
applications (HelloworldPublisher and HelloworldSubscriber in
this case).
Hello World! Build
==================
After the configuration step, building the example is as easy
as typing:
::
cmake --build .
.. note::
On Windows, it is likely that you have to supply the config
of Visual Studio:
::
cmake --build . --config "Release"
while being in the build directory created during the
configuration step: :code:`examples/helloworld/build`.
The resulting Publisher and Subscriber applications can be found
in:
:Windows: :code:`examples\helloworld\build\Release`.
:Linux: :code:`examples/helloworld/build`.
The *Hello World!* example can now be executed,
like described in :ref:`Test your installation <TestYourInstallation>`,
using the binaries that were just build. Be sure to use the right directories.
*******
Summary
*******
We've seen that a Eclipse Cyclone DDS application can be build by using a Makefile on Linux
or a Visual Studio Solutions on Windows. Also CMake can be used to build a Eclipse Cyclone DDS
application. In fact, it is the preferred way of building.
In the end, a predefined way of generating and building the source code should
be followed when building Eclipse Cyclone DDS applications. The figure below shows how a
typical Eclipse Cyclone DDS application is build.
.. image:: ../_static/pictures/BuildSchema.png
:scale: 30 %
:align: center
Next chapter will provide an overview of all steps mentioned in the figure above.

View file

@ -0,0 +1,438 @@
..
Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v. 2.0 which is available at
http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
v. 1.0 which is available at
http://www.eclipse.org/org/documents/edl-v10.php.
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
.. _`HelloWorldInDepth`:
.. raw:: latex
\newpage
###########################
Hello World! in more detail
###########################
.. .. contents::
The previous chapter focused on building the *Hello World!* example while
this chapter will focus on the code itself; what has to be done to code
this small example.
.. _`HelloWorldDataType`:
*********************
Hello World! DataType
*********************
Data-Centric Architecture
=========================
By creating a Data-centric architecture, you get a loosely
coupled information-driven system. It emphasizes a data layer
that is common for all distributed applications within the
system. Because there is no direct coupling among the
applications in the DDS model, they can be added and removed
easily in a modular and scalable manner. This makes that the
complexity of a data-centric architecture doesn't really
increase when more and more publishers/subscribers are added.
The *Hello World!* example has a very simple 'data layer' of only
one data type :code:`HelloWorldData_Msg` (please read on).
The subscriber and publisher are not aware of each other.
The former just waits until somebody provides the data it
requires, while the latter just publishes the data without
considering the number of interested parties. In other words,
it doesn't matter for the publisher if there are none or
multiple subscribers (try running the *Hello World!* example
by starting multiple HelloworldSubscribers before starting a
HelloworldPublisher). A publisher just writes the data. The
DDS middleware takes care of delivering the data when needed.
******************
HelloWorldData.idl
******************
To be able to sent data from a writer to a reader, DDS needs to
know the data type. For the *Hello World!* example, this data type
is described using `IDL <http://www.omg.org/gettingstarted/omg_idl.htm>`_
and is located in HelloWorldData.idl. This IDL file will be compiled by
a IDL compiler which in turn generates a C language source and header
file. These generated source and header file will be used by the
HelloworldSubscriber and HelloworldPublisher in order to communicate
the *Hello World!* message between the HelloworldPublisher
and the HelloworldSubscriber.
Hello World! IDL
================
There are a few ways to describe the structures that make up the
data layer. The HelloWorld uses the IDL language to describe the
data type in HelloWorldData.idl:
.. literalinclude:: ../../../examples/helloworld/HelloWorldData.idl
:linenos:
:language: idl
An extensive explanation of IDL lies outside the scope of this
example. Nevertheless, a quick overview of this example is given
anyway.
First, there's the :code:`module HelloWorldData`. This is a kind
of namespace or scope or similar.
Within that module, there's the :code:`struct Msg`. This is the
actual data structure that is used for the communication. In
this case, it contains a :code:`userID` and :code:`message`.
The combination of this module and struct translates to the
following when using the c language.
::
typedef struct HelloWorldData_Msg
{
int32_t userID;
char * message;
} HelloWorldData_Msg;
When it is translated to a different language, it will look
different and more tailored towards that language. This is the
advantage of using a data oriented language, like IDL, to
describe the data layer. It can be translated into different
languages after which the resulting applications can communicate
without concerns about the (possible different) programming
languages these application are written in.
.. _`IdlCompiler`:
Generate Sources and Headers
============================
Like already mentioned in the `Hello World! IDL`_ chapter, an IDL
file contains the description of data type(s). This needs to be
translated into programming languages to be useful in the
creation of DDS applications.
To be able to do that, there's a pre-compile step that actually
compiles the IDL file into the desired programming language.
A java application :code:`org.eclipse.cyclonedds.compilers.Idlc`
is supplied to support this pre-compile step. This is available
in :code:`idlc-jar-with-dependencies.jar`
The compilation from IDL into c source code is as simple as
starting that java application with an IDL file. In the case of
the *Hello World!* example, that IDL file is HelloWorldData.idl.
::
java -classpath "<install_dir>/share/CycloneDDS/idlc/idlc-jar-with-dependencies.jar" org.eclipse.cyclonedds.compilers.Idlc HelloWorldData.idl
:Windows: The :code:`HelloWorldType` project within the HelloWorld solution.
:Linux: The :code:`make datatype` command.
This will result in new :code:`generated/HelloWorldData.c` and
:code:`generated/HelloWorldData.h`
files that can be used in the *Hello World!* publisher and
subscriber applications.
The application has to be rebuild when the data type source
files were re-generated.
Again, this is all for the native builds. When using CMake, all
this is done automatically.
.. _`HelloWorldDataFiles`:
HelloWorldData.c & HelloWorldData.h
===================================
As described in the :ref:`Hello World! DataType <HelloWorldDataType>`
paragraph, the IDL compiler will generate this source and header
file. These files contain the data type of the messages that are sent
and received.
While the c source has no interest for the application
developers, HelloWorldData.h contains some information that they
depend on. For example, it contains the actual message structure
that is used when writing or reading data.
::
typedef struct HelloWorldData_Msg
{
int32_t userID;
char * message;
} HelloWorldData_Msg;
It also contains convenience macros to allocate and free memory
space for the specific data types.
::
HelloWorldData_Msg__alloc()
HelloWorldData_Msg_free(d,o)
It contains an extern variable that describes the data type to
the DDS middleware as well.
::
HelloWorldData_Msg_desc
***************************
Hello World! Business Logic
***************************
Apart from the
:ref:`HelloWorldData data type files <HelloWorldDataFiles>` that
the *Hello World!* example uses to send messages, the *Hello World!*
example also contains two (user) source files
(:ref:`subscriber.c <HelloWorldSubscriberSource>` and
:ref:`publisher.c <HelloWorldPublisherSource>`), containing the
business logic.
.. _`HelloWorldSubscriberSource`:
*Hello World!* Subscriber Source Code
=====================================
Subscriber.c contains the source that will wait for a *Hello World!*
message and reads it when it receives one.
.. literalinclude:: ../../../examples/helloworld/subscriber.c
:linenos:
:language: c
We will be using the DDS API and the
:ref:`HelloWorldData_Msg <HelloWorldDataFiles>` type
to receive data. For that, we need to include the
appropriate header files.
::
#include "dds/dds.h"
#include "HelloWorldData.h"
The main starts with defining a few variables that will be used for
reading the *Hello World!* message.
The entities are needed to create a reader.
::
dds_entity_t participant;
dds_entity_t topic;
dds_entity_t reader;
Then there are some buffers that are needed to actually read the
data.
::
HelloWorldData_Msg *msg;
void *samples[MAX_SAMPLES];
dds_sample_info_t info[MAX_SAMPLES];
To be able to create a reader, we first need a participant. This
participant is part of a specific communication domain. In the
*Hello World!* example case, it is part of the default domain.
::
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
The another requisite is the topic which basically describes the
data type that is used by the reader. When creating the topic,
the :ref:`data description <HelloWorldDataFiles>` for the DDS
middleware that is present in the
:ref:`HelloWorldData.h <HelloWorldDataFiles>` is used.
The topic also has a name. Topics with the same data type
description, but with different names, are considered
different topics. This means that readers/writers created with a
topic named "A" will not interfere with readers/writers created
with a topic named "B".
::
topic = dds_create_topic (participant, &HelloWorldData_Msg_desc,
"HelloWorldData_Msg", NULL, NULL);
When we have a participant and a topic, we then can create
the reader. Since the order in which the *Hello World!* Publisher and
*Hello World!* Subscriber are started shouldn't matter, we need to create
a so called 'reliable' reader. Without going into details, the reader
will be created like this
::
dds_qos_t *qos = dds_create_qos ();
dds_qset_reliability (qos, DDS_RELIABILITY_RELIABLE, DDS_SECS (10));
reader = dds_create_reader (participant, topic, qos, NULL);
dds_delete_qos(qos);
We are almost able to read data. However, the read expects an
array of pointers to valid memory locations. This means the
samples array needs initialization. In this example, we have
an array of only one element: :code:`#define MAX_SAMPLES 1`.
So, we only need to initialize one element.
::
samples[0] = HelloWorldData_Msg__alloc ();
Now everything is ready for reading data. But we don't know if
there is any data. To simplify things, we enter a polling loop
that will exit when data has been read.
Within the polling loop, we do the actual read. We provide the
initialized array of pointers (:code:`samples`), an array that
holds information about the read sample(s) (:code:`info`), the
size of the arrays and the maximum number of samples to read.
Every read sample in the samples array has related information
in the info array at the same index.
::
ret = dds_read (reader, samples, info, MAX_SAMPLES, MAX_SAMPLES);
The :code:`dds_read` function returns the number of samples it
actually read. We can use that to determine if the function actually
read some data. When it has, then it is still possible that the
data part of the sample is not valid. This has some use cases
when there is no real data, but still the state of the related
sample has changed (for instance it was deleted). This will
normally not happen in the *Hello World!* example. But we check
for it anyway.
::
if ((ret > 0) && (info[0].valid_data))
If data has been read, then we can cast the void pointer to the
actual message data type and display the contents. The polling
loop is quit as well in this case.
::
msg = (HelloWorldData_Msg*) samples[0];
printf ("=== [Subscriber] Received : ");
printf ("Message (%d, %s)\n", msg->userID, msg->message);
break;
When data is received and the polling loop is stopped, we need to
clean up.
::
HelloWorldData_Msg_free (samples[0], DDS_FREE_ALL);
dds_delete (participant);
All the entities that are created using the participant are also
deleted. This means that deleting the participant will
automatically delete the topic and reader as well.
.. _`HelloWorldPublisherSource`:
*Hello World!* Publisher Source Code
====================================
Publisher.c contains the source that will write an *Hello World!* message
on which the subscriber is waiting.
.. literalinclude:: ../../../examples/helloworld/publisher.c
:linenos:
:language: c
We will be using the DDS API and the
:ref:`HelloWorldData_Msg <HelloWorldDataFiles>` type
to sent data. For that, we need to include the
appropriate header files.
::
#include "dds/dds.h"
#include "HelloWorldData.h"
Just like with the
:ref:`reader in subscriber.c <HelloWorldSubscriberSource>`,
we need a participant and a topic to be able to create a writer.
We use the same topic name as in subscriber.c. Otherwise the
reader and writer are not considered related and data will not
be sent between them.
::
dds_entity_t participant;
dds_entity_t topic;
dds_entity_t writer;
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
topic = dds_create_topic (participant, &HelloWorldData_Msg_desc,
"HelloWorldData_Msg", NULL, NULL);
writer = dds_create_writer (participant, topic, NULL, NULL);
The DDS middleware is a publication/subscription implementation.
This means that it will discover related readers and writers
(i.e. readers and writers sharing the same data type and topic name)
and connect them so that written data can be received by readers
without the application having to worry about it. There is a catch though:
this discovery and coupling takes a small amount of
time. There are various ways to work around this problem. The following
can be done to properly connect readers and writers:
* Wait for the publication/subscription matched events
* The Subscriber should wait for a subscription matched event
* The Publisher should wait for a publication matched event.
The use of these events will be outside the scope of this example
* Poll for the publication/subscription matches statusses
* The Subscriber should poll for a subscription matched status to be set
* The Publisher should poll for a publication matched status to be set
The Publisher in this example uses the polling schema.
* Let the publisher sleep for a second before writing a sample. This
is not recommended since a second may not be enough on several networks
* Accept that the reader miss a few samples at startup. This may be
acceptable in cases where the publishing rate is high enough.
As said, the publisher of this example polls for the publication matched status.
To make this happen, the writer must be instructed to 'listen' for this status.
The following line of code makes sure the writer does so.
::
dds_set_status_mask(writer, DDS_PUBLICATION_MATCHED_STATUS);
Now the polling may start:
::
while(true)
{
uint32_t status;
ret = dds_get_status_changes (writer, &status);
DDS_ERR_CHECK(ret, DDS_CHECK_REPORT | DDS_CHECK_EXIT);
if (status == DDS_PUBLICATION_MATCHED_STATUS) {
break;
}
/* Polling sleep. */
dds_sleepfor (DDS_MSECS (20));
}
After this loop, we are sure that a matching reader has been started.
Now, we commence to writing the data. First the data must be initialized
::
HelloWorldData_Msg msg;
msg.userID = 1;
msg.message = "Hello World";
Then we can actually sent the message to be received by the
subscriber.
::
ret = dds_write (writer, &msg);
After the sample is written, we need to clean up.
::
ret = dds_delete (participant);
All the entities that are created using the participant are also
deleted. This means that deleting the participant will
automatically delete the topic and writer as well.

View file

@ -0,0 +1,21 @@
..
Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v. 2.0 which is available at
http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
v. 1.0 which is available at
http://www.eclipse.org/org/documents/edl-v10.php.
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
.. _`GettingStarted`:
.. toctree::
:maxdepth: 4
installation.rst
helloworld.rst
helloworld_indepth.rst
next_steps.rst
uninstall.rst

View file

@ -0,0 +1,122 @@
..
Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v. 2.0 which is available at
http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
v. 1.0 which is available at
http://www.eclipse.org/org/documents/edl-v10.php.
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
.. _`Installation`:
.. raw:: latex
\newpage
##############################
Installing Eclipse Cyclone DDS
##############################
.. .. contents::
.. _`SystemRequirements`:
*******************
System requirements
*******************
At the time of writing, Eclipse Cyclone DDS is known to run on Linux, macOS and Windows. The build-process is not yet able to generate native packages.
***************
Linux and macOS
***************
.. _`CopyLinuxExamplesToUserFriendlyLocation`:
Post install steps
~~~~~~~~~~~~~~~~~~
The installation package installs examples in system directories. In order to have a better user
experience when building the Eclipse Cyclone DDS examples, it is advised to copy the examples to a
user-defined location. This is to be able to build the examples natively and experiment with the
example source code.
For this, the installation package provides the vdds_install_examples
script, located in /usr/bin.
Create an user writable directory where the examples should go. Navigate
to that directory and execute the script. Answer 'yes' to the questions
and the examples will be installed in the current location.
Type :code:`vdds_install_examples -h` for more information.
.. _`LinuxSetLibPath`:
Paths
=====
To be able to run Eclipse Cyclone DDS executables, the required libraries (like libddsc.so) need to
be available to the executables. Normally, these are installed in system default locations and it
works out-of-the-box. However, if they are not installed in those locations, it is possible that the
library search path has to be changed. This can be achieved by executing the command: ::
export LD_LIBRARY_PATH=<install_dir>/lib:$LD_LIBRARY_PATH
*******
Windows
*******
.. _`WindowsSetLibPath`:
Paths
~~~~~
To be able to run Eclipse Cyclone DDS executables, the required libraries (like ddsc.dll) need to be
available to the executables. Normally, these are installed in system default locations and it
works out-of-the-box. However, if they are not installed on those locations, it is possible that the
library search path has to be changed. This can be achieved by executing the command: ::
set PATH=<install_dir>/bin;%PATH%
.. _`TestYourInstallation`:
**********************
Test your installation
**********************
Eclipse Cyclone DDS includes a simple :ref:`Hello World! <HelloWorld>` application which can be run
in order to test your installation. The *Hello World!* application consists of two executables: a so
called HelloworldPublisher and a HelloworldSubscriber.
To run the example application, please open two console windows and navigate to the appropriate
directory in both console windows. Run the HelloworldSubscriber in one of the console windows by the
typing following command:
:Windows: :code:`HelloworldSubscriber.exe`
:Linux: :code:`./HelloworldSubscriber`
and the HelloworldPublisher in the other console window by typing:
:Windows: :code:`HelloworldPublisher.exe`
:Linux: :code:`./HelloworldPublisher`
The output HelloworldPublisher should look like
.. image:: ../_static/pictures/HelloworldPublisherWindows.png
while the HelloworldSubscriber will be looking like this
.. image:: ../_static/pictures/HelloworldSubscriberWindows.png
For more information on how to build this application your own and the code which has
been used, please have a look at the :ref:`Hello World! <HelloWorld>` chapter.

View file

@ -0,0 +1,43 @@
..
Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v. 2.0 which is available at
http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
v. 1.0 which is available at
http://www.eclipse.org/org/documents/edl-v10.php.
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
.. _`WhatsNext`:
.. raw:: latex
\newpage
############
What's next?
############
Want to know more about DDS? The primary source of information is the
OMG website at http://www.omg.org and specifically the `DDS Getting
Started <http://www.omg.org/gettingstarted/omg_idl.htm>`_ page and the
`DDS specification <http://www.omg.org/spec/DDS/>`_ itself. The
specification is a bit wordy and of course deals with minute details,
but it is surprisingly easy to follow for a specification.
There are also various resources on the web dealing with DDS in general,
as the various vendors have posted tutorials, presentations, general
information and documentation on their products. While the details
between the various implementations do differ, they have much more in
common than what separates them, and so this information is also
applicable to Eclipse Cyclone DDS. The one thing in which
Eclipse Cyclone DDS really differs is in the details of API, but that's
just syntax.
Obviously there are also things specific to Eclipse Cyclone DDS. The
level of documentation of Eclipse is not nearly what it should be, but
that will improve over time.
And last but note least: please always feel welcome to ask questions on
GitHub!

View file

@ -0,0 +1,22 @@
..
Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v. 2.0 which is available at
http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
v. 1.0 which is available at
http://www.eclipse.org/org/documents/edl-v10.php.
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
.. _`Uninstall`:
.. raw:: latex
\newpage
################################
Uninstalling Eclipse Cyclone DDS
################################
TBD.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

1130
docs/manual/config.rst Normal file

File diff suppressed because it is too large Load diff

16
docs/manual/ddsc.rst Normal file
View file

@ -0,0 +1,16 @@
..
Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v. 2.0 which is available at
http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
v. 1.0 which is available at
http://www.eclipse.org/org/documents/edl-v10.php.
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
Eclipse Cyclone DDS C API Reference
===================================
.. doxygenindex::
:project: ddsc_api_docs

30
docs/manual/index.rst Normal file
View file

@ -0,0 +1,30 @@
..
Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v. 2.0 which is available at
http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
v. 1.0 which is available at
http://www.eclipse.org/org/documents/edl-v10.php.
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
.. Eclipse Cyclone DDS documentation master file
Welcome to Eclipse Cyclone DDS's documentation!
===============================================
.. toctree::
:maxdepth: 3
:caption: Contents
GettingStartedGuide/index
ddsc
config
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`