public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH iproute2] remove hamradio protocols
@ 2026-04-24 23:24 Stephen Hemminger
  0 siblings, 0 replies; only message in thread
From: Stephen Hemminger @ 2026-04-24 23:24 UTC (permalink / raw)
  To: netdev; +Cc: Stephen Hemminger

The ax25, rose, and netrom have been removed upstream.
Drop support for those protocols from iproute2.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 Makefile                  |   9 ---
 include/uapi/linux/ax25.h | 117 --------------------------------------
 include/uapi/linux/rose.h |  91 -----------------------------
 include/utils.h           |   6 --
 lib/ax25_ntop.c           |  82 --------------------------
 lib/ll_addr.c             |   6 --
 lib/netrom_ntop.c         |  23 --------
 lib/rose_ntop.c           |  56 ------------------
 8 files changed, 390 deletions(-)
 delete mode 100644 include/uapi/linux/ax25.h
 delete mode 100644 include/uapi/linux/rose.h
 delete mode 100644 lib/ax25_ntop.c
 delete mode 100644 lib/netrom_ntop.c
 delete mode 100644 lib/rose_ntop.c

diff --git a/Makefile b/Makefile
index 1bebf08f..6f5d4765 100644
--- a/Makefile
+++ b/Makefile
@@ -45,18 +45,9 @@ DEFINES+=-DCONF_USR_DIR=\"$(CONF_USR_DIR)\" \
          -DARPDDIR=\"$(ARPDDIR)\" \
          -DCONF_COLOR=$(CONF_COLOR)
 
-#options for AX.25
-ADDLIB+=ax25_ntop.o
-
-#options for AX.25
-ADDLIB+=rose_ntop.o
-
 #options for mpls
 ADDLIB+=mpls_ntop.o mpls_pton.o
 
-#options for NETROM
-ADDLIB+=netrom_ntop.o
-
 CC := gcc
 HOSTCC ?= $(CC)
 DEFINES += -D_GNU_SOURCE
diff --git a/include/uapi/linux/ax25.h b/include/uapi/linux/ax25.h
deleted file mode 100644
index b496b9d8..00000000
--- a/include/uapi/linux/ax25.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-/*
- * These are the public elements of the Linux kernel AX.25 code. A similar
- * file netrom.h exists for the NET/ROM protocol.
- */
-
-#ifndef	AX25_KERNEL_H
-#define	AX25_KERNEL_H
-
-#include <linux/socket.h>
-
-#define AX25_MTU	256
-#define AX25_MAX_DIGIS  8
-
-#define AX25_WINDOW	1
-#define AX25_T1		2
-#define AX25_N2		3
-#define AX25_T3		4
-#define AX25_T2		5
-#define	AX25_BACKOFF	6
-#define	AX25_EXTSEQ	7
-#define	AX25_PIDINCL	8
-#define AX25_IDLE	9
-#define AX25_PACLEN	10
-#define AX25_IAMDIGI	12
-
-#define AX25_KILL	99
-
-#define SIOCAX25GETUID		(SIOCPROTOPRIVATE+0)
-#define SIOCAX25ADDUID		(SIOCPROTOPRIVATE+1)
-#define SIOCAX25DELUID		(SIOCPROTOPRIVATE+2)
-#define SIOCAX25NOUID		(SIOCPROTOPRIVATE+3)
-#define SIOCAX25OPTRT		(SIOCPROTOPRIVATE+7)
-#define SIOCAX25CTLCON		(SIOCPROTOPRIVATE+8)
-#define SIOCAX25GETINFOOLD	(SIOCPROTOPRIVATE+9)
-#define SIOCAX25ADDFWD		(SIOCPROTOPRIVATE+10)
-#define SIOCAX25DELFWD		(SIOCPROTOPRIVATE+11)
-#define SIOCAX25DEVCTL          (SIOCPROTOPRIVATE+12)
-#define SIOCAX25GETINFO         (SIOCPROTOPRIVATE+13)
-
-#define AX25_SET_RT_IPMODE	2
-
-#define AX25_NOUID_DEFAULT	0
-#define AX25_NOUID_BLOCK	1
-
-typedef struct {
-	char		ax25_call[7];	/* 6 call + SSID (shifted ascii!) */
-} ax25_address;
-
-struct sockaddr_ax25 {
-	__kernel_sa_family_t sax25_family;
-	ax25_address	sax25_call;
-	int		sax25_ndigis;
-	/* Digipeater ax25_address sets follow */
-};
-
-#define sax25_uid	sax25_ndigis
-
-struct full_sockaddr_ax25 {
-	struct sockaddr_ax25 fsa_ax25;
-	ax25_address	fsa_digipeater[AX25_MAX_DIGIS];
-};
-
-struct ax25_routes_struct {
-	ax25_address	port_addr;
-	ax25_address	dest_addr;
-	unsigned char	digi_count;
-	ax25_address	digi_addr[AX25_MAX_DIGIS];
-};
-
-struct ax25_route_opt_struct {
-	ax25_address	port_addr;
-	ax25_address	dest_addr;
-	int		cmd;
-	int		arg;
-};
-
-struct ax25_ctl_struct {
-        ax25_address            port_addr;
-        ax25_address            source_addr;
-        ax25_address            dest_addr;
-        unsigned int            cmd;
-        unsigned long           arg;
-        unsigned char           digi_count;
-        ax25_address            digi_addr[AX25_MAX_DIGIS];
-};
-
-/* this will go away. Please do not export to user land */
-struct ax25_info_struct_deprecated {
-	unsigned int	n2, n2count;
-	unsigned int	t1, t1timer;
-	unsigned int	t2, t2timer;
-	unsigned int	t3, t3timer;
-	unsigned int	idle, idletimer;
-	unsigned int	state;
-	unsigned int	rcv_q, snd_q;
-};
-
-struct ax25_info_struct {
-	unsigned int	n2, n2count;
-	unsigned int	t1, t1timer;
-	unsigned int	t2, t2timer;
-	unsigned int	t3, t3timer;
-	unsigned int	idle, idletimer;
-	unsigned int	state;
-	unsigned int	rcv_q, snd_q;
-	unsigned int	vs, vr, va, vs_max;
-	unsigned int	paclen;
-	unsigned int	window;
-};
-
-struct ax25_fwd_struct {
-	ax25_address	port_from;
-	ax25_address	port_to;
-};
-
-#endif
diff --git a/include/uapi/linux/rose.h b/include/uapi/linux/rose.h
deleted file mode 100644
index 19aa4693..00000000
--- a/include/uapi/linux/rose.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-/*
- * These are the public elements of the Linux kernel Rose implementation.
- * For kernel AX.25 see the file ax25.h. This file requires ax25.h for the
- * definition of the ax25_address structure.
- */
-
-#ifndef	ROSE_KERNEL_H
-#define	ROSE_KERNEL_H
-
-#include <linux/socket.h>
-#include <linux/ax25.h>
-
-#define ROSE_MTU	251
-
-#define ROSE_MAX_DIGIS 6
-
-#define	ROSE_DEFER	1
-#define ROSE_T1		2
-#define	ROSE_T2		3
-#define	ROSE_T3		4
-#define	ROSE_IDLE	5
-#define	ROSE_QBITINCL	6
-#define	ROSE_HOLDBACK	7
-
-#define	SIOCRSGCAUSE		(SIOCPROTOPRIVATE+0)
-#define	SIOCRSSCAUSE		(SIOCPROTOPRIVATE+1)
-#define	SIOCRSL2CALL		(SIOCPROTOPRIVATE+2)
-#define	SIOCRSSL2CALL		(SIOCPROTOPRIVATE+2)
-#define	SIOCRSACCEPT		(SIOCPROTOPRIVATE+3)
-#define	SIOCRSCLRRT		(SIOCPROTOPRIVATE+4)
-#define	SIOCRSGL2CALL		(SIOCPROTOPRIVATE+5)
-#define	SIOCRSGFACILITIES	(SIOCPROTOPRIVATE+6)
-
-#define	ROSE_DTE_ORIGINATED	0x00
-#define	ROSE_NUMBER_BUSY	0x01
-#define	ROSE_INVALID_FACILITY	0x03
-#define	ROSE_NETWORK_CONGESTION	0x05
-#define	ROSE_OUT_OF_ORDER	0x09
-#define	ROSE_ACCESS_BARRED	0x0B
-#define	ROSE_NOT_OBTAINABLE	0x0D
-#define	ROSE_REMOTE_PROCEDURE	0x11
-#define	ROSE_LOCAL_PROCEDURE	0x13
-#define	ROSE_SHIP_ABSENT	0x39
-
-typedef struct {
-	char		rose_addr[5];
-} rose_address;
-
-struct sockaddr_rose {
-	__kernel_sa_family_t srose_family;
-	rose_address	srose_addr;
-	ax25_address	srose_call;
-	int		srose_ndigis;
-	ax25_address	srose_digi;
-};
-
-struct full_sockaddr_rose {
-	__kernel_sa_family_t srose_family;
-	rose_address	srose_addr;
-	ax25_address	srose_call;
-	unsigned int	srose_ndigis;
-	ax25_address	srose_digis[ROSE_MAX_DIGIS];
-};
-
-struct rose_route_struct {
-	rose_address	address;
-	unsigned short	mask;
-	ax25_address	neighbour;
-	char		device[16];
-	unsigned char	ndigis;
-	ax25_address	digipeaters[AX25_MAX_DIGIS];
-};
-
-struct rose_cause_struct {
-	unsigned char	cause;
-	unsigned char	diagnostic;
-};
-
-struct rose_facilities_struct {
-	rose_address	source_addr,   dest_addr;
-	ax25_address	source_call,   dest_call;
-	unsigned char	source_ndigis, dest_ndigis;
-	ax25_address	source_digis[ROSE_MAX_DIGIS];
-	ax25_address	dest_digis[ROSE_MAX_DIGIS];
-	unsigned int	rand;
-	rose_address	fail_addr;
-	ax25_address	fail_call;
-};
-
-#endif
diff --git a/include/utils.h b/include/utils.h
index b68d6bc4..e4e318e2 100644
--- a/include/utils.h
+++ b/include/utils.h
@@ -199,15 +199,9 @@ int matches(const char *prefix, const char *string);
 int inet_addr_match(const inet_prefix *a, const inet_prefix *b, int bits);
 int inet_addr_match_rta(const inet_prefix *m, const struct rtattr *rta);
 
-const char *ax25_ntop(int af, const void *addr, char *str, socklen_t len);
-
-const char *rose_ntop(int af, const void *addr, char *buf, socklen_t buflen);
-
 const char *mpls_ntop(int af, const void *addr, char *str, size_t len);
 int mpls_pton(int af, const char *src, void *addr, size_t alen);
 
-const char *netrom_ntop(int af, const void *addr, char *str, socklen_t len);
-
 extern int __iproute2_hz_internal;
 int __get_hz(void);
 
diff --git a/lib/ax25_ntop.c b/lib/ax25_ntop.c
deleted file mode 100644
index 3a72a43e..00000000
--- a/lib/ax25_ntop.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-
-#include <errno.h>
-#include <sys/socket.h>
-#include <linux/ax25.h>
-
-#include "utils.h"
-
-const char *ax25_ntop1(const ax25_address *src, char *dst, socklen_t size);
-
-/*
- * AX.25 addresses are based on Amateur radio callsigns followed by an SSID
- * like XXXXXX-SS where the callsign consists of up to 6 ASCII characters
- * which are either letters or digits and the SSID is a decimal number in the
- * range 0..15.
- * Amateur radio callsigns are assigned by a country's relevant authorities
- * and are 3..6 characters though a few countries have assigned callsigns
- * longer than that.  AX.25 is not able to handle such longer callsigns.
- * There are further restrictions on the format of valid callsigns by
- * applicable national and international law.  Linux doesn't need to care and
- * will happily accept anything that consists of 6 ASCII characters in the
- * range of A-Z and 0-9 for a callsign such as the default AX.25 MAC address
- * LINUX-1 and the default broadcast address QST-0.
- * The SSID is just a number and not encoded in ASCII digits.
- *
- * Being based on HDLC AX.25 encodes addresses by shifting them one bit left
- * thus zeroing bit 0, the HDLC extension bit for all but the last bit of
- * a packet's address field but for our purposes here we're not considering
- * the HDLC extension bit that is it will always be zero.
- *
- * Linux' internal representation of AX.25 addresses in Linux is very similar
- * to this on the on-air or on-the-wire format.  The callsign is padded to
- * 6 octets by adding spaces, followed by the SSID octet then all 7 octets
- * are left-shifted by one bit.
- *
- * For example, for the address "LINUX-1" the callsign is LINUX and SSID is 1
- * the internal format is 98:92:9c:aa:b0:40:02.
- */
-
-const char *ax25_ntop1(const ax25_address *src, char *dst, socklen_t size)
-{
-	char c, *s;
-	int n;
-
-	for (n = 0, s = dst; n < 6; n++) {
-		c = (src->ax25_call[n] >> 1) & 0x7f;
-		if (c != ' ')
-			*s++ = c;
-	}
-
-	*s++ = '-';
-
-	n = ((src->ax25_call[6] >> 1) & 0x0f);
-	if (n > 9) {
-		*s++ = '1';
-		n -= 10;
-	}
-
-	*s++ = n + '0';
-	*s++ = '\0';
-
-	if (*dst == '\0' || *dst == '-') {
-		dst[0] = '*';
-		dst[1] = '\0';
-	}
-
-	return dst;
-}
-
-const char *ax25_ntop(int af, const void *addr, char *buf, socklen_t buflen)
-{
-	switch (af) {
-	case AF_AX25:
-		errno = 0;
-		return ax25_ntop1((ax25_address *)addr, buf, buflen);
-
-	default:
-		errno = EAFNOSUPPORT;
-	}
-
-	return NULL;
-}
diff --git a/lib/ll_addr.c b/lib/ll_addr.c
index 5e924591..7a9eb3a4 100644
--- a/lib/ll_addr.c
+++ b/lib/ll_addr.c
@@ -35,12 +35,6 @@ const char *ll_addr_n2a(const unsigned char *addr, int alen, int type,
 
 	if (alen == 16 && (type == ARPHRD_TUNNEL6 || type == ARPHRD_IP6GRE))
 		return inet_ntop(AF_INET6, addr, buf, blen);
-	if (alen == 7 && type == ARPHRD_AX25)
-		return ax25_ntop(AF_AX25, addr, buf, blen);
-	if (alen == 7 && type == ARPHRD_NETROM)
-		return netrom_ntop(AF_NETROM, addr, buf, blen);
-	if (alen == 5 && type == ARPHRD_ROSE)
-		return rose_ntop(AF_ROSE, addr, buf, blen);
 
 	snprintf(buf, blen, "%02x", addr[0]);
 	for (i = 1, l = 2; i < alen && l < blen; i++, l += 3)
diff --git a/lib/netrom_ntop.c b/lib/netrom_ntop.c
deleted file mode 100644
index 3dd6cb0b..00000000
--- a/lib/netrom_ntop.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-
-#include <sys/socket.h>
-#include <errno.h>
-#include <linux/ax25.h>
-
-#include "utils.h"
-
-const char *ax25_ntop1(const ax25_address *src, char *dst, socklen_t size);
-
-const char *netrom_ntop(int af, const void *addr, char *buf, socklen_t buflen)
-{
-	switch (af) {
-	case AF_NETROM:
-		errno = 0;
-		return ax25_ntop1((ax25_address *)addr, buf, buflen);
-
-	default:
-		errno = EAFNOSUPPORT;
-	}
-
-	return NULL;
-}
diff --git a/lib/rose_ntop.c b/lib/rose_ntop.c
deleted file mode 100644
index c9ba712c..00000000
--- a/lib/rose_ntop.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <string.h>
-#include <errno.h>
-
-#include <linux/netdevice.h>
-#include <linux/if_arp.h>
-#include <linux/sockios.h>
-#include <linux/rose.h>
-
-#include "rt_names.h"
-#include "utils.h"
-
-static const char *rose_ntop1(const rose_address *src, char *dst,
-			      socklen_t size)
-{
-	char *p = dst;
-	int i;
-
-	if (size < 10)
-		return NULL;
-
-	for (i = 0; i < 5; i++) {
-		*p++ = '0' + ((src->rose_addr[i] >> 4) & 0xf);
-		*p++ = '0' + ((src->rose_addr[i]     ) & 0xf);
-	}
-
-	if (size == 10)
-		return dst;
-
-	*p = '\0';
-
-	return dst;
-}
-
-const char *rose_ntop(int af, const void *addr, char *buf, socklen_t buflen)
-{
-	switch (af) {
-	case AF_ROSE:
-		errno = 0;
-		return rose_ntop1((rose_address *)addr, buf, buflen);
-
-	default:
-		errno = EAFNOSUPPORT;
-	}
-
-	return NULL;
-}
-- 
2.53.0


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-04-24 23:24 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-24 23:24 [PATCH iproute2] remove hamradio protocols Stephen Hemminger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox