<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.ampr.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=KI5QKX</id>
	<title>44Net Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ampr.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=KI5QKX"/>
	<link rel="alternate" type="text/html" href="https://wiki.ampr.org/wiki/Special:Contributions/KI5QKX"/>
	<updated>2026-06-05T21:58:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=Tunnel&amp;diff=2618</id>
		<title>Tunnel</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=Tunnel&amp;diff=2618"/>
		<updated>2026-05-28T21:47:14Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: KI5QKX moved page Tunnel to Term:Tunnel: Moving standalone term page into term namespace&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Term:Tunnel]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=Term:Tunnel&amp;diff=2617</id>
		<title>Term:Tunnel</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=Term:Tunnel&amp;diff=2617"/>
		<updated>2026-05-28T21:47:14Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: KI5QKX moved page Tunnel to Term:Tunnel: Moving standalone term page into term namespace&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: [https://en.wikipedia.org/wiki/IP_tunnel]:&lt;br /&gt;
&lt;br /&gt;
An IP tunnel is an Internet Protocol (IP) network communications channel between two networks. It is used to transport another network protocol by encapsulation of its packets.&lt;br /&gt;
&lt;br /&gt;
IP tunnels are often used for connecting two disjoint IP networks that don&#039;t have a native routing path to each other, via an underlying routable protocol across an intermediate transport network.&lt;br /&gt;
&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Participation Methods]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=RFC_790&amp;diff=2615</id>
		<title>RFC 790</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=RFC_790&amp;diff=2615"/>
		<updated>2026-05-05T19:28:18Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE: RFC 790 - Assigned Numbers}}&lt;br /&gt;
&lt;br /&gt;
[http://www.rfc-editor.org/rfc/rfc790.txt RFC 790] is a [https://en.wikipedia.org/wiki/Request_for_Comments “Request For Comments” (RFC)] document that lists protocol numbers, port numbers, and IP addresses assigned in the early days of what would become the Internet. It is the document that first established the assignment of network 44 for amateur radio purposes.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
Before the modern Internet, what was then known as ARPANET was administered somewhat manually. Whenever there was a new development concerning the network, like a new protocol, application, or network assignment, an RFC document proposing the change would be typewritten and circulated among the network operators. If there was general agreement, the change was adopted.&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Jon_Postel Jon Postel] at the University of Southern California&#039;s [https://en.wikipedia.org/wiki/USC_Information_Sciences_Institute Information Sciences Institute (USC-ISI)] served as editor of the RFC series from its inception in 1969 until his death in 1998. During that time, if someone needed a new network assigned, he would generally be the one to assign it.&lt;br /&gt;
&lt;br /&gt;
In 1981, seeing an opportunity to support the amateur packet radio networks emerging along the west coast, [https://en.wikipedia.org/wiki/Hank_Magnuski Hank Magnuski] (now KA6M) contacted Postel to ask about setting a network aside for amateur radio use. Jon agreed. The next available number for a network was 44.&lt;br /&gt;
&lt;br /&gt;
Postel included the assignment of network 44 for amateur radio use in RFC 790, published in September 1981, and network 44 was born.&lt;br /&gt;
&lt;br /&gt;
== Errors ==&lt;br /&gt;
&lt;br /&gt;
The document makes two small mistakes related to network 44. It misspells “amateur” as “amature,” and it shows networks 44 through 126 as “unassigned,” even though network 44 was assigned on the immediately preceding line.&lt;br /&gt;
&lt;br /&gt;
RFCs are archival and not retroactively corrected in place. When ARDC publishes images or copies of RFC 790 in relation to the creation of network 44, it preserves these errors as part of the historical record.&lt;br /&gt;
&lt;br /&gt;
[[Category: Explanation]]&lt;br /&gt;
[[Category: History]]&lt;br /&gt;
[[Category: Reference]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=RFC_790&amp;diff=2614</id>
		<title>RFC 790</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=RFC_790&amp;diff=2614"/>
		<updated>2026-05-05T19:27:11Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE: RFC 790 - Assigned Numbers}}&lt;br /&gt;
&lt;br /&gt;
[http://www.rfc-editor.org/rfc/rfc790.txt RFC 790] is a [https://en.wikipedia.org/wiki/Request_for_Comments “Request For Comments” (RFC)] document that lists protocol numbers, port numbers, and IP addresses assigned in the early days of what would become the Internet. It is the document that first established the assignment of network 44 for amateur radio purposes.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
Before the Internet came to exist as we know it today, what was then known as ARPANET was administered somewhat manually. Whenever there was a new development concerning the network, like a new protocol, application, or network assignment, an RFC document proposing the change would be typewritten and circulated among the network operators. If there was general agreement, the change was adopted.&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Jon_Postel Jon Postel] at the University of Southern California&#039;s [https://en.wikipedia.org/wiki/USC_Information_Sciences_Institute Information Sciences Institute (USC-ISI)] served as editor of the RFC series from its inception in 1969 until his death in 1998. During that time, if someone needed a new network assigned, he would generally be the one to assign it.&lt;br /&gt;
&lt;br /&gt;
In 1981, seeing an opportunity to support the amateur packet radio networks emerging along the west coast, [https://en.wikipedia.org/wiki/Hank_Magnuski Hank Magnuski] (now KA6M) contacted Postel to ask about setting a network aside for amateur radio use. Jon agreed. The next available number for a network was 44.&lt;br /&gt;
&lt;br /&gt;
Postel included the assignment of network 44 for amateur radio use in RFC 790, published in September 1981, and network 44 was born.&lt;br /&gt;
&lt;br /&gt;
== Errors ==&lt;br /&gt;
&lt;br /&gt;
The document makes two small mistakes related to network 44. It misspells “amateur” as “amature,” and it shows networks 44 through 126 as “unassigned,” even though network 44 was assigned on the immediately preceding line.&lt;br /&gt;
&lt;br /&gt;
RFCs are archival and not retroactively corrected in place. When ARDC publishes images or copies of RFC 790 in relation to the creation of network 44, it preserves these errors as part of the historical record.&lt;br /&gt;
&lt;br /&gt;
[[Category: Explanation]]&lt;br /&gt;
[[Category: History]]&lt;br /&gt;
[[Category: Reference]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/Developing_user-space_tools&amp;diff=2613</id>
		<title>AX.25 on Linux/Developing user-space tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/Developing_user-space_tools&amp;diff=2613"/>
		<updated>2026-05-02T19:55:16Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Developing user-space tools}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article: [[AX.25 on Linux]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Following the removal of AX.25 from the Linux kernel, there is an opportunity for new user-space tools to fill the gap for various AX.25 use cases. Many of the building blocks already exist in open source. &lt;br /&gt;
&lt;br /&gt;
Before starting a brand-new user-space AX.25 project, it might be worth looking first at software that already does some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging applications&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries like TUN/TAP&lt;br /&gt;
&lt;br /&gt;
Here are some open-source projects that might be worth looking at. This is not an exhaustive list.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page or repo&lt;br /&gt;
! Technical scope&lt;br /&gt;
! Why it might be worth looking at&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ, BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| AX.25 stack, node/BBS and APRS applications, KISS, multi-interface and IP integration&lt;br /&gt;
| Reference for a broad all-in-one user-space packet-radio environment&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| AX.25 stack, node/BBS, APRS, and messaging applications, KISS, AXIP, AXUDP&lt;br /&gt;
| Reference for structuring a nearly complete packet-radio stack in user space&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Modem/TNC functions, AX.25 framing, KISS, AGWPE, APRS tooling&lt;br /&gt;
| Clear reference for a maintained user-space TNC and host-side interface layer&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| Modem/TNC functions; serial KISS or Linux AX.25 integration&lt;br /&gt;
| Reference for an older Linux soundmodem design that can operate either through serial KISS or kernel AX.25&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| Modem/TNC functions, KISS, AGWPE&lt;br /&gt;
| Another example of a user-space software-TNC design exposing standard host interfaces&lt;br /&gt;
|-&lt;br /&gt;
| tncattach&lt;br /&gt;
| [https://github.com/markqvist/tncattach GitHub]&lt;br /&gt;
| KISS-based Linux network-device integration for IP and Ethernet-style networking&lt;br /&gt;
| Reference for bridging a KISS TNC to a Linux network device without the old AX.25 kernel stack&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging application, AX.25 support, AGWPE&lt;br /&gt;
| Useful example of integrating AX.25 support into a modern end-user application&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS application, iGate and digipeater functions&lt;br /&gt;
| Reference for a focused application that avoids general-purpose kernel AX.25 dependencies&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS application and related tooling&lt;br /&gt;
| Example of an application-layer design that works through external TNC interfaces&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/Developing_user-space_tools&amp;diff=2612</id>
		<title>AX.25 on Linux/Developing user-space tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/Developing_user-space_tools&amp;diff=2612"/>
		<updated>2026-05-02T19:54:29Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Developing user-space tools}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article: [[AX.25 on Linux]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Following the removal of AX.25 from the Linux kernel, there is an opportunity for new user-space tools to fill the gap for various AX.25 use cases. Many of the building blocks already exist in open source. &lt;br /&gt;
&lt;br /&gt;
Before starting a brand-new user-space AX.25 project, it might be worth looking first at software that already does some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging applications&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries like TUN/TAP&lt;br /&gt;
&lt;br /&gt;
Here are some open-source projects that might be worth inspecting. This is not an exhaustive list.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page or repo&lt;br /&gt;
! Technical scope&lt;br /&gt;
! Why inspect it&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ, BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| AX.25 stack, node/BBS and APRS applications, KISS, multi-interface and IP integration&lt;br /&gt;
| Reference for a broad all-in-one user-space packet-radio environment&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| AX.25 stack, node/BBS, APRS, and messaging applications, KISS, AXIP, AXUDP&lt;br /&gt;
| Reference for structuring a nearly complete packet-radio stack in user space&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Modem/TNC functions, AX.25 framing, KISS, AGWPE, APRS tooling&lt;br /&gt;
| Clear reference for a maintained user-space TNC and host-side interface layer&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| Modem/TNC functions; serial KISS or Linux AX.25 integration&lt;br /&gt;
| Reference for an older Linux soundmodem design that can operate either through serial KISS or kernel AX.25&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| Modem/TNC functions, KISS, AGWPE&lt;br /&gt;
| Another example of a user-space software-TNC design exposing standard host interfaces&lt;br /&gt;
|-&lt;br /&gt;
| tncattach&lt;br /&gt;
| [https://github.com/markqvist/tncattach GitHub]&lt;br /&gt;
| KISS-based Linux network-device integration for IP and Ethernet-style networking&lt;br /&gt;
| Reference for bridging a KISS TNC to a Linux network device without the old AX.25 kernel stack&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging application, AX.25 support, AGWPE&lt;br /&gt;
| Useful example of integrating AX.25 support into a modern end-user application&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS application, iGate and digipeater functions&lt;br /&gt;
| Reference for a focused application that avoids general-purpose kernel AX.25 dependencies&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS application and related tooling&lt;br /&gt;
| Example of an application-layer design that works through external TNC interfaces&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/IP_over_AX.25&amp;diff=2611</id>
		<title>AX.25 on Linux/IP over AX.25</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/IP_over_AX.25&amp;diff=2611"/>
		<updated>2026-05-02T19:52:18Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:IP over AX.25}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article: [[AX.25 on Linux]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If your goal with AX.25 on Linux is specifically IP over AX.25, the removal of AX.25 from the Linux kernel has narrowed the range of options.&lt;br /&gt;
&lt;br /&gt;
The [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ upstream discussion] explicitly points out that IP over AX.25 can, in principle, be handled from user space, as via TUN/TAP integration, rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, end users may need to stay on an older kernel until a user-space solution emerges. Interested developers might look into this as an area for contributions to new or existing projects.&lt;br /&gt;
&lt;br /&gt;
One current project that might be relevant for IP over amateur radio projects is [https://github.com/markqvist/tncattach tncattach], a separate user-space tool that creates a Linux network interface from a KISS-compatible TNC without relying on the old kernel AX.25 stack.&lt;br /&gt;
&lt;br /&gt;
It is not a user-space replacement for the old Linux AX.25 stack, and it should not be understood as preserving the historic Linux AX.25 interface model. It is aimed instead at IP or Ethernet-style networking over a TNC. If your main use of &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; was simply to turn a KISS TNC into a Linux network device for IP networking, then &amp;lt;code&amp;gt;tncattach&amp;lt;/code&amp;gt; may be worth a look.&lt;br /&gt;
&lt;br /&gt;
It may also be a useful reference point for future development. Even if it does not solve every AX.25-specific use case by itself, it shows one way to bridge a KISS-compatible TNC to a Linux network device without the old kernel stack, and that approach could potentially be extended further or incorporated into other projects.&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/IP_over_AX.25&amp;diff=2610</id>
		<title>AX.25 on Linux/IP over AX.25</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/IP_over_AX.25&amp;diff=2610"/>
		<updated>2026-05-02T19:51:56Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:IP over AX.25}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article: [[AX.25 on Linux]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If your goal with AX.25 on Linux is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ upstream discussion] explicitly points out that IP over AX.25 can, in principle, be handled from user space, as via TUN/TAP integration, rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, end users may need to stay on an older kernel until a user-space solution emerges. Interested developers might look into this as an area for contributions to new or existing projects.&lt;br /&gt;
&lt;br /&gt;
One current project that might be relevant for IP over amateur radio projects is [https://github.com/markqvist/tncattach tncattach], a separate user-space tool that creates a Linux network interface from a KISS-compatible TNC without relying on the old kernel AX.25 stack.&lt;br /&gt;
&lt;br /&gt;
It is not a user-space replacement for the old Linux AX.25 stack, and it should not be understood as preserving the historic Linux AX.25 interface model. It is aimed instead at IP or Ethernet-style networking over a TNC. If your main use of &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; was simply to turn a KISS TNC into a Linux network device for IP networking, then &amp;lt;code&amp;gt;tncattach&amp;lt;/code&amp;gt; may be worth a look.&lt;br /&gt;
&lt;br /&gt;
It may also be a useful reference point for future development. Even if it does not solve every AX.25-specific use case by itself, it shows one way to bridge a KISS-compatible TNC to a Linux network device without the old kernel stack, and that approach could potentially be extended further or incorporated into other projects.&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/Migration_options&amp;diff=2609</id>
		<title>AX.25 on Linux/Migration options</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/Migration_options&amp;diff=2609"/>
		<updated>2026-05-02T19:50:32Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Migration options}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article: [[AX.25 on Linux]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you are affected by the removal of AX.25 from the Linux kernel and need to migrate, there are several approaches you can take.&lt;br /&gt;
&lt;br /&gt;
The table below shows what common software expects and what you can do going forward. It is meant to be illustrative rather than exhaustive. For any software, the general pattern is:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE over serial or network interfaces, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint using a supported protocol.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there will not be a direct drop-in migration path on newer kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Migration approach&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ]&lt;br /&gt;
| Implements full stack and applications; can work with KISS and AGW-compatible software&lt;br /&gt;
| Use its built-in applications, or integrate it through the interfaces it supports&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Implements full stack and applications; KISS-oriented, with AXIP and AXUDP support&lt;br /&gt;
| Use its built-in applications, or integrate it through KISS-oriented links&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm UZ7HO SoundModem]&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| Pluggable AX.25 engine; AGWPE support&lt;br /&gt;
| AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| KISS, AGWPE, or Linux kernel AX.25 interfaces&lt;br /&gt;
| KISS or AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| KISS or Linux kernel AX.25 interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| External TNC or serial interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually pseudo-tty KISS, TCP KISS, or external TNC&lt;br /&gt;
| Native KISS-capable software&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| Linux AX.25 APRS digipeater&lt;br /&gt;
| APRS-specific replacement like aprx or other APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel configuration tools&lt;br /&gt;
| No direct equivalent; keep only in legacy environments or replace with user-space TNC tooling&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel user applications, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Application-specific replacement like LinBPQ, JNOS, Pat, or APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts Linux kernel AX.25 interfaces into pseudo-tty KISS&lt;br /&gt;
| No direct equivalent; replace the kernel-binding pattern with a native KISS or AGWPE source&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2608</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2608"/>
		<updated>2026-05-02T19:48:01Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This affects systems and applications that depend on Linux kernel AX.25 interfaces, but it does not mean AX.25 packet radio on Linux is going away.&lt;br /&gt;
&lt;br /&gt;
== In this guide ==&lt;br /&gt;
&lt;br /&gt;
* [[AX.25 on Linux/Kernel vs user space]]: How the old kernel model differs from the user space model&lt;br /&gt;
* [[AX.25 on Linux/Migration options]]: Common software and migration approaches&lt;br /&gt;
* [[AX.25 on Linux/IP over AX.25]]: Possible directions for IP networking over AX.25&lt;br /&gt;
* [[AX.25 on Linux/Developing user-space tools]]: Design considerations for new work&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
* If your setup uses KISS or AGWPE to talk to a software TNC, hardware TNC, or packet-radio application, you are probably not affected by the kernel removal.&lt;br /&gt;
* If your setup uses Linux AX.25 interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, it will not keep working unchanged on future kernels.&lt;br /&gt;
* Nothing breaks immediately just because the upstream kernel changed. Existing systems keep working until you update them to a kernel released after the change.&lt;br /&gt;
&lt;br /&gt;
This page explains what changed, how to tell whether your station depends on that older model, and what practical options exist now.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Mainline Linux no longer includes the traditional Linux AX.25, Net/ROM, and ROSE stack.&lt;br /&gt;
* Existing documentation that assumes &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; will no longer apply to systems running newer kernels.&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run unchanged on newer kernels.&lt;br /&gt;
* Software that talks directly to KISS, AGWPE, serial TNCs, TCP TNCs, or its own built-in AX.25 implementation may continue to work without the kernel AX.25 stack.&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
This change happened in “upstream Linux” first, referring to the mainline Linux kernel project. Distributions like Debian, Ubuntu, and Fedora decide for themselves when to ship newer kernels, and long-term-support distributions may stay on older kernel lines for quite a while.&lt;br /&gt;
&lt;br /&gt;
That means this probably is not hitting most existing stations tomorrow. In many cases, you will keep working until your distribution moves you to a kernel that no longer includes the in-tree AX.25 code, whether that happens in a major distribution upgrade or in a later kernel update.&lt;br /&gt;
&lt;br /&gt;
So you have some time to plan, but you may want to pay attention to updates that include newer kernels.&lt;br /&gt;
&lt;br /&gt;
== Am I affected? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if your setup uses the Linux kernel AX.25 model. Probably not, if you use software that talks to devices directly.&lt;br /&gt;
&lt;br /&gt;
You are probably using the kernel AX.25 stack if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application is configured to use a Linux AX.25 port or interface rather than KISS, AGWPE, serial, TCP, or a built-in packet engine&lt;br /&gt;
&lt;br /&gt;
You are probably using a user-space approach if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application has its own AX.25 support built in, as many APRS tools do&lt;br /&gt;
* Your applications talk to KISS or AGWPE directly, whether to a software TNC, hardware TNC, or another packet-radio program&lt;br /&gt;
&lt;br /&gt;
If you are not sure, look at how your application is configured. KISS or AGWPE options are a good sign.&lt;br /&gt;
&lt;br /&gt;
== What should I do? ==&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are a few paths: keep the system running as it is, reconfigure applications around a different host-side interface, or replace part of the stack. &lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use anything else. You may be looking at anything from replacing one piece to rebuilding your stack from top to bottom. Depending on your goals, you might consider moving to something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You might also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
There is always the option of resurrecting or re-implementing the old kernel code; the kernel maintainers have not ruled out merging up-to-date code back in. If you have the technical interest and motivation, there’s nothing to stop you. &lt;br /&gt;
&lt;br /&gt;
The state of maintenance for the code that was just removed and the state of development in other tools might be considerations when evaluating this path. ARDC did fund [https://www.ardc.net/apply/grants/2021-grants/grant-fixing-the-linux-kernel-ax-25/ an effort related to AX.25 in the kernel] that encountered unexpected challenges and was not able to proceed. &lt;br /&gt;
&lt;br /&gt;
New coding tools may make this a more approachable project than it might have been in the past, with some caveats noted in the [https://docs.kernel.org/process/index.html#an-introduction-to-how-kernel-development-works Linux kernel development documentation], particularly around [https://docs.kernel.org/process/coding-assistants.html the use of large language models].&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
=== ARDC groups.io discussions ===&lt;br /&gt;
&lt;br /&gt;
* [https://ardc.groups.io/g/community/topic/119004386 Boudewijn VE3TOK’s thread and discussion about paths forward]&lt;br /&gt;
* [https://ardc.groups.io/g/community/topic/119004386 Bernard F6BVP’s retrospective and thoughts on the change]&lt;br /&gt;
&lt;br /&gt;
=== Kernel discussions ===&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 21, 2026 patch], proposing removal of the in-tree amateur-radio networking subsystem&lt;br /&gt;
* [https://lore.kernel.org/lkml/20260423235422.1541768-1-kuba@kernel.org/ Jakub Kicinski’s April 23, 2026 pull-request thread], with more discussion&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch], noting that AX.25, ROSE, and NET/ROM have been removed upstream&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction], including TUN/TAP for IP over AX.25&lt;br /&gt;
&lt;br /&gt;
=== Independent coverage ===&lt;br /&gt;
&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026], summarizing the broader kernel code-removal effort&lt;br /&gt;
* [https://www.phoronix.com/news/Linux-7.1-PR-Remove-Old-Net Phoronix coverage from April 24, 2026], on the pull request removing legacy networking code, including AX.25&lt;br /&gt;
&lt;br /&gt;
=== Repositories and source trees ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
&lt;br /&gt;
=== Older HOWTOs ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter VE3ICH’s 2001 Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
=== Protocol references ===&lt;br /&gt;
&lt;br /&gt;
* [https://files.tapr.org/tech_docs/AX25/AX25.2.2.1997.pdf AX.25 Link Access Protocol for Amateur Packet Radio, Version 2.2]&lt;br /&gt;
* [https://ax25.net/ AX.25 Layer 2]&lt;br /&gt;
* [https://www.on7lds.net/42/sites/default/files/AGWPEAPI.HTM AGWPE TCP/IP API reference]&lt;br /&gt;
* [https://github.com/wb2osz/direwolf/blob/master/doc/AX25_plus_FEC_equals_FX25.pdf Dire Wolf’s AX.25 framing and FEC documentation]&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/Migration_options&amp;diff=2607</id>
		<title>AX.25 on Linux/Migration options</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/Migration_options&amp;diff=2607"/>
		<updated>2026-05-02T19:48:01Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Migration options}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article: [[AX.25 on Linux]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you are affected and need to migrate, there are several approaches you can take.&lt;br /&gt;
&lt;br /&gt;
The table below shows what common software expects and what you can do going forward. It is meant to be illustrative rather than exhaustive. For any software, the general pattern is:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE over serial or network interfaces, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint using a supported protocol.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there will not be a direct drop-in migration path on newer kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Migration approach&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ]&lt;br /&gt;
| Implements full stack and applications; can work with KISS and AGW-compatible software&lt;br /&gt;
| Use its built-in applications, or integrate it through the interfaces it supports&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Implements full stack and applications; KISS-oriented, with AXIP and AXUDP support&lt;br /&gt;
| Use its built-in applications, or integrate it through KISS-oriented links&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm UZ7HO SoundModem]&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| Pluggable AX.25 engine; AGWPE support&lt;br /&gt;
| AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| KISS, AGWPE, or Linux kernel AX.25 interfaces&lt;br /&gt;
| KISS or AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| KISS or Linux kernel AX.25 interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| External TNC or serial interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually pseudo-tty KISS, TCP KISS, or external TNC&lt;br /&gt;
| Native KISS-capable software&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| Linux AX.25 APRS digipeater&lt;br /&gt;
| APRS-specific replacement like aprx or other APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel configuration tools&lt;br /&gt;
| No direct equivalent; keep only in legacy environments or replace with user-space TNC tooling&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel user applications, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Application-specific replacement like LinBPQ, JNOS, Pat, or APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts Linux kernel AX.25 interfaces into pseudo-tty KISS&lt;br /&gt;
| No direct equivalent; replace the kernel-binding pattern with a native KISS or AGWPE source&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/Kernel_vs_user_space&amp;diff=2606</id>
		<title>AX.25 on Linux/Kernel vs user space</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/Kernel_vs_user_space&amp;diff=2606"/>
		<updated>2026-05-02T19:48:01Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Kernel vs. user space}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article: [[AX.25 on Linux]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This section provides background on how AX.25 has been implemented on Linux and why the kernel change affects some systems but not others.&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
An understanding of the difference between in-kernel and user-space implementations of AX.25 is helpful when considering the impact of the kernel code removal and the options for moving forward.&lt;br /&gt;
&lt;br /&gt;
=== In-kernel AX.25 ===&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file named and described AX.25 ports for the Linux AX.25 tools, while utilities like &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; connected a KISS TNC or pseudo-tty to the kernel stack and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, network applications could interact with it like any other network interface, and code in the kernel would handle AX.25 framing and interacting with the TNC using [https://www.ka9q.net/papers/kiss.html the KISS protocol].&lt;br /&gt;
&lt;br /&gt;
=== User-space AX.25 ===&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio by various means, and it in turn provides a KISS, AGWPE, TCP, or other interface for other applications to use. This is less like a device driver and more like a server daemon that client applications can connect to.&lt;br /&gt;
&lt;br /&gt;
Much of the current packet-radio software ecosystem already works this way. APRS clients, software TNCs, and all-in-one environments often keep AX.25 framing and packet-radio behavior in user space, then expose KISS, AGWPE, TCP, serial, or application-specific interfaces to the rest of the shack.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can cover many common packet-radio uses. It can also be more flexible, easier to maintain, and more portable, since it does not depend on specific kernel versions or interfaces and can be developed independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you will see are outdated or inapplicable. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. Rather than looking into AX.25 per se, it may be more helpful to investigate specific applications and see how they use AX.25 for things like APRS and messaging.&lt;br /&gt;
&lt;br /&gt;
== If you are more established ==&lt;br /&gt;
&lt;br /&gt;
If you have an existing station, the first step is to determine whether it depends on the kernel AX.25 stack. If it does, you will need to consider how to freeze, reconfigure, or replace part of your station to keep it working on newer kernels. If it does not, you may be able to keep using your station as it is without worrying about the kernel change. See [[AX.25 on Linux#Am I affected?|Am I affected?]] for tips on how to tell.&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/Developing_user-space_tools&amp;diff=2605</id>
		<title>AX.25 on Linux/Developing user-space tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/Developing_user-space_tools&amp;diff=2605"/>
		<updated>2026-05-02T19:48:00Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Developing user-space tools}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article: [[AX.25 on Linux]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This section is primarily relevant to developers or those evaluating new work in the packet-radio ecosystem.&lt;br /&gt;
&lt;br /&gt;
AX.25 may be considered active enough to justify new user-space implementations. Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 project, it might be worth looking first at software that already does some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging applications&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries like TUN/TAP&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page or repo&lt;br /&gt;
! Technical scope&lt;br /&gt;
! Why inspect it&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ, BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| AX.25 stack, node/BBS and APRS applications, KISS, multi-interface and IP integration&lt;br /&gt;
| Reference for a broad all-in-one user-space packet-radio environment&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| AX.25 stack, node/BBS, APRS, and messaging applications, KISS, AXIP, AXUDP&lt;br /&gt;
| Reference for structuring a nearly complete packet-radio stack in user space&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Modem/TNC functions, AX.25 framing, KISS, AGWPE, APRS tooling&lt;br /&gt;
| Clear reference for a maintained user-space TNC and host-side interface layer&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| Modem/TNC functions; serial KISS or Linux AX.25 integration&lt;br /&gt;
| Reference for an older Linux soundmodem design that can operate either through serial KISS or kernel AX.25&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| Modem/TNC functions, KISS, AGWPE&lt;br /&gt;
| Another example of a user-space software-TNC design exposing standard host interfaces&lt;br /&gt;
|-&lt;br /&gt;
| tncattach&lt;br /&gt;
| [https://github.com/markqvist/tncattach GitHub]&lt;br /&gt;
| KISS-based Linux network-device integration for IP and Ethernet-style networking&lt;br /&gt;
| Reference for bridging a KISS TNC to a Linux network device without the old AX.25 kernel stack&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging application, AX.25 support, AGWPE&lt;br /&gt;
| Useful example of integrating AX.25 support into a modern end-user application&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS application, iGate and digipeater functions&lt;br /&gt;
| Reference for a focused application that avoids general-purpose kernel AX.25 dependencies&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS application and related tooling&lt;br /&gt;
| Example of an application-layer design that works through external TNC interfaces&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/IP_over_AX.25&amp;diff=2604</id>
		<title>AX.25 on Linux/IP over AX.25</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux/IP_over_AX.25&amp;diff=2604"/>
		<updated>2026-05-02T19:48:00Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:IP over AX.25}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article: [[AX.25 on Linux]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ upstream discussion] explicitly points out that IP over AX.25 can, in principle, be handled from user space, as via TUN/TAP integration, rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, end users may need to stay on an older kernel until a user-space solution emerges. Interested developers might look into this as an area for contributions to new or existing projects.&lt;br /&gt;
&lt;br /&gt;
One current project that might be relevant for IP over amateur radio projects is [https://github.com/markqvist/tncattach tncattach], a separate user-space tool that creates a Linux network interface from a KISS-compatible TNC without relying on the old kernel AX.25 stack.&lt;br /&gt;
&lt;br /&gt;
It is not a user-space replacement for the old Linux AX.25 stack, and it should not be understood as preserving the historic Linux AX.25 interface model. It is aimed instead at IP or Ethernet-style networking over a TNC. If your main use of &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; was simply to turn a KISS TNC into a Linux network device for IP networking, then &amp;lt;code&amp;gt;tncattach&amp;lt;/code&amp;gt; may be worth a look.&lt;br /&gt;
&lt;br /&gt;
It may also be a useful reference point for future development. Even if it does not solve every AX.25-specific use case by itself, it shows one way to bridge a KISS-compatible TNC to a Linux network device without the old kernel stack, and that approach could potentially be extended further or incorporated into other projects.&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2603</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2603"/>
		<updated>2026-05-01T18:02:46Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: fix links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This affects systems and applications that depend on Linux kernel AX.25 interfaces, but it does not mean AX.25 packet radio on Linux is going away.&lt;br /&gt;
&lt;br /&gt;
The short version is:&lt;br /&gt;
&lt;br /&gt;
* If your setup uses KISS or AGWPE to talk to a software TNC, hardware TNC, or packet-radio application, you are probably not affected by the kernel removal.&lt;br /&gt;
* If your setup uses Linux AX.25 interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, it will not keep working unchanged on newer kernels.&lt;br /&gt;
* Nothing breaks immediately just because the upstream kernel changed. Existing systems keep working until you update them to a kernel released after the change.&lt;br /&gt;
&lt;br /&gt;
This page explains what changed, how to tell whether your station depends on that older model, and what practical options exist now.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Mainline Linux no longer includes the traditional Linux AX.25, Net/ROM, and ROSE stack.&lt;br /&gt;
* Existing documentation that assumes &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; will no longer apply to systems running newer kernels.&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run unchanged on newer kernels.&lt;br /&gt;
* Software that talks directly to KISS, AGWPE, serial TNCs, TCP TNCs, or its own built-in AX.25 implementation may continue to work without the kernel AX.25 stack.&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
This change happened in “upstream Linux” first, referring to the mainline Linux kernel project. Distributions like Debian, Ubuntu, and Fedora decide for themselves when to ship newer kernels, and long-term-support distributions may stay on older kernel lines for quite a while.&lt;br /&gt;
&lt;br /&gt;
That means this probably is not hitting most existing stations tomorrow. In many cases, you will keep working until your distribution moves you to a kernel that no longer includes the in-tree AX.25 code, whether that happens in a major distribution upgrade or in a later kernel update.&lt;br /&gt;
&lt;br /&gt;
The practical takeaway is: you likely have some time to plan, but you may want to pay attention to updates that include newer kernels.&lt;br /&gt;
&lt;br /&gt;
== Am I affected? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if your setup uses the Linux kernel AX.25 model. Probably not, if you use software that talks to devices directly.&lt;br /&gt;
&lt;br /&gt;
You are probably using the kernel AX.25 stack if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application is configured to use a Linux AX.25 port or interface rather than KISS, AGWPE, serial, TCP, or a built-in packet engine&lt;br /&gt;
&lt;br /&gt;
You are probably using a user-space approach if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application has its own AX.25 support built in, as many APRS tools do&lt;br /&gt;
* Your applications talk to KISS or AGWPE directly, whether to a software TNC, hardware TNC, or another packet-radio program&lt;br /&gt;
&lt;br /&gt;
If you are not sure, look at how your application is configured. KISS or AGWPE options are usually a good sign. A configuration that refers only to a Linux AX.25 port, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; is a sign that you may need to freeze, reconfigure, or replace part of the station.&lt;br /&gt;
&lt;br /&gt;
== If you already have a working station ==&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are a few paths: keep the system running as it is, reconfigure applications around a different host-side interface, or replace part of the stack. The best choice depends on your specific use case, how much existing software you need to preserve, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at anything from replacing one piece to rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You might also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
There is always the option of resurrecting or re-implementing the old kernel code; the kernel maintainers have not ruled out merging up-to-date code back in. If you have the technical interest and motivation, there’s nothing to stop you. &lt;br /&gt;
&lt;br /&gt;
The state of maintenance for the code that was just removed and the state of development in other tools might be considerations when evaluating this path. ARDC did fund [https://www.ardc.net/apply/grants/2021-grants/grant-fixing-the-linux-kernel-ax-25/ an effort related to AX.25 in the kernel] that encountered unexpected challenges and was not able to proceed. New coding tools may make this a more approachable project than it might have been in the past, with some caveats noted in the [https://docs.kernel.org/process/index.html#an-introduction-to-how-kernel-development-works Linux kernel development documentation], particularly around [https://docs.kernel.org/process/coding-assistants.html the use of large language models].&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
An understanding of the difference between in-kernel and user-space implementations of AX.25 is helpful when considering the impact of the kernel code removal and the options for moving forward.&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file named and described AX.25 ports for the Linux AX.25 tools, while utilities like &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; connected a KISS TNC or pseudo-tty to the kernel stack and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, network applications could interact with it like any other network interface, and code in the kernel would handle AX.25 framing and interacting with the TNC using [https://www.ka9q.net/papers/kiss.html the KISS protocol].&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio by various means, and it in turn provides a KISS, AGWPE, TCP, or other interface for other applications to use. This is less like a device driver and more like a server daemon that client applications can connect to.&lt;br /&gt;
&lt;br /&gt;
Much of the current packet-radio software ecosystem already works this way. APRS clients, software TNCs, and all-in-one environments often keep AX.25 framing and packet-radio behavior in user space, then expose KISS, AGWPE, TCP, serial, or application-specific interfaces to the rest of the shack.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can cover many common packet-radio uses. It can also be more flexible, easier to maintain, and more portable, since it does not depend on specific kernel versions or interfaces and can be developed independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you will see are outdated or inapplicable. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. Rather than looking into AX.25 per se, it may be more helpful to investigate specific applications and see how they use AX.25 for things like APRS and messaging.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The table below shows what common software expects and what you can do going forward. It is meant to be illustrative rather than exhaustive. For any software, the general pattern is:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE over serial or network interfaces, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint using a supported protocol.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there will not be a direct drop-in migration path on newer kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Migration approach&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ]&lt;br /&gt;
| Implements full stack and applications; can work with KISS and AGW-compatible software&lt;br /&gt;
| Use its built-in applications, or integrate it through the interfaces it supports&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Implements full stack and applications; KISS-oriented, with AXIP and AXUDP support&lt;br /&gt;
| Use its built-in applications, or integrate it through KISS-oriented links&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm UZ7HO SoundModem]&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| Pluggable AX.25 engine; AGWPE support&lt;br /&gt;
| AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| KISS, AGWPE, or Linux kernel AX.25 interfaces&lt;br /&gt;
| KISS or AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| KISS or Linux kernel AX.25 interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| External TNC or serial interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually pseudo-tty KISS, TCP KISS, or external TNC&lt;br /&gt;
| Native KISS-capable software&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| Linux AX.25 APRS digipeater&lt;br /&gt;
| APRS-specific replacement like aprx or other APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel configuration tools&lt;br /&gt;
| No direct equivalent; keep only in legacy environments or replace with user-space TNC tooling&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel user applications, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Application-specific replacement like LinBPQ, JNOS, Pat, or APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts Linux kernel AX.25 interfaces into pseudo-tty KISS&lt;br /&gt;
| No direct equivalent; replace the kernel-binding pattern with a native KISS or AGWPE source&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
AX.25 may be considered active enough to justify new user-space implementations. Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 project, it might be worth looking first at software that already does some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging applications&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries like TUN/TAP&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page or repo&lt;br /&gt;
! Technical scope&lt;br /&gt;
! Why inspect it&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ, BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| AX.25 stack, node/BBS and APRS applications, KISS, multi-interface and IP integration&lt;br /&gt;
| Reference for a broad all-in-one user-space packet-radio environment&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| AX.25 stack, node/BBS, APRS, and messaging applications, KISS, AXIP, AXUDP&lt;br /&gt;
| Reference for structuring a nearly complete packet-radio stack in user space&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Modem/TNC functions, AX.25 framing, KISS, AGWPE, APRS tooling&lt;br /&gt;
| Clear reference for a maintained user-space TNC and host-side interface layer&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| Modem/TNC functions; serial KISS or Linux AX.25 integration&lt;br /&gt;
| Reference for an older Linux soundmodem design that can operate either through serial KISS or kernel AX.25&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| Modem/TNC functions, KISS, AGWPE&lt;br /&gt;
| Another example of a user-space software-TNC design exposing standard host interfaces&lt;br /&gt;
|-&lt;br /&gt;
| tncattach&lt;br /&gt;
| [https://github.com/markqvist/tncattach GitHub]&lt;br /&gt;
| KISS-based Linux network-device integration for IP and Ethernet-style networking&lt;br /&gt;
| Reference for bridging a KISS TNC to a Linux network device without the old AX.25 kernel stack&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging application, AX.25 support, AGWPE&lt;br /&gt;
| Useful example of integrating AX.25 support into a modern end-user application&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS application, iGate and digipeater functions&lt;br /&gt;
| Reference for a focused application that avoids general-purpose kernel AX.25 dependencies&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS application and related tooling&lt;br /&gt;
| Example of an application-layer design that works through external TNC interfaces&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ upstream discussion] explicitly points out that IP over AX.25 can, in principle, be handled from user space, as via TUN/TAP integration, rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, end users may need to stay on an older kernel until a user-space solution emerges. Interested developers might look into this as an area for contributions to new or existing projects.&lt;br /&gt;
&lt;br /&gt;
One current project that might be relevant for IP over amateur radio projects is [https://github.com/markqvist/tncattach tncattach], a separate user-space tool that creates a Linux network interface from a KISS-compatible TNC without relying on the old kernel AX.25 stack.&lt;br /&gt;
&lt;br /&gt;
It is not a user-space replacement for the old Linux AX.25 stack, and it should not be understood as preserving the historic Linux AX.25 interface model. It is aimed instead at IP or Ethernet-style networking over a TNC. If your main use of &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; was simply to turn a KISS TNC into a Linux network device for IP networking, then &amp;lt;code&amp;gt;tncattach&amp;lt;/code&amp;gt; may be worth a look.&lt;br /&gt;
&lt;br /&gt;
It may also be a useful reference point for future development. Even if it does not solve every AX.25-specific use case by itself, it shows one way to bridge a KISS-compatible TNC to a Linux network device without the old kernel stack, and that approach could potentially be extended further or incorporated into other projects.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
=== ARDC groups.io discussions ===&lt;br /&gt;
&lt;br /&gt;
* [https://ardc.groups.io/g/community/topic/119004386 Boudewijn VE3TOK’s thread and discussion about paths forward]&lt;br /&gt;
* [https://ardc.groups.io/g/community/topic/119004386 Bernard F6BVP’s retrospective and thoughts on the change]&lt;br /&gt;
&lt;br /&gt;
=== Kernel discussions ===&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 21, 2026 patch], proposing removal of the in-tree amateur-radio networking subsystem&lt;br /&gt;
* [https://lore.kernel.org/lkml/20260423235422.1541768-1-kuba@kernel.org/ Jakub Kicinski’s April 23, 2026 pull-request thread], with more discussion&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch], noting that AX.25, ROSE, and NET/ROM have been removed upstream&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction], including TUN/TAP for IP over AX.25&lt;br /&gt;
&lt;br /&gt;
=== Independent coverage ===&lt;br /&gt;
&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026], summarizing the broader kernel code-removal effort&lt;br /&gt;
* [https://www.phoronix.com/news/Linux-7.1-PR-Remove-Old-Net Phoronix coverage from April 24, 2026], on the pull request removing legacy networking code, including AX.25&lt;br /&gt;
&lt;br /&gt;
=== Repositories and source trees ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
&lt;br /&gt;
=== Older HOWTOs ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter VE3ICH’s 2001 Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
=== Protocol references ===&lt;br /&gt;
&lt;br /&gt;
* [https://files.tapr.org/tech_docs/AX25/AX25.2.2.1997.pdf AX.25 Link Access Protocol for Amateur Packet Radio, Version 2.2]&lt;br /&gt;
* [https://ax25.net/ AX.25 Layer 2]&lt;br /&gt;
* [https://www.on7lds.net/42/sites/default/files/AGWPEAPI.HTM AGWPE TCP/IP API reference]&lt;br /&gt;
* [https://github.com/wb2osz/direwolf/blob/master/doc/AX25_plus_FEC_equals_FX25.pdf Dire Wolf’s AX.25 framing and FEC documentation]&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2602</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2602"/>
		<updated>2026-05-01T18:00:35Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: fix heading typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This affects systems and applications that depend on Linux kernel AX.25 interfaces, but it does not mean AX.25 packet radio on Linux is going away.&lt;br /&gt;
&lt;br /&gt;
The short version is:&lt;br /&gt;
&lt;br /&gt;
* If your setup uses KISS or AGWPE to talk to a software TNC, hardware TNC, or packet-radio application, you are probably not affected by the kernel removal.&lt;br /&gt;
* If your setup uses Linux AX.25 interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, it will not keep working unchanged on newer kernels.&lt;br /&gt;
* Nothing breaks immediately just because the upstream kernel changed. Existing systems keep working until you update them to a kernel released after the change.&lt;br /&gt;
&lt;br /&gt;
This page explains what changed, how to tell whether your station depends on that older model, and what practical options exist now.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Mainline Linux no longer includes the traditional Linux AX.25, Net/ROM, and ROSE stack.&lt;br /&gt;
* Existing documentation that assumes &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; will no longer apply to systems running newer kernels.&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run unchanged on newer kernels.&lt;br /&gt;
* Software that talks directly to KISS, AGWPE, serial TNCs, TCP TNCs, or its own built-in AX.25 implementation may continue to work without the kernel AX.25 stack.&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
This change happened in “upstream Linux” first, referring to the mainline Linux kernel project. Distributions like Debian, Ubuntu, and Fedora decide for themselves when to ship newer kernels, and long-term-support distributions may stay on older kernel lines for quite a while.&lt;br /&gt;
&lt;br /&gt;
That means this probably is not hitting most existing stations tomorrow. In many cases, you will keep working until your distribution moves you to a kernel that no longer includes the in-tree AX.25 code, whether that happens in a major distribution upgrade or in a later kernel update.&lt;br /&gt;
&lt;br /&gt;
The practical takeaway is: you likely have some time to plan, but you may want to pay attention to updates that include newer kernels.&lt;br /&gt;
&lt;br /&gt;
== Am I affected? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if your setup uses the Linux kernel AX.25 model. Probably not, if you use software that talks to devices directly.&lt;br /&gt;
&lt;br /&gt;
You are probably using the kernel AX.25 stack if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application is configured to use a Linux AX.25 port or interface rather than KISS, AGWPE, serial, TCP, or a built-in packet engine&lt;br /&gt;
&lt;br /&gt;
You are probably using a user-space approach if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application has its own AX.25 support built in, as many APRS tools do&lt;br /&gt;
* Your applications talk to KISS or AGWPE directly, whether to a software TNC, hardware TNC, or another packet-radio program&lt;br /&gt;
&lt;br /&gt;
If you are not sure, look at how your application is configured. KISS or AGWPE options are usually a good sign. A configuration that refers only to a Linux AX.25 port, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; is a sign that you may need to freeze, reconfigure, or replace part of the station.&lt;br /&gt;
&lt;br /&gt;
== If you already have a working station ==&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are a few paths: keep the system running as it is, reconfigure applications around a different host-side interface, or replace part of the stack. The best choice depends on your specific use case, how much existing software you need to preserve, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at anything from replacing one piece to rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You might also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
There is always the option of resurrecting or re-implementing the old kernel code; the kernel maintainers have not ruled out merging up-to-date code back in. If you have the technical interest and motivation, there’s nothing to stop you. &lt;br /&gt;
&lt;br /&gt;
The state of maintenance for the code that was just removed and the state of development in other tools might be considerations when evaluating this path. ARDC did fund [https://www.ardc.net/apply/grants/2021-grants/grant-fixing-the-linux-kernel-ax-25/ an effort related to AX.25 in the kernel] that encountered unexpected challenges and was not able to proceed. New coding tools may make this a more approachable project than it might have been in the past, with some caveats noted in the [https://docs.kernel.org/process/index.html#an-introduction-to-how-kernel-development-works Linux kernel development documentation], particularly around [https://docs.kernel.org/process/coding-assistants.html the use of large language models].&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
An understanding of the difference between in-kernel and user-space implementations of AX.25 is helpful when considering the impact of the kernel code removal and the options for moving forward.&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file named and described AX.25 ports for the Linux AX.25 tools, while utilities like &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; connected a KISS TNC or pseudo-tty to the kernel stack and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, network applications could interact with it like any other network interface, and code in the kernel would handle AX.25 framing and interacting with the TNC using [https://www.ka9q.net/papers/kiss.html the KISS protocol].&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio by various means, and it in turn provides a KISS, AGWPE, TCP, or other interface for other applications to use. This is less like a device driver and more like a server daemon that client applications can connect to.&lt;br /&gt;
&lt;br /&gt;
Much of the current packet-radio software ecosystem already works this way. APRS clients, software TNCs, and all-in-one environments often keep AX.25 framing and packet-radio behavior in user space, then expose KISS, AGWPE, TCP, serial, or application-specific interfaces to the rest of the shack.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can cover many common packet-radio uses. It can also be more flexible, easier to maintain, and more portable, since it does not depend on specific kernel versions or interfaces and can be developed independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you will see are outdated or inapplicable. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. Rather than looking into AX.25 per se, it may be more helpful to investigate specific applications and see how they use AX.25 for things like APRS and messaging.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The table below shows what common software expects and what you can do going forward. It is meant to be illustrative rather than exhaustive. For any software, the general pattern is:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE over serial or network interfaces, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint using a supported protocol.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there will not be a direct drop-in migration path on newer kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Migration approach&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ]&lt;br /&gt;
| Implements full stack and applications; can work with KISS and AGW-compatible software&lt;br /&gt;
| Use its built-in applications, or integrate it through the interfaces it supports&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Implements full stack and applications; KISS-oriented, with AXIP and AXUDP support&lt;br /&gt;
| Use its built-in applications, or integrate it through KISS-oriented links&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm UZ7HO SoundModem]&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| Pluggable AX.25 engine; AGWPE support&lt;br /&gt;
| AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| KISS, AGWPE, or Linux kernel AX.25 interfaces&lt;br /&gt;
| KISS or AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| KISS or Linux kernel AX.25 interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| External TNC or serial interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually pseudo-tty KISS, TCP KISS, or external TNC&lt;br /&gt;
| Native KISS-capable software&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| Linux AX.25 APRS digipeater&lt;br /&gt;
| APRS-specific replacement like aprx or other APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel configuration tools&lt;br /&gt;
| No direct equivalent; keep only in legacy environments or replace with user-space TNC tooling&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel user applications, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Application-specific replacement like LinBPQ, JNOS, Pat, or APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts Linux kernel AX.25 interfaces into pseudo-tty KISS&lt;br /&gt;
| No direct equivalent; replace the kernel-binding pattern with a native KISS or AGWPE source&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
AX.25 may be considered active enough to justify new user-space implementations. Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 project, it might be worth looking first at software that already does some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging applications&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries like TUN/TAP&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page or repo&lt;br /&gt;
! Technical scope&lt;br /&gt;
! Why inspect it&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ, BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| AX.25 stack, node/BBS and APRS applications, KISS, multi-interface and IP integration&lt;br /&gt;
| Reference for a broad all-in-one user-space packet-radio environment&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| AX.25 stack, node/BBS, APRS, and messaging applications, KISS, AXIP, AXUDP&lt;br /&gt;
| Reference for structuring a nearly complete packet-radio stack in user space&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Modem/TNC functions, AX.25 framing, KISS, AGWPE, APRS tooling&lt;br /&gt;
| Clear reference for a maintained user-space TNC and host-side interface layer&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| Modem/TNC functions; serial KISS or Linux AX.25 integration&lt;br /&gt;
| Reference for an older Linux soundmodem design that can operate either through serial KISS or kernel AX.25&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| Modem/TNC functions, KISS, AGWPE&lt;br /&gt;
| Another example of a user-space software-TNC design exposing standard host interfaces&lt;br /&gt;
|-&lt;br /&gt;
| tncattach&lt;br /&gt;
| [https://github.com/markqvist/tncattach GitHub]&lt;br /&gt;
| KISS-based Linux network-device integration for IP and Ethernet-style networking&lt;br /&gt;
| Reference for bridging a KISS TNC to a Linux network device without the old AX.25 kernel stack&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging application, AX.25 support, AGWPE&lt;br /&gt;
| Useful example of integrating AX.25 support into a modern end-user application&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS application, iGate and digipeater functions&lt;br /&gt;
| Reference for a focused application that avoids general-purpose kernel AX.25 dependencies&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS application and related tooling&lt;br /&gt;
| Example of an application-layer design that works through external TNC interfaces&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ upstream discussion] explicitly points out that IP over AX.25 can, in principle, be handled from user space, as via TUN/TAP integration, rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, end users may need to stay on an older kernel until a user-space solution emerges. Interested developers might look into this as an area for contributions to new or existing projects.&lt;br /&gt;
&lt;br /&gt;
One current project that might be relevant for IP over amateur radio projects is [https://github.com/markqvist/tncattach tncattach], a separate user-space tool that creates a Linux network interface from a KISS-compatible TNC without relying on the old kernel AX.25 stack.&lt;br /&gt;
&lt;br /&gt;
It is not a user-space replacement for the old Linux AX.25 stack, and it should not be understood as preserving the historic Linux AX.25 interface model. It is aimed instead at IP or Ethernet-style networking over a TNC. If your main use of &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; was simply to turn a KISS TNC into a Linux network device for IP networking, then &amp;lt;code&amp;gt;tncattach&amp;lt;/code&amp;gt; may be worth a look.&lt;br /&gt;
&lt;br /&gt;
It may also be a useful reference point for future development. Even if it does not solve every AX.25-specific use case by itself, it shows one way to bridge a KISS-compatible TNC to a Linux network device without the old kernel stack, and that approach could potentially be extended further or incorporated into other projects.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
=== ARDC groups.io discussions ===&lt;br /&gt;
&lt;br /&gt;
* [https://ardc.groups.io/g/community/topic/119004386 Boudewijn VE3TOK’s thread and discussion about paths forward]&lt;br /&gt;
* [https://ardc.groups.io/g/community/topic/119004386 Bernard F6BVP’s retrospective and thoughts on the change]&lt;br /&gt;
&lt;br /&gt;
=== Kernel discussions ===&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 21, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/lkml/20260423235422.1541768-1-kuba@kernel.org/ Jakub Kicinski’s April 23, 2026 pull-request thread with more discussion]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
&lt;br /&gt;
=== Independent coverage ===&lt;br /&gt;
&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://www.phoronix.com/news/Linux-7.1-PR-Remove-Old-Net Phoronix coverage from April 24, 2026 on the pull request removing legacy networking code, including AX.25]&lt;br /&gt;
&lt;br /&gt;
=== Repositories and source trees ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
&lt;br /&gt;
=== Older HOWTOs ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
=== Protocol references ===&lt;br /&gt;
&lt;br /&gt;
* [https://files.tapr.org/tech_docs/AX25/AX25.2.2.1997.pdf AX.25 Link Access Protocol for Amateur Packet Radio, Version 2.2]&lt;br /&gt;
* [https://ax25.net/ AX.25 Layer 2]&lt;br /&gt;
* [https://www.on7lds.net/42/sites/default/files/AGWPEAPI.HTM AGWPE TCP/IP API reference]&lt;br /&gt;
* [https://github.com/wb2osz/direwolf/blob/master/doc/AX25_plus_FEC_equals_FX25.pdf Dire Wolf’s AX.25 framing and FEC documentation]&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2601</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2601"/>
		<updated>2026-05-01T18:00:00Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: add some 44net mailing list links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This affects systems and applications that depend on Linux kernel AX.25 interfaces, but it does not mean AX.25 packet radio on Linux is going away.&lt;br /&gt;
&lt;br /&gt;
The short version is:&lt;br /&gt;
&lt;br /&gt;
* If your setup uses KISS or AGWPE to talk to a software TNC, hardware TNC, or packet-radio application, you are probably not affected by the kernel removal.&lt;br /&gt;
* If your setup uses Linux AX.25 interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, it will not keep working unchanged on newer kernels.&lt;br /&gt;
* Nothing breaks immediately just because the upstream kernel changed. Existing systems keep working until you update them to a kernel released after the change.&lt;br /&gt;
&lt;br /&gt;
This page explains what changed, how to tell whether your station depends on that older model, and what practical options exist now.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Mainline Linux no longer includes the traditional Linux AX.25, Net/ROM, and ROSE stack.&lt;br /&gt;
* Existing documentation that assumes &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; will no longer apply to systems running newer kernels.&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run unchanged on newer kernels.&lt;br /&gt;
* Software that talks directly to KISS, AGWPE, serial TNCs, TCP TNCs, or its own built-in AX.25 implementation may continue to work without the kernel AX.25 stack.&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
This change happened in “upstream Linux” first, referring to the mainline Linux kernel project. Distributions like Debian, Ubuntu, and Fedora decide for themselves when to ship newer kernels, and long-term-support distributions may stay on older kernel lines for quite a while.&lt;br /&gt;
&lt;br /&gt;
That means this probably is not hitting most existing stations tomorrow. In many cases, you will keep working until your distribution moves you to a kernel that no longer includes the in-tree AX.25 code, whether that happens in a major distribution upgrade or in a later kernel update.&lt;br /&gt;
&lt;br /&gt;
The practical takeaway is: you likely have some time to plan, but you may want to pay attention to updates that include newer kernels.&lt;br /&gt;
&lt;br /&gt;
== Am I affected? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if your setup uses the Linux kernel AX.25 model. Probably not, if you use software that talks to devices directly.&lt;br /&gt;
&lt;br /&gt;
You are probably using the kernel AX.25 stack if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application is configured to use a Linux AX.25 port or interface rather than KISS, AGWPE, serial, TCP, or a built-in packet engine&lt;br /&gt;
&lt;br /&gt;
You are probably using a user-space approach if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application has its own AX.25 support built in, as many APRS tools do&lt;br /&gt;
* Your applications talk to KISS or AGWPE directly, whether to a software TNC, hardware TNC, or another packet-radio program&lt;br /&gt;
&lt;br /&gt;
If you are not sure, look at how your application is configured. KISS or AGWPE options are usually a good sign. A configuration that refers only to a Linux AX.25 port, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; is a sign that you may need to freeze, reconfigure, or replace part of the station.&lt;br /&gt;
&lt;br /&gt;
== If you already have a working station ==&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are a few paths: keep the system running as it is, reconfigure applications around a different host-side interface, or replace part of the stack. The best choice depends on your specific use case, how much existing software you need to preserve, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at anything from replacing one piece to rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You might also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
There is always the option of resurrecting or re-implementing the old kernel code; the kernel maintainers have not ruled out merging up-to-date code back in. If you have the technical interest and motivation, there’s nothing to stop you. &lt;br /&gt;
&lt;br /&gt;
The state of maintenance for the code that was just removed and the state of development in other tools might be considerations when evaluating this path. ARDC did fund [https://www.ardc.net/apply/grants/2021-grants/grant-fixing-the-linux-kernel-ax-25/ an effort related to AX.25 in the kernel] that encountered unexpected challenges and was not able to proceed. New coding tools may make this a more approachable project than it might have been in the past, with some caveats noted in the [https://docs.kernel.org/process/index.html#an-introduction-to-how-kernel-development-works Linux kernel development documentation], particularly around [https://docs.kernel.org/process/coding-assistants.html the use of large language models].&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
An understanding of the difference between in-kernel and user-space implementations of AX.25 is helpful when considering the impact of the kernel code removal and the options for moving forward.&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file named and described AX.25 ports for the Linux AX.25 tools, while utilities like &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; connected a KISS TNC or pseudo-tty to the kernel stack and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, network applications could interact with it like any other network interface, and code in the kernel would handle AX.25 framing and interacting with the TNC using [https://www.ka9q.net/papers/kiss.html the KISS protocol].&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio by various means, and it in turn provides a KISS, AGWPE, TCP, or other interface for other applications to use. This is less like a device driver and more like a server daemon that client applications can connect to.&lt;br /&gt;
&lt;br /&gt;
Much of the current packet-radio software ecosystem already works this way. APRS clients, software TNCs, and all-in-one environments often keep AX.25 framing and packet-radio behavior in user space, then expose KISS, AGWPE, TCP, serial, or application-specific interfaces to the rest of the shack.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can cover many common packet-radio uses. It can also be more flexible, easier to maintain, and more portable, since it does not depend on specific kernel versions or interfaces and can be developed independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you will see are outdated or inapplicable. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. Rather than looking into AX.25 per se, it may be more helpful to investigate specific applications and see how they use AX.25 for things like APRS and messaging.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The table below shows what common software expects and what you can do going forward. It is meant to be illustrative rather than exhaustive. For any software, the general pattern is:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE over serial or network interfaces, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint using a supported protocol.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there will not be a direct drop-in migration path on newer kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Migration approach&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ]&lt;br /&gt;
| Implements full stack and applications; can work with KISS and AGW-compatible software&lt;br /&gt;
| Use its built-in applications, or integrate it through the interfaces it supports&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Implements full stack and applications; KISS-oriented, with AXIP and AXUDP support&lt;br /&gt;
| Use its built-in applications, or integrate it through KISS-oriented links&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm UZ7HO SoundModem]&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| Pluggable AX.25 engine; AGWPE support&lt;br /&gt;
| AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| KISS, AGWPE, or Linux kernel AX.25 interfaces&lt;br /&gt;
| KISS or AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| KISS or Linux kernel AX.25 interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| External TNC or serial interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually pseudo-tty KISS, TCP KISS, or external TNC&lt;br /&gt;
| Native KISS-capable software&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| Linux AX.25 APRS digipeater&lt;br /&gt;
| APRS-specific replacement like aprx or other APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel configuration tools&lt;br /&gt;
| No direct equivalent; keep only in legacy environments or replace with user-space TNC tooling&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel user applications, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Application-specific replacement like LinBPQ, JNOS, Pat, or APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts Linux kernel AX.25 interfaces into pseudo-tty KISS&lt;br /&gt;
| No direct equivalent; replace the kernel-binding pattern with a native KISS or AGWPE source&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
AX.25 may be considered active enough to justify new user-space implementations. Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 project, it might be worth looking first at software that already does some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging applications&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries like TUN/TAP&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page or repo&lt;br /&gt;
! Technical scope&lt;br /&gt;
! Why inspect it&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ, BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| AX.25 stack, node/BBS and APRS applications, KISS, multi-interface and IP integration&lt;br /&gt;
| Reference for a broad all-in-one user-space packet-radio environment&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| AX.25 stack, node/BBS, APRS, and messaging applications, KISS, AXIP, AXUDP&lt;br /&gt;
| Reference for structuring a nearly complete packet-radio stack in user space&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Modem/TNC functions, AX.25 framing, KISS, AGWPE, APRS tooling&lt;br /&gt;
| Clear reference for a maintained user-space TNC and host-side interface layer&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| Modem/TNC functions; serial KISS or Linux AX.25 integration&lt;br /&gt;
| Reference for an older Linux soundmodem design that can operate either through serial KISS or kernel AX.25&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| Modem/TNC functions, KISS, AGWPE&lt;br /&gt;
| Another example of a user-space software-TNC design exposing standard host interfaces&lt;br /&gt;
|-&lt;br /&gt;
| tncattach&lt;br /&gt;
| [https://github.com/markqvist/tncattach GitHub]&lt;br /&gt;
| KISS-based Linux network-device integration for IP and Ethernet-style networking&lt;br /&gt;
| Reference for bridging a KISS TNC to a Linux network device without the old AX.25 kernel stack&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging application, AX.25 support, AGWPE&lt;br /&gt;
| Useful example of integrating AX.25 support into a modern end-user application&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS application, iGate and digipeater functions&lt;br /&gt;
| Reference for a focused application that avoids general-purpose kernel AX.25 dependencies&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS application and related tooling&lt;br /&gt;
| Example of an application-layer design that works through external TNC interfaces&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ upstream discussion] explicitly points out that IP over AX.25 can, in principle, be handled from user space, as via TUN/TAP integration, rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, end users may need to stay on an older kernel until a user-space solution emerges. Interested developers might look into this as an area for contributions to new or existing projects.&lt;br /&gt;
&lt;br /&gt;
One current project that might be relevant for IP over amateur radio projects is [https://github.com/markqvist/tncattach tncattach], a separate user-space tool that creates a Linux network interface from a KISS-compatible TNC without relying on the old kernel AX.25 stack.&lt;br /&gt;
&lt;br /&gt;
It is not a user-space replacement for the old Linux AX.25 stack, and it should not be understood as preserving the historic Linux AX.25 interface model. It is aimed instead at IP or Ethernet-style networking over a TNC. If your main use of &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; was simply to turn a KISS TNC into a Linux network device for IP networking, then &amp;lt;code&amp;gt;tncattach&amp;lt;/code&amp;gt; may be worth a look.&lt;br /&gt;
&lt;br /&gt;
It may also be a useful reference point for future development. Even if it does not solve every AX.25-specific use case by itself, it shows one way to bridge a KISS-compatible TNC to a Linux network device without the old kernel stack, and that approach could potentially be extended further or incorporated into other projects.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
=== ARDC groups.io discussions ==&lt;br /&gt;
&lt;br /&gt;
* [https://ardc.groups.io/g/community/topic/119004386 Boudewijn VE3TOK’s thread and discussion about paths forward]&lt;br /&gt;
* [https://ardc.groups.io/g/community/topic/119004386 Bernard F6BVP’s retrospective and thoughts on the change]&lt;br /&gt;
&lt;br /&gt;
=== Kernel discussions ===&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 21, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/lkml/20260423235422.1541768-1-kuba@kernel.org/ Jakub Kicinski’s April 23, 2026 pull-request thread with more discussion]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
&lt;br /&gt;
=== Independent coverage ===&lt;br /&gt;
&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://www.phoronix.com/news/Linux-7.1-PR-Remove-Old-Net Phoronix coverage from April 24, 2026 on the pull request removing legacy networking code, including AX.25]&lt;br /&gt;
&lt;br /&gt;
=== Repositories and source trees ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
&lt;br /&gt;
=== Older HOWTOs ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
=== Protocol references ===&lt;br /&gt;
&lt;br /&gt;
* [https://files.tapr.org/tech_docs/AX25/AX25.2.2.1997.pdf AX.25 Link Access Protocol for Amateur Packet Radio, Version 2.2]&lt;br /&gt;
* [https://ax25.net/ AX.25 Layer 2]&lt;br /&gt;
* [https://www.on7lds.net/42/sites/default/files/AGWPEAPI.HTM AGWPE TCP/IP API reference]&lt;br /&gt;
* [https://github.com/wb2osz/direwolf/blob/master/doc/AX25_plus_FEC_equals_FX25.pdf Dire Wolf’s AX.25 framing and FEC documentation]&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2600</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2600"/>
		<updated>2026-05-01T17:40:00Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: add links to other coverage and mailing list thread&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This affects systems and applications that depend on Linux kernel AX.25 interfaces, but it does not mean AX.25 packet radio on Linux is going away.&lt;br /&gt;
&lt;br /&gt;
The short version is:&lt;br /&gt;
&lt;br /&gt;
* If your setup uses KISS or AGWPE to talk to a software TNC, hardware TNC, or packet-radio application, you are probably not affected by the kernel removal.&lt;br /&gt;
* If your setup uses Linux AX.25 interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, it will not keep working unchanged on newer kernels.&lt;br /&gt;
* Nothing breaks immediately just because the upstream kernel changed. Existing systems keep working until you update them to a kernel released after the change.&lt;br /&gt;
&lt;br /&gt;
This page explains what changed, how to tell whether your station depends on that older model, and what practical options exist now.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Mainline Linux no longer includes the traditional Linux AX.25, Net/ROM, and ROSE stack.&lt;br /&gt;
* Existing documentation that assumes &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; will no longer apply to systems running newer kernels.&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run unchanged on newer kernels.&lt;br /&gt;
* Software that talks directly to KISS, AGWPE, serial TNCs, TCP TNCs, or its own built-in AX.25 implementation may continue to work without the kernel AX.25 stack.&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
This change happened in “upstream Linux” first, referring to the mainline Linux kernel project. Distributions like Debian, Ubuntu, and Fedora decide for themselves when to ship newer kernels, and long-term-support distributions may stay on older kernel lines for quite a while.&lt;br /&gt;
&lt;br /&gt;
That means this probably is not hitting most existing stations tomorrow. In many cases, you will keep working until your distribution moves you to a kernel that no longer includes the in-tree AX.25 code, whether that happens in a major distribution upgrade or in a later kernel update.&lt;br /&gt;
&lt;br /&gt;
The practical takeaway is: you likely have some time to plan, but you may want to pay attention to updates that include newer kernels.&lt;br /&gt;
&lt;br /&gt;
== Am I affected? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if your setup uses the Linux kernel AX.25 model. Probably not, if you use software that talks to devices directly.&lt;br /&gt;
&lt;br /&gt;
You are probably using the kernel AX.25 stack if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application is configured to use a Linux AX.25 port or interface rather than KISS, AGWPE, serial, TCP, or a built-in packet engine&lt;br /&gt;
&lt;br /&gt;
You are probably using a user-space approach if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application has its own AX.25 support built in, as many APRS tools do&lt;br /&gt;
* Your applications talk to KISS or AGWPE directly, whether to a software TNC, hardware TNC, or another packet-radio program&lt;br /&gt;
&lt;br /&gt;
If you are not sure, look at how your application is configured. KISS or AGWPE options are usually a good sign. A configuration that refers only to a Linux AX.25 port, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; is a sign that you may need to freeze, reconfigure, or replace part of the station.&lt;br /&gt;
&lt;br /&gt;
== If you already have a working station ==&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are a few paths: keep the system running as it is, reconfigure applications around a different host-side interface, or replace part of the stack. The best choice depends on your specific use case, how much existing software you need to preserve, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at anything from replacing one piece to rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You might also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
There is always the option of resurrecting or re-implementing the old kernel code; the kernel maintainers have not ruled out merging up-to-date code back in. If you have the technical interest and motivation, there’s nothing to stop you. &lt;br /&gt;
&lt;br /&gt;
The state of maintenance for the code that was just removed and the state of development in other tools might be considerations when evaluating this path. ARDC did fund [https://www.ardc.net/apply/grants/2021-grants/grant-fixing-the-linux-kernel-ax-25/ an effort related to AX.25 in the kernel] that encountered unexpected challenges and was not able to proceed. New coding tools may make this a more approachable project than it might have been in the past, with some caveats noted in the [https://docs.kernel.org/process/index.html#an-introduction-to-how-kernel-development-works Linux kernel development documentation], particularly around [https://docs.kernel.org/process/coding-assistants.html the use of large language models].&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
An understanding of the difference between in-kernel and user-space implementations of AX.25 is helpful when considering the impact of the kernel code removal and the options for moving forward.&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file named and described AX.25 ports for the Linux AX.25 tools, while utilities like &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; connected a KISS TNC or pseudo-tty to the kernel stack and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, network applications could interact with it like any other network interface, and code in the kernel would handle AX.25 framing and interacting with the TNC using [https://www.ka9q.net/papers/kiss.html the KISS protocol].&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio by various means, and it in turn provides a KISS, AGWPE, TCP, or other interface for other applications to use. This is less like a device driver and more like a server daemon that client applications can connect to.&lt;br /&gt;
&lt;br /&gt;
Much of the current packet-radio software ecosystem already works this way. APRS clients, software TNCs, and all-in-one environments often keep AX.25 framing and packet-radio behavior in user space, then expose KISS, AGWPE, TCP, serial, or application-specific interfaces to the rest of the shack.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can cover many common packet-radio uses. It can also be more flexible, easier to maintain, and more portable, since it does not depend on specific kernel versions or interfaces and can be developed independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you will see are outdated or inapplicable. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. Rather than looking into AX.25 per se, it may be more helpful to investigate specific applications and see how they use AX.25 for things like APRS and messaging.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The table below shows what common software expects and what you can do going forward. It is meant to be illustrative rather than exhaustive. For any software, the general pattern is:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE over serial or network interfaces, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint using a supported protocol.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there will not be a direct drop-in migration path on newer kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Migration approach&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ]&lt;br /&gt;
| Implements full stack and applications; can work with KISS and AGW-compatible software&lt;br /&gt;
| Use its built-in applications, or integrate it through the interfaces it supports&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Implements full stack and applications; KISS-oriented, with AXIP and AXUDP support&lt;br /&gt;
| Use its built-in applications, or integrate it through KISS-oriented links&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm UZ7HO SoundModem]&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| Pluggable AX.25 engine; AGWPE support&lt;br /&gt;
| AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| KISS, AGWPE, or Linux kernel AX.25 interfaces&lt;br /&gt;
| KISS or AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| KISS or Linux kernel AX.25 interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| External TNC or serial interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually pseudo-tty KISS, TCP KISS, or external TNC&lt;br /&gt;
| Native KISS-capable software&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| Linux AX.25 APRS digipeater&lt;br /&gt;
| APRS-specific replacement like aprx or other APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel configuration tools&lt;br /&gt;
| No direct equivalent; keep only in legacy environments or replace with user-space TNC tooling&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel user applications, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Application-specific replacement like LinBPQ, JNOS, Pat, or APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts Linux kernel AX.25 interfaces into pseudo-tty KISS&lt;br /&gt;
| No direct equivalent; replace the kernel-binding pattern with a native KISS or AGWPE source&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
AX.25 may be considered active enough to justify new user-space implementations. Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 project, it might be worth looking first at software that already does some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging applications&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries like TUN/TAP&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page or repo&lt;br /&gt;
! Technical scope&lt;br /&gt;
! Why inspect it&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ, BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| AX.25 stack, node/BBS and APRS applications, KISS, multi-interface and IP integration&lt;br /&gt;
| Reference for a broad all-in-one user-space packet-radio environment&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| AX.25 stack, node/BBS, APRS, and messaging applications, KISS, AXIP, AXUDP&lt;br /&gt;
| Reference for structuring a nearly complete packet-radio stack in user space&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Modem/TNC functions, AX.25 framing, KISS, AGWPE, APRS tooling&lt;br /&gt;
| Clear reference for a maintained user-space TNC and host-side interface layer&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| Modem/TNC functions; serial KISS or Linux AX.25 integration&lt;br /&gt;
| Reference for an older Linux soundmodem design that can operate either through serial KISS or kernel AX.25&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| Modem/TNC functions, KISS, AGWPE&lt;br /&gt;
| Another example of a user-space software-TNC design exposing standard host interfaces&lt;br /&gt;
|-&lt;br /&gt;
| tncattach&lt;br /&gt;
| [https://github.com/markqvist/tncattach GitHub]&lt;br /&gt;
| KISS-based Linux network-device integration for IP and Ethernet-style networking&lt;br /&gt;
| Reference for bridging a KISS TNC to a Linux network device without the old AX.25 kernel stack&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging application, AX.25 support, AGWPE&lt;br /&gt;
| Useful example of integrating AX.25 support into a modern end-user application&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS application, iGate and digipeater functions&lt;br /&gt;
| Reference for a focused application that avoids general-purpose kernel AX.25 dependencies&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS application and related tooling&lt;br /&gt;
| Example of an application-layer design that works through external TNC interfaces&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ upstream discussion] explicitly points out that IP over AX.25 can, in principle, be handled from user space, as via TUN/TAP integration, rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, end users may need to stay on an older kernel until a user-space solution emerges. Interested developers might look into this as an area for contributions to new or existing projects.&lt;br /&gt;
&lt;br /&gt;
One current project that might be relevant for IP over amateur radio projects is [https://github.com/markqvist/tncattach tncattach], a separate user-space tool that creates a Linux network interface from a KISS-compatible TNC without relying on the old kernel AX.25 stack.&lt;br /&gt;
&lt;br /&gt;
It is not a user-space replacement for the old Linux AX.25 stack, and it should not be understood as preserving the historic Linux AX.25 interface model. It is aimed instead at IP or Ethernet-style networking over a TNC. If your main use of &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; was simply to turn a KISS TNC into a Linux network device for IP networking, then &amp;lt;code&amp;gt;tncattach&amp;lt;/code&amp;gt; may be worth a look.&lt;br /&gt;
&lt;br /&gt;
It may also be a useful reference point for future development. Even if it does not solve every AX.25-specific use case by itself, it shows one way to bridge a KISS-compatible TNC to a Linux network device without the old kernel stack, and that approach could potentially be extended further or incorporated into other projects.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
=== Protocol references ===&lt;br /&gt;
&lt;br /&gt;
* [https://files.tapr.org/tech_docs/AX25/AX25.2.2.1997.pdf AX.25 Link Access Protocol for Amateur Packet Radio, Version 2.2]&lt;br /&gt;
* [https://ax25.net/ AX.25 Layer 2]&lt;br /&gt;
* [https://www.on7lds.net/42/sites/default/files/AGWPEAPI.HTM AGWPE TCP/IP API reference]&lt;br /&gt;
* [https://github.com/wb2osz/direwolf/blob/master/doc/AX25_plus_FEC_equals_FX25.pdf Dire Wolf’s AX.25 framing and FEC documentation]&lt;br /&gt;
&lt;br /&gt;
=== Kernel discussions ===&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 21, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/lkml/20260423235422.1541768-1-kuba@kernel.org/ Jakub Kicinski’s April 23, 2026 pull-request thread with more discussion]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
&lt;br /&gt;
=== Independent coverage ===&lt;br /&gt;
&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://www.phoronix.com/news/Linux-7.1-PR-Remove-Old-Net Phoronix coverage from April 24, 2026 on the pull request removing legacy networking code, including AX.25]&lt;br /&gt;
&lt;br /&gt;
=== Repositories and source trees ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
&lt;br /&gt;
=== Older HOWTOs ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2599</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2599"/>
		<updated>2026-05-01T17:34:56Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: Add ax.25/fx.25 paper&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This affects systems and applications that depend on Linux kernel AX.25 interfaces, but it does not mean AX.25 packet radio on Linux is going away.&lt;br /&gt;
&lt;br /&gt;
The short version is:&lt;br /&gt;
&lt;br /&gt;
* If your setup uses KISS or AGWPE to talk to a software TNC, hardware TNC, or packet-radio application, you are probably not affected by the kernel removal.&lt;br /&gt;
* If your setup uses Linux AX.25 interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, it will not keep working unchanged on newer kernels.&lt;br /&gt;
* Nothing breaks immediately just because the upstream kernel changed. Existing systems keep working until you update them to a kernel released after the change.&lt;br /&gt;
&lt;br /&gt;
This page explains what changed, how to tell whether your station depends on that older model, and what practical options exist now.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Mainline Linux no longer includes the traditional Linux AX.25, Net/ROM, and ROSE stack.&lt;br /&gt;
* Existing documentation that assumes &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; will no longer apply to systems running newer kernels.&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run unchanged on newer kernels.&lt;br /&gt;
* Software that talks directly to KISS, AGWPE, serial TNCs, TCP TNCs, or its own built-in AX.25 implementation may continue to work without the kernel AX.25 stack.&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
This change happened in “upstream Linux” first, referring to the mainline Linux kernel project. Distributions like Debian, Ubuntu, and Fedora decide for themselves when to ship newer kernels, and long-term-support distributions may stay on older kernel lines for quite a while.&lt;br /&gt;
&lt;br /&gt;
That means this probably is not hitting most existing stations tomorrow. In many cases, you will keep working until your distribution moves you to a kernel that no longer includes the in-tree AX.25 code, whether that happens in a major distribution upgrade or in a later kernel update.&lt;br /&gt;
&lt;br /&gt;
The practical takeaway is: you likely have some time to plan, but you may want to pay attention to updates that include newer kernels.&lt;br /&gt;
&lt;br /&gt;
== Am I affected? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if your setup uses the Linux kernel AX.25 model. Probably not, if you use software that talks to devices directly.&lt;br /&gt;
&lt;br /&gt;
You are probably using the kernel AX.25 stack if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application is configured to use a Linux AX.25 port or interface rather than KISS, AGWPE, serial, TCP, or a built-in packet engine&lt;br /&gt;
&lt;br /&gt;
You are probably using a user-space approach if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application has its own AX.25 support built in, as many APRS tools do&lt;br /&gt;
* Your applications talk to KISS or AGWPE directly, whether to a software TNC, hardware TNC, or another packet-radio program&lt;br /&gt;
&lt;br /&gt;
If you are not sure, look at how your application is configured. KISS or AGWPE options are usually a good sign. A configuration that refers only to a Linux AX.25 port, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; is a sign that you may need to freeze, reconfigure, or replace part of the station.&lt;br /&gt;
&lt;br /&gt;
== If you already have a working station ==&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are a few paths: keep the system running as it is, reconfigure applications around a different host-side interface, or replace part of the stack. The best choice depends on your specific use case, how much existing software you need to preserve, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at anything from replacing one piece to rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You might also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
There is always the option of resurrecting or re-implementing the old kernel code; the kernel maintainers have not ruled out merging up-to-date code back in. If you have the technical interest and motivation, there’s nothing to stop you. &lt;br /&gt;
&lt;br /&gt;
The state of maintenance for the code that was just removed and the state of development in other tools might be considerations when evaluating this path. ARDC did fund [https://www.ardc.net/apply/grants/2021-grants/grant-fixing-the-linux-kernel-ax-25/ an effort related to AX.25 in the kernel] that encountered unexpected challenges and was not able to proceed. New coding tools may make this a more approachable project than it might have been in the past, with some caveats noted in the [https://docs.kernel.org/process/index.html#an-introduction-to-how-kernel-development-works Linux kernel development documentation], particularly around [https://docs.kernel.org/process/coding-assistants.html the use of large language models].&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
An understanding of the difference between in-kernel and user-space implementations of AX.25 is helpful when considering the impact of the kernel code removal and the options for moving forward.&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file named and described AX.25 ports for the Linux AX.25 tools, while utilities like &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; connected a KISS TNC or pseudo-tty to the kernel stack and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, network applications could interact with it like any other network interface, and code in the kernel would handle AX.25 framing and interacting with the TNC using [https://www.ka9q.net/papers/kiss.html the KISS protocol].&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio by various means, and it in turn provides a KISS, AGWPE, TCP, or other interface for other applications to use. This is less like a device driver and more like a server daemon that client applications can connect to.&lt;br /&gt;
&lt;br /&gt;
Much of the current packet-radio software ecosystem already works this way. APRS clients, software TNCs, and all-in-one environments often keep AX.25 framing and packet-radio behavior in user space, then expose KISS, AGWPE, TCP, serial, or application-specific interfaces to the rest of the shack.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can cover many common packet-radio uses. It can also be more flexible, easier to maintain, and more portable, since it does not depend on specific kernel versions or interfaces and can be developed independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you will see are outdated or inapplicable. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. Rather than looking into AX.25 per se, it may be more helpful to investigate specific applications and see how they use AX.25 for things like APRS and messaging.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The table below shows what common software expects and what you can do going forward. It is meant to be illustrative rather than exhaustive. For any software, the general pattern is:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE over serial or network interfaces, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint using a supported protocol.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there will not be a direct drop-in migration path on newer kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Migration approach&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ]&lt;br /&gt;
| Implements full stack and applications; can work with KISS and AGW-compatible software&lt;br /&gt;
| Use its built-in applications, or integrate it through the interfaces it supports&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Implements full stack and applications; KISS-oriented, with AXIP and AXUDP support&lt;br /&gt;
| Use its built-in applications, or integrate it through KISS-oriented links&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm UZ7HO SoundModem]&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| Pluggable AX.25 engine; AGWPE support&lt;br /&gt;
| AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| KISS, AGWPE, or Linux kernel AX.25 interfaces&lt;br /&gt;
| KISS or AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| KISS or Linux kernel AX.25 interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| External TNC or serial interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually pseudo-tty KISS, TCP KISS, or external TNC&lt;br /&gt;
| Native KISS-capable software&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| Linux AX.25 APRS digipeater&lt;br /&gt;
| APRS-specific replacement like aprx or other APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel configuration tools&lt;br /&gt;
| No direct equivalent; keep only in legacy environments or replace with user-space TNC tooling&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel user applications, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Application-specific replacement like LinBPQ, JNOS, Pat, or APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts Linux kernel AX.25 interfaces into pseudo-tty KISS&lt;br /&gt;
| No direct equivalent; replace the kernel-binding pattern with a native KISS or AGWPE source&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
AX.25 may be considered active enough to justify new user-space implementations. Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 project, it might be worth looking first at software that already does some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging applications&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries like TUN/TAP&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page or repo&lt;br /&gt;
! Technical scope&lt;br /&gt;
! Why inspect it&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ, BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| AX.25 stack, node/BBS and APRS applications, KISS, multi-interface and IP integration&lt;br /&gt;
| Reference for a broad all-in-one user-space packet-radio environment&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| AX.25 stack, node/BBS, APRS, and messaging applications, KISS, AXIP, AXUDP&lt;br /&gt;
| Reference for structuring a nearly complete packet-radio stack in user space&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Modem/TNC functions, AX.25 framing, KISS, AGWPE, APRS tooling&lt;br /&gt;
| Clear reference for a maintained user-space TNC and host-side interface layer&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| Modem/TNC functions; serial KISS or Linux AX.25 integration&lt;br /&gt;
| Reference for an older Linux soundmodem design that can operate either through serial KISS or kernel AX.25&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| Modem/TNC functions, KISS, AGWPE&lt;br /&gt;
| Another example of a user-space software-TNC design exposing standard host interfaces&lt;br /&gt;
|-&lt;br /&gt;
| tncattach&lt;br /&gt;
| [https://github.com/markqvist/tncattach GitHub]&lt;br /&gt;
| KISS-based Linux network-device integration for IP and Ethernet-style networking&lt;br /&gt;
| Reference for bridging a KISS TNC to a Linux network device without the old AX.25 kernel stack&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging application, AX.25 support, AGWPE&lt;br /&gt;
| Useful example of integrating AX.25 support into a modern end-user application&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS application, iGate and digipeater functions&lt;br /&gt;
| Reference for a focused application that avoids general-purpose kernel AX.25 dependencies&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS application and related tooling&lt;br /&gt;
| Example of an application-layer design that works through external TNC interfaces&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ upstream discussion] explicitly points out that IP over AX.25 can, in principle, be handled from user space, as via TUN/TAP integration, rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, end users may need to stay on an older kernel until a user-space solution emerges. Interested developers might look into this as an area for contributions to new or existing projects.&lt;br /&gt;
&lt;br /&gt;
One current project that might be relevant for IP over amateur radio projects is [https://github.com/markqvist/tncattach tncattach], a separate user-space tool that creates a Linux network interface from a KISS-compatible TNC without relying on the old kernel AX.25 stack.&lt;br /&gt;
&lt;br /&gt;
It is not a user-space replacement for the old Linux AX.25 stack, and it should not be understood as preserving the historic Linux AX.25 interface model. It is aimed instead at IP or Ethernet-style networking over a TNC. If your main use of &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; was simply to turn a KISS TNC into a Linux network device for IP networking, then &amp;lt;code&amp;gt;tncattach&amp;lt;/code&amp;gt; may be worth a look.&lt;br /&gt;
&lt;br /&gt;
It may also be a useful reference point for future development. Even if it does not solve every AX.25-specific use case by itself, it shows one way to bridge a KISS-compatible TNC to a Linux network device without the old kernel stack, and that approach could potentially be extended further or incorporated into other projects.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
=== Protocol references ===&lt;br /&gt;
&lt;br /&gt;
* [https://files.tapr.org/tech_docs/AX25/AX25.2.2.1997.pdf AX.25 Link Access Protocol for Amateur Packet Radio, Version 2.2]&lt;br /&gt;
* [https://ax25.net/ AX.25 Layer 2]&lt;br /&gt;
* [https://www.on7lds.net/42/sites/default/files/AGWPEAPI.HTM AGWPE TCP/IP API reference]&lt;br /&gt;
* [https://github.com/wb2osz/direwolf/blob/master/doc/AX25_plus_FEC_equals_FX25.pdf Dire Wolf’s AX.25 framing and FEC documentation]&lt;br /&gt;
&lt;br /&gt;
=== Kernel discussions ===&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
&lt;br /&gt;
=== Independent coverage ===&lt;br /&gt;
&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
&lt;br /&gt;
=== Repositories and source trees ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
&lt;br /&gt;
=== Older HOWTOs ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2598</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2598"/>
		<updated>2026-05-01T17:30:05Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: add some further reading&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This affects systems and applications that depend on Linux kernel AX.25 interfaces, but it does not mean AX.25 packet radio on Linux is going away.&lt;br /&gt;
&lt;br /&gt;
The short version is:&lt;br /&gt;
&lt;br /&gt;
* If your setup uses KISS or AGWPE to talk to a software TNC, hardware TNC, or packet-radio application, you are probably not affected by the kernel removal.&lt;br /&gt;
* If your setup uses Linux AX.25 interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, it will not keep working unchanged on newer kernels.&lt;br /&gt;
* Nothing breaks immediately just because the upstream kernel changed. Existing systems keep working until you update them to a kernel released after the change.&lt;br /&gt;
&lt;br /&gt;
This page explains what changed, how to tell whether your station depends on that older model, and what practical options exist now.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Mainline Linux no longer includes the traditional Linux AX.25, Net/ROM, and ROSE stack.&lt;br /&gt;
* Existing documentation that assumes &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; will no longer apply to systems running newer kernels.&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run unchanged on newer kernels.&lt;br /&gt;
* Software that talks directly to KISS, AGWPE, serial TNCs, TCP TNCs, or its own built-in AX.25 implementation may continue to work without the kernel AX.25 stack.&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
This change happened in “upstream Linux” first, referring to the mainline Linux kernel project. Distributions like Debian, Ubuntu, and Fedora decide for themselves when to ship newer kernels, and long-term-support distributions may stay on older kernel lines for quite a while.&lt;br /&gt;
&lt;br /&gt;
That means this probably is not hitting most existing stations tomorrow. In many cases, you will keep working until your distribution moves you to a kernel that no longer includes the in-tree AX.25 code, whether that happens in a major distribution upgrade or in a later kernel update.&lt;br /&gt;
&lt;br /&gt;
The practical takeaway is: you likely have some time to plan, but you may want to pay attention to updates that include newer kernels.&lt;br /&gt;
&lt;br /&gt;
== Am I affected? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if your setup uses the Linux kernel AX.25 model. Probably not, if you use software that talks to devices directly.&lt;br /&gt;
&lt;br /&gt;
You are probably using the kernel AX.25 stack if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application is configured to use a Linux AX.25 port or interface rather than KISS, AGWPE, serial, TCP, or a built-in packet engine&lt;br /&gt;
&lt;br /&gt;
You are probably using a user-space approach if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application has its own AX.25 support built in, as many APRS tools do&lt;br /&gt;
* Your applications talk to KISS or AGWPE directly, whether to a software TNC, hardware TNC, or another packet-radio program&lt;br /&gt;
&lt;br /&gt;
If you are not sure, look at how your application is configured. KISS or AGWPE options are usually a good sign. A configuration that refers only to a Linux AX.25 port, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; is a sign that you may need to freeze, reconfigure, or replace part of the station.&lt;br /&gt;
&lt;br /&gt;
== If you already have a working station ==&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are a few paths: keep the system running as it is, reconfigure applications around a different host-side interface, or replace part of the stack. The best choice depends on your specific use case, how much existing software you need to preserve, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at anything from replacing one piece to rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You might also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
There is always the option of resurrecting or re-implementing the old kernel code; the kernel maintainers have not ruled out merging up-to-date code back in. If you have the technical interest and motivation, there’s nothing to stop you. &lt;br /&gt;
&lt;br /&gt;
The state of maintenance for the code that was just removed and the state of development in other tools might be considerations when evaluating this path. ARDC did fund [https://www.ardc.net/apply/grants/2021-grants/grant-fixing-the-linux-kernel-ax-25/ an effort related to AX.25 in the kernel] that encountered unexpected challenges and was not able to proceed. New coding tools may make this a more approachable project than it might have been in the past, with some caveats noted in the [https://docs.kernel.org/process/index.html#an-introduction-to-how-kernel-development-works Linux kernel development documentation], particularly around [https://docs.kernel.org/process/coding-assistants.html the use of large language models].&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
An understanding of the difference between in-kernel and user-space implementations of AX.25 is helpful when considering the impact of the kernel code removal and the options for moving forward.&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file named and described AX.25 ports for the Linux AX.25 tools, while utilities like &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; connected a KISS TNC or pseudo-tty to the kernel stack and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, network applications could interact with it like any other network interface, and code in the kernel would handle AX.25 framing and interacting with the TNC using [https://www.ka9q.net/papers/kiss.html the KISS protocol].&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio by various means, and it in turn provides a KISS, AGWPE, TCP, or other interface for other applications to use. This is less like a device driver and more like a server daemon that client applications can connect to.&lt;br /&gt;
&lt;br /&gt;
Much of the current packet-radio software ecosystem already works this way. APRS clients, software TNCs, and all-in-one environments often keep AX.25 framing and packet-radio behavior in user space, then expose KISS, AGWPE, TCP, serial, or application-specific interfaces to the rest of the shack.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can cover many common packet-radio uses. It can also be more flexible, easier to maintain, and more portable, since it does not depend on specific kernel versions or interfaces and can be developed independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you will see are outdated or inapplicable. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. Rather than looking into AX.25 per se, it may be more helpful to investigate specific applications and see how they use AX.25 for things like APRS and messaging.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The table below shows what common software expects and what you can do going forward. It is meant to be illustrative rather than exhaustive. For any software, the general pattern is:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE over serial or network interfaces, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint using a supported protocol.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there will not be a direct drop-in migration path on newer kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Migration approach&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ]&lt;br /&gt;
| Implements full stack and applications; can work with KISS and AGW-compatible software&lt;br /&gt;
| Use its built-in applications, or integrate it through the interfaces it supports&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Implements full stack and applications; KISS-oriented, with AXIP and AXUDP support&lt;br /&gt;
| Use its built-in applications, or integrate it through KISS-oriented links&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm UZ7HO SoundModem]&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| Pluggable AX.25 engine; AGWPE support&lt;br /&gt;
| AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| KISS, AGWPE, or Linux kernel AX.25 interfaces&lt;br /&gt;
| KISS or AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| KISS or Linux kernel AX.25 interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| External TNC or serial interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually pseudo-tty KISS, TCP KISS, or external TNC&lt;br /&gt;
| Native KISS-capable software&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| Linux AX.25 APRS digipeater&lt;br /&gt;
| APRS-specific replacement like aprx or other APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel configuration tools&lt;br /&gt;
| No direct equivalent; keep only in legacy environments or replace with user-space TNC tooling&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel user applications, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Application-specific replacement like LinBPQ, JNOS, Pat, or APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts Linux kernel AX.25 interfaces into pseudo-tty KISS&lt;br /&gt;
| No direct equivalent; replace the kernel-binding pattern with a native KISS or AGWPE source&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
AX.25 may be considered active enough to justify new user-space implementations. Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 project, it might be worth looking first at software that already does some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging applications&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries like TUN/TAP&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page or repo&lt;br /&gt;
! Technical scope&lt;br /&gt;
! Why inspect it&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ, BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| AX.25 stack, node/BBS and APRS applications, KISS, multi-interface and IP integration&lt;br /&gt;
| Reference for a broad all-in-one user-space packet-radio environment&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| AX.25 stack, node/BBS, APRS, and messaging applications, KISS, AXIP, AXUDP&lt;br /&gt;
| Reference for structuring a nearly complete packet-radio stack in user space&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Modem/TNC functions, AX.25 framing, KISS, AGWPE, APRS tooling&lt;br /&gt;
| Clear reference for a maintained user-space TNC and host-side interface layer&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| Modem/TNC functions; serial KISS or Linux AX.25 integration&lt;br /&gt;
| Reference for an older Linux soundmodem design that can operate either through serial KISS or kernel AX.25&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| Modem/TNC functions, KISS, AGWPE&lt;br /&gt;
| Another example of a user-space software-TNC design exposing standard host interfaces&lt;br /&gt;
|-&lt;br /&gt;
| tncattach&lt;br /&gt;
| [https://github.com/markqvist/tncattach GitHub]&lt;br /&gt;
| KISS-based Linux network-device integration for IP and Ethernet-style networking&lt;br /&gt;
| Reference for bridging a KISS TNC to a Linux network device without the old AX.25 kernel stack&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging application, AX.25 support, AGWPE&lt;br /&gt;
| Useful example of integrating AX.25 support into a modern end-user application&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS application, iGate and digipeater functions&lt;br /&gt;
| Reference for a focused application that avoids general-purpose kernel AX.25 dependencies&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS application and related tooling&lt;br /&gt;
| Example of an application-layer design that works through external TNC interfaces&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ upstream discussion] explicitly points out that IP over AX.25 can, in principle, be handled from user space, as via TUN/TAP integration, rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, end users may need to stay on an older kernel until a user-space solution emerges. Interested developers might look into this as an area for contributions to new or existing projects.&lt;br /&gt;
&lt;br /&gt;
One current project that might be relevant for IP over amateur radio projects is [https://github.com/markqvist/tncattach tncattach], a separate user-space tool that creates a Linux network interface from a KISS-compatible TNC without relying on the old kernel AX.25 stack.&lt;br /&gt;
&lt;br /&gt;
It is not a user-space replacement for the old Linux AX.25 stack, and it should not be understood as preserving the historic Linux AX.25 interface model. It is aimed instead at IP or Ethernet-style networking over a TNC. If your main use of &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; was simply to turn a KISS TNC into a Linux network device for IP networking, then &amp;lt;code&amp;gt;tncattach&amp;lt;/code&amp;gt; may be worth a look.&lt;br /&gt;
&lt;br /&gt;
It may also be a useful reference point for future development. Even if it does not solve every AX.25-specific use case by itself, it shows one way to bridge a KISS-compatible TNC to a Linux network device without the old kernel stack, and that approach could potentially be extended further or incorporated into other projects.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
=== Protocol references ===&lt;br /&gt;
&lt;br /&gt;
* [https://files.tapr.org/tech_docs/AX25/AX25.2.2.1997.pdf AX.25 Link Access Protocol for Amateur Packet Radio, Version 2.2]&lt;br /&gt;
* [https://ax25.net/ AX.25 Layer 2]&lt;br /&gt;
* [https://www.on7lds.net/42/sites/default/files/AGWPEAPI.HTM AGWPE TCP/IP API reference]&lt;br /&gt;
&lt;br /&gt;
=== Kernel discussions ===&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
&lt;br /&gt;
=== Independent coverage ===&lt;br /&gt;
&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
&lt;br /&gt;
=== Repositories and source trees ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
&lt;br /&gt;
=== Older HOWTOs ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2597</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2597"/>
		<updated>2026-05-01T17:15:50Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: Add tncattach discussion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This affects systems and applications that depend on Linux kernel AX.25 interfaces, but it does not mean AX.25 packet radio on Linux is going away.&lt;br /&gt;
&lt;br /&gt;
The short version is:&lt;br /&gt;
&lt;br /&gt;
* If your setup uses KISS or AGWPE to talk to a software TNC, hardware TNC, or packet-radio application, you are probably not affected by the kernel removal.&lt;br /&gt;
* If your setup uses Linux AX.25 interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, it will not keep working unchanged on newer kernels.&lt;br /&gt;
* Nothing breaks immediately just because the upstream kernel changed. Existing systems keep working until you update them to a kernel released after the change.&lt;br /&gt;
&lt;br /&gt;
This page explains what changed, how to tell whether your station depends on that older model, and what practical options exist now.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Mainline Linux no longer includes the traditional Linux AX.25, Net/ROM, and ROSE stack.&lt;br /&gt;
* Existing documentation that assumes &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; will no longer apply to systems running newer kernels.&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run unchanged on newer kernels.&lt;br /&gt;
* Software that talks directly to KISS, AGWPE, serial TNCs, TCP TNCs, or its own built-in AX.25 implementation may continue to work without the kernel AX.25 stack.&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
This change happened in “upstream Linux” first, referring to the mainline Linux kernel project. Distributions like Debian, Ubuntu, and Fedora decide for themselves when to ship newer kernels, and long-term-support distributions may stay on older kernel lines for quite a while.&lt;br /&gt;
&lt;br /&gt;
That means this probably is not hitting most existing stations tomorrow. In many cases, you will keep working until your distribution moves you to a kernel that no longer includes the in-tree AX.25 code, whether that happens in a major distribution upgrade or in a later kernel update.&lt;br /&gt;
&lt;br /&gt;
The practical takeaway is: you likely have some time to plan, but you may want to pay attention to updates that include newer kernels.&lt;br /&gt;
&lt;br /&gt;
== Am I affected? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if your setup uses the Linux kernel AX.25 model. Probably not, if you use software that talks to devices directly.&lt;br /&gt;
&lt;br /&gt;
You are probably using the kernel AX.25 stack if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application is configured to use a Linux AX.25 port or interface rather than KISS, AGWPE, serial, TCP, or a built-in packet engine&lt;br /&gt;
&lt;br /&gt;
You are probably using a user-space approach if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application has its own AX.25 support built in, as many APRS tools do&lt;br /&gt;
* Your applications talk to KISS or AGWPE directly, whether to a software TNC, hardware TNC, or another packet-radio program&lt;br /&gt;
&lt;br /&gt;
If you are not sure, look at how your application is configured. KISS or AGWPE options are usually a good sign. A configuration that refers only to a Linux AX.25 port, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; is a sign that you may need to freeze, reconfigure, or replace part of the station.&lt;br /&gt;
&lt;br /&gt;
== If you already have a working station ==&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are a few paths: keep the system running as it is, reconfigure applications around a different host-side interface, or replace part of the stack. The best choice depends on your specific use case, how much existing software you need to preserve, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at anything from replacing one piece to rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You might also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
There is always the option of resurrecting or re-implementing the old kernel code; the kernel maintainers have not ruled out merging up-to-date code back in. If you have the technical interest and motivation, there’s nothing to stop you. &lt;br /&gt;
&lt;br /&gt;
The state of maintenance for the code that was just removed and the state of development in other tools might be considerations when evaluating this path. ARDC did fund [https://www.ardc.net/apply/grants/2021-grants/grant-fixing-the-linux-kernel-ax-25/ an effort related to AX.25 in the kernel] that encountered unexpected challenges and was not able to proceed. New coding tools may make this a more approachable project than it might have been in the past, with some caveats noted in the [https://docs.kernel.org/process/index.html#an-introduction-to-how-kernel-development-works Linux kernel development documentation], particularly around [https://docs.kernel.org/process/coding-assistants.html the use of large language models].&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
An understanding of the difference between in-kernel and user-space implementations of AX.25 is helpful when considering the impact of the kernel code removal and the options for moving forward.&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file named and described AX.25 ports for the Linux AX.25 tools, while utilities like &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; connected a KISS TNC or pseudo-tty to the kernel stack and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, network applications could interact with it like any other network interface, and code in the kernel would handle AX.25 framing and interacting with the TNC using [https://www.ka9q.net/papers/kiss.html the KISS protocol].&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio by various means, and it in turn provides a KISS, AGWPE, TCP, or other interface for other applications to use. This is less like a device driver and more like a server daemon that client applications can connect to.&lt;br /&gt;
&lt;br /&gt;
Much of the current packet-radio software ecosystem already works this way. APRS clients, software TNCs, and all-in-one environments often keep AX.25 framing and packet-radio behavior in user space, then expose KISS, AGWPE, TCP, serial, or application-specific interfaces to the rest of the shack.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can cover many common packet-radio uses. It can also be more flexible, easier to maintain, and more portable, since it does not depend on specific kernel versions or interfaces and can be developed independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you will see are outdated or inapplicable. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. Rather than looking into AX.25 per se, it may be more helpful to investigate specific applications and see how they use AX.25 for things like APRS and messaging.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The table below shows what common software expects and what you can do going forward. It is meant to be illustrative rather than exhaustive. For any software, the general pattern is:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE over serial or network interfaces, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint using a supported protocol.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there will not be a direct drop-in migration path on newer kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Migration approach&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ]&lt;br /&gt;
| Implements full stack and applications; can work with KISS and AGW-compatible software&lt;br /&gt;
| Use its built-in applications, or integrate it through the interfaces it supports&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Implements full stack and applications; KISS-oriented, with AXIP and AXUDP support&lt;br /&gt;
| Use its built-in applications, or integrate it through KISS-oriented links&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm UZ7HO SoundModem]&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| Pluggable AX.25 engine; AGWPE support&lt;br /&gt;
| AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| KISS, AGWPE, or Linux kernel AX.25 interfaces&lt;br /&gt;
| KISS or AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| KISS or Linux kernel AX.25 interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| External TNC or serial interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually pseudo-tty KISS, TCP KISS, or external TNC&lt;br /&gt;
| Native KISS-capable software&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| Linux AX.25 APRS digipeater&lt;br /&gt;
| APRS-specific replacement like aprx or other APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel configuration tools&lt;br /&gt;
| No direct equivalent; keep only in legacy environments or replace with user-space TNC tooling&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel user applications, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Application-specific replacement like LinBPQ, JNOS, Pat, or APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts Linux kernel AX.25 interfaces into pseudo-tty KISS&lt;br /&gt;
| No direct equivalent; replace the kernel-binding pattern with a native KISS or AGWPE source&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
AX.25 may be considered active enough to justify new user-space implementations. Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 project, it might be worth looking first at software that already does some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging applications&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries like TUN/TAP&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page or repo&lt;br /&gt;
! Technical scope&lt;br /&gt;
! Why inspect it&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ, BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| AX.25 stack, node/BBS and APRS applications, KISS, multi-interface and IP integration&lt;br /&gt;
| Reference for a broad all-in-one user-space packet-radio environment&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| AX.25 stack, node/BBS, APRS, and messaging applications, KISS, AXIP, AXUDP&lt;br /&gt;
| Reference for structuring a nearly complete packet-radio stack in user space&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Modem/TNC functions, AX.25 framing, KISS, AGWPE, APRS tooling&lt;br /&gt;
| Clear reference for a maintained user-space TNC and host-side interface layer&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| Modem/TNC functions; serial KISS or Linux AX.25 integration&lt;br /&gt;
| Reference for an older Linux soundmodem design that can operate either through serial KISS or kernel AX.25&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| Modem/TNC functions, KISS, AGWPE&lt;br /&gt;
| Another example of a user-space software-TNC design exposing standard host interfaces&lt;br /&gt;
|-&lt;br /&gt;
| tncattach&lt;br /&gt;
| [https://github.com/markqvist/tncattach GitHub]&lt;br /&gt;
| KISS-based Linux network-device integration for IP and Ethernet-style networking&lt;br /&gt;
| Reference for bridging a KISS TNC to a Linux network device without the old AX.25 kernel stack&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging application, AX.25 support, AGWPE&lt;br /&gt;
| Useful example of integrating AX.25 support into a modern end-user application&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS application, iGate and digipeater functions&lt;br /&gt;
| Reference for a focused application that avoids general-purpose kernel AX.25 dependencies&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS application and related tooling&lt;br /&gt;
| Example of an application-layer design that works through external TNC interfaces&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ upstream discussion] explicitly points out that IP over AX.25 can, in principle, be handled from user space, as via TUN/TAP integration, rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, end users may need to stay on an older kernel until a user-space solution emerges. Interested developers might look into this as an area for contributions to new or existing projects.&lt;br /&gt;
&lt;br /&gt;
One current project that might be relevant for IP over amateur radio projects is [https://github.com/markqvist/tncattach tncattach], a separate user-space tool that creates a Linux network interface from a KISS-compatible TNC without relying on the old kernel AX.25 stack.&lt;br /&gt;
&lt;br /&gt;
It is not a user-space replacement for the old Linux AX.25 stack, and it should not be understood as preserving the historic Linux AX.25 interface model. It is aimed instead at IP or Ethernet-style networking over a TNC. If your main use of &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; was simply to turn a KISS TNC into a Linux network device for IP networking, then &amp;lt;code&amp;gt;tncattach&amp;lt;/code&amp;gt; may be worth a look.&lt;br /&gt;
&lt;br /&gt;
It may also be a useful reference point for future development. Even if it does not solve every AX.25-specific use case by itself, it shows one way to bridge a KISS-compatible TNC to a Linux network device without the old kernel stack, and that approach could potentially be extended further or incorporated into other projects.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel discussions ===&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
&lt;br /&gt;
=== Independent coverage ===&lt;br /&gt;
&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
&lt;br /&gt;
=== Repositories and source trees ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
&lt;br /&gt;
=== Older HOWTOs ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2596</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2596"/>
		<updated>2026-05-01T16:59:29Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: Add tncattach discussion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This affects systems and applications that depend on Linux kernel AX.25 interfaces, but it does not mean AX.25 packet radio on Linux is going away.&lt;br /&gt;
&lt;br /&gt;
The short version is:&lt;br /&gt;
&lt;br /&gt;
* If your setup uses KISS or AGWPE to talk to a software TNC, hardware TNC, or packet-radio application, you are probably not affected by the kernel removal.&lt;br /&gt;
* If your setup uses Linux AX.25 interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, it will not keep working unchanged on newer kernels.&lt;br /&gt;
* Nothing breaks immediately just because the upstream kernel changed. Existing systems keep working until you update them to a kernel released after the change.&lt;br /&gt;
&lt;br /&gt;
This page explains what changed, how to tell whether your station depends on that older model, and what practical options exist now.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Mainline Linux no longer includes the traditional Linux AX.25, Net/ROM, and ROSE stack.&lt;br /&gt;
* Existing documentation that assumes &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; will no longer apply to systems running newer kernels.&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run unchanged on newer kernels.&lt;br /&gt;
* Software that talks directly to KISS, AGWPE, serial TNCs, TCP TNCs, or its own built-in AX.25 implementation may continue to work without the kernel AX.25 stack.&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
This change happened in “upstream Linux” first, referring to the mainline Linux kernel project. Distributions like Debian, Ubuntu, Fedora, and others decide for themselves when to ship newer kernels, and long-term-support distributions may stay on older kernel lines for quite a while.&lt;br /&gt;
&lt;br /&gt;
That means this probably is not hitting most existing stations tomorrow. In many cases, you will keep working until your distribution moves you to a kernel that no longer includes the in-tree AX.25 code, whether that happens in a major distribution upgrade or in a later kernel update.&lt;br /&gt;
&lt;br /&gt;
The practical takeaway is: you likely have some time to plan, but you may want to pay attention to updates that include newer kernels.&lt;br /&gt;
&lt;br /&gt;
== Am I affected? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if your setup uses the Linux kernel AX.25 model. Probably not, if you use software that talks to devices directly.&lt;br /&gt;
&lt;br /&gt;
You are probably using the kernel AX.25 stack if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application is configured to use a Linux AX.25 port or interface rather than KISS, AGWPE, serial, TCP, or a built-in packet engine&lt;br /&gt;
&lt;br /&gt;
You are probably using a user-space approach if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application has its own AX.25 support built in, as many APRS tools do&lt;br /&gt;
* Your applications talk to KISS or AGWPE directly, whether to a software TNC, hardware TNC, or another packet-radio program&lt;br /&gt;
&lt;br /&gt;
If you are not sure, look at how your application is configured. KISS or AGWPE options are usually a good sign. A configuration that refers only to a Linux AX.25 port, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; is a sign that you may need to freeze, reconfigure, or replace part of the station.&lt;br /&gt;
&lt;br /&gt;
== If you already have a working station ==&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are a few paths: keep the system running as it is, reconfigure applications around a different host-side interface, or replace part of the stack. The best choice depends on your specific use case, how much existing software you need to preserve, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at anything from replacing one piece to rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You might also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
There is always the option of resurrecting or re-implementing the old kernel code; the kernel maintainers have not ruled out merging up-to-date code back in. If you have the technical interest and motivation, there’s nothing to stop you. &lt;br /&gt;
&lt;br /&gt;
The state of maintenance for the code that was just removed and the state of development in other tools might be considerations when evaluating this path. ARDC did fund [https://www.ardc.net/apply/grants/2021-grants/grant-fixing-the-linux-kernel-ax-25/ an effort related to AX.25 in the kernel] that encountered unexpected challenges and was not able to proceed. New coding tools may make this a more approachable project than it might have been in the past, with some caveats noted in the [https://docs.kernel.org/process/index.html#an-introduction-to-how-kernel-development-works Linux kernel development documentation], particularly around [https://docs.kernel.org/process/coding-assistants.html the use of large language models].&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
An understanding of the difference between in-kernel and user-space implementations of AX.25 is helpful when considering the impact of the kernel code removal and the options for moving forward.&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file named and described AX.25 ports for the Linux AX.25 tools, while utilities like &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; connected a KISS TNC or pseudo-tty to the kernel stack and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, network applications could interact with it like any other network interface, and code in the kernel would handle AX.25 framing and interacting with the TNC using [https://www.ka9q.net/papers/kiss.html the KISS protocol]. If your main use of &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; was simply to turn a KISS TNC into a Linux network device for IP networking, a separate user-space project called [https://github.com/markqvist/tncattach tncattach] may also be worth a look.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio by various means, and it in turn provides a KISS, AGWPE, TCP, or other interface for other applications to use. This is less like a device driver and more like a server daemon that client applications can connect to.&lt;br /&gt;
&lt;br /&gt;
Much of the current packet-radio software ecosystem already works this way. APRS clients, software TNCs, and all-in-one environments often keep AX.25 framing and packet-radio behavior in user space, then expose KISS, AGWPE, TCP, serial, or application-specific interfaces to the rest of the shack.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can cover many common packet-radio uses. It can also be more flexible, easier to maintain, and more portable, since it does not depend on specific kernel versions or interfaces and can be developed independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you will see are outdated or inapplicable. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. Rather than looking into AX.25 per se, it may be more helpful to investigate specific applications and see how they use AX.25 for things like APRS and messaging.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The table below shows what common software expects and what you can do going forward. It is meant to be illustrative rather than exhaustive. For any software, the general pattern is:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE over serial or network interfaces, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint using a supported protocol.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there will not be a direct drop-in migration path on newer kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Migration approach&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ]&lt;br /&gt;
| Implements full stack and applications; can work with KISS and AGW-compatible software&lt;br /&gt;
| Use its built-in applications, or integrate it through the interfaces it supports&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Implements full stack and applications; KISS-oriented, with AXIP and AXUDP support&lt;br /&gt;
| Use its built-in applications, or integrate it through KISS-oriented links&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm UZ7HO SoundModem]&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| Pluggable AX.25 engine; AGWPE support&lt;br /&gt;
| AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| KISS, AGWPE, or Linux kernel AX.25 interfaces&lt;br /&gt;
| KISS or AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| KISS or Linux kernel AX.25 interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| External TNC or serial interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually pseudo-tty KISS, TCP KISS, or external TNC&lt;br /&gt;
| Native KISS-capable software&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| Linux AX.25 APRS digipeater&lt;br /&gt;
| APRS-specific replacement like aprx or other APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel configuration tools&lt;br /&gt;
| No direct equivalent; keep only in legacy environments or replace with user-space TNC tooling&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel user applications, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Application-specific replacement like LinBPQ, JNOS, Pat, or APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts Linux kernel AX.25 interfaces into pseudo-tty KISS&lt;br /&gt;
| No direct equivalent; replace the kernel-binding pattern with a native KISS or AGWPE source&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
AX.25 may be considered active enough to justify new user-space implementations. Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 project, it might be worth looking first at software that already does some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging applications&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries like TUN/TAP&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page or repo&lt;br /&gt;
! Technical scope&lt;br /&gt;
! Why inspect it&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ, BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| AX.25 stack, node/BBS and APRS applications, KISS, multi-interface and IP integration&lt;br /&gt;
| Reference for a broad all-in-one user-space packet-radio environment&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| AX.25 stack, node/BBS, APRS, and messaging applications, KISS, AXIP, AXUDP&lt;br /&gt;
| Reference for structuring a nearly complete packet-radio stack in user space&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Modem/TNC functions, AX.25 framing, KISS, AGWPE, APRS tooling&lt;br /&gt;
| Clear reference for a maintained user-space TNC and host-side interface layer&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| Modem/TNC functions; serial KISS or Linux AX.25 integration&lt;br /&gt;
| Reference for an older Linux soundmodem design that can operate either through serial KISS or kernel AX.25&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| Modem/TNC functions, KISS, AGWPE&lt;br /&gt;
| Another example of a user-space software-TNC design exposing standard host interfaces&lt;br /&gt;
|-&lt;br /&gt;
| tncattach&lt;br /&gt;
| [https://github.com/markqvist/tncattach GitHub]&lt;br /&gt;
| KISS-based Linux network-device integration for IP and Ethernet-style networking&lt;br /&gt;
| Reference for bridging a KISS TNC to a Linux network device without the old AX.25 kernel stack&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging application, AX.25 support, AGWPE&lt;br /&gt;
| Useful example of integrating AX.25 support into a modern end-user application&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS application, iGate and digipeater functions&lt;br /&gt;
| Reference for a focused application that avoids general-purpose kernel AX.25 dependencies&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS application and related tooling&lt;br /&gt;
| Example of an application-layer design that works through external TNC interfaces&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ upstream discussion] explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
One current project worth investigating is [https://github.com/markqvist/tncattach tncattach], a separate user-space tool that creates a Linux network interface from a KISS-compatible TNC without relying on the old kernel AX.25 stack. It is aimed at IP or Ethernet-style networking over a TNC rather than at preserving the historic Linux AX.25 interface model, so it should be understood as a different approach rather than a drop-in replacement for &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, end users may need to stay on an older kernel until a user-space solution emerges. Interested developers might look into this as an area for contributions to new or existing projects.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel discussions ===&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
&lt;br /&gt;
=== Independent coverage ===&lt;br /&gt;
&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
&lt;br /&gt;
=== Repositories and source trees ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
&lt;br /&gt;
=== Older HOWTOs ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2595</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2595"/>
		<updated>2026-05-01T15:58:46Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: Updates for clarity and accuracy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This affects systems and applications that depend on Linux kernel AX.25 interfaces, but it does not mean AX.25 packet radio on Linux is going away.&lt;br /&gt;
&lt;br /&gt;
The short version is:&lt;br /&gt;
&lt;br /&gt;
* If your setup uses KISS or AGWPE to talk to a software TNC, hardware TNC, or packet-radio application, you are probably not affected by the kernel removal.&lt;br /&gt;
* If your setup uses Linux AX.25 interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, it will not keep working unchanged on newer kernels.&lt;br /&gt;
* Nothing breaks immediately just because the upstream kernel changed. Existing systems keep working until you update them, replace them, or rebuild them around newer kernels.&lt;br /&gt;
&lt;br /&gt;
For years, Linux included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs. This page explains what changed, how to tell whether your station depends on that older model, and what practical options exist now.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Mainline Linux no longer includes the traditional Linux AX.25, Net/ROM, and ROSE stack.&lt;br /&gt;
* Existing documentation that assumes &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; will no longer apply to systems running newer kernels.&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run unchanged on newer kernels.&lt;br /&gt;
* Software that talks directly to KISS, AGWPE, serial TNCs, TCP TNCs, or its own built-in AX.25 implementation may continue to work without the kernel AX.25 stack.&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
This change happened in “upstream Linux” first, referring to the mainline Linux kernel project. Distributions like Debian, Ubuntu, Fedora, and others decide for themselves when to ship newer kernels, and long-term-support distributions may stay on older kernel lines for quite a while.&lt;br /&gt;
&lt;br /&gt;
That means this probably is not hitting most existing stations tomorrow. In many cases, you will keep working until your distribution moves you to a kernel that no longer includes the in-tree AX.25 code, whether that happens in a major distribution upgrade or in a later kernel update.&lt;br /&gt;
&lt;br /&gt;
The practical takeaway is simple: you likely have some time to plan, but you may want to pay attention to updates that include newer kernels.&lt;br /&gt;
&lt;br /&gt;
== Am I affected? ==&lt;br /&gt;
&lt;br /&gt;
A good first check is whether your station uses the old Linux kernel AX.25 model or a user-space TNC/application model.&lt;br /&gt;
&lt;br /&gt;
You are probably using the kernel AX.25 stack if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces like &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application is configured to use a Linux AX.25 port or interface rather than KISS, AGWPE, serial, TCP, or a built-in packet engine&lt;br /&gt;
&lt;br /&gt;
You are probably using a user-space approach if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application has its own AX.25 support built in, as many APRS tools do&lt;br /&gt;
* Your applications talk to KISS or AGWPE directly, whether to a software TNC, hardware TNC, or another packet-radio program&lt;br /&gt;
&lt;br /&gt;
If you are not sure, look at how your application is configured. KISS or AGWPE options are usually a good sign. A configuration that refers only to a Linux AX.25 port, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; is a sign that you may need to freeze, reconfigure, or replace part of the station.&lt;br /&gt;
&lt;br /&gt;
== If you already have a working station ==&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are a few paths: keep the system running as it is, reconfigure applications around a different host-side interface, or replace part of the stack. The best choice depends on your specific use case, how much existing software you need to preserve, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at anything from replacing one piece to rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You might also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
There is always the option of resurrecting or re-implementing the old kernel code; the kernel maintainers have not ruled out merging up-to-date code back in. If you have the technical interest and motivation, there’s nothing to stop you. &lt;br /&gt;
&lt;br /&gt;
The state of maintenance for the code that was just removed and the state of development in other tools might be considerations when evaluating this path. ARDC did fund [https://www.ardc.net/apply/grants/2021-grants/grant-fixing-the-linux-kernel-ax-25/ an effort related to AX.25 in the kernel] that encountered unexpected challenges and was not able to proceed. New coding tools may make this a more approachable project than it might have been in the past, with some caveats noted in the [https://docs.kernel.org/process/index.html#an-introduction-to-how-kernel-development-works Linux kernel development documentation], particularly around [https://docs.kernel.org/process/coding-assistants.html the use of large language models].&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
An understanding of the difference between in-kernel and user-space implementations of AX.25 is helpful when considering the impact of the kernel code removal and the options for moving forward.&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file named and described AX.25 ports for the Linux AX.25 tools, while utilities like &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; connected a KISS TNC or pseudo-tty to the kernel stack and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, network applications could interact with it like any other network interface, and code in the kernel would handle AX.25 framing and interacting with the TNC using [https://www.ka9q.net/papers/kiss.html the KISS protocol].&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio by various means, and it in turn provides a KISS, AGWPE, TCP, or other interface for other applications to use. This is less like a device driver and more like a server daemon that client applications can connect to.&lt;br /&gt;
&lt;br /&gt;
Much of the current packet-radio software ecosystem already works this way. APRS clients, software TNCs, and all-in-one environments often keep AX.25 framing and packet-radio behavior in user space, then expose KISS, AGWPE, TCP, serial, or application-specific interfaces to the rest of the shack.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can cover many common packet-radio uses. It can also be more flexible, easier to maintain, and more portable, since it does not depend on specific kernel versions or interfaces and can be developed independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you will see are outdated or inapplicable. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. Rather than looking into AX.25 per se, it may be more helpful to investigate specific applications and see how they use AX.25 for things like APRS and messaging.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The table below shows what common software expects and what you can do going forward. It is meant to be illustrative rather than exhaustive. For any software, the general pattern is:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE over serial or network interfaces, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint using a supported protocol.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there will not be a direct drop-in migration path on newer kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Migration approach&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ]&lt;br /&gt;
| Implements full stack and applications; can work with KISS and AGW-compatible software&lt;br /&gt;
| Use its built-in applications, or integrate it through the interfaces it supports&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Implements full stack and applications; KISS-oriented, with AXIP and AXUDP support&lt;br /&gt;
| Use its built-in applications, or integrate it through KISS-oriented links&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm UZ7HO SoundModem]&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| Pluggable AX.25 engine; AGWPE support&lt;br /&gt;
| AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| KISS, AGWPE, or Linux kernel AX.25 interfaces&lt;br /&gt;
| KISS or AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| KISS or Linux kernel AX.25 interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| External TNC or serial interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually pseudo-tty KISS, TCP KISS, or external TNC&lt;br /&gt;
| Native KISS-capable software&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| Linux AX.25 APRS digipeater&lt;br /&gt;
| APRS-specific replacement like aprx or other APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel configuration tools&lt;br /&gt;
| No direct equivalent; keep only in legacy environments or replace with user-space TNC tooling&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel user applications, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Application-specific replacement like LinBPQ, JNOS, Pat, or APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts Linux kernel AX.25 interfaces into pseudo-tty KISS&lt;br /&gt;
| No direct equivalent; replace the kernel-binding pattern with a native KISS or AGWPE source&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
AX.25 may be considered active enough to justify new user-space implementations. Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 project, it might be worth looking first at software that already does some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging applications&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries like TUN/TAP&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page or repo&lt;br /&gt;
! Technical scope&lt;br /&gt;
! Why inspect it&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ, BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| AX.25 stack, node/BBS and APRS applications, KISS, multi-interface and IP integration&lt;br /&gt;
| Reference for a broad all-in-one user-space packet-radio environment&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| AX.25 stack, node/BBS, APRS, and messaging applications, KISS, AXIP, AXUDP&lt;br /&gt;
| Reference for structuring a nearly complete packet-radio stack in user space&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Modem/TNC functions, AX.25 framing, KISS, AGWPE, APRS tooling&lt;br /&gt;
| Clear reference for a maintained user-space TNC and host-side interface layer&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| Modem/TNC functions; serial KISS or Linux AX.25 integration&lt;br /&gt;
| Reference for an older Linux soundmodem design that can operate either through serial KISS or kernel AX.25&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| Modem/TNC functions, KISS, AGWPE&lt;br /&gt;
| Another example of a user-space software-TNC design exposing standard host interfaces&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging application, AX.25 support, AGWPE&lt;br /&gt;
| Useful example of integrating AX.25 support into a modern end-user application&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS application, iGate and digipeater functions&lt;br /&gt;
| Reference for a focused application that avoids general-purpose kernel AX.25 dependencies&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS application and related tooling&lt;br /&gt;
| Example of an application-layer design that works through external TNC interfaces&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ upstream discussion] explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, end users may need to stay on an older kernel until a user-space solution emerges. Interested developers might look into this as an area for contributions to new or existing projects.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel discussions ===&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
&lt;br /&gt;
=== Independent coverage ===&lt;br /&gt;
&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
&lt;br /&gt;
=== Repositories and source trees ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
&lt;br /&gt;
=== Older HOWTOs ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2594</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2594"/>
		<updated>2026-05-01T15:07:13Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: Updates for clarity and accuracy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This affects systems and applications that depend on Linux kernel AX.25 interfaces, but it does not mean AX.25 packet radio on Linux is going away.&lt;br /&gt;
&lt;br /&gt;
The short version is:&lt;br /&gt;
&lt;br /&gt;
* If your setup uses KISS or AGWPE to talk to a software TNC, hardware TNC, or packet-radio application, you are probably not affected by the kernel removal.&lt;br /&gt;
* If your setup uses Linux AX.25 interfaces such as &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, it will not keep working unchanged on newer kernels.&lt;br /&gt;
* Nothing breaks immediately just because the upstream kernel changed. Existing systems keep working until you update them, replace them, or rebuild them around newer kernels.&lt;br /&gt;
&lt;br /&gt;
For years, Linux included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs. This page explains what changed, how to tell whether your station depends on that older model, and what practical options exist now.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional Linux AX.25, Net/ROM, and ROSE stack.&lt;br /&gt;
* Existing documentation that assumes &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; will no longer apply to systems running newer kernels.&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run unchanged on newer kernels.&lt;br /&gt;
* Software that talks directly to KISS, AGWPE, serial TNCs, TCP TNCs, or its own built-in AX.25 implementation may continue to work without the kernel AX.25 stack.&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately.&lt;br /&gt;
&lt;br /&gt;
== Am I affected? ==&lt;br /&gt;
&lt;br /&gt;
A good first check is whether your station uses the old Linux kernel AX.25 model or a user-space TNC/application model.&lt;br /&gt;
&lt;br /&gt;
You are probably using the kernel AX.25 stack if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces such as &amp;lt;code&amp;gt;ax0&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application is configured to use a Linux AX.25 port or interface rather than KISS, AGWPE, serial, TCP, or a built-in packet engine&lt;br /&gt;
&lt;br /&gt;
You are probably using a user-space approach if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your application has its own AX.25 support built in, as many APRS tools do&lt;br /&gt;
* Your applications talk to KISS or AGWPE directly, whether to a software TNC, hardware TNC, or another packet-radio program&lt;br /&gt;
&lt;br /&gt;
If you are not sure, look at how your application is configured. KISS or AGWPE options are usually a good sign. A configuration that refers only to a Linux AX.25 port, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt; is a sign that you may need to freeze, reconfigure, or replace part of the station.&lt;br /&gt;
&lt;br /&gt;
== If you already have a working station ==&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are a few paths: keep the system running as it is, reconfigure applications around a different host-side interface, or replace part of the stack. The best choice depends on your specific use case, how much existing software you need to preserve, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at anything from replacing one piece to rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You might also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
There is always the option of resurrecting or re-implementing the old kernel code; the kernel maintainers have not ruled out merging up-to-date code back in. If you have the technical interest and motivation, there’s nothing to stop you. &lt;br /&gt;
&lt;br /&gt;
The state of maintenance for the code that was just removed and the state of development in other tools might be considerations when evaluating this path. ARDC did fund [https://www.ardc.net/apply/grants/2021-grants/grant-fixing-the-linux-kernel-ax-25/ an effort to related to AX.25 in the kernel] that encountered unexpected challenges and was not able to proceed. New coding tools may make this a more approachable project than it might have been in the past, with some caveats noted in the [https://docs.kernel.org/process/index.html#an-introduction-to-how-kernel-development-works Linux kernel development documentation], particularly around [https://docs.kernel.org/process/coding-assistants.html the use of large language models].&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
An understanding of the difference between in-kernel and user-space implementations of AX.25 is helpful when considering the impact of the kernel code removal and the options for moving forward.&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, typically a serial port connected to a hardware TNC and thus a radio. Applications could use that port like a device. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool, for example, took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, network applications could interact with it like any other network interface, and code in the kernel would handle AX.25 framing and interacting with the TNC using [https://www.ka9q.net/papers/kiss.html the KISS protocol].&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio by various means, and it in turn provides a KISS, AGWPE, TCP, or other interface for other applications to use. This is less like a device driver and more like a server daemon that client applications can connect to.&lt;br /&gt;
&lt;br /&gt;
Much of the current packet-radio software ecosystem already works this way. APRS clients, software TNCs, and all-in-one environments often keep AX.25 framing and packet-radio behavior in user space, then expose KISS, AGWPE, TCP, serial, or application-specific interfaces to the rest of the shack.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation. It can also be more flexible, easier to maintain, and more portable, since it does not depend on specific kernel versions or interfaces and can be developed independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you will see are outdated or inapplicable. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. Rather than looking into AX.25 per se, it may be more helpful to investigate specific applications and see how they use AX.25 for things like APRS and messaging.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The table below shows what common software expects and what you can do going forward. It is meant to be illustrative rather than exhaustive. For any software, the general pattern is:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE over serial or network interfaces, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint using a supported protocol.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there will not be a direct drop-in migration path on newer kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Migration approach&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ]&lt;br /&gt;
| Implements full stack and applications; can work with KISS and AGW type interfaces&lt;br /&gt;
| Use its built-in applications, or integrate it through the interfaces it supports&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Implements full stack and applications; KISS-oriented, with AXIP and AXUDP support&lt;br /&gt;
| Use its built-in applications, or integrate it through KISS-oriented links&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm SoundModem]&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| Pluggable AX.25 engine; AGWPE support&lt;br /&gt;
| AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| KISS, AGWPE, or Linux kernel AX.25 interfaces&lt;br /&gt;
| KISS or AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| KISS or Linux kernel AX.25 interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| External TNC or serial interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually pseudo-tty KISS, TCP KISS, or external TNC&lt;br /&gt;
| Native KISS-capable software&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| Linux AX.25 APRS digipeater&lt;br /&gt;
| APRS-specific replacement such as aprx or other APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel configuration tools&lt;br /&gt;
| No direct equivalent; keep only in legacy environments or replace with user-space TNC tooling&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| Linux AX.25, NET/ROM, and ROSE kernel user applications, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Application-specific replacement such as LinBPQ, JNOS, Pat, or APRS software&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts Linux kernel AX.25 interfaces into pseudo-tty KISS&lt;br /&gt;
| No direct equivalent; replace the kernel-binding pattern with a native KISS or AGWPE source&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
AX.25 may be considered active enough to justify new user-space implementations. Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 project, it might be worth looking first at software that already does some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging applications&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries like TUN/TAP&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page or repo&lt;br /&gt;
! Technical scope&lt;br /&gt;
! Why inspect it&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ, BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Full packet stack, node/BBS functions, multiple radio and network interfaces&lt;br /&gt;
| Reference for a broad all-in-one user-space packet-radio environment&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Full packet-radio environment, applications, and packet stack&lt;br /&gt;
| Reference for structuring a nearly complete packet-radio stack in user space&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25 framing, KISS, AGWPE, APRS-oriented tooling&lt;br /&gt;
| Clear reference for a maintained user-space TNC and host-side interface layer&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| Software modem/TNC functions for host applications&lt;br /&gt;
| Reference for modem/TNC implementation separate from the client application&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| Software modem/TNC, KISS, AGWPE&lt;br /&gt;
| Another example of a user-space software-TNC design exposing standard host interfaces&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client, AX.25 support, AGWPE integration&lt;br /&gt;
| Useful example of integrating AX.25 support into a modern end-user application&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater functions&lt;br /&gt;
| Reference for a focused application that avoids general-purpose kernel AX.25 dependencies&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Example of an application-layer design that works through external TNC interfaces&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ upstream discussion] explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, end users may need to stay on an older kernel until a user-space solution emerges. Interested developers might look into this as an area for contributions to new or existing projects.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel discussions ===&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
&lt;br /&gt;
=== Independent coverage ===&lt;br /&gt;
&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
&lt;br /&gt;
=== Repositories and source trees ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
&lt;br /&gt;
=== Older HOWTOs ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2593</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2593"/>
		<updated>2026-05-01T02:01:22Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You’re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you’re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there’s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Implements full stack and applications; provides KISS, AXIP/UDP, AGWPE interfaces&lt;br /&gt;
| Point applications at its KISS or AGWPE endpoint, or use its built-in applications&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Implements full stack and applications; provides KISS and AGWPE interfaces&lt;br /&gt;
| Point applications at its KISS or AGWPE endpoint, or use its built-in applications&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm SoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| KISS or AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Switch to something like LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Implements almost everything needed for a classic packet-radio setup in user space, and can be used as a reference for how to structure a complete user-space stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ upstream discussion] explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, you may need to stay on an older kernel until a user-space solution emerges.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2592</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2592"/>
		<updated>2026-05-01T02:01:01Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You’re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you’re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there’s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Implements full stack and applications; provides KISS, AXIP/UDP, AGWPE interfaces&lt;br /&gt;
| Point applications at its KISS or AGWPE endpoint, or use its built-in applications&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Implements full stack and applications; provides KISS and AGWPE interfaces&lt;br /&gt;
| Point applications at its KISS or AGWPE endpoint, or use its built-in applications&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm SoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| KISS or AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Switch to something like LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Implements almost everything needed for a classic packet-radio setup in user space, and can be used as a reference for how to structure a complete user-space stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The [[https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ upstream discussion]] explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, you may need to stay on an older kernel until a user-space solution emerges.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2591</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2591"/>
		<updated>2026-04-30T23:09:35Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You’re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you’re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there’s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Implements full stack and applications; provides KISS, AXIP/UDP, AGWPE interfaces&lt;br /&gt;
| Point applications at its KISS or AGWPE endpoint, or use its built-in applications&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Implements full stack and applications; provides KISS and AGWPE interfaces&lt;br /&gt;
| Point applications at its KISS or AGWPE endpoint, or use its built-in applications&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm SoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| KISS or AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Switch to something like LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Implements almost everything needed for a classic packet-radio setup in user space, and can be used as a reference for how to structure a complete user-space stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, you may need to stay on an older kernel until a user-space solution emerges.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2590</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2590"/>
		<updated>2026-04-30T23:07:38Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You’re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you’re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there’s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Works in the new world?&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Implements full stack and applications; provides KISS, AXIP/UDP, AGWPE interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Point applications at its KISS or AGWPE endpoint, or use its built-in applications&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Implements full stack and applications; provides KISS and AGWPE interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Point applications at its KISS or AGWPE endpoint, or use its built-in applications&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm SoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| Depends&lt;br /&gt;
| KISS or AGWPE&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| Depends&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| Yes&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| Depends&lt;br /&gt;
| KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| No&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mostly no&lt;br /&gt;
| Switch to something like LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some notes about reading the table:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Yes&#039;&#039;&#039; means the software already works without depending on the removed code.&lt;br /&gt;
* &#039;&#039;&#039;Depends&#039;&#039;&#039; means “check the configured interface.” The software may work fine through KISS, AGWPE, serial, or TCP.&lt;br /&gt;
* &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Mostly no&#039;&#039;&#039; means the software category is tightly coupled to the old Linux stack and will not work with future kernels.&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Implements almost everything needed for a classic packet-radio setup in user space, and can be used as a reference for how to structure a complete user-space stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, you may need to stay on an older kernel until a user-space solution emerges.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2589</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2589"/>
		<updated>2026-04-30T23:02:31Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You’re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you’re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there’s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Works in the new world?&lt;br /&gt;
! Next step to consider&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | All-in-one environments&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| It’s its own packet stack and node/BBS environment; provides KISS, AXIP/UDP, AGWPE interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint or AXIP/UDP interface and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| It is its own networking environment; typically external TNC or KISS oriented&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint and point your applications at it. Or point it at another TNC over AGWPE. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Software TNCs and soundmodems&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| User-space AX.25; KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Set up Dire Wolf’s KISS or AGWPE interface and point your applications at it&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm SoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Endpoint applications and clients&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; | Legacy patterns and kernel-bound tools&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| No&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mostly no&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| Depends on the specific app; often LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No&lt;br /&gt;
| Replace&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some notes about reading the table:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Yes&#039;&#039;&#039; means the software already works without depending on the removed code.&lt;br /&gt;
* &#039;&#039;&#039;Depends&#039;&#039;&#039; means “check the configured interface.” The software may work fine through KISS, AGWPE, serial, or TCP.&lt;br /&gt;
* &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Mostly no&#039;&#039;&#039; means the software category is tightly coupled to the old Linux stack and will not work with future kernels.&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Implements almost everything needed for a classic packet-radio setup in user space, and can be used as a reference for how to structure a complete user-space stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, you may need to stay on an older kernel until a user-space solution emerges.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2588</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2588"/>
		<updated>2026-04-30T22:56:18Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You’re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you’re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP or serial may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there’s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Works in the new world?&lt;br /&gt;
! Next step to consider&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| User-space AX.25; KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Set up Dire Wolf’s KISS or AGWPE interface and point your applications at it&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Own packet stack and node/BBS environment; KISS, AXIP/UDP, AGW-style interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint or AXIP/UDP interface and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm SoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Is its own networking environment; typically external TNC or KISS oriented&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint and point your applications at it. Or point it at another TNC over AGWPE.Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| No&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mostly no&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| Depends on the specific app; often LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No&lt;br /&gt;
| Replace&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some notes about reading the table:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Yes&#039;&#039;&#039; means the software already works without depending on the removed code.&lt;br /&gt;
* &#039;&#039;&#039;Depends&#039;&#039;&#039; means “check the configured interface.” The software may work fine through KISS, AGWPE, serial, or TCP.&lt;br /&gt;
* &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Mostly no&#039;&#039;&#039; means the software category is tightly coupled to the old Linux stack and will not work with future kernels.&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Implements almost everything needed for a classic packet-radio setup in user space, and can be used as a reference for how to structure a complete user-space stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, you may need to stay on an older kernel until a user-space solution emerges.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2587</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2587"/>
		<updated>2026-04-30T22:50:43Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You’re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you’re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there’s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Works in the new world?&lt;br /&gt;
! Next step to consider&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| User-space AX.25; KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Set up Dire Wolf’s KISS or AGWPE interface and point your applications at it&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Own packet stack and node/BBS environment; KISS, AXIP/UDP, AGW-style interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint or AXIP/UDP interface and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm SoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Is its own networking environment; typically external TNC or KISS oriented&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint and point your applications at it. Or point it at another TNC over AGWPE.Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| No&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mostly no&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| Depends on the specific app; often LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No&lt;br /&gt;
| Replace&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some notes about reading the table:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Yes&#039;&#039;&#039; means the software already works without depending on the removed code.&lt;br /&gt;
* &#039;&#039;&#039;Depends&#039;&#039;&#039; means “check the configured interface.” The software may work fine through KISS, AGWPE, serial, or TCP.&lt;br /&gt;
* &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Mostly no&#039;&#039;&#039; means the software category is tightly coupled to the old Linux stack and will not work with future kernels.&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Implements almost everything needed for a classic packet-radio setup in user space, and can be used as a reference for how to structure a complete user-space stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, you may need to stay on an older kernel until a user-space solution emerges.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/ Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/ Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2586</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2586"/>
		<updated>2026-04-30T22:49:09Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You’re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you’re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there’s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Works in the new world?&lt;br /&gt;
! Next step to consider&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| User-space AX.25; KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Set up Dire Wolf’s KISS or AGWPE interface and point your applications at it&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Own packet stack and node/BBS environment; KISS, AXIP/UDP, AGW-style interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint or AXIP/UDP interface and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm SoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Is its own networking environment; typically external TNC or KISS oriented&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint and point your applications at it. Or point it at another TNC over AGWPE.Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| No&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mostly no&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| Depends on the specific app; often LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No&lt;br /&gt;
| Replace&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some notes about reading the table:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Yes&#039;&#039;&#039; means the software already works without depending on the removed code.&lt;br /&gt;
* &#039;&#039;&#039;Depends&#039;&#039;&#039; means “check the configured interface.” The software may work fine through KISS, AGWPE, serial, or TCP.&lt;br /&gt;
* &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Mostly no&#039;&#039;&#039; means the software category is tightly coupled to the old Linux stack and will not work with future kernels.&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
Many of the building blocks already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Implements almost everything needed for a classic packet-radio setup in user space, and can be used as a reference for how to structure a complete user-space stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, you may need to stay on an older kernel until a user-space solution emerges.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260421021824.1293976-1-kuba@kernel.org/#r Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://lore.kernel.org/netdev/20260424232427.792249-1-stephen@networkplumber.org/ Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://lore.kernel.org/netdev/CAEoi9W6ZRw6aEh62Xbgkg-TW8URHbVp6dHTT9krFiTkotjTuTA@mail.gmail.com/#t Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2585</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2585"/>
		<updated>2026-04-30T22:35:00Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You’re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you’re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there’s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Works in the new world?&lt;br /&gt;
! Next step to consider&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| User-space AX.25; KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Set up Dire Wolf’s KISS or AGWPE interface and point your applications at it&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Own packet stack and node/BBS environment; KISS, AXIP/UDP, AGW-style interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint or AXIP/UDP interface and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm SoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Is its own networking environment; typically external TNC or KISS oriented&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint and point your applications at it. Or point it at another TNC over AGWPE.Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| No&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mostly no&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| Depends on the specific app; often LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No&lt;br /&gt;
| Replace&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some notes about reading the table:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Yes&#039;&#039;&#039; means the software already works without depending on the removed code.&lt;br /&gt;
* &#039;&#039;&#039;Depends&#039;&#039;&#039; means “check the configured interface.” The software may work fine through KISS, AGWPE, serial, or TCP.&lt;br /&gt;
* &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Mostly no&#039;&#039;&#039; means the software category is tightly coupled to the old Linux stack and will not work with future kernels.&lt;br /&gt;
&lt;br /&gt;
== Developing new user-space AX.25 tools ==&lt;br /&gt;
&lt;br /&gt;
One strong theme in this transition is that many of the building blocks people need already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Implements almost everything needed for a classic packet-radio setup in user space, and can be used as a reference for how to structure a complete user-space stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, you may need to stay on an older kernel until a user-space solution emerges.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179014.html Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1180117.html Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179252.html Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2584</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2584"/>
		<updated>2026-04-30T22:32:05Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You’re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you’re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you’re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there’s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Works in the new world?&lt;br /&gt;
! Next step to consider&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| User-space AX.25; KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Set up Dire Wolf’s KISS or AGWPE interface and point your applications at it&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Own packet stack and node/BBS environment; KISS, AXIP/UDP, AGW-style interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint or AXIP/UDP interface and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm SoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Is its own networking environment; typically external TNC or KISS oriented&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint and point your applications at it. Or point it at another TNC over AGWPE.Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| No&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mostly no&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| Depends on the specific app; often LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No&lt;br /&gt;
| Replace&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some notes about reading the table:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Yes&#039;&#039;&#039; means the software already works without depending on the removed code.&lt;br /&gt;
* &#039;&#039;&#039;Depends&#039;&#039;&#039; means “check the configured interface.” The software may work fine through KISS, AGWPE, serial, or TCP.&lt;br /&gt;
* &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Mostly no&#039;&#039;&#039; means the software category is tightly coupled to the old Linux stack and will not work with future kernels.&lt;br /&gt;
&lt;br /&gt;
== Existing user-space projects worth studying first ==&lt;br /&gt;
&lt;br /&gt;
One strong theme in this transition is that many of the building blocks people need already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Worth inspecting for people whose main interest is preserving classic packet workflows&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, you may need to stay on an older kernel until a user-space solution emerges.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179014.html Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1180117.html Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179252.html Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2583</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2583"/>
		<updated>2026-04-30T22:26:54Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You configure &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You&#039;re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you&#039;re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there&#039;s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Works in the new world?&lt;br /&gt;
! Next step to consider&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| User-space AX.25; KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Set up Dire Wolf&#039;s KISS or AGWPE interface and point your applications at it&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Own packet stack and node/BBS environment; KISS, AXIP/UDP, AGW-style interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint or AXIP/UDP interface and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE-style host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm SoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE-style host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Is its own networking environment; typically external TNC or KISS oriented&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint and point your applications at it. Or point it at another TNC over AGWPE.Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| No&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mostly no&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| Depends on the specific app; often LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No&lt;br /&gt;
| Replace&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some notes about reading the table:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Yes&#039;&#039;&#039; means the software already works without depending on the removed code.&lt;br /&gt;
* &#039;&#039;&#039;Depends&#039;&#039;&#039; means “check the configured interface.” The software may work fine through KISS, AGWPE, serial, or TCP.&lt;br /&gt;
* &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Mostly no&#039;&#039;&#039; means the software category is tightly coupled to the old Linux stack and will not work with future kernels.&lt;br /&gt;
&lt;br /&gt;
== Existing user-space projects worth studying first ==&lt;br /&gt;
&lt;br /&gt;
One strong theme in this transition is that many of the building blocks people need already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE-style interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Worth inspecting for people whose main interest is preserving classic packet workflows&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, you may need to stay on an older kernel until a user-space solution emerges.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179014.html Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1180117.html Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179252.html Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2582</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2582"/>
		<updated>2026-04-30T22:24:42Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You&#039;re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you&#039;re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there&#039;s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Works in the new world?&lt;br /&gt;
! Next step to consider&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| User-space AX.25; KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Set up Dire Wolf&#039;s KISS or AGWPE interface and point your applications at it&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Own packet stack and node/BBS environment; KISS, AXIP/UDP, AGW-style interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint or AXIP/UDP interface and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE-style host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm SoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE-style host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Is its own networking environment; typically external TNC or KISS oriented&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint and point your applications at it. Or point it at another TNC over AGWPE.Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| No&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mostly no&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| Depends on the specific app; often LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No&lt;br /&gt;
| Replace&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some notes about reading the table:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Yes&#039;&#039;&#039; means the software already works without depending on the removed code.&lt;br /&gt;
* &#039;&#039;&#039;Depends&#039;&#039;&#039; means “check the configured interface.” The software may work fine through KISS, AGWPE, serial, or TCP.&lt;br /&gt;
* &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Mostly no&#039;&#039;&#039; means the software category is tightly coupled to the old Linux stack and will not work with future kernels.&lt;br /&gt;
&lt;br /&gt;
== Existing user-space projects worth studying first ==&lt;br /&gt;
&lt;br /&gt;
One strong theme in this transition is that many of the building blocks people need already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE-style interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Worth inspecting for people whose main interest is preserving classic packet workflows&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, you may need to stay on an older kernel until a user-space solution emerges.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179014.html Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1180117.html Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179252.html Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2581</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2581"/>
		<updated>2026-04-30T22:12:21Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You&#039;re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you&#039;re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there&#039;s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Works in the new world?&lt;br /&gt;
! Next step to consider&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| User-space AX.25; KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Set up Dire Wolf&#039;s KISS or AGWPE interface and point your applications at it&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Own packet stack and node/BBS environment; KISS, AXIP/UDP, AGW-style interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint or AXIP/UDP interface and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE-style host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [http://uz7.ho.ua/packetradio.htm SoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE-style host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Is its own networking environment; typically external TNC or KISS oriented&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| Configure its KISS endpoint and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| No&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mostly no&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| Depends on the specific app; often LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No&lt;br /&gt;
| Replace&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some notes about reading the table:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Yes&#039;&#039;&#039; means the software already works without depending on the removed code.&lt;br /&gt;
* &#039;&#039;&#039;Depends&#039;&#039;&#039; means “check the configured interface.” The software may work fine through KISS, AGWPE, serial, or TCP.&lt;br /&gt;
* &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Mostly no&#039;&#039;&#039; means the software category is tightly coupled to the old Linux stack and will not work with future kernels.&lt;br /&gt;
&lt;br /&gt;
== Existing user-space projects worth studying first ==&lt;br /&gt;
&lt;br /&gt;
One strong theme in this transition is that many of the building blocks people need already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE-style interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Worth inspecting for people whose main interest is preserving classic packet workflows&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, you may need to stay on an older kernel until a user-space solution emerges.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179014.html Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1180117.html Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179252.html Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2580</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2580"/>
		<updated>2026-04-30T22:08:52Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You&#039;re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you&#039;re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Ressurect ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there&#039;s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Works in the new world?&lt;br /&gt;
! Next step to consider&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| User-space AX.25; KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Set up Dire Wolf&#039;s KISS or AGWPE interface and point your applications at it&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Own packet stack and node/BBS environment; KISS, AXIP/UDP, AGW-style interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint or AXIP/UDP interface and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/Xastir Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE-style host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Is its own networking environment; typically external TNC or KISS oriented&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| Configure its KISS endpoint and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| No&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mostly no&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| Depends on the specific app; often LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No&lt;br /&gt;
| Replace&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some notes about reading the table:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Yes&#039;&#039;&#039; means the software already works without depending on the removed code.&lt;br /&gt;
* &#039;&#039;&#039;Depends&#039;&#039;&#039; means “check the configured interface.” The software may work fine through KISS, AGWPE, serial, or TCP.&lt;br /&gt;
* &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Mostly no&#039;&#039;&#039; means the software category is tightly coupled to the old Linux stack and will not work with future kernels.&lt;br /&gt;
&lt;br /&gt;
== Existing user-space projects worth studying first ==&lt;br /&gt;
&lt;br /&gt;
One strong theme in this transition is that many of the building blocks people need already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE-style interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Worth inspecting for people whose main interest is preserving classic packet workflows&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, you may need to stay on an older kernel until a user-space solution emerges.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179014.html Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1180117.html Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179252.html Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2579</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2579"/>
		<updated>2026-04-30T21:58:24Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
{{Note|This page is a work in progress. It is not yet complete, and it may contain inaccuracies or outdated information.}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You&#039;re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you&#039;re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Ressurect ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there&#039;s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Works in the new world?&lt;br /&gt;
! Next step to consider&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| User-space AX.25; KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Set up Dire Wolf&#039;s KISS or AGWPE interface and point your applications at it&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Own packet stack and node/BBS environment; KISS, AXIP/UDP, AGW-style interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint or AXIP/UDP interface and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.xastir.org/index.php/XASTIR_Manual Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/SoundModem SoundModem]&lt;br /&gt;
| User-space modem/TNC; can expose KISS and other endpoints&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE-style host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Is its own networking environment; typically external TNC or KISS oriented&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| Configure its KISS endpoint and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/n2ygk/aprsdigi/ aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| No&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mostly no&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| Depends on the specific app; often LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No&lt;br /&gt;
| Replace&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some notes about reading the table:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Yes&#039;&#039;&#039; means the software already works without depending on the removed code.&lt;br /&gt;
* &#039;&#039;&#039;Depends&#039;&#039;&#039; means “check the configured interface.” The software may work fine through KISS, AGWPE, serial, or TCP.&lt;br /&gt;
* &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Mostly no&#039;&#039;&#039; means the software category is tightly coupled to the old Linux stack and will not work with future kernels.&lt;br /&gt;
&lt;br /&gt;
== Existing user-space projects worth studying first ==&lt;br /&gt;
&lt;br /&gt;
One strong theme in this transition is that many of the building blocks people need already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE-style interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Worth inspecting for people whose main interest is preserving classic packet workflows&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, you may need to stay on an older kernel until a user-space solution emerges.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179014.html Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1180117.html Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179252.html Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2578</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2578"/>
		<updated>2026-04-30T21:33:45Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You&#039;re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you&#039;re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Ressurect ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there&#039;s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Works in the new world?&lt;br /&gt;
! Next step to consider&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| User-space AX.25; KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Set up Dire Wolf&#039;s KISS or AGWPE interface and point your applications at it&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Own packet stack and node/BBS environment; KISS, AXIP/UDP, AGW-style interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint or AXIP/UDP interface and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.xastir.org/index.php/XASTIR_Manual Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/SoundModem SoundModem]&lt;br /&gt;
| User-space modem/TNC; can expose KISS and other endpoints&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE-style host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Is its own networking environment; typically external TNC or KISS oriented&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| Configure its KISS endpoint and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://tracker.debian.org/pkg/aprsdigi aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| No&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mostly no&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| Depends on the specific app; often LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No&lt;br /&gt;
| Replace&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some notes about reading the table:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Yes&#039;&#039;&#039; means the software already works without depending on the removed code.&lt;br /&gt;
* &#039;&#039;&#039;Depends&#039;&#039;&#039; means “check the configured interface.” The software may work fine through KISS, AGWPE, serial, or TCP.&lt;br /&gt;
* &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Mostly no&#039;&#039;&#039; means the software category is tightly coupled to the old Linux stack and will not work with future kernels.&lt;br /&gt;
&lt;br /&gt;
== Existing user-space projects worth studying first ==&lt;br /&gt;
&lt;br /&gt;
One strong theme in this transition is that many of the building blocks people need already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE-style interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Worth inspecting for people whose main interest is preserving classic packet workflows&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
For now, you may need to stay on an older kernel until a user-space solution emerges.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179014.html Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1180117.html Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179252.html Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2577</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2577"/>
		<updated>2026-04-30T21:25:13Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. This provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
This change might affect you if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; shows &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You use &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;&lt;br /&gt;
* You use &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
You are probably less affected if:&lt;br /&gt;
* &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip link&amp;lt;/code&amp;gt; does not show any &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces on your system&lt;br /&gt;
* You already use a user-space TNC like Dire Wolf (without &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The app you use has its own AX.25 built in (common with APRS software)&lt;br /&gt;
* You&#039;re using applications that can talk to KISS or AGWPE directly, to either a software or hardware TNC&lt;br /&gt;
&lt;br /&gt;
== Kernel vs. user space ==&lt;br /&gt;
&lt;br /&gt;
The in-kernel code worked like a device driver. The &amp;lt;code&amp;gt;/etc/axports&amp;lt;/code&amp;gt; file defined a radio port, which was at the time usually a serial port connected to a hardware TNC. The &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; tool took that port and created an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; network interface. You could assign that interface an IP address, route through it, and throw data at it, and the kernel would frame it as AX.25 and send it out to the radio for transmission.&lt;br /&gt;
&lt;br /&gt;
A user-space implementation, on the other hand, implements AX.25 in an executable binary that you run separately, not as part of the kernel. It might interface with an external hardware TNC over a serial port, it might work with a software soundmodem, or it might be an all-in-one soundmodem and software TNC combined. You configure it to talk to your radio, and then you point your applications at it through KISS, AGWPE, TCP, etc.; the kernel never needs to know that AX.25 is involved at all.&lt;br /&gt;
&lt;br /&gt;
In practice, a user-space implementation can be just as capable as a kernel implementation, and moreover, it can be more flexible and easier to maintain. It can also be more portable, since it does not depend on specific kernel versions or interfaces, and it can be developed and updated independently of the kernel release cycle.&lt;br /&gt;
&lt;br /&gt;
All this being the case, removing AX.25 from the kernel is significant mainly for people preserving older working systems or using software that was introduced years ago and only supports the old kernel interfaces.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, you may already be using user-space AX.25 in the form of APRS clients or software TNCs like Dire Wolf. &lt;br /&gt;
&lt;br /&gt;
If you are learning, you face the challenge that much of the documentation currently available still refers to the old kernel-based model. This means a lot of the first search results you see may be outdated or not directly applicable to your situation. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today. &lt;br /&gt;
&lt;br /&gt;
== If you&#039;re more established ==&lt;br /&gt;
&lt;br /&gt;
If you are already running packet radio on Linux, the first question is what you want continued operation of your station to look like.&lt;br /&gt;
&lt;br /&gt;
Broadly speaking, there are at least a few paths: keep it running as is, reconfigure the pieces around the radio, or replace part of the stack. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing or able to change.&lt;br /&gt;
&lt;br /&gt;
=== Freeze (keep it running as is) ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using software that depends on kernel AX.25, future kernel updates will break it. If you want to keep that software working, the simplest path may be to stay on the version of Linux you have now.&lt;br /&gt;
&lt;br /&gt;
You can keep using that system for as long as you like, but you will find ample advice to consider the security implications. Older kernels do not receive fixes for newly discovered vulnerabilities, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth taking extra precautions to secure the system.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using software released relatively recently, you may be able to reconfigure it. For example, an APRS application that can use AGWPE or KISS over TCP may only need to be pointed at Dire Wolf or a hardware TNC via a different protocol.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
This is the likely path when the old application depends on the kernel AX.25 stack and cannot be reconfigured to use KISS, AGWPE, serial, TCP, or anything else. You may be looking at rebuilding your stack from top to bottom. Depending on your goals, you might consider something that has AX.25 and common packet tools built in, like LinBPQ or JNOS. You mght also consider a more modular approach, with a software TNC like Dire Wolf and separate applications for messaging, BBS, or APRS.&lt;br /&gt;
&lt;br /&gt;
=== Ressurect ===&lt;br /&gt;
&lt;br /&gt;
If you have the technical interest and motivation, there&#039;s nothing to stop you reviving the kernel code in the out-of-tree repository. &lt;br /&gt;
&lt;br /&gt;
The long absence of maintainers for the code that was just removed might be an indication of the challenges of this path.&lt;br /&gt;
&lt;br /&gt;
== Migration options ==&lt;br /&gt;
&lt;br /&gt;
The main question is simpler than the table might make it look:&lt;br /&gt;
&lt;br /&gt;
* If your application can already speak KISS or AGWPE, you probably do not need Linux kernel AX.25. Point the application at a software TNC, hardware TNC, or other endpoint that provides the same host-side interface.&lt;br /&gt;
* If your application requires Linux AX.25 sockets, &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interfaces, &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;, or the related kernel tools, there may not be a direct drop-in migration path on newer  kernels.&lt;br /&gt;
* If you are not sure, look at how you configure the application. If you see KISS or AGWPE options, that is a good sign. If you only have the option to point at an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface, that is not as good a sign.&lt;br /&gt;
&lt;br /&gt;
The “Common migration target” column is therefore mostly about host-side interfaces, not about naming one preferred tool. A KISS or AGWPE endpoint might come from Dire Wolf, QtSoundModem, SoundModem, a hardware TNC, or another program that exposes the same kind of interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Works in the new world?&lt;br /&gt;
! Next step to consider&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| User-space AX.25; KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Set up Dire Wolf&#039;s KISS or AGWPE interface and point your applications at it&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Own packet stack and node/BBS environment; KISS, AXIP/UDP, AGW-style interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Configure its KISS endpoint or AXIP/UDP interface and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.xastir.org/index.php/XASTIR_Manual Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/SoundModem SoundModem]&lt;br /&gt;
| User-space modem/TNC; can expose KISS and other endpoints&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS or AGWPE endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE-style host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Point your applications at its KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Is its own networking environment; typically external TNC or KISS oriented&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| Configure its KISS endpoint and point your applications at it. Or just use it for everything if it already covers your use case.&lt;br /&gt;
|-&lt;br /&gt;
| [https://tracker.debian.org/pkg/aprsdigi aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| KISS endpoint&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| No&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack, including &amp;lt;code&amp;gt;ax25d&amp;lt;/code&amp;gt;&lt;br /&gt;
| Mostly no&lt;br /&gt;
| Freeze (or Revive)&lt;br /&gt;
| Depends on the specific app; often LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No&lt;br /&gt;
| Replace&lt;br /&gt;
| No direct equivalent; consider refactoring your stack&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some notes about reading the table:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Yes&#039;&#039;&#039; means the software already works without depending on the removed code.&lt;br /&gt;
* &#039;&#039;&#039;Depends&#039;&#039;&#039; means “check the configured interface.” The software may work fine through KISS, AGWPE, serial, or TCP.&lt;br /&gt;
* &#039;&#039;&#039;No&#039;&#039;&#039; or &#039;&#039;&#039;Mostly no&#039;&#039;&#039; means the software category is tightly coupled to the old Linux stack and will not work with future kernels.&lt;br /&gt;
&lt;br /&gt;
== Existing user-space projects worth studying first ==&lt;br /&gt;
&lt;br /&gt;
One strong theme in this transition is that many of the building blocks people need already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* Modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* Integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the goal is mainly messaging&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE-style interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that can use user-space TNCs&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Worth inspecting for people whose main interest is preserving classic packet workflows&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What of IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the range of options has narrowed.&lt;br /&gt;
&lt;br /&gt;
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* Integration with IP through TUN/TAP or similar interfaces&lt;br /&gt;
* Narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
== If you are stuck with old software ==&lt;br /&gt;
&lt;br /&gt;
Some people will be in the awkward middle: the software still matters, it expects the kernel interfaces, and there is no obvious one-command migration.&lt;br /&gt;
&lt;br /&gt;
If that is you, the best immediate response is usually not “rewrite everything,” but:&lt;br /&gt;
&lt;br /&gt;
# identify the exact interface your application expects&lt;br /&gt;
# determine whether that interface is kernel AX.25 specifically, or simply KISS / AGWPE / serial control&lt;br /&gt;
# if &amp;lt;code&amp;gt;kissattach&amp;lt;/code&amp;gt; is part of the path, ask whether it is only being used to create an &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; interface for software that could talk to KISS or AGWPE directly&lt;br /&gt;
# check whether a user-space adapter, software TNC, or out-of-tree module can preserve the workflow&lt;br /&gt;
# decide whether the system should be frozen, migrated, or rebuilt&lt;br /&gt;
&lt;br /&gt;
For some stations, a preserved older Linux environment may be the right answer for a while. For others, the better answer will be to retire the old application and move to a user-space stack.&lt;br /&gt;
&lt;br /&gt;
== If you want to help advance AX.25 on Linux ==&lt;br /&gt;
&lt;br /&gt;
If this change motivates you to improve the state of AX.25 rather than simply work around it, there are several useful starting points.&lt;br /&gt;
&lt;br /&gt;
=== 1. Clarify the real use cases ===&lt;br /&gt;
&lt;br /&gt;
The first question might not be “How do we save everything?” but rather “What do people still need?”&lt;br /&gt;
&lt;br /&gt;
Those may be very different things, and without clarity, it might be easy to spend effort rebuilding interfaces nobody still uses while diverting effort away from projects that people do still use.&lt;br /&gt;
&lt;br /&gt;
=== 3. Preserve working knowledge before it disappears ===&lt;br /&gt;
&lt;br /&gt;
A lot of Linux AX.25 knowledge lives in old HOWTOs, mailing-list posts, working systems on shelves, and people&#039;s heads. Current documentation is never unwelcome. Now could be a good time to capture that knowledge.&lt;br /&gt;
&lt;br /&gt;
=== 4. Start from existing active projects ===&lt;br /&gt;
&lt;br /&gt;
Starting from a maintained or recently active user-space project is likely to be more productive than preserving historical artifacts. That might mean extending an existing implementation, building missing protocol pieces, or writing compatibility layers like a TUN/TAP adapter for IP over AX.25.&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179014.html Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1180117.html Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179252.html Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=Category:Explanation&amp;diff=2576</id>
		<title>Category:Explanation</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=Category:Explanation&amp;diff=2576"/>
		<updated>2026-04-30T18:53:02Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pages whose primary goal is to help the reader understand a topic: background, concepts, tradeoffs, governance, or orientation.&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2575</id>
		<title>AX.25 on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=AX.25_on_Linux&amp;diff=2575"/>
		<updated>2026-04-30T18:53:02Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:AX.25 on Linux}}&lt;br /&gt;
&lt;br /&gt;
For years, Linux has included an in-kernel implementation of AX.25, Net/ROM, and ROSE. The kernel provided network interfaces for connected-mode packet, and user-space applications could rely on those interfaces for their AX.25 needs.&lt;br /&gt;
&lt;br /&gt;
As of April 2026, the in-tree kernel AX.25 stack has been removed from upstream Linux. This page explains the current situation and outlines practical options going forward.&lt;br /&gt;
&lt;br /&gt;
== What is changing ==&lt;br /&gt;
&lt;br /&gt;
* Upcoming mainline kernel releases will no longer include the traditional AX.25 stack&lt;br /&gt;
* Existing documentation related to these protocols will no longer apply to systems running newer kernels&lt;br /&gt;
* Software that depends specifically on kernel AX.25 interfaces will be unable to run on newer kernels&lt;br /&gt;
* The out-of-tree repository &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; will host the removed code for those who want to inspect it or maintain it separately&lt;br /&gt;
&lt;br /&gt;
== Who is likely to be affected ==&lt;br /&gt;
&lt;br /&gt;
=== Probably affected ===&lt;br /&gt;
&lt;br /&gt;
* Operators running older Linux packet-radio setups that depend on kernel AX.25 interfaces&lt;br /&gt;
* Users of older applications that assume AX.25 support is available through the Linux kernel network stack&lt;br /&gt;
* Maintainers of software that has never needed to implement its own AX.25 handling because Linux already provided it&lt;br /&gt;
&lt;br /&gt;
=== Probably less affected ===&lt;br /&gt;
&lt;br /&gt;
* Operators already using user-space TNCs or modem software like Dire Wolf&lt;br /&gt;
* Applications for things like APRS that already handle AX.25 internally and do not depend on Linux kernel interfaces&lt;br /&gt;
* People experimenting with newer software that does not depend on the old kernel path&lt;br /&gt;
&lt;br /&gt;
== Not the end of AX.25 ==&lt;br /&gt;
&lt;br /&gt;
AX.25 still remains useful and is in use. The change is that Linux will no longer provide a built-in kernel implementation of it. Instead, applications that need AX.25 will need to implement it in user space or rely on external software that does.&lt;br /&gt;
&lt;br /&gt;
The difference between in-kernel and user-space implementations is that in-kernel code, working like a device driver, can present AX.25 interfaces as native network interfaces. Applications can then use familiar socket APIs to build networking functionality without having to worry about the details of AX.25 (in theory). &lt;br /&gt;
&lt;br /&gt;
User-space implementations, on the other hand, sit between a radio and an application without needing to be part of the kernel. On the radio side, they may work with audio devices or external TNCs over serial ports. On the application side, they present a data stream or API that the application can use. Instead of talking to what looks like a network device, an application talks to another application that knows how to handle AX.25. This means applications need to be able to talk to such user-space tools. Many applications already do, through KISS, AGWPE, TCP/IP, or other interfaces.&lt;br /&gt;
&lt;br /&gt;
Today, a lot of practical packet-radio software already uses or is compatible with user-space implementations.&lt;br /&gt;
&lt;br /&gt;
Taken together, this means that removing AX.25 from the kernel is significant mainly for people preserving older working systems and people still using software built around the legacy kernel interfaces. For new deployments, and for many existing ones, it is more practical to build on user-space tools.&lt;br /&gt;
&lt;br /&gt;
== If you are just getting started ==&lt;br /&gt;
&lt;br /&gt;
If you are new to packet radio on Linux, user-space tools are the way forward. You may already be using them in the form of APRS clients or software TNCs. &lt;br /&gt;
&lt;br /&gt;
You face the challenge that much of the documentation currently available still refers to the old kernel-based model. That documentation might still be useful for understanding the basics of AX.25, but it is unlikely to be a good guide for how to set up a new station today.&lt;br /&gt;
&lt;br /&gt;
== Next-step paths ==&lt;br /&gt;
&lt;br /&gt;
There are a few general ways to handle the transition away from kernel AX.25 support. The best choice depends on your specific use case, how much you want to preserve existing software, and how much you are willing to change.&lt;br /&gt;
&lt;br /&gt;
=== “Freeze” ===&lt;br /&gt;
&lt;br /&gt;
Keep an older kernel in service.&lt;br /&gt;
&lt;br /&gt;
Use this when:&lt;br /&gt;
&lt;br /&gt;
* the station is working now&lt;br /&gt;
* the software depends on kernel AX.25 interfaces&lt;br /&gt;
* you need continuity more than modernization this week&lt;br /&gt;
&lt;br /&gt;
This is often the least disruptive short-term option, but it carries security debt. Older kernels do not receive fixes for newly discovered vulnerabilities forever, and the longer a system stays pinned to an old kernel, the more exposed it can become. If you choose this path, it is worth limiting the system’s role, network exposure, and upgrade churn.&lt;br /&gt;
&lt;br /&gt;
=== Reconfigure ===&lt;br /&gt;
&lt;br /&gt;
Keep the same application, but change how it reaches the radio side.&lt;br /&gt;
&lt;br /&gt;
Typical examples:&lt;br /&gt;
&lt;br /&gt;
* switch from a kernel AX.25 port to KISS&lt;br /&gt;
* switch from a kernel AX.25 port to AGWPE&lt;br /&gt;
* attach the application to a software TNC instead of a kernel network interface&lt;br /&gt;
&lt;br /&gt;
This is often the best path when the application itself is still useful, but its old default Linux integration is not.&lt;br /&gt;
&lt;br /&gt;
=== Bridge ===&lt;br /&gt;
&lt;br /&gt;
Insert a user-space modem or TNC layer in front of the application.&lt;br /&gt;
&lt;br /&gt;
Typical examples:&lt;br /&gt;
&lt;br /&gt;
* Dire Wolf presenting KISS over TCP or serial&lt;br /&gt;
* Dire Wolf presenting AGWPE over TCP&lt;br /&gt;
* another software TNC or packet engine exposing a stable host-side protocol&lt;br /&gt;
&lt;br /&gt;
This path is especially useful when the application can already speak KISS or AGWPE but was previously wired into a kernel-based setup.&lt;br /&gt;
&lt;br /&gt;
=== Replace ===&lt;br /&gt;
&lt;br /&gt;
Move to different software that already lives comfortably in the user-space model.&lt;br /&gt;
&lt;br /&gt;
This is often the cleanest long-term answer for:&lt;br /&gt;
&lt;br /&gt;
* new deployments&lt;br /&gt;
* APRS-focused stations&lt;br /&gt;
* stations whose existing software is effectively unmaintained&lt;br /&gt;
&lt;br /&gt;
=== Revive ===&lt;br /&gt;
&lt;br /&gt;
Carry the out-of-tree kernel code, help maintain it, or port missing behavior into a new user-space implementation.&lt;br /&gt;
&lt;br /&gt;
This path makes sense mainly if:&lt;br /&gt;
&lt;br /&gt;
* you have a real use case that still requires the old kernel semantics&lt;br /&gt;
* you are willing to do development and maintenance work&lt;br /&gt;
* you are trying to preserve something beyond one private station&lt;br /&gt;
&lt;br /&gt;
== Compatibility snapshot ==&lt;br /&gt;
&lt;br /&gt;
The table below is not exhaustive, but it covers many of the tools readers are most likely to encounter when working with AX.25 or adjacent Linux packet-radio workflows.&lt;br /&gt;
&lt;br /&gt;
These are &#039;&#039;&#039;not endorsements&#039;&#039;&#039;. The “Common migration target” column is meant as a practical example of &#039;&#039;what kind of thing&#039;&#039; a reader might try next, not as a universal recommendation.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Current interface&lt;br /&gt;
! Works in the new world?&lt;br /&gt;
! Next step to consider&lt;br /&gt;
! Common migration target&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/wb2osz/direwolf Dire Wolf]&lt;br /&gt;
| User-space AX.25; KISS over TCP/serial; AGWPE over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Bridge or Replace&lt;br /&gt;
| Dire Wolf as the anchor itself, or paired with Pat / Xastir / aprx&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/la5nta/pat Pat]&lt;br /&gt;
| AX.25 support with pluggable engines; AGWPE support; can use Dire Wolf directly over TCP&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure or Bridge&lt;br /&gt;
| Dire Wolf over AGWPE/TCP&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html LinBPQ / BPQ32]&lt;br /&gt;
| Own packet stack and node/BBS environment; KISS, AXIP/UDP, AGW-style interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| LinBPQ itself, or Dire Wolf feeding LinBPQ via KISS&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.xastir.org/index.php/XASTIR_Manual Xastir]&lt;br /&gt;
| Serial KISS, AGWPE, and optional Linux kernel AX.25 network ports&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Dire Wolf or another KISS/AGWPE-capable software TNC&lt;br /&gt;
|-&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ aprx]&lt;br /&gt;
| Serial KISS or kernel AX.25 interface&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Dire Wolf or a hardware KISS TNC&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ YAAC]&lt;br /&gt;
| User-space APRS client using external TNCs / serial interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Existing external TNC, or Dire Wolf acting as one&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Xastir/SoundModem SoundModem]&lt;br /&gt;
| User-space modem/TNC; can expose KISS and other interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Bridge or Replace&lt;br /&gt;
| Dire Wolf or SoundModem itself, depending on platform and feature needs&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html QtSoundModem]&lt;br /&gt;
| User-space modem/TNC; KISS and AGWPE-style host-side interfaces&lt;br /&gt;
| Yes&lt;br /&gt;
| Bridge or Replace&lt;br /&gt;
| QtSoundModem or Dire Wolf as the software-TNC layer&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.ka9q.net/papers/kiss.html KISS-oriented legacy applications generally]&lt;br /&gt;
| Usually external TNC, pseudo-tty KISS, or TCP KISS&lt;br /&gt;
| Depends&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| Dire Wolf, QtSoundModem, or a hardware KISS TNC&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ JNOS 2]&lt;br /&gt;
| Own networking environment; typically external TNC / KISS oriented rather than Linux kernel AX.25 sockets&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure or Replace&lt;br /&gt;
| JNOS itself with a KISS-capable modem/TNC&lt;br /&gt;
|-&lt;br /&gt;
| [https://tracker.debian.org/pkg/aprsdigi aprsdigi]&lt;br /&gt;
| APRS digipeater software; commonly used with KISS TNCs&lt;br /&gt;
| Yes&lt;br /&gt;
| Reconfigure&lt;br /&gt;
| Dire Wolf or a hardware KISS TNC&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-tools ax25-tools]&lt;br /&gt;
| Tools for configuring Linux AX.25 / NET/ROM / ROSE ports&lt;br /&gt;
| No&lt;br /&gt;
| Freeze or Revive&lt;br /&gt;
| None directly; replace the workflow with user-space TNC tooling or keep only in a legacy environment&lt;br /&gt;
|-&lt;br /&gt;
| [https://packages.debian.org/sid/ax25-apps ax25-apps]&lt;br /&gt;
| User applications for AX.25 / NET/ROM / ROSE over the Linux stack&lt;br /&gt;
| Mostly no&lt;br /&gt;
| Freeze or Revive&lt;br /&gt;
| Depends on the specific app; often LinBPQ, JNOS, Pat, or an APRS-specific tool&lt;br /&gt;
|-&lt;br /&gt;
| [https://manpages.debian.org/unstable/ax25-apps/ax25d.8.en.html ax25d]&lt;br /&gt;
| AX.25 connection dispatcher / daemon built around the Linux AX.25 stack&lt;br /&gt;
| No&lt;br /&gt;
| Freeze or Revive&lt;br /&gt;
| Usually not a direct one-for-one migration; often LinBPQ, JNOS, or an application-specific redesign&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.systutorials.com/docs/linux/man/8-net2kiss/ net2kiss]&lt;br /&gt;
| Converts a kernel AX.25 network interface into a pseudo-tty KISS stream&lt;br /&gt;
| No&lt;br /&gt;
| Revive&lt;br /&gt;
| Replace the whole pattern with a native user-space KISS or AGWPE source&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some notes about reading the table:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Yes&#039;&#039;&#039; means the software already has a credible path that does not require the removed in-tree kernel stack.&lt;br /&gt;
* &#039;&#039;&#039;Depends&#039;&#039;&#039; means the software can still work, but only through a non-kernel interface or a different configuration mode.&lt;br /&gt;
* &#039;&#039;&#039;Mostly no&#039;&#039;&#039; means the software category is tightly coupled enough to the old Linux stack that it is not a good default choice on new upstream kernels without extra work.&lt;br /&gt;
&lt;br /&gt;
== Existing user-space projects worth studying first ==&lt;br /&gt;
&lt;br /&gt;
One strong theme in this transition is that many of the building blocks people need already exist in open source. Before starting a brand-new user-space AX.25 implementation, it is worth looking first at projects that already do some or all of the following:&lt;br /&gt;
&lt;br /&gt;
* modem/TNC functions&lt;br /&gt;
* AX.25 framing&lt;br /&gt;
* KISS or AGWPE host-side interfaces&lt;br /&gt;
* APRS, BBS, node, or messaging application layers&lt;br /&gt;
* integration with modern Linux networking through user-space boundaries&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Project&lt;br /&gt;
! Project page / repo&lt;br /&gt;
! What it already covers&lt;br /&gt;
! Why it is worth inspecting&lt;br /&gt;
|-&lt;br /&gt;
| Dire Wolf&lt;br /&gt;
| [https://github.com/wb2osz/direwolf GitHub]&lt;br /&gt;
| Software TNC, AX.25, APRS-oriented tooling, KISS, AGWPE&lt;br /&gt;
| One of the clearest examples of a maintained user-space foundation that many other tools can sit on top of&lt;br /&gt;
|-&lt;br /&gt;
| Pat&lt;br /&gt;
| [https://github.com/la5nta/pat GitHub]&lt;br /&gt;
| Messaging client with AX.25 support and AGWPE integration&lt;br /&gt;
| Useful when the real goal is messaging workflow rather than rebuilding low-level plumbing&lt;br /&gt;
|-&lt;br /&gt;
| LinBPQ / BPQ32&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/LinBPQBuild.html project page]&lt;br /&gt;
| Node, BBS, switch, packet stack, multiple radio/network interfaces&lt;br /&gt;
| Covers a broad slice of packet-radio infrastructure and may already solve the “legacy node/BBS” use case&lt;br /&gt;
|-&lt;br /&gt;
| Xastir SoundModem&lt;br /&gt;
| [https://github.com/Xastir/SoundModem GitHub]&lt;br /&gt;
| User-space modem/TNC functions for packet-radio host applications&lt;br /&gt;
| Worth studying as an existing open-source modem implementation rather than inventing one from scratch&lt;br /&gt;
|-&lt;br /&gt;
| QtSoundModem&lt;br /&gt;
| [https://www.cantab.net/users/john.wiseman/Documents/QtSoundModem.html project page]&lt;br /&gt;
| User-space modem/TNC with KISS and AGWPE-style interfaces&lt;br /&gt;
| Another active example of the “software TNC in user space” approach&lt;br /&gt;
|-&lt;br /&gt;
| aprx&lt;br /&gt;
| [https://thelifeofkenneth.com/aprx/ project page]&lt;br /&gt;
| APRS iGate and digipeater software&lt;br /&gt;
| Useful for APRS-focused stations that do not need general-purpose kernel AX.25 networking&lt;br /&gt;
|-&lt;br /&gt;
| YAAC&lt;br /&gt;
| [https://sourceforge.net/projects/yetanotheraprsc/ project page]&lt;br /&gt;
| APRS client and related tooling&lt;br /&gt;
| Useful as an example of an application-layer approach that does not depend on the Linux AX.25 kernel stack&lt;br /&gt;
|-&lt;br /&gt;
| JNOS 2&lt;br /&gt;
| [https://www.langelaar.net/projects/jnos2/ project page]&lt;br /&gt;
| Packet-radio networking environment and applications&lt;br /&gt;
| Worth inspecting for people whose real interest is preserving classic packet workflows rather than Linux kernel semantics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== If you already have an older setup ==&lt;br /&gt;
&lt;br /&gt;
If you built something years ago and it still works, do not panic. The right next step depends on what kind of old setup you actually have.&lt;br /&gt;
&lt;br /&gt;
=== Case 1: It works, and you do not need a new kernel right now ===&lt;br /&gt;
&lt;br /&gt;
The least disruptive option may be to leave it alone for the moment:&lt;br /&gt;
&lt;br /&gt;
* staying on a currently working kernel for that system&lt;br /&gt;
* treating the system as a stable appliance rather than a frequently upgraded workstation&lt;br /&gt;
* documenting what you have before changing anything&lt;br /&gt;
&lt;br /&gt;
Before you touch the system, write down:&lt;br /&gt;
&lt;br /&gt;
* which kernel version it depends on&lt;br /&gt;
* which applications depend on kernel AX.25&lt;br /&gt;
* how the radio or TNC is connected&lt;br /&gt;
* whether the system is doing connected-mode AX.25, IP over AX.25, APRS, forwarding, or something else&lt;br /&gt;
&lt;br /&gt;
That inventory makes every later decision easier.&lt;br /&gt;
&lt;br /&gt;
=== Case 2: You need to keep old software working ===&lt;br /&gt;
&lt;br /&gt;
If you depend on software that expects the old kernel interfaces, you may need an interim compatibility strategy rather than an immediate redesign.&lt;br /&gt;
&lt;br /&gt;
Potential short- to medium-term options include:&lt;br /&gt;
&lt;br /&gt;
* staying on an older kernel for that machine&lt;br /&gt;
* evaluating the out-of-tree kernel code now hosted in the &amp;lt;code&amp;gt;linux-netdev/mod-orphan&amp;lt;/code&amp;gt; repository&lt;br /&gt;
* isolating the legacy workflow in a dedicated machine or virtual machine rather than tying it to your general-purpose Linux environment&lt;br /&gt;
&lt;br /&gt;
This is not elegant, but it may be the most practical option if a working station depends on legacy interfaces and there is no ready user-space replacement for your exact use case.&lt;br /&gt;
&lt;br /&gt;
If you choose this route, treat it as a containment strategy rather than a permanent default. A deliberately isolated older kernel can buy time, but it also accumulates security debt as new vulnerabilities are found and fixed only in newer supported lines.&lt;br /&gt;
&lt;br /&gt;
=== Case 3: You are willing to modernize ===&lt;br /&gt;
&lt;br /&gt;
If you are already making changes, it may be better to migrate toward a user-space model than to rebuild the same dependency on a shrinking kernel path.&lt;br /&gt;
&lt;br /&gt;
That usually means asking:&lt;br /&gt;
&lt;br /&gt;
* Do I actually need Linux to implement AX.25 in the kernel?&lt;br /&gt;
* Can my application talk to a user-space TNC or modem over KISS or AGWPE instead?&lt;br /&gt;
* Am I really using AX.25 networking, or just one narrow application that happens to sit on top of it?&lt;br /&gt;
&lt;br /&gt;
In many cases, the cleanest long-term answer is to preserve the radio-side protocol in user space while simplifying everything around it.&lt;br /&gt;
&lt;br /&gt;
== Architectural direction ==&lt;br /&gt;
&lt;br /&gt;
For many people, the most practical direction is now a user-space one: software TNCs, external host-side interfaces such as KISS or AGWPE, and applications that do not assume Linux kernel AX.25 sockets are always present.&lt;br /&gt;
&lt;br /&gt;
That does not solve every legacy use case automatically. But it does reduce dependence on upstream kernel decisions and makes it easier to compose working systems from smaller pieces.&lt;br /&gt;
&lt;br /&gt;
== IP over AX.25 ==&lt;br /&gt;
&lt;br /&gt;
If your goal is specifically IP over AX.25, the choices become narrower.&lt;br /&gt;
&lt;br /&gt;
The upstream discussion explicitly points out that IP over AX.25 can, in principle, be handled from user space via TUN/TAP integration rather than by requiring the historic kernel implementation.&lt;br /&gt;
&lt;br /&gt;
That does not mean there is one complete drop-in replacement ready for every old Linux AX.25 workflow today. It does suggest a long-term architectural direction:&lt;br /&gt;
&lt;br /&gt;
* AX.25 framing and control in user space&lt;br /&gt;
* integration to IP through TUN/TAP or similar interfaces&lt;br /&gt;
* narrower, more maintainable components rather than a large in-kernel subsystem&lt;br /&gt;
&lt;br /&gt;
== If you are stuck with old software ==&lt;br /&gt;
&lt;br /&gt;
Some people will be in the awkward middle: the software still matters, it expects the kernel interfaces, and there is no obvious one-command migration.&lt;br /&gt;
&lt;br /&gt;
If that is you, the best immediate response is usually not “rewrite everything,” but:&lt;br /&gt;
&lt;br /&gt;
# identify the exact interface your application expects&lt;br /&gt;
# determine whether that interface is kernel AX.25 specifically, or simply KISS / AGWPE / serial control&lt;br /&gt;
# check whether a user-space adapter, software TNC, or out-of-tree module can preserve the workflow&lt;br /&gt;
# decide whether the system should be frozen, migrated, or rebuilt&lt;br /&gt;
&lt;br /&gt;
For some stations, a preserved older Linux environment may be the right answer for a while. For others, the better answer will be to retire the old application and move to a user-space stack.&lt;br /&gt;
&lt;br /&gt;
== If you want to help advance AX.25 on Linux ==&lt;br /&gt;
&lt;br /&gt;
If this change motivates you to improve the state of AX.25 rather than simply work around it, there are several useful starting points.&lt;br /&gt;
&lt;br /&gt;
=== 1. Clarify the real use cases ===&lt;br /&gt;
&lt;br /&gt;
The first question is not “How do we save everything?” but “What do people still need?”&lt;br /&gt;
&lt;br /&gt;
Those may be very different things:&lt;br /&gt;
&lt;br /&gt;
* APRS and monitoring&lt;br /&gt;
* connected-mode packet&lt;br /&gt;
* mailbox / BBS workflows&lt;br /&gt;
* IP over AX.25&lt;br /&gt;
* compatibility with specific TNCs or handheld radios&lt;br /&gt;
* Linux support for existing packet-radio applications&lt;br /&gt;
&lt;br /&gt;
Without that clarity, it is easy to spend effort rebuilding interfaces nobody still uses while missing the ones that still matter.&lt;br /&gt;
&lt;br /&gt;
=== 2. Prefer small boundaries ===&lt;br /&gt;
&lt;br /&gt;
If you want to revive or modernize AX.25 support, it is worth favoring:&lt;br /&gt;
&lt;br /&gt;
* small, testable user-space components&lt;br /&gt;
* clean interfaces between radio handling and host networking&lt;br /&gt;
* compatibility layers only where they are actually needed&lt;br /&gt;
&lt;br /&gt;
=== 3. Preserve working knowledge before it disappears ===&lt;br /&gt;
&lt;br /&gt;
A lot of Linux AX.25 knowledge lives in:&lt;br /&gt;
&lt;br /&gt;
* old HOWTOs&lt;br /&gt;
* mailing-list posts&lt;br /&gt;
* working systems on shelves&lt;br /&gt;
* people’s heads&lt;br /&gt;
&lt;br /&gt;
Now is a good time to capture:&lt;br /&gt;
&lt;br /&gt;
* what still works&lt;br /&gt;
* what specific applications still matter&lt;br /&gt;
* which workflows require kernel compatibility&lt;br /&gt;
* which ones can already move to user space&lt;br /&gt;
&lt;br /&gt;
=== 4. Start from existing active projects ===&lt;br /&gt;
&lt;br /&gt;
Starting from a maintained or recently active user-space project is likely to be more productive than starting from nostalgia alone.&lt;br /&gt;
&lt;br /&gt;
That may mean extending an existing implementation, building missing protocol pieces, or writing compatibility shims where they create the most leverage.&lt;br /&gt;
&lt;br /&gt;
== Suggested attitude ==&lt;br /&gt;
&lt;br /&gt;
This topic attracts strong opinions:&lt;br /&gt;
&lt;br /&gt;
* nostalgia for the old Linux support&lt;br /&gt;
* frustration from people whose working systems are affected&lt;br /&gt;
* arguments about whether kernel support was ever the right design&lt;br /&gt;
* arguments that packet radio is too niche to matter&lt;br /&gt;
&lt;br /&gt;
Those reactions are understandable, but they do not help much by themselves.&lt;br /&gt;
&lt;br /&gt;
The more useful questions are:&lt;br /&gt;
&lt;br /&gt;
* What still needs to work?&lt;br /&gt;
* What can move to user space today?&lt;br /&gt;
* What legacy interfaces are still worth preserving?&lt;br /&gt;
* What should be documented now so the next person does not have to rediscover everything from scratch?&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179014.html Jakub Kicinski’s April 20, 2026 patch proposing removal of the in-tree amateur-radio networking subsystem]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1180117.html Stephen Hemminger’s April 24, 2026 iproute2 cleanup patch noting that AX.25, ROSE, and NET/ROM have been removed upstream]&lt;br /&gt;
* [https://lwn.net/Articles/1068928/ LWN coverage from April 22, 2026 summarizing the broader kernel code-removal effort]&lt;br /&gt;
* [https://www.spinics.net/lists/netdev/msg1179252.html Dan Cross on the likely user-space direction, including TUN/TAP for IP over AX.25]&lt;br /&gt;
* [https://github.com/linux-netdev/mod-orphan linux-netdev/mod-orphan], the out-of-tree repository where the removed code is being staged&lt;br /&gt;
* [https://github.com/wb2osz/direwolf Dire Wolf], a widely used user-space software TNC for AX.25 packet radio&lt;br /&gt;
* [https://github.com/la5nta/pat Pat], a current Winlink client with AX.25 support and AGWPE support&lt;br /&gt;
* [https://www.cantab.net/users/john.wiseman/Documents/BPQ32.html BPQ32 / LinBPQ documentation]&lt;br /&gt;
* [https://thelifeofkenneth.com/aprx/ aprx], APRS iGate and digipeater software for POSIX systems&lt;br /&gt;
* [https://sourceforge.net/projects/yetanotheraprsc/ YAAC], Yet Another APRS Client&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Jeff Tranter’s Linux AX.25 HOWTO], useful mainly as historical background now&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting started with Linux and packet radio]]&lt;br /&gt;
* [[Setting up a gateway on Linux]]&lt;br /&gt;
* [[Gateway]]&lt;br /&gt;
* [[Routing]]&lt;br /&gt;
* [[MTU and MSS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=44Net_Connect/Ways_to_Connect&amp;diff=2574</id>
		<title>44Net Connect/Ways to Connect</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=44Net_Connect/Ways_to_Connect&amp;diff=2574"/>
		<updated>2026-04-30T18:53:02Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Ways to deploy 44Net Connect =&lt;br /&gt;
&lt;br /&gt;
44Net Connect can be set up in a few different ways, depending on your use case. You will likely end up trying a mix of approaches as you experiment and learn what works best for your needs. &lt;br /&gt;
&lt;br /&gt;
In the simplest case, each device you operate has its own tunnel and is assigned a single 44Net address. One device, one tunnel, one IP.&lt;br /&gt;
&lt;br /&gt;
In another approach, one system terminates a single tunnel, but then distributes a block of addresses to devices on a local network behind it.&lt;br /&gt;
&lt;br /&gt;
Each has tradeoffs: how you manage routing, how many systems you can support, how much configuration lives in one place. They also shape how traffic flows, and what kinds of problems you are likely to run into later.&lt;br /&gt;
&lt;br /&gt;
== Model 1: One tunnel for each host ==&lt;br /&gt;
&lt;br /&gt;
In this model, each host runs its own WireGuard client, establishes its own tunnel to a 44Net Connect endpoint, and is assigned a single IPv4 address (a /32).&lt;br /&gt;
&lt;br /&gt;
From the host’s point of view, this is straightforward. The 44Net address is just another interface address, and services on that host are directly accessible from the Internet.&lt;br /&gt;
&lt;br /&gt;
This works well when you have a small number of systems and each system can run WireGuard directly.&lt;br /&gt;
&lt;br /&gt;
Common use cases include:&lt;br /&gt;
* a single server exposed to the Internet&lt;br /&gt;
* a laptop or workstation that needs a stable public address&lt;br /&gt;
* small, independent services running on just a few separate machines&lt;br /&gt;
&lt;br /&gt;
The main tradeoff is that it can become cumbersome to manage as you add more hosts. Each one needs its own tunnel configuration, and you have to keep track of which address belongs to which host. There is also no central point of control for routing or filtering, so each host is responsible for its own security and traffic management. Eventually, you will reach the limit of how many tunnels you can create and manage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Model 2: Gateway for a local network, subnet behind a tunnel ==&lt;br /&gt;
&lt;br /&gt;
In this model, a single system terminates the WireGuard tunnel and acts as a gateway for a group of hosts on a local network. A block of 44Net addresses is assigned to you in the Connect dashboard and routed to your gateway. The gateway then routes traffic between the tunnel and the local network, allowing multiple hosts to share the same tunnel connection.&lt;br /&gt;
&lt;br /&gt;
The advantage here is that the gateway handles all the complexity. Other hosts need not run WireGuard themselves, and they can be assigned addresses from the 44Net block without needing to manage individual tunnels. The gateway can also handle routing and firewalling.&lt;br /&gt;
&lt;br /&gt;
From the perspective of those hosts, the gateway behaves like a router that provides access to the 44Net address space.&lt;br /&gt;
&lt;br /&gt;
This model is useful when:&lt;br /&gt;
* you want to serve multiple hosts without configuring each one individually&lt;br /&gt;
* some devices cannot run WireGuard directly&lt;br /&gt;
* you want a single point of control for routing and filtering&lt;br /&gt;
&lt;br /&gt;
Common use cases include:&lt;br /&gt;
* a home lab with several servers&lt;br /&gt;
* embedded devices or radios that cannot run a tunnel client&lt;br /&gt;
* a small network where services are distributed across multiple hosts&lt;br /&gt;
&lt;br /&gt;
The main tradeoff is some additional complexity in setting up and managing the gateway. Some people find this model somewhat unintuitive. You will need to configure real routing and firewall rules. Troubleshooting can be more complex. The gateway becomes a single point of failure; if the gateway goes down, all hosts lose connectivity. You also need to ensure that the gateway is well secured, to protect the hosts behind it. So the advantages do not come wthout some challenges.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Model comparison ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  !! Model 1: Per-host tunnels !! Model 2: Gateway and subnet&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Configuration&#039;&#039;&#039; || Distributed across hosts || Centralized on gateway&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Number of tunnels&#039;&#039;&#039; || One per host || One per network&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Scaling&#039;&#039;&#039; || Limited by per-host setup || Scales to many hosts&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Failure radius&#039;&#039;&#039; || Affects one host || Affects entire network&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Security domain&#039;&#039;&#039; || Per-host || Centralized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Traffic behavior ==&lt;br /&gt;
&lt;br /&gt;
Traffic patterns differ in subtle but important ways.&lt;br /&gt;
&lt;br /&gt;
In the per-host model:&lt;br /&gt;
* each host decides how its traffic is routed&lt;br /&gt;
* split-tunnel configurations are common, where only 44Net-sourced traffic uses the tunnel&lt;br /&gt;
&lt;br /&gt;
In the gateway model:&lt;br /&gt;
* routing decisions are made at the gateway&lt;br /&gt;
* hosts behind the gateway typically rely on it for both outbound and inbound 44Net traffic&lt;br /&gt;
&lt;br /&gt;
In some applications, it is important that all traffic associated with a service appear to come from the same public address. In those cases, a full-tunnel configuration or a gateway model may be more appropriate than per-host split tunneling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Choosing a model ==&lt;br /&gt;
&lt;br /&gt;
As a starting point:&lt;br /&gt;
&lt;br /&gt;
* Use per-host tunnels if you are working with one or a few systems and want the simplest setup.&lt;br /&gt;
* Use a gateway if you need to support multiple hosts or devices that cannot run WireGuard themselves.&lt;br /&gt;
&lt;br /&gt;
You can also mix the two. Some systems can run their own tunnels, while others use a gateway. The choice depends on how you want to manage configuration, routing, and exposure.&lt;br /&gt;
&lt;br /&gt;
If you are unsure, start with a per-host tunnel. It is easier to reason about, and you can move to a gateway model later as your setup grows.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
* [https://ardc.groups.io/g/44Net-connect/topic/118968724#msg645 Phil Karn KA9Q and others discussing 44Net Connect deployment models on the ARDC groups.io list]&lt;br /&gt;
* [https://www.wireguard.com/quickstart/ WireGuard Quick Start] for the underlying tunnel model used by 44Net Connect&lt;br /&gt;
* [https://www.wireguard.com/#conceptual-overview WireGuard conceptual overview] for a concise explanation of peers, routing, and interface behavior&lt;br /&gt;
&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:Participation Methods]]&lt;br /&gt;
[[Category:44Net Connect]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=Setting_up_a_gateway_in_a_ROS7_Mikrotik_router_container_on_arm32,_arm64_and_x86-64&amp;diff=2573</id>
		<title>Setting up a gateway in a ROS7 Mikrotik router container on arm32, arm64 and x86-64</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=Setting_up_a_gateway_in_a_ROS7_Mikrotik_router_container_on_arm32,_arm64_and_x86-64&amp;diff=2573"/>
		<updated>2026-04-30T18:53:02Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Setting up a gateway in a ROS7 Mikrotik router container on arm32 arm64 and x86-64]]&lt;br /&gt;
[[Category:How-To]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;br /&gt;
[[Category:Gateways]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=Setting_up_a_gateway_in_a_ROS7_Mikrotik_router_container_on_arm32_arm64_and_x86-64&amp;diff=2572</id>
		<title>Setting up a gateway in a ROS7 Mikrotik router container on arm32 arm64 and x86-64</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=Setting_up_a_gateway_in_a_ROS7_Mikrotik_router_container_on_arm32_arm64_and_x86-64&amp;diff=2572"/>
		<updated>2026-04-30T18:53:01Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Setting up a gateway in a ROS7 Mikrotik router running in a container on arm and arm64 models and x86-64 CHR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;&#039;&#039;&#039;This is an experimental software build for the &#039;enthusiasts&#039; out there.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source code is available in git.ampr.org: https://git.ampr.org/yo2loj/ampr-ros7-container/-/tree/main&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Info&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These are the steps for setting up a fully functional AMPR gateway on an arm/arm64 MikroTik router&lt;br /&gt;
Tested and found working on CRS2116 and RB3011 for now.&lt;br /&gt;
&lt;br /&gt;
MikroTik &amp;lt;b&amp;gt;ARM64&amp;lt;/b&amp;gt; devices:&lt;br /&gt;
 Routers: CCR2004, CCR2116, CCR2216, RB5009&lt;br /&gt;
 Switches: CRS520&lt;br /&gt;
 Wireless and 5G: Netmetal ax, LHG-LTE6, ATL-LTE18&lt;br /&gt;
 SOHO: hAP-ax2, cAP-ax, hAP-ax3, Chateau-ax&lt;br /&gt;
 Others: AMPERE&lt;br /&gt;
&lt;br /&gt;
MikroTik &amp;lt;b&amp;gt;ARM32&amp;lt;/b&amp;gt; devices:&lt;br /&gt;
 Routers: L009, RB3011, RB4011, RB1100AHx4, &lt;br /&gt;
 Switches: CRS305, CRS309, CRS310, CRS317, CRS320, CRS326, CRS328&lt;br /&gt;
 Wireless and 5G: SXTsq-5ac, NetBox-5ax, LHGXL-5ac&lt;br /&gt;
 SOHO: hAP-ax lite, hap-ac2, cAP-ac, wAP-ac, cAPXL-ac, hAP-ac3, Chateau&lt;br /&gt;
 Routerboard: L11UG, L23UGSR, RB450Gx4&lt;br /&gt;
&lt;br /&gt;
MikroTik &amp;lt;b&amp;gt;x86-64&amp;lt;/b&amp;gt; devices:&lt;br /&gt;
 Others: Cloud Hosted Router&lt;br /&gt;
&lt;br /&gt;
Containers are not available on MIPSBE, MMIPS, SMIPS, TILE or PPC architectures.&lt;br /&gt;
&lt;br /&gt;
== General concept ==&lt;br /&gt;
Mikrotik routers running ROS 7 (7.15.3 being current at the time of writing) based on arm and arm64 processor, as well as CHR setups are able to run software containers (similar to docker).&lt;br /&gt;
This opens the possibility to host a virtualized gateway in such a container, allowing a simple and efficient setup on modern systems.&lt;br /&gt;
&lt;br /&gt;
The gateway will be hosted in a VRF on the router, providing gateway services using policy routing.&lt;br /&gt;
&lt;br /&gt;
As a concept, the container has a single VETH interface which will decapsulate all incoming IPIP traffic from the tunnels, and encapsulate all outgoing traffic towards them.&lt;br /&gt;
The container itself is isolated behind a bridge and offers some basic filtering function (e.g. restrict access from internet hosts).&lt;br /&gt;
It will receive the RIPv2 broadcasts from the AMPR gateway and provide the obtained routes as RIP broadcasts to the router itself inside the mentioned VRF.&lt;br /&gt;
&lt;br /&gt;
The container does not save anything to disk (which would be a bad idea on the router&#039;s flash memory), so the AMPR routes are lost on container or router restart, and you need to wait the now classical 5 minutes. But this should be no problem on a 24/7 on router.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
&lt;br /&gt;
The router does not forward multicast frames at all, nor does it send out broadcasts.&lt;br /&gt;
Incoming broadcasts are accepted and forwarded to the local VRF.&lt;br /&gt;
&lt;br /&gt;
The container itself needs to sit behind a bridge due to a kernel bug in the version used by Mikrotik which sends out &amp;quot;Port unreachable&amp;quot; ICMP messages on incoming IPIP traffic if it is handled in user space (The same thing causing the need of a kernel filter in amprd. This is fixed in newer kernel releases but it will take a while for it to make its way into ROS). Bridge filtering is used to mask those messages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;New router 5 minutes set up&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a prerequisite, get your internet connection working based on the default mikrotik configuration.&lt;br /&gt;
Basically set up your ISP uplink either via DHCP or by setting up a PPPoE or similar connection.&lt;br /&gt;
Leave the default firewall rule as they are.&lt;br /&gt;
Alternatively, you can start with a completely empty router, with only a active internet connection.&lt;br /&gt;
&lt;br /&gt;
First you need to enable container support according to the info provided by Mikrotik.&lt;br /&gt;
In a console type in:&lt;br /&gt;
 /system/device-mode/update container=yes&lt;br /&gt;
The system will want you to do a hard reset at this point to confirm the request. This means you need physical access to the device.&lt;br /&gt;
&lt;br /&gt;
Next, you need to install the container package for your firmware version. Download the &amp;quot;extra&amp;quot; firmware package from MikroTik for your FW version and extract the &amp;quot;container-7.x.y-&amp;lt;arch&amp;gt;.npk&amp;quot; file. Upload it to your router and restart. This will install the package onto the router. After restart, you will have a new option available: /containers&lt;br /&gt;
&lt;br /&gt;
== Installation script ==&lt;br /&gt;
Next we need to install the container according to your hardware.&lt;br /&gt;
Please chose the correct setup script variant:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;ARM32&amp;lt;/span&amp;gt; -  ampr_arm32.rsc&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;ARM64&amp;lt;/span&amp;gt; -  ampr_arm64.rsc&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;CHRx86&amp;lt;/span&amp;gt; - ampr_x86_64.rsc&lt;br /&gt;
&lt;br /&gt;
Unfortunately, containers are not available on Mips, Tile or PowerPC devices.&lt;br /&gt;
&lt;br /&gt;
The example assumes you use an arm32 device. Please use the proper one...&lt;br /&gt;
&lt;br /&gt;
Open a route console window.&lt;br /&gt;
&lt;br /&gt;
1. Check is the remote server is available:&lt;br /&gt;
 [admin@MikroTik] &amp;gt; ping yo2loj.ro&lt;br /&gt;
  SEQ HOST                                     SIZE TTL TIME       STATUS                    &lt;br /&gt;
    0 89.33.44.100                               56  58 10ms574us &lt;br /&gt;
    1 89.33.44.100                               56  58 9ms141us  &lt;br /&gt;
    2 89.33.44.100                               56  58 9ms5us    &lt;br /&gt;
    sent=3 received=3 packet-loss=0% min-rtt=9ms5us avg-rtt=9ms573us max-rtt=10ms574us&lt;br /&gt;
&lt;br /&gt;
2. Download the configuration script&lt;br /&gt;
 [admin@MikroTik] &amp;gt; /tool fetch url=&amp;quot;http://yo2loj.ro/containers/&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;ampr_arm32.rsc&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
      status: finished&lt;br /&gt;
  downloaded: 5KiB&lt;br /&gt;
       total: 5KiB&lt;br /&gt;
    duration: 1s&lt;br /&gt;
&lt;br /&gt;
3. Run the configuration script&lt;br /&gt;
 [admin@MikroTik] &amp;gt; import &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;ampr_arm32.rsc&amp;lt;/span&amp;gt;&lt;br /&gt;
 AMPR: Creating bridge and VRF&lt;br /&gt;
 AMPR: Setting up RIP&lt;br /&gt;
 AMPR: Creating container envs&lt;br /&gt;
 AMPR: Setting up firewall rules&lt;br /&gt;
 AMPR: Creating container update script&lt;br /&gt;
 AMPR: Creating routing rules&lt;br /&gt;
 AMPR: Installing container&lt;br /&gt;
 No container is installed&lt;br /&gt;
      status: finished&lt;br /&gt;
  downloaded: 366KiB&lt;br /&gt;
       total: 366KiB&lt;br /&gt;
    duration: 1s&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;AMPR: Script finished successful&lt;br /&gt;
 AMPR: Now update your container envs and start the container&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your container is now installed.&lt;br /&gt;
You need to configure its environment variables according to the description given below.&lt;br /&gt;
&lt;br /&gt;
After configuration is complete, go to &amp;quot;containers&amp;quot; and star it up.&lt;br /&gt;
It should show &amp;quot;running&amp;quot; and you should see it&#039;s messages in the log window.&lt;br /&gt;
&lt;br /&gt;
After at most 5 minutes, you should get the tunnel routes in your vrf, and your gateway should be fully up and running.&lt;br /&gt;
&lt;br /&gt;
If logging/debugging is not needed anymore, please disable it by clicking on the container and unchecking te logging box.&lt;br /&gt;
&lt;br /&gt;
== Container configuration parameters ==&lt;br /&gt;
You need to adapt the pre-existing container environment variables to your particular gateway before starting it again.&lt;br /&gt;
The following ENV parameters are preset in Container-&amp;gt; Envs:&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;AMPR_SUBNETS&amp;lt;/span&amp;gt; - holds your local subnets as defined in the Portal, as comma separated list of &amp;lt;SUBNET&amp;gt;/&amp;lt;MASK&amp;gt; tupples, e.g. &amp;quot;44.128.0.0/24,44.128.1.0/24&amp;quot;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;ALL_VIA_AMPRGW&amp;lt;/span&amp;gt; - enables forwarding of all AMPR destinations via AMPRGW, values are &amp;quot;0&amp;quot; or &amp;quot;1&amp;quot;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;FORWARD_INTERNET&amp;lt;/span&amp;gt; - enables forward of traffic from/to internet hosts, values are &amp;quot;0&amp;quot; or &amp;quot;1&amp;quot;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;IGNORED_SUBNETS&amp;lt;/span&amp;gt; - allows you to ignore specific subnets provided by RIP, by &amp;lt;SUBNET&amp;gt;/&amp;lt;MASK&amp;gt; or gateway address e.g. &amp;quot;44.128.0.0/16&amp;quot;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;CALL_HOME&amp;lt;/span&amp;gt; - the classic string, &amp;lt;CALLSIGN&amp;gt;@&amp;lt;LOCATOR&amp;gt; to show up on the map. You will get a yellow dot. e.g. &amp;quot;YO2LOJ@KN05OR&amp;quot;. Leaving the field empty disables call home.&lt;br /&gt;
&lt;br /&gt;
Please note that the provided default will allow you to play around, but will not provide a working set up.&lt;br /&gt;
&lt;br /&gt;
Next, you need to set up a local AMPR LAN on your router router, or, if you have only a single IP address assigned, add it to one of your router&#039;s interfaces with a /32 netmask&lt;br /&gt;
Anyway, you need to add a src-nat rule to the router&#039;s IP address to get your traffic flowing (let&#039;s assume its 44.128.0.1).&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;The address shall be set on an interface OUTSIDE OF THE VRF&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For a single address:&lt;br /&gt;
 /ip address add address=&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;44.128.0.1&amp;lt;/span&amp;gt; interface=bridge&lt;br /&gt;
or even on the loopback interface:&lt;br /&gt;
For a single address:&lt;br /&gt;
 /ip address add address=&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;44.128.0.1&amp;lt;/span&amp;gt; interface=lo&lt;br /&gt;
&lt;br /&gt;
For a subnet:&lt;br /&gt;
 /ip address add address=&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;44.128.0.1/24&amp;lt;/span&amp;gt; interface=&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;&amp;lt;interface name&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And your src-nat NAT rules:&lt;br /&gt;
 /ip firewall nat add action=src-nat chain=srcnat out-interface=bridge-ampr-gw to-addresses=&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;44.128.0.1&amp;lt;/span&amp;gt;&lt;br /&gt;
 /ip firewall nat add action=src-nat chain=srcnat out-interface=vrf-ampr to-addresses=&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;44.128.0.1&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of course you need to set up additional firewall rules and stuff, but if you do not enable internet forwarding, you should be pretty safe being exposed only to AMPR partners.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;Please note that for your firewall rules the incoming interface from the tunnels is &amp;quot;&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;vrf_ampr&amp;lt;/span&amp;gt;&amp;quot; and the outgoing interface is &amp;quot;&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;bridge-ampr-gw&amp;lt;/span&amp;gt;&amp;quot; for forwarded and &amp;quot;&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;vrf-ampr&amp;lt;/span&amp;gt;&amp;quot; for local outgoing data.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional optional configuration ==&lt;br /&gt;
&lt;br /&gt;
You may notice that on an external traceroute your router&#039;s IP address will show up as 172.17.0.1.&lt;br /&gt;
To fix this small glitch, you need to modify your existing &amp;quot;rip-ampr-in&amp;quot; RIP input filter rule to provide the correct preferred source address.&lt;br /&gt;
&lt;br /&gt;
Modify the existing rule from&lt;br /&gt;
 accept;&lt;br /&gt;
&lt;br /&gt;
to set your router&#039;s local AMPR IP as its preferred source&lt;br /&gt;
 set pref-src &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;44.128.0.1&amp;lt;/span&amp;gt;;&lt;br /&gt;
 accept;&lt;br /&gt;
&lt;br /&gt;
Also, if you want to access the AMPR network from a LAN not using AMPR addresses, you need to set up a forwarding rule and a SRC-NAT one:&lt;br /&gt;
&lt;br /&gt;
 /ip firewall filter&lt;br /&gt;
 add action=accept chain=forward comment=&amp;quot;from LAN&amp;quot; in-interface=&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;&amp;lt;YourLANInterface&amp;gt;&amp;lt;/span&amp;gt; dst-address-list=ampr_addr&lt;br /&gt;
and&lt;br /&gt;
 /ip firewall nat&lt;br /&gt;
 add action=src-nat chain=srcnat comment=&amp;quot;NAT to AMPR&amp;quot; dst-address-list=Ampr out-interface=bridge-ampr-gw \&lt;br /&gt;
    src-address-list=!ampr_addr to-addresses=&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;44.128.0.1&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Configuration on an existing working router - 6 steps&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 1 - Bridge, VETH, VRF and interface setup&lt;br /&gt;
 2 - RIP setup&lt;br /&gt;
 3 - Firewall rules, Filter, NAT and Mangle&lt;br /&gt;
 4 - Container environment setup&lt;br /&gt;
 5 - Container installation (architecture dependent)&lt;br /&gt;
 6 - Container configuration and final touches&lt;br /&gt;
&lt;br /&gt;
== Preliminary: prepare the router to accept containers ==&lt;br /&gt;
First, you need to install container support on your router.&lt;br /&gt;
In a console issue:&lt;br /&gt;
 /system/device-mode/update container=yes&lt;br /&gt;
The system will want you to do a hard reset at this point to confirm the request.&lt;br /&gt;
This means you need physical access to the device.&lt;br /&gt;
&lt;br /&gt;
Next, you need to install the container package for your firmware version.&lt;br /&gt;
Download the &amp;quot;extra&amp;quot; firmware package from MikroTik for your FW version and extract the &amp;quot;container-7.x.y-&amp;lt;arch&amp;gt;.npk&amp;quot; file.&lt;br /&gt;
Upload it to your router and restart. This will install the package onto the router.&lt;br /&gt;
After restart, you will have a new option available: /containers&lt;br /&gt;
&lt;br /&gt;
== Step 1: Bridge, VETH, VRF and interface setup ==&lt;br /&gt;
&lt;br /&gt;
First create a bridge which will be used for your containr. Let&#039;s call it &#039;bridge-ampr-gw&#039;:&lt;br /&gt;
 /interface bridge add comment=&amp;quot;AMPR container&amp;quot; name=bridge-ampr-gw&lt;br /&gt;
Assign a network to it. The typical docker IP will be ok:&lt;br /&gt;
 /ip address add address=172.17.0.1/24 interface=bridge-ampr-gw&lt;br /&gt;
Create a virtual ethernet interface for the container itself (call it veth-ampr):&lt;br /&gt;
 /interface veth add name=veth-ampr address=172.17.0.2/24 comment=&amp;quot;AMPR container interface&amp;quot; \&lt;br /&gt;
    gateway=172.17.0.1&lt;br /&gt;
Add the VETH port to the bridge we created above:&lt;br /&gt;
 /interface bridge port add bridge=bridge-ampr-gw interface=veth-ampr&lt;br /&gt;
Because of a kernel anomaly preventing proper userspace IPIP handling, we need to filter icmp messages on the bridge from the container itself:&lt;br /&gt;
 /interface bridge filter add action=drop chain=input in-interface=veth-ampr ip-protocol=icmp \&lt;br /&gt;
    mac-protocol=ip src-address=172.17.0.2/32&lt;br /&gt;
Now we create a vrf called &amp;quot;vrf-ampr&amp;quot; and add the bridge to it:&lt;br /&gt;
 /ip vrf add interfaces=bridge-ampr-gw name=vrf-ampr&lt;br /&gt;
&lt;br /&gt;
All the above steps are available here as a rsc file: http://yo2loj.ro/containers/1_ampr_bridge_vrf.rsc&lt;br /&gt;
&lt;br /&gt;
== Step 2: RIP setup ==&lt;br /&gt;
&lt;br /&gt;
First, create a simple accept routing filter to be used by RIP:&lt;br /&gt;
 /routing filter rule add chain=rip-ampr-in disabled=no rule=&amp;quot;accept;&amp;quot;&lt;br /&gt;
Next, create a RIP instance for your VRF using the above filter and the defined VRF:&lt;br /&gt;
 /routing rip instance add afi=ipv4 in-filter-chain=rip-ampr-in name=rip-ampr vrf=vrf-ampr&lt;br /&gt;
And now add a passive (receive only) interface to our instance:&lt;br /&gt;
 /routing rip interface-template add instance=rip-ampr interfaces=bridge-ampr-gw mode=passive&lt;br /&gt;
&lt;br /&gt;
All the above steps are available here as a rsc file: http://yo2loj.ro/containers/2_rip.rsc&lt;br /&gt;
&lt;br /&gt;
== Step 3: Firewall rules, filter, NAT and mangle ==&lt;br /&gt;
&lt;br /&gt;
Now we need to forward out IPIP tunnels to the container, and extract our data from the VRF.&lt;br /&gt;
For our convenience we will set up an address list to handle AMPR space as one entity&lt;br /&gt;
(if you already have such a list on the router, you can use it)&lt;br /&gt;
 /ip firewall address-list&lt;br /&gt;
 add address=44.0.0.0/9 list=ampr_addr&lt;br /&gt;
 add address=44.128.0.0/10 list=ampr_addr&lt;br /&gt;
Also, we can use an interface list called WAN for the internet access interfaces (like the one in the default config).&lt;br /&gt;
If you prefer individual interfaces, you can of course use them in your rules.&lt;br /&gt;
&lt;br /&gt;
Filters are needed to allow data input and forward to/from the router.&lt;br /&gt;
Accept RIP from the VRF:&lt;br /&gt;
 /ip firewall filter&lt;br /&gt;
 add action=accept chain=input comment=&amp;quot;RIP via VRF&amp;quot; dst-port=520 in-interface=vrf-ampr protocol=udp&lt;br /&gt;
Accept input from the AMPR address space to the router (important for ping and traceroute):&lt;br /&gt;
 /ip firewall filter&lt;br /&gt;
 add action=accept chain=input comment=&amp;quot;AMPR via Tunnels&amp;quot; dst-address-list=ampr_addr in-interface=vrf-ampr \&lt;br /&gt;
    src-address-list=ampr_addr&lt;br /&gt;
And we need to accept some forwarding for the IPIP tunnels, from VRF to our AMPR space and between AMPR hosts:&lt;br /&gt;
 /ip firewall filter&lt;br /&gt;
 add action=accept chain=forward comment=&amp;quot;IPIP Tunnels from ISP&amp;quot; in-interface-list=Internet protocol=ipencap&lt;br /&gt;
 add action=accept chain=forward comment=&amp;quot;IPIP Tunnels from VRF&amp;quot; in-interface=vrf-ampr protocol=ipencap&lt;br /&gt;
 add action=accept chain=forward comment=&amp;quot;VRF to AMPR&amp;quot; dst-address-list=ampr_addr in-interface=vrf-ampr&lt;br /&gt;
 add action=accept chain=forward comment=&amp;quot;AMPR to AMPR&amp;quot; dst-address-list=ampr_addr src-address-list=ampr_addr&lt;br /&gt;
&lt;br /&gt;
Next, we need to forward incoming IPIP traffic to our container (note that WAN interface list, use your interface if you like):&lt;br /&gt;
 /ip firewall nat&lt;br /&gt;
 add action=dst-nat chain=dstnat comment=&amp;quot;NAT ENCAP&amp;quot; in-interface-list=WAN protocol=ipencap \&lt;br /&gt;
    to-addresses=172.17.0.2&lt;br /&gt;
&lt;br /&gt;
Now to be able to traverse int and from the VRF, we need some mangle rules.&lt;br /&gt;
&lt;br /&gt;
Incoming IPIP traffic will be marked with the vrf routing mark:&lt;br /&gt;
 /ip firewall mangle&lt;br /&gt;
 add action=mark-routing chain=prerouting comment=&amp;quot;AMPR IPIP incoming to VRF&amp;quot; in-interface-list=Internet \&lt;br /&gt;
    new-routing-mark=vrf-ampr passthrough=no protocol=ipencap&lt;br /&gt;
Outgoing IPIP traffic will be marked for the main routing table (or the one you need to reach your ISP)&lt;br /&gt;
 /ip firewall mangle&lt;br /&gt;
 add action=mark-routing chain=prerouting comment=&amp;quot;AMPR IPIP outgoing via ISP&amp;quot; in-interface=vrf-ampr \&lt;br /&gt;
    new-routing-mark=main passthrough=no protocol=ipencap&lt;br /&gt;
Traffic to our local router IPs will be directed via our bridge&lt;br /&gt;
 /ip firewall mangle&lt;br /&gt;
 add action=route chain=prerouting comment=&amp;quot;AMPR VRF route local&amp;quot; dst-address-type=local in-interface=vrf-ampr \&lt;br /&gt;
    passthrough=no route-dst=172.17.0.1&lt;br /&gt;
And finally, the incoming AMPR traffic will go to the main routing table&lt;br /&gt;
 /ip firewall mangle&lt;br /&gt;
 add action=mark-routing chain=prerouting comment=&amp;quot;AMPR VRF forward&amp;quot; in-interface=vrf-ampr new-routing-mark=main\&lt;br /&gt;
    passthrough=no&lt;br /&gt;
&lt;br /&gt;
All the above steps are available here as a rsc file: http://yo2loj.ro/containers/3_firewall.rsc&lt;br /&gt;
&lt;br /&gt;
== Step 4 - Container environment setup ==&lt;br /&gt;
This step prepares the environment variables for the container.&lt;br /&gt;
&lt;br /&gt;
/container envs&lt;br /&gt;
 add comment=&amp;quot;My subnets, as defined in the Portal&amp;quot; key=AMPR_SUBNETS name=ampr-cfg value=\&lt;br /&gt;
    44.128.0.0/24,44.128.1.0/24&lt;br /&gt;
 add comment=&amp;quot;Default gateway is AMPRGW instead of Internet&amp;quot; key=ALL_VIA_AMPRGW name=ampr-cfg value=0&lt;br /&gt;
 add comment=&amp;quot;Forward internet traffic&amp;quot; key=FORWARD_INTERNET name=ampr-cfg value=0&lt;br /&gt;
 add comment=&amp;quot;Call home callsign and locator&amp;quot; key=CALL_HOME name=ampr-cfg value=test@AA00aa&lt;br /&gt;
 add comment=&amp;quot;Ignored subnets in RIP&amp;quot; key=IGNORED_SUBNETS name=ampr-cfg value=44.128.0.0/16&lt;br /&gt;
&lt;br /&gt;
Just paste them into the console or import the rsc script as it is. You will edit those later.&lt;br /&gt;
&lt;br /&gt;
The rsc file is here: http://yo2loj.ro/containers/4_container_env.rsc&lt;br /&gt;
&lt;br /&gt;
== Step 5 - Container installation ==&lt;br /&gt;
Now you need to download the container which fits your architecture.&lt;br /&gt;
The following rsc files will install a script which, when run will import and install the container.&lt;br /&gt;
The same scripts will update and replace the container if run again.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;ARM32&amp;lt;/span&amp;gt; -  http://yo2loj.ro/containers/5_container_arm32.rsc&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;ARM64&amp;lt;/span&amp;gt; -  http://yo2loj.ro/containers/5_container_arm64.rsc&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;CHRx86&amp;lt;/span&amp;gt; - http://yo2loj.ro/containers/5_container_x86_64.rsc&lt;br /&gt;
&lt;br /&gt;
Of course, instead of the script, you can download the appropriate tar container files yourself:&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;ARM32&amp;lt;/span&amp;gt; -  http://yo2loj.ro/containers/ampr-arm32.tar&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;ARM64&amp;lt;/span&amp;gt; -  http://yo2loj.ro/containers/ampr-arm64.tar&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;CHRx86&amp;lt;/span&amp;gt; - http://yo2loj.ro/containers/ampr-x86-64.tar&lt;br /&gt;
and install them manually. Please set them to use the env variables &amp;quot;ampr-cfg&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Or, you can compile and pack the container yourself from source. At the time of writing, the current version is 1.2.0:&lt;br /&gt;
 http://yo2loj.ro/containers/ampr-container-1.2.0-release.tgz&lt;br /&gt;
&lt;br /&gt;
== Step 6 - Container configuration and final touches ==&lt;br /&gt;
&lt;br /&gt;
You need to edit your env variables &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;according to the description given in the new router setup&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Start your container and wait 5 min. You should see AMPR routes showing up in the VRF&#039;s routing table&lt;br /&gt;
(Some 840 of them if ALL_VIA_AMPRGW is not enabled, otherwise you will get only 2 routes, 44.0.0.0/9 and 44.128.0.0/10).&lt;br /&gt;
&lt;br /&gt;
You may notice that on an external traceroute your router&#039;s IP address will show up as 172.17.0.1.&lt;br /&gt;
To fix this small glitch, you need to modify your existing &amp;quot;rip-ampr-in&amp;quot; RIP input filter rule to provide the correct preferred source address.&lt;br /&gt;
&lt;br /&gt;
Modify the existing rule from&lt;br /&gt;
 accept;&lt;br /&gt;
&lt;br /&gt;
to set your router&#039;s local AMPR IP as its preferred source&lt;br /&gt;
 set pref-src &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;44.128.0.1&amp;lt;/span&amp;gt;;&lt;br /&gt;
 accept;&lt;br /&gt;
&lt;br /&gt;
Now, activate the use of the whole system.&lt;br /&gt;
Set up a routing rule set to force all outgoing AMPR traffic to do a lookup in the VRF routing table:&lt;br /&gt;
 /routing rule&lt;br /&gt;
 add action=lookup disabled=yes dst-address=44.0.0.0/9 table=vrf-ampr&lt;br /&gt;
 add action=lookup disabled=yes dst-address=44.128.0.0/10 table=vrf-ampr&lt;br /&gt;
If no route is found in that table, the lookup will continue via the main table towards your default route.&lt;br /&gt;
&lt;br /&gt;
Your local AMPR network and additional routing will go into the main table and the lookup will be done AFTER passing through the VRF&#039;s routing table.&lt;br /&gt;
This means that a matching route in the VRF, including a default 0.0.0.0/0 will take precedence over any route defined in the main table.&lt;br /&gt;
&lt;br /&gt;
Also, if you want to access the AMPR network from a LAN not using AMPR addresses, you need to set up a forwarding rule and a SRC-NAT one:&lt;br /&gt;
&lt;br /&gt;
 /ip firewall filter&lt;br /&gt;
 add action=accept chain=forward comment=&amp;quot;from LAN&amp;quot; in-interface=LAN dst-address-list=ampr_addr&lt;br /&gt;
and&lt;br /&gt;
 /ip firewall nat&lt;br /&gt;
 add action=src-nat chain=srcnat comment=&amp;quot;NAT to AMPR&amp;quot; dst-address-list=Ampr out-interface=bridge-ampr-gw \&lt;br /&gt;
    src-address-list=!ampr_addr to-addresses=&amp;lt;your router&#039;s AMPR ip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional info ==&lt;br /&gt;
All available files are here: http://yo2loj.ro/containers/&lt;br /&gt;
&lt;br /&gt;
Rip Rip Hurray! de YO2LOJ&lt;br /&gt;
&lt;br /&gt;
[[Category:How-To]]&lt;br /&gt;
[[Category:How-To Guides]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;br /&gt;
[[Category:Gateways]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=Services/Historic&amp;diff=2571</id>
		<title>Services/Historic</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=Services/Historic&amp;diff=2571"/>
		<updated>2026-04-30T18:53:01Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Below is a list of historic services that were previously offered by ampr users but are not currently available.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Maintainer !! Service Name!! URL/IP !! Service Type !! Description !! Other Information&lt;br /&gt;
|-&lt;br /&gt;
| N1URO ||Network Tools|| http://n1uro.ampr.org/do.shtml&amp;lt;br /&amp;gt; || HTTP|| source IP checker, speed test, Ping, Traceroute, etc.|| DNS entry no longer exists&lt;br /&gt;
|-&lt;br /&gt;
| Various Operators ||Network Time Protocol Server || ns.ardc.net (Stratum 2, UK)&amp;lt;br /&amp;gt;server.yo2loj.ampr.org (Stratum 2)&amp;lt;br /&amp;gt;f4gve.ampr.org (Stratum 3)&amp;lt;br /&amp;gt;ntp1.on3rvh.ampr.org&amp;lt;br /&amp;gt; || NTP|| Stratum 2 Network Time Server - References US, Canadian and Mexican|| No NTP server configured on host&lt;br /&gt;
|-&lt;br /&gt;
| OH7LZB ||[[AMPRNet_VPN]] || http://wiki.ampr.org/wiki/AMPRNet_VPN || VPN|| [http://en.wikipedia.org/wiki/OpenVPN OpenVPN]-based || &#039;&#039;&#039;Unavailable as of May 2024&#039;&#039;&#039; &amp;lt;br /&amp;gt;You must have a X.509 certificate issued by [http://www.arrl.org/logbook-of-the-world ARRL Logbook of the World (LoTW)]. ARRL membership is not required.&lt;br /&gt;
|-}&lt;br /&gt;
&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;br /&gt;
[[Category:Core Services]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=DNS&amp;diff=2570</id>
		<title>DNS</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=DNS&amp;diff=2570"/>
		<updated>2026-04-30T18:53:01Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:44Net DNS}}&lt;br /&gt;
The 44Net DNS service provides name resolution and delegation for 44Net users. Most participants use it to publish hostnames for their systems, starting with a callsign-based subdomain and adding records as needed. &lt;br /&gt;
&lt;br /&gt;
A typical DNS path on 44Net:&lt;br /&gt;
# Claim a callsign-based subdomain under ampr.org.&lt;br /&gt;
# Create DNS records that map hostnames to IP addresses.&lt;br /&gt;
&lt;br /&gt;
This is sufficient for publishing things like web servers, gateways, remote stations, and repeaters.&lt;br /&gt;
&lt;br /&gt;
* [[DNS/Portal/Subdomains|Claiming a Subdomain]]&lt;br /&gt;
* [[DNS/Portal/Records|Managing Records]]&lt;br /&gt;
&lt;br /&gt;
== Running your own DNS ==&lt;br /&gt;
&lt;br /&gt;
Some participants run their own DNS servers rather than relying only on the Portal.&lt;br /&gt;
&lt;br /&gt;
In this approach, control of a domain is delegated to local systems, while remaining part of the ampr.org domain.&lt;br /&gt;
&lt;br /&gt;
This supports automation, custom workflows, and closer integration with locally managed services.&lt;br /&gt;
&lt;br /&gt;
* [[DNS/Portal/Delegations|Delegating DNS to an Independent Name Server]]&lt;br /&gt;
* [[DNS/Setup/OpenBSD_Resolver|Setting up a Recursive Resolver on OpenBSD]]&lt;br /&gt;
&lt;br /&gt;
== Understanding DNS ==&lt;br /&gt;
&lt;br /&gt;
For background on how DNS works (with 44Net use in mind):&lt;br /&gt;
&lt;br /&gt;
* [[DNS/Overview|DNS Overview and Concepts]]&lt;br /&gt;
&lt;br /&gt;
== Older docs and notes ==&lt;br /&gt;
Earlier pages that may still be useful:&lt;br /&gt;
* [[Verification]]&lt;br /&gt;
* See [[Archive]] for more.&lt;br /&gt;
[[Category:Explanation]]&lt;br /&gt;
[[Category:DNS]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=Setting_up_a_gateway_on_Linux&amp;diff=2569</id>
		<title>Setting up a gateway on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=Setting_up_a_gateway_on_Linux&amp;diff=2569"/>
		<updated>2026-04-30T18:53:00Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are a few different ways to run an AMPRnet gateway on a Linux system. Each has some benefits, so you&#039;ll need to pick your favourite.&lt;br /&gt;
&lt;br /&gt;
Before configuring the Linux gateway you&#039;ll need to:&lt;br /&gt;
# Using the [[Portal]], request an IP address (or addresses) by clicking on &amp;quot;Request address space&amp;quot; then selecting &amp;quot;IPIP Tunnel Mesh&amp;quot; as the Use Case.&lt;br /&gt;
# You will need to have a public static IP address for your gateway. &lt;br /&gt;
# Using the [[Portal]], create an entry for your gateway.&lt;br /&gt;
# Get some of your AMPRNet IP addresses registered in the [[ampr.org]] DNS.&lt;br /&gt;
&lt;br /&gt;
= Flavours of Linux gateways =&lt;br /&gt;
&lt;br /&gt;
== Native Linux kernel AX.25 and IPIP tunneling ==&lt;br /&gt;
&lt;br /&gt;
Linux contains the necessary building blocks for a gateway without much added software. Radio interfaces are configured much like any other network interfaces such as Ethernet, they&#039;re just given amateur radio callsigns in addition to an IP address (callsign will act the role of the Ethernet MAC address). If you&#039;re familiar with Linux configuration but have not heard of NOS, or if you wish to go with minimal amount of moving parts, this would probably be your choice.&lt;br /&gt;
&lt;br /&gt;
Setting up a native Linux gateway consists of two main steps:&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Setting up tunnel routing to the rest of the AMPRnet===&lt;br /&gt;
Configuring your Linux system to learn about other AMPRNet [[gateway| gateways]] can be done two ways:&lt;br /&gt;
&lt;br /&gt;
# Automatically learn about other gateways via modified RIPv2 advertisements. Two popular programs to do this are:&lt;br /&gt;
## Using [[ampr-ripd]], a C based routing daemon&lt;br /&gt;
## Using [[rip44d]], a PERL based routing daemon&lt;br /&gt;
# Downloading an [[encap.txt]] file and setting up routes using a [[munge script]] is the traditional method&lt;br /&gt;
&lt;br /&gt;
==== Example gateway configuration instructions ====&lt;br /&gt;
* [[Ubuntu Linux Gateway Example]]&lt;br /&gt;
* [http://www.qsl.net/k/kb9mwr//wapr/tcpip/ampr-ripd.html Two Interface Debian Linux Amprnet Gateway Example]&lt;br /&gt;
* [https://k7ilo.blogspot.com/p/server-setup.html K7ILO&#039;S Two Interface Debian 11 AmprNet Gateway Build in layman&#039;s terms]&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Setting up radio interfaces in Linux===&lt;br /&gt;
&lt;br /&gt;
* [http://www.tldp.org/HOWTO/AX25-HOWTO/ Linux AX.25 set-up]&lt;br /&gt;
* 802.11 WiFi on amateur frequencies (2.4 or 5 GHz) is a new popular way to set up fast links.&lt;br /&gt;
&lt;br /&gt;
== Running JNOS (or other NOS) on top of Linux ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re already familiar with running NOS on top of DOS or Linux, or wish to keep the AMPRnet IP packet routing away from the host Linux system, it might make sense to run JNOS as an application on top of Linux.&lt;br /&gt;
&lt;br /&gt;
The downside is that it&#039;ll have a slightly higher overhead (consumed memory and CPU), and you&#039;ll have two IP routers running on top of each other instead of just one, which is seen as slightly complicated by some.&lt;br /&gt;
&lt;br /&gt;
The upside is that you&#039;ll also get the JNOS BBS-type features, and some other traditional services without installing additional software on top.&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
&lt;br /&gt;
* [[Ubuntu Linux Gateway Example]]&lt;br /&gt;
* [[startampr]]&lt;br /&gt;
&lt;br /&gt;
[[Category:How-To]]&lt;br /&gt;
[[Category:How-To Guides]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;br /&gt;
[[Category:Gateways]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
	<entry>
		<id>https://wiki.ampr.org/w/index.php?title=Portal_intro&amp;diff=2568</id>
		<title>Portal intro</title>
		<link rel="alternate" type="text/html" href="https://wiki.ampr.org/w/index.php?title=Portal_intro&amp;diff=2568"/>
		<updated>2026-04-30T18:53:00Z</updated>

		<summary type="html">&lt;p&gt;KI5QKX: mw push&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ARDC Portal 2.0 Technical Documentation =&lt;br /&gt;
&lt;br /&gt;
By Rebecca Key KO4KVG&lt;br /&gt;
&lt;br /&gt;
Version: 4 (October 22, 2024)&lt;br /&gt;
&lt;br /&gt;
== Accessing the Portal ==&lt;br /&gt;
&lt;br /&gt;
Go to [https://portal.ampr.org/home https://portal.ampr.org], where you should see the following UI: &lt;br /&gt;
&lt;br /&gt;
[[File:Portal-homepage-login-v4.png|750px]]&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
&lt;br /&gt;
# Click on the &#039;Register&#039; button at the top right of the UI (see &#039;Accessing the Portal&#039;, step 1) or on the &#039;Register&#039; button in the &#039;LOGIN&#039; dialog box. This will take you to the following screen:&amp;lt;br&amp;gt;[[File:Registration-step-1-of-3-v4.png|750px]]&lt;br /&gt;
# Complete the field for &#039;What should we call you?:&#039; and click &#039;Continue&#039;.&lt;br /&gt;
# In the dialog box titled &#039;Registration (Step 2/3)&#039;, you will be introduced to help icons (&#039;?&#039;) that will provide you useful information throughout the Portal. Click &#039;Close&#039; to exit the dialog box.&amp;lt;br&amp;gt;[[File:Registration-step-2-of-3-popup-box-v4.png|740px]]&amp;lt;br&amp;gt;From there, you enter your Given name, Family name, email address, a username (used to login) and a password, then click &#039;Continue&#039;.&amp;lt;br&amp;gt;[[File:Registration-step-2-of-3-v4.png|750px]]&lt;br /&gt;
# You should then arrive at a dialog box titled &#039;Registration (Step 3/3)&#039; that displays the End User License Agreement (EULA). Read through the EULA, and if you agree to the terms and conditions, tick both &#039;I AM 18 YEARS OF AGE OR OLDER&#039;, and &#039;I accept and agree to the terms of this End User License Agreement&#039;, and then click &#039;I Accept&#039;. Note that if you are under the age of 18, and/or if you do not agree with the Terms of Use, then you will not be able to use the Portal.&amp;lt;br&amp;gt;[[File:Registration-step-3-of-3-v4.png|750px]]&lt;br /&gt;
## Note: When you log back in on a later date, you might get a notice about the addition and/or updates to the EULA. For example, if you see a dialog box titled &#039;The EULA has been updated&#039;, verify that you are 18 or older, and if you would like to continue using the Portal, accept the updated EULA. &lt;br /&gt;
# Upon accepting the Terms of Use, you should get a message (see below) informing you that the system is sending you an email verification with further instructions. Follow the instructions in this email.&amp;lt;br&amp;gt;[[File:Verify-email-v4.png|750px]]&lt;br /&gt;
# Once you complete the instructions in the email, you should get a page that looks like the one below, which will have an alert entitled &#039;You successfully verified your email&#039;. Fill in the information in the &#039;LOGIN&#039; dialog box and click &#039;Login&#039;.&amp;lt;br&amp;gt;[[File:email-verified-v3.png|750px]]&lt;br /&gt;
# From there, you will be prompted to click &#039;Continue Registration&#039;.&amp;lt;br&amp;gt;[[File:Continue-registration-v4.png|750px]]&lt;br /&gt;
# Once you click &#039;Continue Registration&#039;, you will be brought to a page where you will be asked to complete registration.&amp;lt;br&amp;gt;[[File:Complete-registration-form-v4.png|750px]]&lt;br /&gt;
# Confirm that the required information is correct; add any optional information you prefer to share; read and agree to the &#039;Terms and Conditions&#039;, and click the &#039;Continue&#039; button. You should then see a page that shows &#039;Registration Complete&#039;, which includes a note to verify your call sign as the next step.&amp;lt;br&amp;gt;[[File:Registration-complete-v4.png|750px]]&lt;br /&gt;
# To add and verify your call sign, go to the &#039;Account&#039; dropdown menu and select &#039;Call signs&#039;. You should see the &#039;Your call signs&#039; dialog box.&amp;lt;br&amp;gt;[[File:Your-call-signs-v4.png|750px]]&amp;lt;br&amp;gt;Click &#039;Add a call sign&#039;, where you will see a form to add your call sign. Enter your call sign in the input field and click &#039;Add&#039;.&amp;lt;br&amp;gt;[[File:Add-a-call-sign-v4.png|750px]]&amp;lt;br&amp;gt;You should then see a message stating &#039;The new call sign was successfully added&#039;.&amp;lt;br&amp;gt;[[File:Call-sign-successfully-added-v4.png|750px]]&amp;lt;br&amp;gt;Clicking the &#039;Make Primary&#039; button will make a desired call sign the primary call sign on the account, and you can delete a call sign from your account by simply clicking the &#039;Delete&#039; button.&lt;br /&gt;
## If you did not add your maidenhead to your profile, you will get a message at the top of the page stating: &amp;lt;br&amp;gt;[[File:Add-maidenhead-error-prompt-v4.png]]&amp;lt;br&amp;gt;above the &#039;Update your profile&#039; form.&amp;lt;br&amp;gt;[[File:Update-your-profile-maidenhead-v4.png|750px]]&amp;lt;br&amp;gt;Add your maidenhead, confirm your password, and click &#039;Save&#039;.&lt;br /&gt;
## You will then see the following message above the &#039;Update your profile&#039; form:&amp;lt;br&amp;gt;[[File:profile-updated-ok-message-v4.png|500px]]&lt;br /&gt;
## Go back to Step 10, where you&#039;ll be prompted to add your call sign.&amp;lt;br&amp;gt;&lt;br /&gt;
# On the &#039;Your call signs&#039; UI, click &#039;Verify&#039;. This will take you to a screen that details the process of verification.&amp;lt;br&amp;gt;[[File:Verify-call-sign-prompt-2-v4.png|750px]]&lt;br /&gt;
# Click on the green &#039;Verify&#039; button: you should see an alert saying &#039;Your request to verify your callsign [$call sign] has been submitted&#039;, which will create a ticket for the Portal admins to verify your call sign.&amp;lt;br&amp;gt;[[File:Callsign-is-verified-v4.png|750px]]&amp;lt;br&amp;gt;You can check the ticket by going to the &#039;Tickets&#039; dropdown menu, selecting &#039;View my tickets&#039;, where you see it listed. To see the details of the ticket, click &#039;View&#039;.&amp;lt;br&amp;gt;[[File:View-ticket-request-details-v4.png|500px]]&lt;br /&gt;
## Note that once your call sign has been verified, you will no longer see the ticket in the list. Alternatively, you can confirm that your call sign has been verified by going to &#039;Account&#039; &amp;gt; &#039;Call signs&#039;, and the status of your call sign verification will be displayed in the &#039;Your call signs&#039; dialog box. Once your call sign has been verified, you will be able to request address space.&amp;lt;br&amp;gt;[[File:Verified-call-sign-v4.png|750px]]&lt;br /&gt;
&lt;br /&gt;
== Requesting address space (beginner friendly steps) ==&lt;br /&gt;
&lt;br /&gt;
This series of steps is aimed at users who are either new to requesting 44Net address space, need a refresher, or would like to streamline the process. Otherwise, you can also request address space via the Network list in the &#039;Requesting Address Space (via Network List)&#039; and &#039;Requesting Address Space for BGP Use (via Network List)&#039; sections below. &lt;br /&gt;
&lt;br /&gt;
# Under the &#039;Networks&#039; menu, select &#039;Request addresses&#039;. Note that you can also request address space on the Dashboard by clicking &#039;Request address space&#039;.&amp;lt;br&amp;gt;[[File:request-address-space-dashboard-v4.png|750px]]&lt;br /&gt;
# You should see a dialog box entitled &#039;Request Address Space&#039;. Select your address type (should be IPv4, as IPv6 is not currently available), use case, and click &#039;Continue&#039;. Please see the below instructions for your particular use case.&amp;lt;br&amp;gt;[[File:Request-address-space-form-v3.png|750px]]&lt;br /&gt;
&lt;br /&gt;
=== Use case: IPIP tunnel mesh, radio, globally unique space, or general address assignment ===&lt;br /&gt;
&lt;br /&gt;
# If you selected IPIP tunnel mesh, radio, globally unique space, or general address assignment as your use case, you will see a dialog box entitled &#039;Request IP Assignment&#039;. Fill out the &#039;Request IP Assignment&#039; dialog box with the required information; agree to the EULA; and click &#039;Continue&#039;.&amp;lt;br&amp;gt;[[File:Request-ip-assignment-v4.png|750px]]&lt;br /&gt;
# You will then see the following note thanking you for requesting address space from ARDC, which includes detailed information about next steps.&amp;lt;br&amp;gt;[[File:Ty-for-requesting-address-space-v4.png|750px]]&lt;br /&gt;
# Once your address space has been assigned, you can proceed to step 6 under &#039;Requesting Address Space (via Network List)&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Use case: BGP direct announce ===&lt;br /&gt;
&lt;br /&gt;
#If you selected &#039;BGP Direct Announce&#039; as your use case, you will see a dialog box entitled &#039;Request IP Assignment&#039;. Fill out the &#039;Request IP Assignment&#039; dialog box with the required information, agree to the EULA, and click &#039;Continue&#039;.&amp;lt;br&amp;gt;[[File:Request-ip-assignment-for-bgp-v4.png|750px]]&lt;br /&gt;
# Proceed to step 3 under &#039;Requesting Address Space for BGP Use (via Network List)&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Other use cases ===&lt;br /&gt;
&lt;br /&gt;
Selecting any of the below use cases will give you a dialog box that provides more details about the network:&lt;br /&gt;
* AREDN &lt;br /&gt;
* HAMNET &lt;br /&gt;
* HamWAN&lt;br /&gt;
&lt;br /&gt;
== Requesting address space (via network list) ==&lt;br /&gt;
&lt;br /&gt;
# Under the &#039;Networks&#039; menu, select &#039;All IPv4 Networks&#039;. &lt;br /&gt;
# In the &#039;List IPv4 Networks&#039; dialog box, click the + sign to expand a line, or use the &#039;Expand All&#039; button.&amp;lt;br&amp;gt;[[File:List-ipv4-networks-v4.png|500px]]&lt;br /&gt;
# Scroll to look for the address space you are looking for (e.g., 44.63.0.0/16 - IPIP Mesh Assignments) and click on the green clipboard icon to the right of the assignment to request an assignment.&amp;lt;br&amp;gt;[[File:Request-network-assignment-v4.png|750px]]&lt;br /&gt;
# Fill out the &#039;Request IP Assignment&#039; dialog box with the required information, and click &#039;Continue&#039;.&amp;lt;br&amp;gt;[[File:Request-ip-assignment-v4-via-network-list.png|750px]]&amp;lt;br&amp;gt;You will see the dialog box titled &#039;Thank you for requesting address space from ARDC&#039; (see step 2 under &#039;Use Case: IPIP Tunnel Mesh, Radio, Globally Unique Space, or General Address Assignment&#039;), which includes detailed information about next steps.&lt;br /&gt;
# To confirm that your address space has been successfully requested, you can go to &#039;Tickets&#039; &amp;gt; &#039;View my tickets&#039; to see if the request is in your ticket list.&amp;lt;br&amp;gt;Note that you may be asked to provide more information to the Ticket Handler about your request before your address space is assigned.&amp;lt;br&amp;gt;[[File:Confirm-address-request-in-tickets-v4.png|750px]]&amp;lt;br&amp;gt;[[File:Justification-for-address-space-v4.png|750px]]&lt;br /&gt;
# Once your space has been assigned (and the associated ticket has been closed), you can view your IPv4 networks by going to &#039;Networks&#039; &amp;gt; &#039;my IPv4 networks&#039;, where your network detail(s) will be provided.&amp;lt;br&amp;gt;[[File:Network-detail-of-requested-address-space-v4.png|750px]]&lt;br /&gt;
&lt;br /&gt;
== Adding DNS records to a subdomain ==&lt;br /&gt;
&lt;br /&gt;
# On the &#039;DNS&#039; dropdown menu, select &#039;My subdomains&#039; and then click &#039;Request a subdomain&#039; in the &#039;My subdomains&#039; dialog box.&amp;lt;br&amp;gt;[[File:my-subdomain-dialog-box.png|750px]]&lt;br /&gt;
# Choose your domain, determine a name for your subdomain (i.e., most likely your call sign), click &#039;Create request&#039;, and you should see a note&amp;lt;br&amp;gt;[[File:Create-new-subdomain-request-v4.png|750px]]&amp;lt;br&amp;gt;saying &#039;Subdomain $[call sign].ampr.org has been assigned to you&#039;.&amp;lt;br&amp;gt;[[File:Subdomain-has-been-assigned-to-you-v4.png|750px]]&amp;lt;br&amp;gt;Please be aware that if your call sign has not been verified or if you are requesting a domain other than $[call sign].ampr.org, a ticket will be opened for an administrator to review your request(s).&amp;lt;br&amp;gt;You can verify that your subdomain has been created by going to &#039;DNS&#039; &amp;gt; &#039;My subdomains&#039;, and your subdomain should appear in the &#039;My subdomains&#039; dialog box.&amp;lt;br&amp;gt;[[File:Subdomain-creation-verification-v4.png|750px]]&lt;br /&gt;
# Once your subdomain has been created, you can add DNS records by going to &#039;DNS&#039; &amp;gt; &#039;My subdomains&#039;, and click the icon under &#039;Actions&#039; in the &#039;Subdomains&#039; dialog box (see step 2 above). &lt;br /&gt;
# In the &#039;Resource records for $subdomain.ampr.org&#039;, click &#039;Add a resource record&#039;.&amp;lt;br&amp;gt;[[File:add-resource-record.png|750px]]&lt;br /&gt;
# In the &#039;Create resource record for $subdomain.ampr.org&#039;, select the record type, and click &#039;Next&#039; (see below).&amp;lt;br&amp;gt;[[File:create-resource-record-step-1.png|750px]]&lt;br /&gt;
# Add the details relevant to the record type and ensure that Active is checked, click &#039;Create&#039;,&amp;lt;br&amp;gt;[[File:Create-resource-record-step-2-v4.png|750px]]&amp;lt;br&amp;gt;and you should get an alert that says &#039;Subdomain Record created successfully&#039;.&amp;lt;br&amp;gt;[[File:Subdomain-record-created-successfully-v4.png|750px]]&lt;br /&gt;
# You can verify that your record has been created by going to &#039;DNS&#039; &amp;gt; &#039;My records&#039; and look for the record that is associated with your subdomain.&amp;lt;br&amp;gt;[[File:record-associated-with-subdomain.png|750px]]&lt;br /&gt;
&lt;br /&gt;
== Creating a gateway ==&lt;br /&gt;
&lt;br /&gt;
# Go to &#039;Networks&#039; &amp;gt; &#039;My gateways&#039; and click &#039;Create a Gateway&#039; in the &#039;My Gateways&#039; dialog box.&amp;lt;br&amp;gt;[[File:my-gateways.png|750px]]&lt;br /&gt;
# In the &#039;Create new Gateway&#039; dialog box, fill out all required fields (Hostname can be left blank), click &#039;Add&#039;, and you should get an alert saying &#039;Gateway created successfully.&#039;&amp;lt;br&amp;gt;[[File:create-new-gateway.png|750px]]&amp;lt;br&amp;gt;[[File:Gateway-created-successfully-v4.png|750px]]&lt;br /&gt;
# To add a subnet to your gateway, click the edit button under &#039;Actions&#039; (see step 2 above). You will be taken to an &#039;Update Gateway&#039; dialog box, which includes information about your gateway. Click &#039;Add New Network&#039;.&amp;lt;br&amp;gt;[[File:Update-gateway-v4.png|750px]]&lt;br /&gt;
# You will then see an &#039;Add New Network&#039; dialog box (see below). Select a network from your list of networks; leave &#039;Find Network&#039; field blank; and then click &#039;Add&#039;. You should see an alert titled &#039;Network Successfully Linked to this Gateway&#039; (see below). You can verify that your network has been added by clicking &#039;View My Gateways&#039; and seeing said gateway under &#039;My Gateways&#039; (see below).&amp;lt;br&amp;gt;[[File:add-new-network-v3.png|750px]]&amp;lt;br&amp;gt;[[File:Network-successfully-linked-to-gateway-v4.png|750px]]&amp;lt;br&amp;gt;[[File:verify-my-gateways-v3.2.png|750px]]&lt;br /&gt;
# If you would like to add someone else&#039;s network using their unique code, click &#039;Add New Network&#039;, which will take you to the &#039;Add New Network&#039; dialog box. Fill out the required information, and click &#039;Find&#039;. You should have a 44Net address displaying in the &#039;Network found&#039; field. Click &#039;Add&#039;, and you should see an alert titled &#039;Network Successfully Linked to this Gateway&#039; (see step 4 above).&amp;lt;br&amp;gt;[[File:Add-network-to-gateway-v4.png|750px]]&lt;br /&gt;
# You can add or remove linked networks by clicking the &#039;Add New Network&#039; or &#039;Unlink&#039; button, respectively (see steps 3 and 4 above).&lt;br /&gt;
&lt;br /&gt;
== Requesting address space for BGP use (via network list) ==&lt;br /&gt;
&lt;br /&gt;
# From the &#039;Networks&#039; dropdown menu, go to &#039;All IPv4 networks&#039;, and request a BGP assignment (e.g., 44.31.0.0/16 - BGP Assignments) by clicking on the &#039;Request Assignment&#039; icon to the right of the listed assignment (green clipboard).&amp;lt;br&amp;gt;[[File:Request-bgp-assignment-v4.png|500px]]&lt;br /&gt;
# On the &#039;Request IP Assignment&#039; dialog box, fill out the mandatory fields, agree to the EULA, and click &#039;Continue&#039;.&amp;lt;br&amp;gt;[[File:Request-ip-assignment-for-bgp-v4.png|750px]]&lt;br /&gt;
# You should see a &#039;BGP Information&#039; dialog box on the UI. Fill out the mandatory information, click &#039;Submit Request&#039;,&amp;lt;br&amp;gt;[[File:Bgp-information-v4.png|750px]]&amp;lt;br&amp;gt;and you should now see &#039;Thank you for requesting address space from ARDC&#039; (see Step 2 under &#039;Use Case: IPIP Tunnel Mesh, Radio, Globally Unique Space, or General Address Assignment&#039;). Note that the justification must be at least 100 characters.&lt;br /&gt;
# You can confirm the address has been successfully requested by going to &#039;Tickets&#039; &amp;gt; &#039;View my tickets&#039;, and your request should be visible in the &#039;List your tickets&#039; dialog box. Once the ticket has been closed, you should see the allocation listed in your IPv4 networks. &amp;lt;br&amp;gt;[[File:all-ipv4-allocations-by-user.png|500px]]&amp;lt;br&amp;gt;Clicking &#039;Edit&#039; will bring you to the &#039;Update Network&#039; dialog box, where you can make appropriate updates, download the EULA, download the Letter of Authorization (LOA), etc (see below).&amp;lt;br&amp;gt;[[File:update-network-v3.2.png|750px]]&lt;br /&gt;
&lt;br /&gt;
== v2.0 Features ==&lt;br /&gt;
&lt;br /&gt;
=== Dashboard ===&lt;br /&gt;
&lt;br /&gt;
After logging in, you should see your Dashboard. If your email has been verified, you should see an &#039;Account&#039; menu and a &#039;Tickets&#039; menu at the top right-hand side of the UI. If you have been granted additional privileges, you will see additional menus for those related privileges. The Dashboard will also display information boxes, such as your latest login, IP, and timestamp, or outstanding notifications you need to be aware of. &lt;br /&gt;
&lt;br /&gt;
[[File:Dashboard-v4.png|750px]]&lt;br /&gt;
&lt;br /&gt;
=== Help ===&lt;br /&gt;
&lt;br /&gt;
The &#039;Help&#039; dropdown menu provides the following options: &lt;br /&gt;
*&#039;&#039;&#039;View EULA&#039;&#039;&#039;: displays a copy of the Portal&#039;s End User License Agreement (EULA)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;2FA&#039;&#039;&#039;: defines 2FA and provides details on multiple 2FA options to choose from to add to your account &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LoT&#039;&#039;&#039;: provides an overview of Level of Trust (LoT), how it works, and how to increase your LoT &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CIDR&#039;&#039;&#039;: provides an overview of Classless Inter-Domain Routing (CIDR) &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Limits&#039;&#039;&#039;: provides an explanation of your specific limits on Portal activities, which are directly related to your current LoT &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Member pages&#039;&#039;&#039;: These are pages generated by other members &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Subdomains&#039;&#039;&#039;: provides an overview of subdomains and DNS and steps needed to request subdomains &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Passwords&#039;&#039;&#039;: provides password requirements and recommendations for how to create a strong password for your Portal account &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Glossary&#039;&#039;&#039;: includes definitions for terminology relevant to using the Portal &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Community&#039;&#039;&#039;: includes links to ARDC&#039;s Groups.io group, along with links to relevant subgroups&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Lookup callsign&#039;&#039;&#039;: allows you to look up call signs of other users on the Portal&lt;br /&gt;
&lt;br /&gt;
=== Maps ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Distance&#039;&#039;&#039;: allows you to perform distance and bearing calculations&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maidenhead&#039;&#039;&#039;: allows you to generate a map from a Maidenhead locator&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Conversions&#039;&#039;&#039;: allows you to convert from DMS to lat/long and back&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;World map&#039;&#039;&#039;: a map that displays the approximate location for all members&lt;br /&gt;
&lt;br /&gt;
=== Account ===&lt;br /&gt;
&lt;br /&gt;
The &#039;Account&#039; dropdown menu provides the following options: &lt;br /&gt;
* &#039;&#039;&#039;Profile&#039;&#039;&#039;: allows you to view and update your personal data &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Call signs&#039;&#039;&#039;: allows you to add/remove/verify your call sign(s) &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LoT entries&#039;&#039;&#039;: lists your Level of Trust (LoT) entires&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Verify address&#039;&#039;&#039;: allows you to go through the address verification process, which is needed if you are requesting BGP announced address space&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Organisations&#039;&#039;&#039;: allows you to create organizations and view information of the organizations you are affiliated with &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Notifications&#039;&#039;&#039;: displays a list of user notifications &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Notification types&#039;&#039;&#039;: displays all notification types/options &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;View all notifications&#039;&#039;&#039;: displays all your active notifications &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Logs&#039;&#039;&#039;: displays all your log entries &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;My public page&#039;&#039;&#039;: displays any public pages you have added and provides the ability to add more &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Delete my account&#039;&#039;&#039;: allows a user to delete their account &lt;br /&gt;
&lt;br /&gt;
==== Profile ====&lt;br /&gt;
&lt;br /&gt;
A user&#039;s profile is always available, whether or not a their email address has been verified. Through the profile, a user has access to the following: &lt;br /&gt;
* Personal Information (PII) a user chooses to share with ARDC &lt;br /&gt;
&lt;br /&gt;
* The ability for a user to update their account &lt;br /&gt;
&lt;br /&gt;
* The ability for a user to enable 2FA on their account &lt;br /&gt;
&lt;br /&gt;
Changes made to the profile will require the current password to be entered at the bottom of the page and clicking &#039;Save&#039; for changes take effect. &lt;br /&gt;
&lt;br /&gt;
==== Call signs ====&lt;br /&gt;
&lt;br /&gt;
Here, the user is presented with a list of all call signs they have entered. A user can add up to a maximum of five call signs (can be adjusted on a per user basis), with only one call sign being the primary. Clubs and organization can add up to 10 of their own call signs by default. Call signs must be verified before they can be used. All verified call signs must be unique within the system. &lt;br /&gt;
&lt;br /&gt;
==== Level of Trust (LoT) and LoT Entries ====&lt;br /&gt;
&lt;br /&gt;
The Portal uses various methods to verify users and thus gain &#039;trust&#039;, which is referred to as the &#039;Level of Trust&#039; (LoT). LoT is used to increase confidence that a user is who they say they are and record that there is a skill set and knowledge that is needed to assign responsibilities to said user in the Portal. &lt;br /&gt;
&lt;br /&gt;
As various tasks are accomplished, such as verification of email and/or call signs, points will be assigned to a users&#039; account. The more points a user has, the higher the LoT. You can learn more about LoT by going to either &#039;Help&#039; &amp;gt; &#039;LoT&#039; or &#039;Account&#039; &amp;gt; &#039;LoT info&#039; on the navigation menu. &lt;br /&gt;
&lt;br /&gt;
The LoT List is a read-only list for LoT entries of a user. You can find this list by going to &#039;Account&#039; &amp;gt; &#039;LoT list&#039;. A user will have at least one entry that shows that their email address was verified. Below are a few examples of what accesses are granted based on a user&#039;s LoT. &lt;br /&gt;
&lt;br /&gt;
* Email is not verified&lt;br /&gt;
** User can login, access their own profile, delete their account&lt;br /&gt;
* Call sign is not verified&lt;br /&gt;
** User cannot access DNS records or request address space &lt;br /&gt;
&lt;br /&gt;
==== Notifications ====&lt;br /&gt;
&lt;br /&gt;
The system informs users of various events via notifications.&amp;lt;br&amp;gt;[[File:Notification-types-v4.png|750px]]&lt;br /&gt;
&lt;br /&gt;
Mandatory Notifications: &lt;br /&gt;
* Contact Member &lt;br /&gt;
* Password Reset &lt;br /&gt;
* Ticket Reminder &lt;br /&gt;
* LoT Expiry &lt;br /&gt;
* LoT Added &lt;br /&gt;
* Account Expiry &lt;br /&gt;
* LOA Expiry&lt;br /&gt;
&lt;br /&gt;
Optional Notifications: &lt;br /&gt;
* Login &lt;br /&gt;
* Profile Update &lt;br /&gt;
* Ticket Assigned &lt;br /&gt;
* ...and many more &lt;br /&gt;
&lt;br /&gt;
Clicking on &#039;Methods&#039; (under the &#039;Actions&#039; column, see above) will allow the user to choose a preferred method of notification:&amp;lt;br&amp;gt;[[File:notification-methods.png|750px]]&lt;br /&gt;
&lt;br /&gt;
* Email &lt;br /&gt;
* SMS &lt;br /&gt;
* many more coming soon, e.g. Zulip, Signal, Telegram... &lt;br /&gt;
&lt;br /&gt;
=== Tickets ===&lt;br /&gt;
&lt;br /&gt;
Tickets track tasks, along with their associated progress, within the Portal. Items managed by tickets include, but are not limited to: &lt;br /&gt;
* Call sign verification &lt;br /&gt;
* Request(s) for resources (e.g., address space) &lt;br /&gt;
&lt;br /&gt;
The &#039;Tickets&#039; dropdown menu will allow the user to view all of their tickets, create a new support ticket, and serves as a reference to check the status of any user requests. &lt;br /&gt;
&lt;br /&gt;
Ticket types that are not &#039;Support&#039; are available within the system and are accessible to a user in a specific circumstance. &lt;br /&gt;
&lt;br /&gt;
=== Domain name system (DNS) records ===&lt;br /&gt;
&lt;br /&gt;
ARDC manages the ampr.org domain for its own use and supports Portal user needs.&lt;br /&gt;
&lt;br /&gt;
Once a user&#039;s call sign is verified, they should see the DNS dropdown menu with submenu options &#039;Domains&#039;, &#039;My subdomains&#039;, and &#039;My records&#039;. &lt;br /&gt;
&lt;br /&gt;
[[File:dns-menu.png|750px]]&lt;br /&gt;
&lt;br /&gt;
=== Networks ===&lt;br /&gt;
&lt;br /&gt;
Once a user&#039;s call sign is verified, they should see the &#039;Networks&#039; dropdown menu with submenu options &#039;Request addresses&#039;, &#039;All IPv4 networks&#039;, &#039;All IPv6 networks&#039;, &#039;All gateways&#039;, &#039;My IPv4 networks&#039;, &#039;My IPv6 networks&#039;, &#039;My gateways&#039;. &lt;br /&gt;
&lt;br /&gt;
=== Contact ===&lt;br /&gt;
&lt;br /&gt;
Clicking &#039;Contact&#039; takes you to the &#039;CONTACT US&#039; form, where you can reach out to Portal admins with inquiries, reporting issues, etc. &lt;br /&gt;
&lt;br /&gt;
[[File:contact-us-v3.png|750px]]&lt;br /&gt;
&lt;br /&gt;
=== API ===&lt;br /&gt;
&lt;br /&gt;
An [[API]] enables programs to access data maintained in the Portal.&lt;br /&gt;
&lt;br /&gt;
== Helpful resources ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Subnet calculator&#039;&#039;&#039;: [https://www.calculator.net/ip-subnet-calculator.html https://www.calculator.net/ip-subnet-calculator.html]&lt;br /&gt;
&lt;br /&gt;
[[Category:How-To]]&lt;br /&gt;
[[Category:How-To Guides]]&lt;br /&gt;
[[Category:Portal]]&lt;br /&gt;
[[Category:Portal Workflows]]&lt;/div&gt;</summary>
		<author><name>KI5QKX</name></author>
	</entry>
</feed>