21. AX.25, NET/ROM, ROSE network programming

Probably the biggest advantage of using the kernel based implementations of the amateur packet radio protocols is the ease with which you can develop applications and programs to use them.

While the subject of Unix Network Programming is outside the scope of this document I will describe the elementary details of how you can make use of the AX.25, NET/ROM and ROSE protocols within your software.

21.1. The address families

Network programming for AX.25, NET/ROM and ROSE is quite similar to programming for TCP/IP under Linux. The major differences being the address families used, and the address structures that need to be mangled into place.

The address family names for AX.25, NET/ROM and ROSE are AF_AX25, AF_NETROM and AF_ROSE respectively.

21.2. The header files

You must always include the `netax25/ax25.h' header file, and also the `netrom/netrom.h' or `netrose/rose.h' header files if you are dealing with those protocols. Simple top level skeletons would look something like the following:

For AX.25:

#include <netax25/ax25.h>
int s, addrlen = sizeof(struct full_sockaddr_ax25);
struct full_sockaddr_ax25 sockaddr;
sockaddr.fsa_ax25.sax25_family = AF_AX25

For NET/ROM:

#include <netax25/ax25.h>
#include <netrom/netrom.h>
int s, addrlen = sizeof(struct full_sockaddr_ax25);
struct full_sockaddr_ax25 sockaddr;
sockaddr.fsa_ax25.sax25_family = AF_NETROM;

For ROSE:

#include <netax25/ax25.h>
#include <netrose/rose.h>
int s, addrlen = sizeof(struct sockaddr_rose);
struct sockaddr_rose sockaddr;
sockaddr.srose_family = AF_ROSE;

21.3. Callsign mangling and examples

There are routines within the lib/ax25.a library built in the AX.25 utilities package that manage the callsign conversions for you. You can write your own of course if you wish.

The user_call utilities are excellent examples from which to work. The source code for them is included in the AX.25 utilities package. If you spend a little time working with those you will soon see that ninety percent of the work is involved in just getting ready to open the socket. Actually making the connection is easy, the preparation takes time.

The examples are simple enough to not be very confusing. If you have any questions, you should feel to direct them to the linux-hams mailing list and someone there will be sure to help you.