Files
MicrOBU/docs/Architecture-signed-its.drawio
T
Ashin Walpola d3fc9bf66c Add a block diagram of the signed-ITS architecture
docs/Architecture-signed-its.drawio (with a PNG export beside it, like
Architecture2): PKI (today's demo chain, and dashed the future EU C-ITS path
with the lab's registered root), the phone app's transmit and receive path,
the USB-C and BLE links with their heartbeats, the ESP32-C5 firmware (link
endpoints, session, signing through vanetza-idf with the key in NVS, the
unsigned geonet.c path, radio and raw receive), the ITS-G5 air and the bench
receivers (V2X2MAP with signature check, CiT One, RSU, sim car), and a legend
of the station-link messages and recovery behaviour.
2026-09-24 10:56:16 +02:00

1 line
25 KiB
Plaintext

<mxfile host="app.diagrams.net" type="device"><diagram id="signed-its" name="Signed ITS architecture"><mxGraphModel dx="1600" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2150" pageHeight="850" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="title" value="&lt;b&gt;MicrOBU: signed ITS-G5 (CAM / VAM) with the ESP32-C5 station&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;Signing happens on the ESP32-C5. The phone builds the messages and sends time, position and data over USB-C or BLE.&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=16;" vertex="1" parent="1"><mxGeometry x="330" y="0" width="1180" height="50" as="geometry"/></mxCell><mxCell id="k_demo" value="&lt;b&gt;Today: demo PKI (throwaway)&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;Demo Root 6E7D0374FB021901&lt;br&gt;→ Demo AA B3312F29844299E0&lt;br&gt;→ AT B80B49387A4C12EB&lt;br&gt;psid 36 (CAM, SSP 010000) + 638 (VAM, SSP 01)&lt;br&gt;Not EU-registered: EU verifiers drop it&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1"><mxGeometry x="20" y="60" width="280" height="140" as="geometry"/></mxCell><mxCell id="k_real" value="&lt;b&gt;Future: real PKI (EU C-ITS CCMS)&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;ECTL / trust list&lt;br&gt;→ UML L0 Root CA (registered 2026-09-11,&lt;br&gt; colleague repo: pki/uml-l0-rca)&lt;br&gt;→ Enrolment Authority (EA)&lt;br&gt;→ Authorization Authority (AA)&lt;br&gt;→ pool of ATs (pseudonyms, short validity,&lt;br&gt; region + permissions)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffe6cc;strokeColor=#d79b00;dashed=1;" vertex="1" parent="1"><mxGeometry x="20" y="240" width="280" height="170" as="geometry"/></mxCell><mxCell id="k_paths" value="&lt;b&gt;How real credentials reach the board&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;(a) Offline: bundle file (VCR1) issued by the&lt;br&gt; key holder → copied to the phone&lt;br&gt;(b) Online: TS 102 941 enrolment + authorization&lt;br&gt; from the phone (ECIES, HTTP to EA/AA),&lt;br&gt; renewing tickets before they expire&lt;br&gt;Both end in CREDENTIALS_PROVISION → NVS&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;dashed=1;" vertex="1" parent="1"><mxGeometry x="20" y="450" width="280" height="150" as="geometry"/></mxCell><mxCell id="phone" value="&lt;b&gt;Phone app (Android, MicrOBU)&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;align=left;spacingLeft=10;spacingTop=4;fontSize=14;arcSize=3;container=1;collapsible=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1"><mxGeometry x="330" y="60" width="470" height="640" as="geometry"/></mxCell><mxCell id="p_sens" value="&lt;b&gt;Sensors&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;GNSS (fused location) + IMU&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="phone"><mxGeometry x="15" y="40" width="210" height="50" as="geometry"/></mxCell><mxCell id="p_time" value="&lt;b&gt;GnssTimeSource&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;phone clock → GNSS time&lt;br&gt;keeps last error indoors&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="phone"><mxGeometry x="245" y="40" width="210" height="50" as="geometry"/></mxCell><mxCell id="p_pseu" value="&lt;b&gt;PseudonymManager&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;station ID + MAC, rotated together&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="phone"><mxGeometry x="245" y="105" width="210" height="50" as="geometry"/></mxCell><mxCell id="p_loop" value="&lt;b&gt;CamTransmitLoop / CamPinger&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;CAM: 1 Hz baseline, faster on events&lt;br&gt;VAM: TS 103 300-3 clause 6.4 rules&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="phone"><mxGeometry x="15" y="105" width="210" height="70" as="geometry"/></mxCell><mxCell id="p_enc" value="&lt;b&gt;UPER encoders&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;CamUperCodec · VamUperCodec&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="phone"><mxGeometry x="15" y="195" width="210" height="50" as="geometry"/></mxCell><mxCell id="p_set" value="&lt;b&gt;Settings&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;link: USB-C / Bluetooth&lt;br&gt;transmit: CAM / VAM&lt;br&gt;sign outgoing: on / off&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="phone"><mxGeometry x="245" y="175" width="210" height="70" as="geometry"/></mxCell><mxCell id="p_cred" value="&lt;b&gt;Credentials&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;today: assets/demo-chain.vcr&lt;br&gt;future: bundle file or&lt;br&gt;TS 102 941 client&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="phone"><mxGeometry x="15" y="270" width="210" height="75" as="geometry"/></mxCell><mxCell id="p_link" value="&lt;b&gt;Esp32Link&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;session: configure, provision&lt;br&gt;PoTi per new fix (clock never back)&lt;br&gt;detects old / new firmware&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="phone"><mxGeometry x="245" y="270" width="210" height="75" as="geometry"/></mxCell><mxCell id="p_usb" value="&lt;b&gt;UsbSerialTransport&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;watchdog: no frame 3.5 s → ERROR&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="phone"><mxGeometry x="245" y="370" width="210" height="55" as="geometry"/></mxCell><mxCell id="p_ble" value="&lt;b&gt;BleLinkTransport&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;pair (passkey 123456), MTU 517&lt;br&gt;auto-reconnect with backoff&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="phone"><mxGeometry x="245" y="440" width="210" height="55" as="geometry"/></mxCell><mxCell id="p_rx" value="&lt;b&gt;Receive path&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;CamUseCaseRepository: CAM · DENM · SPATEM decode&lt;br&gt;use-case detection, own-TX loopback filter&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="phone"><mxGeometry x="15" y="515" width="440" height="50" as="geometry"/></mxCell><mxCell id="p_ui" value="&lt;b&gt;UI&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;connection card (link, passkey, signing counters) · V2X map · dashboard&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="phone"><mxGeometry x="15" y="580" width="440" height="45" as="geometry"/></mxCell><mxCell id="l_usb" value="&lt;b&gt;USB-C (native port)&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;USB Serial/JTAG, CDC-ACM&lt;br&gt;frames 0xAA55, type 0x10&lt;br&gt;STATUS every 1 s = heartbeat&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1"><mxGeometry x="830" y="400" width="180" height="80" as="geometry"/></mxCell><mxCell id="l_ble" value="&lt;b&gt;Bluetooth LE&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;GATT service 0000C175-…&lt;br&gt;encrypted + bonded&lt;br&gt;STATUS 1 s, 4 s supervision&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1"><mxGeometry x="830" y="495" width="180" height="80" as="geometry"/></mxCell><mxCell id="l_note" value="&lt;b&gt;Only one link at a time&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;BLE advertising pauses while USB is in use&lt;br&gt;(shared RF front end with ITS-G5)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1"><mxGeometry x="830" y="600" width="180" height="60" as="geometry"/></mxCell><mxCell id="esp" value="&lt;b&gt;ESP32-C5 (obu-firmware + external/vanetza-idf, ESP-IDF 6.0.2)&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;align=left;spacingLeft=10;spacingTop=4;fontSize=14;arcSize=3;container=1;collapsible=0;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1"><mxGeometry x="1040" y="60" width="560" height="640" as="geometry"/></mxCell><mxCell id="e_nvs" value="&lt;b&gt;NVS (80 KB)&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;root, AA, AT + private key&lt;br&gt;BLE bond&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="esp"><mxGeometry x="195" y="40" width="160" height="70" as="geometry"/></mxCell><mxCell id="e_sec" value="&lt;b&gt;Security entity&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;TS 103 097: signs with the&lt;br&gt;AT key (ECDSA P-256)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="esp"><mxGeometry x="375" y="40" width="170" height="70" as="geometry"/></mxCell><mxCell id="e_geo" value="&lt;b&gt;geonet.c&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;unsigned GN SHB + BTP-B&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="esp"><mxGeometry x="15" y="160" width="160" height="60" as="geometry"/></mxCell><mxCell id="e_sta" value="&lt;b&gt;Station&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;config, ITS clock from PoTi&lt;br&gt;counters, DCC&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="esp"><mxGeometry x="195" y="160" width="160" height="65" as="geometry"/></mxCell><mxCell id="e_van" value="&lt;b&gt;vanetza-idf&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;BTP-B + GeoNetworking&lt;br&gt;SHB, secured&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="esp"><mxGeometry x="375" y="160" width="170" height="60" as="geometry"/></mxCell><mxCell id="e_radio" value="&lt;b&gt;C5Radio&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;802.11p, ch 180 = 5 900 MHz&lt;br&gt;20 dBm, promiscuous RX&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="esp"><mxGeometry x="375" y="280" width="170" height="70" as="geometry"/></mxCell><mxCell id="e_link" value="&lt;b&gt;LinkService&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;station-link v1&lt;br&gt;+ V2X_RX (0x85)&lt;br&gt;STATUS every second&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="esp"><mxGeometry x="195" y="290" width="160" height="150" as="geometry"/></mxCell><mxCell id="e_ser" value="&lt;b&gt;serial_link&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;native USB Serial/JTAG&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="esp"><mxGeometry x="15" y="365" width="160" height="55" as="geometry"/></mxCell><mxCell id="e_unwrap" value="&lt;b&gt;gn_unwrap.c (raw RX)&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;every frame, signed or not&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="esp"><mxGeometry x="375" y="400" width="170" height="60" as="geometry"/></mxCell><mxCell id="e_ble" value="&lt;b&gt;simple_ble&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;NimBLE GATT, micrOBU-XXXX&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="esp"><mxGeometry x="15" y="475" width="160" height="55" as="geometry"/></mxCell><mxCell id="e_con" value="&lt;b&gt;Console on UART0 (CH343, COM3)&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;logs, boot messages, task watchdog&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="esp"><mxGeometry x="15" y="565" width="530" height="50" as="geometry"/></mxCell><mxCell id="air" value="&lt;b&gt;ITS-G5 air&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;5.9 GHz, ch 180&lt;/font&gt;" style="ellipse;whiteSpace=wrap;html=1;fontSize=11;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1"><mxGeometry x="1650" y="320" width="160" height="110" as="geometry"/></mxCell><mxCell id="r_map" value="&lt;b&gt;V2X2MAP bridge (COM10)&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;decodes signed CAM / VAM&lt;br&gt;verify.py --trust: signature&lt;br&gt;verified / INVALID / not verified&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1"><mxGeometry x="1870" y="60" width="240" height="85" as="geometry"/></mxCell><mxCell id="r_cit" value="&lt;b&gt;CiT One OBU&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;receives our signed CAMs&lt;br&gt;(MQTT v2x/rx, no security info)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1"><mxGeometry x="1870" y="175" width="240" height="70" as="geometry"/></mxCell><mxCell id="r_rsu" value="&lt;b&gt;RSU&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;CAM · SPATEM · MAPEM&lt;br&gt;signed under the EU PKI&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1"><mxGeometry x="1870" y="560" width="240" height="65" as="geometry"/></mxCell><mxCell id="r_sim" value="&lt;b&gt;Sim car (obu-cam-transmistter)&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;unsigned CAM, ~3 Hz&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1"><mxGeometry x="1870" y="645" width="240" height="55" as="geometry"/></mxCell><mxCell id="legend" value="&lt;b&gt;Station-link messages&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;phone → board: STATION_CONFIGURE (pseudonym MAC, starts radio) · CREDENTIALS_PROVISION (bundle, once) · POTI_UPDATE (position + ITS time, per new fix) · BTP_DATA_REQUEST (CAM port 2001 / psid 36, VAM port 2018 / psid 638; signed or unsigned)&lt;br&gt;board → phone: RESULT · STATUS (1 s: tickets, signed, refused, radio counters) · V2X_RX (every received ITS message)&lt;br&gt;Recovery: USB watchdog 3.5 s · BLE supervision 4 s + reconnect · board reset → app reconfigures · app restart → new session, stored BLE bond&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;arcSize=8;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;align=left;spacingLeft=8;" vertex="1" parent="1"><mxGeometry x="330" y="725" width="1270" height="95" as="geometry"/></mxCell><mxCell id="x1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;" edge="1" parent="1" source="p_sens" target="p_loop"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x2" value="fix time" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0;exitY=0.5;entryX=1;entryY=0.2;" edge="1" parent="1" source="p_time" target="p_loop"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0;exitY=0.5;entryX=1;entryY=0.75;" edge="1" parent="1" source="p_pseu" target="p_loop"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x4" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;" edge="1" parent="1" source="p_loop" target="p_enc"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x5" value="UPER" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.25;" edge="1" parent="1" source="p_enc" target="p_link"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x6" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0.75;exitY=1;entryX=0.75;entryY=0;" edge="1" parent="1" source="p_set" target="p_link"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x7" value="bundle" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=1;exitY=0.7;entryX=0;entryY=0.7;" edge="1" parent="1" source="p_cred" target="p_link"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x8" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="p_link" target="p_usb"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0;exitY=0.85;entryX=0;entryY=0.5;" edge="1" parent="1" source="p_link" target="p_ble"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x10" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="p_usb" target="l_usb"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x11" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="p_ble" target="l_ble"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x12" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="l_usb" target="e_ser"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x13" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="l_ble" target="e_ble"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x14" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.66;" edge="1" parent="1" source="e_ser" target="e_link"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x15" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0.3;entryY=1;" edge="1" parent="1" source="e_ble" target="e_link"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x16" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0.5;exitY=0;entryX=0.5;entryY=1;" edge="1" parent="1" source="e_link" target="e_sta"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x17" value="signed" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="e_sta" target="e_van"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x18" value="unsigned" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="e_sta" target="e_geo"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x19" value="sign" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0.5;exitY=0;entryX=0.5;entryY=1;" edge="1" parent="1" source="e_van" target="e_sec"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x20" value="key" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0;exitY=0.5;entryX=1;entryY=0.5;startArrow=block;startFill=1;" edge="1" parent="1" source="e_sec" target="e_nvs"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x21" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0.75;exitY=1;entryX=0.75;entryY=0;" edge="1" parent="1" source="e_van" target="e_radio"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x22" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0.5;exitY=1;entryX=0.25;entryY=0;" edge="1" parent="1" source="e_geo" target="e_radio"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x23" value="TX" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=1;exitY=0.3;entryX=0;entryY=0.35;" edge="1" parent="1" source="e_radio" target="air"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x24" value="RX" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0;exitY=0.7;entryX=1;entryY=0.8;" edge="1" parent="1" source="air" target="e_radio"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x24b" value="frames" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="e_radio" target="e_unwrap"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x25" value="V2X_RX" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0;exitY=0.5;entryX=1;entryY=0.87;" edge="1" parent="1" source="e_unwrap" target="e_link"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x26" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0.3;exitY=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="air" target="r_map"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x27" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0.7;exitY=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="air" target="r_cit"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x28" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0;exitY=0.5;entryX=0.7;entryY=1;" edge="1" parent="1" source="r_rsu" target="air"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x29" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=0;exitY=0.5;entryX=0.3;entryY=1;" edge="1" parent="1" source="r_sim" target="air"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x30" value="VCR1 bundle" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.3;" edge="1" parent="1" source="k_demo" target="p_cred"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x31" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;dashed=1;" edge="1" parent="1" source="k_real" target="k_paths"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x32" value="future" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;dashed=1;exitX=1;exitY=0.3;entryX=0;entryY=0.8;" edge="1" parent="1" source="k_paths" target="p_cred"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x33" value="V2X_RX" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;dashed=1;exitX=0.5;exitY=1;entryX=0.75;entryY=0;" edge="1" parent="1" source="p_ble" target="p_rx"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="x34" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=10;endArrow=block;endFill=1;" edge="1" parent="1" source="p_rx" target="p_ui"><mxGeometry relative="1" as="geometry"/></mxCell></root></mxGraphModel></diagram></mxfile>