Show trace route connections #80

Closed
opened 2026-10-04 22:59:57 +02:00 by adam · 13 comments
Owner

It would be nice if we could not only see the neighborhood connections but also traceroute connections.

I'm not sure if it's possible to also display traceroute connections between two other clients. (Not sure if I understand the documentation correctly, but they seem to use the primary channel key for encryption.)

It would be nice if we could not only see the neighborhood connections but also traceroute connections. I'm not sure if it's possible to also display traceroute connections between two other clients. (Not sure if I understand the documentation correctly, but they seem to use the primary channel key for encryption.) <!-- github-sync-id:3630700372 -->
adam closed this issue 2026-10-04 22:59:57 +02:00
Author
Owner

Yes! Good news is I already looked into the packets too. I can add support for that but how would I add this to the user interface? I'm unsure how to visualize it.

Yes! Good news is I already looked into the packets too. I can add support for that but how would I add this to the user interface? I'm unsure how to visualize it. <!-- github-comment-id:3538882365 -->
Author
Owner
[
  {
    "packet":{
      "_potatomesh_seen":"True",
      "decoded":{
        "bitfield":"3",
        "dest":"2660618080",
        "payload":"CgjYwV7aYY+WRBIMKvL//////////wEp",
        "portnum":"PAXCOUNTER_APP",
        "traceroute":{
          "raw":"route: 3663643096\nroute: 1150717793\nsnr_towards: 42\nsnr_towards: -14\nsnr_towards: 41\n",
          "route":[
            3663643096,
            1150717793
          ],
          "snrTowards":[
            42,
            -14,
            41
          ]
        },
        "wantResponse":"True"
      },
      "from":"3664074452",
      "fromId":"!da6556d4",
      "hopLimit":"5",
      "hopStart":"7",
      "id":"2934054466",
      "raw":"from: 3664074452\nto: 2660618080\ndecoded {\n  portnum: TRACEROUTE_APP\n  payload: \"\\n\\010\\330\\301^\\332a\\217\\226D\\022\\014*\\362\\377\\377\\377\\377\\377\\377\\377\\377\\001)\"\n  want_response: true\n  dest: 2660618080\n  bitfield: 3\n}\nid: 2934054466\nrx_time: 1763183133\nrx_snr: 10.25\nhop_limit: 5\nrx_rssi: -70\nhop_start: 7\nrelay_node: 97\ntransport_mechanism: TRANSPORT_LORA\n",
      "relayNode":"97",
      "rxRssi":"-70",
      "rxSnr":"10.25",
      "rxTime":"1763183133",
      "to":"2660618080",
      "toId":"!9e95cf60",
      "transportMechanism":"TRANSPORT_LORA"
    },
    "reason":"unsupported-port",
    "timestamp":"2025-11-15T05:05:34.821315+00:00"
  },
  {
    "packet":{
      "_potatomesh_seen":"True",
      "decoded":{
        "bitfield":"0",
        "paxcounter":{
          "ble":"3",
          "raw":"wifi: 3\nble: 3\nuptime: 979210\n",
          "uptime":"979210",
          "wifi":"3"
        },
        "payload":"CAMQAxiK4js=",
        "portnum":"TRACEROUTE_APP"
      },
      "from":"3663979636",
      "fromId":"!da63e474",
      "hopLimit":"3",
      "hopStart":"7",
      "id":"2390464798",
      "raw":"from: 3663979636\nto: 4294967295\ndecoded {\n  portnum: PAXCOUNTER_APP\n  payload: \"\\010\\003\\020\\003\\030\\212\\342;\"\n  bitfield: 0\n}\nid: 2390464798\nrx_time: 1763184834\nrx_snr: 10.75\nhop_limit: 3\nrx_rssi: -66\nhop_start: 7\nrelay_node: 97\ntransport_mechanism: TRANSPORT_LORA\n",
      "relayNode":"97",
      "rxRssi":"-66",
      "rxSnr":"10.75",
      "rxTime":"1763184834",
      "to":"4294967295",
      "toId":"^all",
      "transportMechanism":"TRANSPORT_LORA"
    },
    "reason":"unsupported-port",
    "timestamp":"2025-11-15T05:33:55.824121+00:00"
  },
  {
    "packet":{
      "_potatomesh_seen":"True",
      "decoded":{
        "bitfield":"3",
        "dest":"2660618080",
        "payload":"CgjYwV7aYY+WRBIMLP3//////////wEt",
        "portnum":"PAXCOUNTER_APP",
        "traceroute":{
          "raw":"route: 3663643096\nroute: 1150717793\nsnr_towards: 44\nsnr_towards: -3\nsnr_towards: 45\n",
          "route":[
            3663643096,
            1150717793
          ],
          "snrTowards":[
            44,
            -3,
            45
          ]
        },
        "wantResponse":"True"
      },
      "from":"3664074452",
      "fromId":"!da6556d4",
      "hopLimit":"5",
      "hopStart":"7",
      "id":"847383755",
      "raw":"from: 3664074452\nto: 2660618080\ndecoded {\n  portnum: TRACEROUTE_APP\n  payload: \"\\n\\010\\330\\301^\\332a\\217\\226D\\022\\014,\\375\\377\\377\\377\\377\\377\\377\\377\\377\\001-\"\n  want_response: true\n  dest: 2660618080\n  bitfield: 3\n}\nid: 847383755\nrx_time: 1763273733\nrx_snr: 11.25\nhop_limit: 5\nrx_rssi: -54\nhop_start: 7\nrelay_node: 97\ntransport_mechanism: TRANSPORT_LORA\n",
      "relayNode":"97",
      "rxRssi":"-54",
      "rxSnr":"11.25",
      "rxTime":"1763273733",
      "to":"2660618080",
      "toId":"!9e95cf60",
      "transportMechanism":"TRANSPORT_LORA"
    },
    "reason":"unsupported-port",
    "timestamp":"2025-11-16T06:15:34.742979+00:00"
  },
  {
    "packet":{
      "_potatomesh_seen":"True",
      "decoded":{
        "bitfield":"0",
        "paxcounter":{
          "ble":"10",
          "raw":"wifi: 1\nble: 10\nuptime: 1072810\n",
          "uptime":"1072810",
          "wifi":"1"
        },
        "payload":"CAEQChiqvUE=",
        "portnum":"TRACEROUTE_APP"
      },
      "from":"3663979636",
      "fromId":"!da63e474",
      "hopLimit":"2",
      "hopStart":"7",
      "id":"3719762509",
      "raw":"from: 3663979636\nto: 4294967295\ndecoded {\n  portnum: PAXCOUNTER_APP\n  payload: \"\\010\\001\\020\\n\\030\\252\\275A\"\n  bitfield: 0\n}\nid: 3719762509\nrx_time: 1763278438\nrx_snr: 0.5\nhop_limit: 2\nrx_rssi: -104\nhop_start: 7\nrelay_node: 50\ntransport_mechanism: TRANSPORT_LORA\n",
      "relayNode":"50",
      "rxRssi":"-104",
      "rxSnr":"0.5",
      "rxTime":"1763278438",
      "to":"4294967295",
      "toId":"^all",
      "transportMechanism":"TRANSPORT_LORA"
    },
    "reason":"unsupported-port",
    "timestamp":"2025-11-16T07:33:59.800567+00:00"
  }
]
``` [ { "packet":{ "_potatomesh_seen":"True", "decoded":{ "bitfield":"3", "dest":"2660618080", "payload":"CgjYwV7aYY+WRBIMKvL//////////wEp", "portnum":"PAXCOUNTER_APP", "traceroute":{ "raw":"route: 3663643096\nroute: 1150717793\nsnr_towards: 42\nsnr_towards: -14\nsnr_towards: 41\n", "route":[ 3663643096, 1150717793 ], "snrTowards":[ 42, -14, 41 ] }, "wantResponse":"True" }, "from":"3664074452", "fromId":"!da6556d4", "hopLimit":"5", "hopStart":"7", "id":"2934054466", "raw":"from: 3664074452\nto: 2660618080\ndecoded {\n portnum: TRACEROUTE_APP\n payload: \"\\n\\010\\330\\301^\\332a\\217\\226D\\022\\014*\\362\\377\\377\\377\\377\\377\\377\\377\\377\\001)\"\n want_response: true\n dest: 2660618080\n bitfield: 3\n}\nid: 2934054466\nrx_time: 1763183133\nrx_snr: 10.25\nhop_limit: 5\nrx_rssi: -70\nhop_start: 7\nrelay_node: 97\ntransport_mechanism: TRANSPORT_LORA\n", "relayNode":"97", "rxRssi":"-70", "rxSnr":"10.25", "rxTime":"1763183133", "to":"2660618080", "toId":"!9e95cf60", "transportMechanism":"TRANSPORT_LORA" }, "reason":"unsupported-port", "timestamp":"2025-11-15T05:05:34.821315+00:00" }, { "packet":{ "_potatomesh_seen":"True", "decoded":{ "bitfield":"0", "paxcounter":{ "ble":"3", "raw":"wifi: 3\nble: 3\nuptime: 979210\n", "uptime":"979210", "wifi":"3" }, "payload":"CAMQAxiK4js=", "portnum":"TRACEROUTE_APP" }, "from":"3663979636", "fromId":"!da63e474", "hopLimit":"3", "hopStart":"7", "id":"2390464798", "raw":"from: 3663979636\nto: 4294967295\ndecoded {\n portnum: PAXCOUNTER_APP\n payload: \"\\010\\003\\020\\003\\030\\212\\342;\"\n bitfield: 0\n}\nid: 2390464798\nrx_time: 1763184834\nrx_snr: 10.75\nhop_limit: 3\nrx_rssi: -66\nhop_start: 7\nrelay_node: 97\ntransport_mechanism: TRANSPORT_LORA\n", "relayNode":"97", "rxRssi":"-66", "rxSnr":"10.75", "rxTime":"1763184834", "to":"4294967295", "toId":"^all", "transportMechanism":"TRANSPORT_LORA" }, "reason":"unsupported-port", "timestamp":"2025-11-15T05:33:55.824121+00:00" }, { "packet":{ "_potatomesh_seen":"True", "decoded":{ "bitfield":"3", "dest":"2660618080", "payload":"CgjYwV7aYY+WRBIMLP3//////////wEt", "portnum":"PAXCOUNTER_APP", "traceroute":{ "raw":"route: 3663643096\nroute: 1150717793\nsnr_towards: 44\nsnr_towards: -3\nsnr_towards: 45\n", "route":[ 3663643096, 1150717793 ], "snrTowards":[ 44, -3, 45 ] }, "wantResponse":"True" }, "from":"3664074452", "fromId":"!da6556d4", "hopLimit":"5", "hopStart":"7", "id":"847383755", "raw":"from: 3664074452\nto: 2660618080\ndecoded {\n portnum: TRACEROUTE_APP\n payload: \"\\n\\010\\330\\301^\\332a\\217\\226D\\022\\014,\\375\\377\\377\\377\\377\\377\\377\\377\\377\\001-\"\n want_response: true\n dest: 2660618080\n bitfield: 3\n}\nid: 847383755\nrx_time: 1763273733\nrx_snr: 11.25\nhop_limit: 5\nrx_rssi: -54\nhop_start: 7\nrelay_node: 97\ntransport_mechanism: TRANSPORT_LORA\n", "relayNode":"97", "rxRssi":"-54", "rxSnr":"11.25", "rxTime":"1763273733", "to":"2660618080", "toId":"!9e95cf60", "transportMechanism":"TRANSPORT_LORA" }, "reason":"unsupported-port", "timestamp":"2025-11-16T06:15:34.742979+00:00" }, { "packet":{ "_potatomesh_seen":"True", "decoded":{ "bitfield":"0", "paxcounter":{ "ble":"10", "raw":"wifi: 1\nble: 10\nuptime: 1072810\n", "uptime":"1072810", "wifi":"1" }, "payload":"CAEQChiqvUE=", "portnum":"TRACEROUTE_APP" }, "from":"3663979636", "fromId":"!da63e474", "hopLimit":"2", "hopStart":"7", "id":"3719762509", "raw":"from: 3663979636\nto: 4294967295\ndecoded {\n portnum: PAXCOUNTER_APP\n payload: \"\\010\\001\\020\\n\\030\\252\\275A\"\n bitfield: 0\n}\nid: 3719762509\nrx_time: 1763278438\nrx_snr: 0.5\nhop_limit: 2\nrx_rssi: -104\nhop_start: 7\nrelay_node: 50\ntransport_mechanism: TRANSPORT_LORA\n", "relayNode":"50", "rxRssi":"-104", "rxSnr":"0.5", "rxTime":"1763278438", "to":"4294967295", "toId":"^all", "transportMechanism":"TRANSPORT_LORA" }, "reason":"unsupported-port", "timestamp":"2025-11-16T07:33:59.800567+00:00" } ] ``` <!-- github-comment-id:3538884669 -->
Author
Owner

Meshsense just displays the lines, but it looks pretty chaotic with so many connections.

Image
[Meshsense](https://meshsense.affirmatech.com) just displays the lines, but it looks pretty chaotic with so many connections. <img width="1550" height="917" alt="Image" src="https://github.com/user-attachments/assets/89bb05c1-a95b-43ad-8401-bfe863ad7558" /> <!-- github-comment-id:3538965844 -->
Author
Owner

Maybe I do dotted lines for traces. We already have solid lines for neighbors. Could look cool indeed.

Maybe I do dotted lines for traces. We already have solid lines for neighbors. Could look cool indeed. <!-- github-comment-id:3539130842 -->
Author
Owner

I have completed work on this in #463 and #466. It displays the full trace route in the node overlay info at the bottom and adds dotted lines to the map. I have yet to catch more traces to confirm rendering works well.

I have completed work on this in #463 and #466. It displays the full trace route in the node overlay info at the bottom and adds dotted lines to the map. I have yet to catch more traces to confirm rendering works well. <!-- github-comment-id:3546966741 -->
Author
Owner

I’ve upgraded to 0.5.6 both web and ingestor but I dont see any trace lines. What is the prerequisite to show them?

I’ve upgraded to 0.5.6 both web and ingestor but I dont see any trace lines. What is the prerequisite to show them? <!-- github-comment-id:3592457595 -->
Author
Owner

At least two adjacent nodes in the traceroute need to have position data on the map and are not neighbors. In that case, a dotted line will be rendered.

At least two adjacent nodes in the traceroute need to have position data on the map and are not neighbors. In that case, a dotted line will be rendered. <!-- github-comment-id:3593636068 -->
Author
Owner

I don't see this working. I can't see it on any of the updated other city instances either. Here - I've got few traces in the api, but there is no dotted lines showing those traces:

I don't see this working. I can't see it on any of the updated other city instances either. Here -[ I've got few traces](https://potato.varna.radio/api/traces) in the api, but there is no dotted lines showing those traces: <!-- github-comment-id:3595067899 -->
Author
Owner

Is it supposed to work for direct connections (but with the neighbourhood module disabled)?
If you look at those two nodes, they have a direct traceroute connection - but no dotted line is visible:

Image (You can find this by zooming to Mannheim on https://mesh.fux.is)
Is it supposed to work for direct connections (but with the neighbourhood module disabled)? If you look at those two nodes, they have a direct traceroute connection - but no dotted line is visible: * https://mesh.fux.is/nodes/!433d6844 * https://mesh.fux.is/nodes/!b2a730f8 <img width="1082" height="934" alt="Image" src="https://github.com/user-attachments/assets/1b7a3d59-43ae-4d88-974a-3c16157c9dc5" /> (You can find this by zooming to Mannheim on https://mesh.fux.is) <!-- github-comment-id:3595445146 -->
Author
Owner

Thanks for providing some data. I'll investigate.

Thanks for providing some data. I'll investigate. <!-- github-comment-id:3600788804 -->
Author
Owner

It's working now, I finally caught a good trace that I could debug and render.

Image
It's working now, I finally caught a good trace that I could debug and render. <img width="1776" height="999" alt="Image" src="https://github.com/user-attachments/assets/eada57fc-ee02-4b93-b536-1cf4bff1ee55" /> <!-- github-comment-id:3626088732 -->
Author
Owner

Awesome, waiting for a tagged release to give it a try :)

Awesome, waiting for a tagged release to give it a try :) <!-- github-comment-id:3628378788 -->
Author
Owner
v0.5.7-rc0

Give it ~30 minutes to publish images.

``` v0.5.7-rc0 ``` Give it ~30 minutes to publish images. <!-- github-comment-id:3628554347 -->
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: adam/potato-mesh#80