Packet.Ax25 0.31.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Packet.Ax25 --version 0.31.0
                    
NuGet\Install-Package Packet.Ax25 -Version 0.31.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.Ax25" Version="0.31.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Packet.Ax25" Version="0.31.0" />
                    
Directory.Packages.props
<PackageReference Include="Packet.Ax25" />
                    
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.Ax25 --version 0.31.0
                    
#r "nuget: Packet.Ax25, 0.31.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.Ax25@0.31.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.Ax25&version=0.31.0
                    
Install as a Cake Addin
#tool nuget:?package=Packet.Ax25&version=0.31.0
                    
Install as a Cake Tool

Packet.Ax25

AX.25 v2.2 frame codec + connected-mode session runtime + inbound-connection listener.

The core AX.25 protocol library: a U/S/I frame codec, an SDL-driven connected-mode link-layer state machine, and Ax25Listener - a node-style coordinator that accepts inbound connections, originates outbound ones, and caches a session per peer. It deals in raw AX.25 frame bytes over an IAx25Transport, so it is transport-neutral (KISS, AXUDP, KISS-over-TCP - your choice). Part of Packet.NET, a .NET amateur-radio / AX.25 packet stack.

Install

dotnet add package Packet.Ax25

Quick start

Run a station that answers inbound connections, echoes received data back to the peer, and can also originate outbound links. Ax25Listener takes any IAx25Transport (from Packet.Kiss, Packet.Axudp, etc.):

using Packet.Ax25;
using Packet.Ax25.Session;
using Packet.Ax25.Transport;
using Packet.Core;

// IAx25Transport comes from a transport package (Packet.Kiss, Packet.Axudp, ...).
IAx25Transport transport = /* e.g. a KISS or AXUDP transport */;

await using var listener = new Ax25Listener(transport, new Ax25ListenerOptions
{
    MyCall = new Callsign("N0CALL", 0),
});

// A peer connected to us — wire up its inbound-data stream.
listener.SessionAccepted += (_, e) =>
{
    var session = e.Session;
    session.DataLinkSignalEmitted += (_, signal) =>
    {
        if (signal is DataLinkDataIndication data)
        {
            // Echo whatever the peer sent straight back.
            listener.SendData(session, data.Info);
        }
    };
};

await listener.StartAsync();

// Originate an outbound connection, then send some data on it.
var outbound = await listener.ConnectAsync(new Callsign("Q0PDN", 0));
listener.SendData(outbound, "hello over AX.25"u8.ToArray());

Need just the codec? Build and parse frames directly, no session machinery:

using Packet.Ax25;
using Packet.Core;

// Build a connectionless UI (unproto) frame.
var ui = Ax25Frame.Ui(
    destination: new Callsign("AA1AA", 0),
    source: new Callsign("N0CALL", 0),
    info: "73"u8,
    pid: Ax25Frame.PidNoLayer3);
byte[] kissBytes = ui.ToBytes();        // body only — a KISS TNC adds the FCS
byte[] axudpBytes = ui.ToBytesWithFcs(); // body + CRC-16-CCITT, for AXUDP / AXIP

// Parse a frame back from its on-the-wire (KISS-form) bytes.
if (Ax25Frame.TryParse(kissBytes, out var frame) && frame.IsUi)
{
    Console.WriteLine($"{frame.Source.Callsign} -> {frame.Destination.Callsign}");
}

Key types

  • Ax25Frame - one AX.25 frame; codec for U/S/I/UI frames (mod-8 and extended mod-128), TryParse / ToBytes / ToBytesWithFcs, plus static factories (Ui, Sabm, Sabme, Disc, Ua, Dm, Rr, Rej, Srej, I, Xid, Test, …).
  • Ax25FrameType - the wire type read off the control octet (Ax25Frame.FrameType, Ax25Frame.FrameTypeOf), valid under either modulo; Ax25Pid names the §3.4 protocol identifiers.
  • Ax25LinkObserver (Packet.Ax25.Monitor) - a third party's reading of the links in heard traffic: feed it every frame on a port and it groups them by callsign pair, narrates each one in plain words ("calls M0LTE-9 again (attempt 3)", "asks GB7RDG-2 to resend from #3") with flags for resends, polls, rejects and digipeated copies, and snapshots every link's state and counters. For monitors and dashboards, not for running a link.
  • Ax25Listener - owns one IAx25Transport; accepts inbound SABM, originates ConnectAsync, caches a session per peer (LRU), and exposes SessionAccepted / FrameTraced events. The node-style entry point.
  • Ax25ListenerOptions - listener config: MyCall, timer overrides (T1V/T2/T3/N2/K), MaxCachedPeers, ParseOptions, Quirks, extended-mode preference.
  • Ax25Session - one connected-mode link's state machine; exposes CurrentState, Context, and the DataLinkSignalEmitted upward-signal stream.
  • DataLinkSignal - the upward signal record hierarchy (DataLinkConnectIndication, DataLinkDataIndication, DataLinkDisconnectIndication, DataLinkErrorIndication, …).
  • Ax25ParseOptions - strict-vs-lenient parser knobs (named flags for real-world-peer leniencies); Ax25SessionQuirks - named per-session deviations matching buggy reference implementations.
  • Ax25Adapter - lower-level glue wiring an Ax25Session + dispatcher to a byte sink, for callers who don't want the full listener.

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 (6)

Showing the top 5 NuGet packages that depend on Packet.Ax25:

Package Downloads
pdn-soundmodem

Headless soundcard packet modem core: IL2P/AX.25 framing and FEC now; demodulators, KISS TCP and DCD to follow.

Packet.Kiss

KISS (Keep It Simple, Stupid) framing encoder/decoder, ACKMODE handling, multi-drop port support, and TCP transport. Decodes KISS-Data payloads into typed Ax25Frame events. Pair with Packet.Ax25 for connected-mode sessions. Source: github.com/packet-net/packet.net.

Packet.Kiss.NinoTnc

NinoTNC-specific KISS extensions for the Packet.NET stack — ACKMODE TX-completion correlation, SETHW mode switching, TX-Test frame classification, USB port discovery. Built on Packet.Kiss.Serial for generic serial-port plumbing. Source: github.com/packet-net/packet.net.

Packet.Axudp

AXUDP transport for the Packet.NET stack: AxudpSocket, a bidirectional AX.25-over-IP (RFC 1226) endpoint that UDP-encapsulates AX.25 frames. It unconditionally appends + validates the 2-octet AX.25 FCS (CRC-16-CCITT) exactly as every real AXIP/AXUDP peer does (ax25ipd, LinBPQ BPQAXIP, XRouter), with a raw escape hatch for replaying captures. Source: github.com/packet-net/packet.net.

Packet.NetRom

NET/ROM networking for the Packet.NET stack: the L3 routing layer (NODES broadcasts, routing table + quality model), the L4 circuit state machine (CircuitManager / NetRomCircuit), and the INP3 time-routing overlay (L3RTT, RIF/RIP) — with BPQ / XRouter / Strict / Lenient quirk profiles pinned to real on-air behaviour. Build a .NET NET/ROM node or router on top of Packet.Ax25. Source: github.com/packet-net/packet.net.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.36.0 105 9/7/2026
0.35.0 108 9/6/2026
0.34.0 104 9/5/2026
0.33.0 302 9/3/2026
0.32.0 144 9/3/2026
0.31.0 166 9/2/2026
0.30.0 174 8/23/2026
0.29.0 178 8/22/2026
0.28.0 171 8/22/2026
0.27.0 181 8/17/2026
0.26.0 178 8/17/2026
0.25.0 187 8/3/2026
0.24.0 181 7/20/2026
0.23.0 209 7/14/2026
0.22.0 179 7/14/2026
0.21.0 192 7/9/2026
0.20.0 182 7/5/2026
0.19.0 188 7/5/2026
0.18.0 179 7/5/2026
0.17.0 178 6/23/2026
Loading failed