Packet.NetRom 0.24.0

dotnet add package Packet.NetRom --version 0.24.0
                    
NuGet\Install-Package Packet.NetRom -Version 0.24.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Packet.NetRom" Version="0.24.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Packet.NetRom" Version="0.24.0" />
                    
Directory.Packages.props
<PackageReference Include="Packet.NetRom" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Packet.NetRom --version 0.24.0
                    
#r "nuget: Packet.NetRom, 0.24.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Packet.NetRom@0.24.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Packet.NetRom&version=0.24.0
                    
Install as a Cake Addin
#tool nuget:?package=Packet.NetRom&version=0.24.0
                    
Install as a Cake Tool

Packet.NetRom

NET/ROM L3 routing, L4 circuits, and the INP3 time-routing overlay for the Packet.NET stack.

Packet.NetRom is the NET/ROM networking layer: the L3 routing table (NODES broadcasts + the multiplicative per-hop quality model), the L4 virtual-circuit state machine (CircuitManager / NetRomCircuit), the L3 forwarding decision for transit nodes, and the INP3 time-routing overlay (L3RTT link timing, RIF/RIP). It runs above an AX.25 interlink — the wire types are codecs over NetRomPacket, and the routing/transport types are host-free (no AX.25 or node-host dependency), so you wire them to a transport yourself. Part of Packet.NET, a .NET amateur-radio / AX.25 packet stack, built on Packet.Core and Packet.Ax25.

Install

dotnet add package Packet.NetRom

Quick start

Parse a NODES broadcast you heard from a neighbour and learn its routes into a routing table — the read-only ingest path a node uses to build its view of the network:

using Packet.Core;
using Packet.NetRom.Routing;
using Packet.NetRom.Wire;

var me   = new Callsign("Q0PDN");      // our own node callsign
var nbr  = new Callsign("N0CALL");     // the neighbour whose broadcast we heard

// Build a node's own NODES broadcast, then parse it (here we round-trip the builder;
// in production you'd parse the info field of a received PID-0xCF UI frame).
byte[][] frames = NodesBroadcastBuilder.Build(
    senderAlias: "NODE",
    entries: [ new(new Callsign("AA1AA"), "BBS", new Callsign("AA1AA"), Quality: 200) ]);

if (NodesBroadcast.TryParse(frames[0], out var broadcast))
{
    var table = new NetRomRoutingTable();
    table.Ingest(originator: nbr, myCall: me, portId: "vhf", broadcast: broadcast);

    NetRomRoutingSnapshot view = table.Snapshot();
    foreach (var dest in view.Destinations)
        Console.WriteLine($"{dest.Alias} ({dest.Destination}) via {dest.BestRoute?.Neighbour} q={dest.BestRoute?.Quality}");
}

Call table.Sweep() at the broadcast interval to age routes out, BuildAdvertisement(obsoleteMinimum) to originate your own NODES, and MarkNeighbourDown(neighbour) for immediate link-down failover. For L4 circuits, mint one with CircuitManager.OpenCircuit(remoteNode), wire its SendPacket sink to your interlink, then Connect / Send / Disconnect.

Key types

  • NetRomRoutingTable — the learned L3 routing table: ingests NODES broadcasts, derives per-hop qualities, keeps best routes per destination with obsolescence decay, hands out immutable snapshots.
  • NetRomRoutingSnapshot / NetRomDestination / NetRomRoute — the immutable read-only routing view (with ResolveDestination for connect <alias>).
  • CircuitManager — owns the L4 circuit table: mints circuits, demultiplexes inbound datagrams, accepts/refuses inbound connects, drives retransmit timers.
  • NetRomCircuit — one end of an L4 virtual circuit: sliding-window transport with negotiated window, choke flow control, NAK retransmit, and 236-byte fragment/reassembly.
  • NetRomForwarding — the pure L3 forwarding decision for a transit node (TTL decrement, loop guard, best/per-flow next-hop selection).
  • Inp3Engine — the host-free INP3 link-timing engine: L3RTT probing, SNTT smoothing, neighbour-down detection.
  • NetRomPacket / NodesBroadcast / Inp3Rif — the wire codecs (total parsing — malformed bytes return false, never throw).

See also


AGPL-3.0-licensed. Part of the Packet.NET stack.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.24.0 45 7/20/2026
0.23.0 82 7/14/2026
0.22.0 86 7/14/2026
0.21.0 98 7/9/2026
0.20.0 89 7/5/2026
0.19.0 90 7/5/2026
0.18.0 94 7/5/2026
0.17.0 113 6/23/2026
0.16.0 103 6/23/2026
0.15.0 103 6/23/2026