Mutara

Links, IAX and AllStar

Mutara speaks IAX2 and the app_rpt text protocol, as ASL3 nodes do. This page tells you what the node does on the wire and in which sequence.

Registration #

When allstar.register is on, the node sends an HTTP registration to register.allstarlink.org every 3 minutes. The registration gives the node number, the password and the IAX2 port. The dashboard chip shows the result. Its title gives the reply of the server, for example "registered" or the reason for a failure. A failure is in the log as "allstar registration failed".

The IAX2 traffic must leave from the same public address that registers, because ASL3 nodes check it. If the router changes the port, set allstar.public_port.

Reachability

The node counts the calls and pokes from the internet. After the first one, the dashboard shows Reachable. If a registered node gets nothing for 30 minutes, the dashboard shows Check router.

Node lookup #

  1. The node looks for the number in allstar.static_nodes.
  2. If it is not there, the node asks DNS under nodes.allstarlink.org.
  3. If DNS fails, the node uses the AllStarLink node list from nodelist_url, as app_rpt does.
  4. If that fails too, the node uses the last DNS answer for a limited time.

The node database (allstar.node_db) is a different list. It gives callsigns, names and locations for the search in the node box and for say_callsigns. The node gets it every 6 hours.

Incoming calls #

  • Call tokens. The node asks each IAX2 caller for a call token before it answers, as ASL3 does. This stops calls from a false address. require_calltoken: false lets old clients in.
  • Caller verification. A calling node must come from the address that its node number resolves to, as in app_rpt. A static node with no_ip_check skips this check.
  • Access. allow_links, access, allow and deny select which nodes can link in. The COP codes 49 and 50 refuse and accept incoming links from the air.
  • IAX2 users. A call with a user name is an app login. The secret is checked with MD5, as IAX2 does. permit limits the addresses.

The app_rpt protocol #

On an AllStar link, Mutara sends and reads the app_rpt text messages:

  • !NEWKEY1! on answer, and keying on voice frames with no RADIO_KEY.
  • Link lists (L), which tell each node the nodes behind a link.
  • K? keying queries, and D, T and M messages for DTMF, telemetry and text.
  • !!DISCONNECT!! when a node ends a link on purpose.

Link audio is 8 kHz μ-law. Each node sends its link list to its links, as app_rpt does.

Link modes and routing #

ModeAudio from the far nodeAudio to the far node
transceiveTo the radio, the users and the other linksYes
monitorTo the radio, the users and the other linksNo
localmonitorTo local ports (the radio) onlyNo

Loop checks #

The node keeps the link lists that it gets from each link. Before it connects, it looks for the number in its own number and in those lists.

Figure 1. The loop check before each connect.
Text version of figure 1
  1. A user or a command asks to connect node n.
  2. If n is this node, the node refuses with "already connected".
  3. If n is in the link list of a link, n is already in the network. The node refuses with "already connected".
  4. If not, the node looks up n and calls it.

Local links between the nodes of one install are in the link lists too. A call over IAX2 that says it comes from a node of the same install is refused.

Permanent links #

A permanent link is in allstar.permalinks, or made with *812, *813 or *818. The node connects it at start and again when it drops. As in app_rpt, it stops when the far node sends !!DISCONNECT!!, for example after a *1 there. A restart, a new *81x or a connect starts it again. Keep linked on the dashboard saves the link in allstar.permalinks.

DTMF actions #

allstar.functions maps digits to app_rpt actions: ilink,N, status,N and cop,N, and Mutara actions such as weather. The node decodes DTMF on local ports with a Goertzel detector. Links send DTMF as D messages, and users send it in IAX2 frames.

Control operator (COP) codes
COPAction
11, 12Link commands on, off
15, 16Scheduler on, off
17, 18Status commands on, off
21, 22Parrot on, off
45, 46Link inactivity timer on, off
49, 50Refuse, accept incoming links

COP changes last until Mutara restarts, as in app_rpt.

Who can run a command

allstar.function_access lists the sources for each command. radio is the local radio. link is linked nodes, also in *4 command mode. user is IAX2 users and the dashboard keypad. A command that is not in the list is open to all, as in stock AllStarLink. [] turns a command off. Commands in a macro run with the access of the macro.

Schedule and startup

allstar.schedule runs commands at cron times, as the app_rpt [schedule] does. Times are local. On a daylight saving change, an entry in the skipped hour does not run that day. An entry in the repeated hour runs two times. startup_macro runs one time at start.

Link inactivity #

link_inactivity drops links that are quiet for that time, as app_rpt lnkacttime does. Permanent links stay. link_inactivity_run runs commands in place of the drop.

IAX2 users #

pttHow the user keys
dtmf*99 keys, # unkeys, as on a phone
voxThe audio level keys
voiceAny audio keys

A user with no_rf stays off the local radio. A user sends DTMF commands only with commands: true.