Packet #1482751 Success

TRACEROUTE_APP packet from Rqn_Jazmines🗼☀️⛰️ (Qan5) to V - Pobla Llarga (WA04)

1
Total Receptions
1
Unique Gateways
3
Hop Count
57
Payload Bytes
Packet Information
Database ID: 1482751
Mesh Packet ID: 0xc2ff6151
Used for correlation across gateways
Timestamp: 2026-07-10 13:26:53 UTC
From Node: Rqn_Jazmines🗼☀️⛰️ (Qan5)
To Node: V - Pobla Llarga (WA04)
Success: Processed
Protocol: TRACEROUTE_APP
Port: 70
Gateway: EB4APF portable (4APF)
Channel: SFNarrow
RSSI: -120 dBm
SNR: -2.75 dBm
Hop Info: 3/3 hops
Start: 3, Limit: 0
Relay Node: 45
Last byte of the last hop that relayed this packet
Payload Data
Protocol: TRACEROUTE_APP
Size: 57 bytes
Decoded: Yes
Decoded Data:
Route Information
Route Path: TE - Actuel 🌞🗼 (Act)
Hop Count: 0 hops
Status: Forward incomplete, Return in progress
SNR Towards: 1.0 dB 9.0 dB
Return Path: TE - Actuel 🌞🗼 (Act) AB - Capella 🌞🗼 (Cap) CC VILLUERCA SUPE (SUPE) CC Montanchez R101 (R101) EB4APF portable (4APF)
SNR Back: 10.75 dB 9.5 dB 3.25 dB -6.5 dB -2.75 dB
Traceroute Steps
Hop From Node To Node Distance SNR (dB) Direction Analysis
1 V - Pobla Llarga (WA04) TE - Actuel 🌞🗼 (Act) Unknown 1.0 dB Origin Hops
2 TE - Actuel 🌞🗼 (Act) Rqn_Jazmines🗼☀️⛰️ (Qan5) 69.54 km 9.0 dB Relay Hops
Traceroute incomplete - Final destination not reached
Return Path Steps
Total Forward Distance
69.54 km
Total Return Distance
969.42 km
Combined Traceroute Graph
Controls: Drag nodes to rearrange • Mouse wheel to zoom • Click and drag background to pan • Hover for details
Loading graph...

Building graph...

Legend & Paths
Nodes
🔄 Router Node
📡 Gateway Node
🚀 Source Node
🎯 Target Node
Connections
RF Link
Gateway Connection
Direct Reception (0 hops)
Packet Paths
Loading paths...
Raw Packet Analysis
Complete field breakdown and MQTT privacy/exposure analysis
Packet Structure
MQTT Packet Flow:
ServiceEnvelope (MQTT layer) → MeshPacket (Mesh layer) → Decoded Payload (Application data)
Total Size:57 bytes
Gateway:!433eea80
Channel:SFNarrow
Payload Type:TRACEROUTE_APP
Hop Count:3 / 3
Privacy Summary
Exposure Level:
Direct Message
Privacy Features:
✓ Direct LoRa transmission (not via MQTT)
✓ Acknowledgment requested
+ 3 more...
Exposure Risks:
⚠ Packet visible to MQTT subscribers
⚠ Multi-hop path visible (3 hops)
+ 1 more...
MQTT ServiceEnvelope Fields

FieldValue
gateway_id !433eea80
Node ID format
channel_id SFNarrow
packet MeshPacket (57 bytes)
Contains the actual mesh network packet
MeshPacket Fields

Canonical MeshPacket view reconstructed from stored protobuf bytes.

FieldValueType
from 3372465412
Source node ID
uint32
to 2661121680
Target node ID
uint32
decoded.portnum TRACEROUTE_APP
TRACEROUTE_APP
enum
decoded.payload_length 57 bytes size
hop_limit Not set uint32
hop_start 3
Initial hop limit
uint32
hops_taken 3
Calculated: hop_start - hop_limit
derived
rx_rssi -120.0 dBm
Signal strength at gateway
int32
rx_snr -2.75 dB
Signal quality at gateway
float
rx_time 1783690012
Receive timestamp
fixed32
via_mqtt False
Direct LoRa transmission
bool
want_ack True
Acknowledgment requested
bool
priority Not set enum
delayed Not set enum
channel 32
Channel index
uint32
pki_encrypted False
Standard encryption
bool
next_hop Not set uint32
relay_node 69
Relay node ID
uint32
tx_after Not set uint32
timestamp Not set uint32
MQTT Privacy & Exposure Analysis

Analysis of privacy features and exposure risks when packet is shared via MQTT

Exposure Level: Direct Message
Privacy Features:
  • ✓ Direct LoRa transmission (not via MQTT)
  • ✓ Acknowledgment requested
  • ✓ Targeted to specific node
  • ✓ Custom channel: SFNarrow
  • ✓ Gateway node ID tracked
Exposure Risks:
  • ⚠ Packet visible to MQTT subscribers
  • ⚠ Multi-hop path visible (3 hops)
  • ⚠ RF signal metrics exposed (location inference possible)
MQTT-Specific Fields
Want ack: True
Gateway ID: !433eea80
Signal Metrics: RSSI: -120.0 dBm
SNR: -2.75 dB
Complete Payload Analysis

Detailed breakdown of all payload fields and decoded data

Payload Metadata:
Protocol:TRACEROUTE_APP
Size:57 bytes
Decoded: Yes
Complete Payload Data (JSON):
{ "route_nodes": [ 838199308 ], "snr_towards": [ 1.0, 9.0 ], "route_back": [ 838199308, 3858178101, 1483150654, 2912846405, 1128196736 ], "snr_back": [ 10.75, 9.5, 3.25, -6.5, -2.75 ], "route_node_names": { "1128196736": "EB4APF portable (4APF)", "3372465412": "Rqn_Jazmines🗼☀️⛰️ (Qan5)", "2912846405": "CC Montanchez R101 (R101)", "838199308": "TE - Actuel 🌞🗼 (Act)", "2661121680": "V - Pobla Llarga (WA04)", "3858178101": "AB - Capella 🌞🗼 (Cap)", "1483150654": "CC VILLUERCA SUPE (SUPE)" }, "traceroute_packet": { "packet_data": { "id": 1482751, "timestamp": 1783690013.945376, "from_node_id": 3372465412, "to_node_id": 2661121680, "portnum": 70, "portnum_name": "TRACEROUTE_APP", "gateway_id": "!433eea80", "channel_id": "SFNarrow", "mesh_packet_id": 3271516497, "rssi": -120, "snr": -2.75, "hop_limit": 0, "hop_start": 3, "payload_length": 57, "processed_successfully": 1, "raw_payload": "0a040ce8f531120204241a140ce8f5313520f7e53e15675845829ead80ea3e4322172b260de6ffffffffffffffff01f5ffffffffffffffff01", "via_mqtt": 0, "want_ack": 1, "priority": 0, "delayed": 0, "channel_index": null, "rx_time": 1783690012, "pki_encrypted": 0, "next_hop": 0, "relay_node": 69, "tx_after": 0, "raw_service_envelope": "0a760d04bd03c915907e9d9e18202a44780bd0e5b59ba108f6b7da846cfc70edd8e5d4dee824880956631f4fe54c9ea91e30e035d0c8ad55c53692fb6ca9e7779b7156fbefd167afb751305843814be3975ffe7c355161ffc23d1cf3506a45000030c050016088ffffffffffffffff017803980145a80101120853464e6172726f771a09213433336565613830", "timestamp_str": "2026-07-10 13:26:53 UTC", "hop_count": 3, "has_payload": true, "success": 1, "from_node_name": "Rqn_Jazmines🗼☀️⛰️ (Qan5)", "to_node_name": "V - Pobla Llarga (WA04)", "relay_hex": "45", "relay_candidates": [], "gateway_name": "EB4APF portable (4APF)", "gateway_location": { "node_id": 1128196736, "latitude": 0.0065536, "longitude": 0.0065536, "altitude": null, "timestamp": 1784272281.6313307, "timestamp_str": "2026-07-17 08:11:21", "display_name": "EB4APF portable ", "long_name": "EB4APF portable ", "short_name": "4APF", "hw_model": "HELTEC_V3" } }, "resolve_names": true, "packet_id": 1482751, "from_node_id": 3372465412, "to_node_id": 2661121680, "timestamp": 1783690013.945376, "gateway_id": "!433eea80", "raw_payload": "0a040ce8f531120204241a140ce8f5313520f7e53e15675845829ead80ea3e4322172b260de6ffffffffffffffff01f5ffffffffffffffff01", "hop_limit": 0, "hop_start": 3, "from_node_name": "Rqn_Jazmines🗼☀️⛰️ (Qan5)", "to_node_name": "V - Pobla Llarga (WA04)", "route_data": { "route_nodes": [ 838199308 ], "snr_towards": [ 1.0, 9.0 ], "route_back": [ 838199308, 3858178101, 1483150654, 2912846405, 1128196736 ], "snr_back": [ 10.75, 9.5, 3.25, -6.5, -2.75 ] }, "forward_path": { "path_type": "forward_with_return", "node_ids": [ 2661121680, 838199308, 3372465412 ], "node_names": [ "V - Pobla Llarga (WA04)", "TE - Actuel 🌞🗼 (Act)", "Rqn_Jazmines🗼☀️⛰️ (Qan5)" ], "snr_values": [ 1.0, 9.0 ], "hops": [ { "hop_number": 1, "from_node_id": 2661121680, "to_node_id": 838199308, "from_node_name": "V - Pobla Llarga (WA04)", "to_node_name": "TE - Actuel 🌞🗼 (Act)", "snr": 1.0, "direction": "forward", "is_target_hop": false, "distance_meters": null, "from_location_timestamp": null, "to_location_timestamp": null, "from_location_age_warning": "No location data available", "to_location_age_warning": "No location data available" }, { "hop_number": 2, "from_node_id": 838199308, "to_node_id": 3372465412, "from_node_name": "TE - Actuel 🌞🗼 (Act)", "to_node_name": "Rqn_Jazmines🗼☀️⛰️ (Qan5)", "snr": 9.0, "direction": "forward", "is_target_hop": false, "distance_meters": 69539.1466464111, "from_location_timestamp": 1783666809.0481498, "to_location_timestamp": 1784705327.5500035, "from_location_age_warning": "from 6.4h ago", "to_location_age_warning": "from 1.7w later" } ], "is_complete": false, "total_hops": 2 }, "return_path": { "path_type": "return", "node_ids": [ 3372465412, 838199308, 3858178101, 1483150654, 2912846405, 1128196736 ], "node_names": [ "Rqn_Jazmines🗼☀️⛰️ (Qan5)", "TE - Actuel 🌞🗼 (Act)", "AB - Capella 🌞🗼 (Cap)", "CC VILLUERCA SUPE (SUPE)", "CC Montanchez R101 (R101)", "EB4APF portable (4APF)" ], "snr_values": [ 10.75, 9.5, 3.25, -6.5, -2.75 ], "hops": [ { "hop_number": 1, "from_node_id": 3372465412, "to_node_id": 838199308, "from_node_name": "Rqn_Jazmines🗼☀️⛰️ (Qan5)", "to_node_name": "TE - Actuel 🌞🗼 (Act)", "snr": 10.75, "direction": "return", "is_target_hop": false, "distance_meters": 69539.1466464111, "from_location_timestamp": 1784705327.5500035, "to_location_timestamp": 1783666809.0481498, "from_location_age_warning": "from 1.7w later", "to_location_age_warning": "from 6.4h ago" }, { "hop_number": 2, "from_node_id": 838199308, "to_node_id": 3858178101, "from_node_name": "TE - Actuel 🌞🗼 (Act)", "to_node_name": "AB - Capella 🌞🗼 (Cap)", "snr": 9.5, "direction": "return", "is_target_hop": false, "distance_meters": 196962.2243403558, "from_location_timestamp": 1783666809.0481498, "to_location_timestamp": 1783618642.163936, "from_location_age_warning": "from 6.4h ago", "to_location_age_warning": "from 19.8h ago" }, { "hop_number": 3, "from_node_id": 3858178101, "to_node_id": 1483150654, "from_node_name": "AB - Capella 🌞🗼 (Cap)", "to_node_name": "CC VILLUERCA SUPE (SUPE)", "snr": 3.25, "direction": "return", "is_target_hop": false, "distance_meters": 338055.75269311905, "from_location_timestamp": 1783618642.163936, "to_location_timestamp": 1783592108.2648613, "from_location_age_warning": "from 19.8h ago", "to_location_age_warning": "from 1.1d ago" }, { "hop_number": 4, "from_node_id": 1483150654, "to_node_id": 2912846405, "from_node_name": "CC VILLUERCA SUPE (SUPE)", "to_node_name": "CC Montanchez R101 (R101)", "snr": -6.5, "direction": "return", "is_target_hop": false, "distance_meters": 69323.73219241133, "from_location_timestamp": 1783592108.2648613, "to_location_timestamp": 1783351641.5365906, "from_location_age_warning": "from 1.1d ago", "to_location_age_warning": "from 3.9d ago" }, { "hop_number": 5, "from_node_id": 2912846405, "to_node_id": 1128196736, "from_node_name": "CC Montanchez R101 (R101)", "to_node_name": "EB4APF portable (4APF)", "snr": -2.75, "direction": "return", "is_target_hop": false, "distance_meters": 295536.63899233594, "from_location_timestamp": 1783351641.5365906, "to_location_timestamp": 1783111620.589296, "from_location_age_warning": "from 3.9d ago", "to_location_age_warning": "from 6.7d ago" } ], "is_complete": false, "total_hops": 5 }, "actual_rf_path": { "path_type": "combined_rf", "node_ids": [ 2661121680, 838199308, 3372465412, 3858178101, 1483150654, 2912846405, 1128196736 ], "node_names": [ "V - Pobla Llarga (WA04)", "TE - Actuel 🌞🗼 (Act)", "Rqn_Jazmines🗼☀️⛰️ (Qan5)", "AB - Capella 🌞🗼 (Cap)", "CC VILLUERCA SUPE (SUPE)", "CC Montanchez R101 (R101)", "EB4APF portable (4APF)" ], "snr_values": [ 1.0, 9.0, 10.75, 9.5, 3.25, -6.5, -2.75 ], "hops": [ { "hop_number": 1, "from_node_id": 2661121680, "to_node_id": 838199308, "from_node_name": "V - Pobla Llarga (WA04)", "to_node_name": "TE - Actuel 🌞🗼 (Act)", "snr": 1.0, "direction": "forward_rf", "is_target_hop": false, "distance_meters": null, "from_location_timestamp": null, "to_location_timestamp": null, "from_location_age_warning": "No location data available", "to_location_age_warning": "No location data available" }, { "hop_number": 2, "from_node_id": 838199308, "to_node_id": 3372465412, "from_node_name": "TE - Actuel 🌞🗼 (Act)", "to_node_name": "Rqn_Jazmines🗼☀️⛰️ (Qan5)", "snr": 9.0, "direction": "forward_rf", "is_target_hop": false, "distance_meters": 69539.1466464111, "from_location_timestamp": 1783666809.0481498, "to_location_timestamp": 1784705327.5500035, "from_location_age_warning": "from 6.4h ago", "to_location_age_warning": "from 1.7w later" }, { "hop_number": 3, "from_node_id": 3372465412, "to_node_id": 838199308, "from_node_name": "Rqn_Jazmines🗼☀️⛰️ (Qan5)", "to_node_name": "TE - Actuel 🌞🗼 (Act)", "snr": 10.75, "direction": "return_rf", "is_target_hop": false, "distance_meters": 69539.1466464111, "from_location_timestamp": 1784705327.5500035, "to_location_timestamp": 1783666809.0481498, "from_location_age_warning": "from 1.7w later", "to_location_age_warning": "from 6.4h ago" }, { "hop_number": 4, "from_node_id": 838199308, "to_node_id": 3858178101, "from_node_name": "TE - Actuel 🌞🗼 (Act)", "to_node_name": "AB - Capella 🌞🗼 (Cap)", "snr": 9.5, "direction": "return_rf", "is_target_hop": false, "distance_meters": 196962.2243403558, "from_location_timestamp": 1783666809.0481498, "to_location_timestamp": 1783618642.163936, "from_location_age_warning": "from 6.4h ago", "to_location_age_warning": "from 19.8h ago" }, { "hop_number": 5, "from_node_id": 3858178101, "to_node_id": 1483150654, "from_node_name": "AB - Capella 🌞🗼 (Cap)", "to_node_name": "CC VILLUERCA SUPE (SUPE)", "snr": 3.25, "direction": "return_rf", "is_target_hop": false, "distance_meters": 338055.75269311905, "from_location_timestamp": 1783618642.163936, "to_location_timestamp": 1783592108.2648613, "from_location_age_warning": "from 19.8h ago", "to_location_age_warning": "from 1.1d ago" }, { "hop_number": 6, "from_node_id": 1483150654, "to_node_id": 2912846405, "from_node_name": "CC VILLUERCA SUPE (SUPE)", "to_node_name": "CC Montanchez R101 (R101)", "snr": -6.5, "direction": "return_rf", "is_target_hop": false, "distance_meters": 69323.73219241133, "from_location_timestamp": 1783592108.2648613, "to_location_timestamp": 1783351641.5365906, "from_location_age_warning": "from 1.1d ago", "to_location_age_warning": "from 3.9d ago" }, { "hop_number": 7, "from_node_id": 2912846405, "to_node_id": 1128196736, "from_node_name": "CC Montanchez R101 (R101)", "to_node_name": "EB4APF portable (4APF)", "snr": -2.75, "direction": "return_rf", "is_target_hop": false, "distance_meters": 295536.63899233594, "from_location_timestamp": 1783351641.5365906, "to_location_timestamp": 1783111620.589296, "from_location_age_warning": "from 3.9d ago", "to_location_age_warning": "from 6.7d ago" } ], "is_complete": false, "total_hops": 7 } }, "has_return_path": true, "is_complete": false, "forward_path_display": "V - Pobla Llarga (WA04) → TE - Actuel 🌞🗼 (Act) → Rqn_Jazmines🗼☀️⛰️ (Qan5)", "return_path_display": "Rqn_Jazmines🗼☀️⛰️ (Qan5) → TE - Actuel 🌞🗼 (Act) → AB - Capella 🌞🗼 (Cap) → CC VILLUERCA SUPE (SUPE) → CC Montanchez R101 (R101) → EB4APF portable (4APF)", "actual_rf_path_display": "V - Pobla Llarga (WA04) → TE - Actuel 🌞🗼 (Act) → Rqn_Jazmines🗼☀️⛰️ (Qan5) → AB - Capella 🌞🗼 (Cap) → CC VILLUERCA SUPE (SUPE) → CC Montanchez R101 (R101) → EB4APF portable (4APF)", "forward_hops": [ { "hop_number": 1, "from_node_id": 2661121680, "to_node_id": 838199308, "from_node_name": "V - Pobla Llarga (WA04)", "to_node_name": "TE - Actuel 🌞🗼 (Act)", "snr": 1.0, "direction": "forward", "is_target_hop": false, "distance_meters": null, "from_location_timestamp": null, "to_location_timestamp": null, "from_location_age_warning": "No location data available", "to_location_age_warning": "No location data available" }, { "hop_number": 2, "from_node_id": 838199308, "to_node_id": 3372465412, "from_node_name": "TE - Actuel 🌞🗼 (Act)", "to_node_name": "Rqn_Jazmines🗼☀️⛰️ (Qan5)", "snr": 9.0, "direction": "forward", "is_target_hop": false, "distance_meters": 69539.1466464111, "from_location_timestamp": 1783666809.0481498, "to_location_timestamp": 1784705327.5500035, "from_location_age_warning": "from 6.4h ago", "to_location_age_warning": "from 1.7w later" } ], "return_hops": [ { "hop_number": 1, "from_node_id": 3372465412, "to_node_id": 838199308, "from_node_name": "Rqn_Jazmines🗼☀️⛰️ (Qan5)", "to_node_name": "TE - Actuel 🌞🗼 (Act)", "snr": 10.75, "direction": "return", "is_target_hop": false, "distance_meters": 69539.1466464111, "from_location_timestamp": 1784705327.5500035, "to_location_timestamp": 1783666809.0481498, "from_location_age_warning": "from 1.7w later", "to_location_age_warning": "from 6.4h ago" }, { "hop_number": 2, "from_node_id": 838199308, "to_node_id": 3858178101, "from_node_name": "TE - Actuel 🌞🗼 (Act)", "to_node_name": "AB - Capella 🌞🗼 (Cap)", "snr": 9.5, "direction": "return", "is_target_hop": false, "distance_meters": 196962.2243403558, "from_location_timestamp": 1783666809.0481498, "to_location_timestamp": 1783618642.163936, "from_location_age_warning": "from 6.4h ago", "to_location_age_warning": "from 19.8h ago" }, { "hop_number": 3, "from_node_id": 3858178101, "to_node_id": 1483150654, "from_node_name": "AB - Capella 🌞🗼 (Cap)", "to_node_name": "CC VILLUERCA SUPE (SUPE)", "snr": 3.25, "direction": "return", "is_target_hop": false, "distance_meters": 338055.75269311905, "from_location_timestamp": 1783618642.163936, "to_location_timestamp": 1783592108.2648613, "from_location_age_warning": "from 19.8h ago", "to_location_age_warning": "from 1.1d ago" }, { "hop_number": 4, "from_node_id": 1483150654, "to_node_id": 2912846405, "from_node_name": "CC VILLUERCA SUPE (SUPE)", "to_node_name": "CC Montanchez R101 (R101)", "snr": -6.5, "direction": "return", "is_target_hop": false, "distance_meters": 69323.73219241133, "from_location_timestamp": 1783592108.2648613, "to_location_timestamp": 1783351641.5365906, "from_location_age_warning": "from 1.1d ago", "to_location_age_warning": "from 3.9d ago" }, { "hop_number": 5, "from_node_id": 2912846405, "to_node_id": 1128196736, "from_node_name": "CC Montanchez R101 (R101)", "to_node_name": "EB4APF portable (4APF)", "snr": -2.75, "direction": "return", "is_target_hop": false, "distance_meters": 295536.63899233594, "from_location_timestamp": 1783351641.5365906, "to_location_timestamp": 1783111620.589296, "from_location_age_warning": "from 3.9d ago", "to_location_age_warning": "from 6.7d ago" } ], "total_forward_distance": 69539.1466464111, "total_return_distance": 969417.4948646332 }
Complete Protobuf Decode (JSON)
{ "service_envelope": { "packet": { "from": 3372465412, "to": 2661121680, "channel": 32, "decoded": { "portnum": "TRACEROUTE_APP", "payload": "CgQM6PUxEgIEJBoUDOj1MTUg9+U+FWdYRYKerYDqPkMiFysmDeb//////////wH1//////////8B", "request_id": 1857961763, "bitfield": 1 }, "id": 3271516497, "rx_time": 1783690012, "rx_snr": -2.75, "want_ack": true, "rx_rssi": -120, "hop_start": 3, "relay_node": 69, "transport_mechanism": "TRANSPORT_LORA" }, "channel_id": "SFNarrow", "gateway_id": "!433eea80" }, "mesh_packet": { "from": 3372465412, "to": 2661121680, "channel": 32, "decoded": { "portnum": "TRACEROUTE_APP", "payload": "CgQM6PUxEgIEJBoUDOj1MTUg9+U+FWdYRYKerYDqPkMiFysmDeb//////////wH1//////////8B", "request_id": 1857961763, "bitfield": 1, "parsed_payload": { "route": [ 838199308 ], "snr_towards": [ 4, 36 ], "route_back": [ 838199308, 3858178101, 1483150654, 2912846405, 1128196736 ], "snr_back": [ 43, 38, 13, -26, -11 ], "type": "protobuf", "portnum": "TRACEROUTE_APP", "message_class": "RouteDiscovery" } }, "id": 3271516497, "rx_time": 1783690012, "rx_snr": -2.75, "want_ack": true, "rx_rssi": -120, "hop_start": 3, "relay_node": 69, "transport_mechanism": "TRANSPORT_LORA" } }
Raw Packet Data (57 bytes)
0a040ce8f531120204241a140ce8f5313520f7e53e15675845829ead80ea3e4322172b260de6ffffffffffffffff01f5ffffffffffffffff01
Hex Analysis:
Size:57 bytes
Format:Protobuf (Protocol Buffers)
Encoding:Binary with varint and length-delimited fields
This is the raw protobuf-encoded payload as received from MQTT. The structure follows the Meshtastic protobuf schema definitions.
All Receptions
All gateways that received this packet
Correlation: Using Mesh Packet ID
Gateway Time Offset RSSI SNR Hops Relay Channel Timestamp Actions
EB4APF portable (4APF) Primary 0.000s
Reference
-120.0 dBm -2.75 dB 3 45 SFNarrow 2026-07-10 13:26:53 UTC Current
No other receptions found within ±2 seconds
1

Total Receptions

1

Unique Gateways