Preliminary July 2 2002
Packet source identification in aprsd
To help with the task of aprs Internet System trouble shooting
aprsd now adds information to the ascii AX25 path of packets
it processes. Two path elements are added to packets which
don't already have them. The first is the "q string"
and the second is the call sign or alias of the source of the
packet.
The q string is a header field indicating the rest of the
path is not RF but Internet related. It serves as a seperator
between the RF part and the Internet part. Since several
characters are available they can add information about the
packet and data.
q is a unique character not ever present in a TNC path from RF.
A is the protocol of the data payload, in this case A=APRS.
No other protocols have been defined.
The 3rd character indicates the local source of the packet as follows:
C validated logged on Client user that didn't add his own q
X un-validated client
R from RF (TNC)
I Internal
S Internet aprs server (old one that didn't put in it's own q )
U the UDP port on aprsd
Z Zero hops. Do not repeat this packet. (::USERLIST etc should set this)
Packets are processed as follows
Examples
-
From TNC or RF
- Normal packet
- Add qAR,MyCall to the path and send to internet.
- input: N0CAL>APRS,WIDE:Data
- output: N0CAL>APRS,WIDE,qAR,N4RF:Data
- 3rd Party packet
- If it has TCPIP or qAc or I in the 3rd party
path then discard.
- input: N0CAL>APRS,WIDE:}WA4DSY>APRS,TCPIP,WA4ABC*:Data
- output: NONE.
- input: N0CAL>APRS,WIDE:}WA4DSY>APRS,W4ABC,I:Data
- output: NONE
- input: N0CAL>APRS,WIDE:}WA4DSY>APRS,qAR,W4ABC:Data
- output: NONE
- If no TCPIP, qAc or I in path then remove the
complete RF path including the "}" and
process as a normal packet.
- input: N0CAL>APRS,WIDE:}WA4DSY>APRS,WIDE:Data
- output: WA4DSY>APRS,WIDE,qAR,N4RF:Data
- Discard any packet with NOGATE or RFONLY in RF path.
Note that these still go to the RAW TNC output
port to facilitate trouble shooting.
- input: N0CAL>APRS,WIDE,RFONLY:Data
- output NONE.
- From Validated Logged on Internet user N4USR
- If the packet already has a q string in it then
do not modify the q string or the call sign.
-
If the packet has a UI-View style
construct "CallSign,I" then remove
both path elements before processing. Use
the "CallSign" as "UserCall".
-
Normal packet without the q String.
Add qAC,UserCall to the path and send to internet.
- input: N0CAL>APRS,WIDE:Data
- output: N0CAL>APRS,WIDE,qAC,N4USR*:Data
- Normal packet with q String.
- input: N0CAL>APRS,WIDE,qAR,N4USR*:Data
- output: N0CAL>APRS,WIDE,qAR,N4USR*:Data
- Normal packet with CallSign,I construct.
We assume it came from the TNC of callsign preceeding the "I".
- input: N0CAL>APRS,WIDE,N4USR,I:Data
- output: N0CAL>APRS,WIDE,qAR,N4USR*:Data
- Third Party packet handling.
- If it has TCPIP or qAc or I in the 3rd party path then discard.
- input: N0CAL>APRS,WIDE:}WA4DSY>APRS,TCPIP,WA4ABC*:Data
- output: NONE.
- input: N0CAL>APRS,WIDE:}WA4DSY>APRS,W4ABC,I:Data
- output: NONE
- input: N0CAL>APRS,WIDE:}WA4DSY>APRS,qAR,W4ABC:Data
- output: NONE
- If no TCPIP,qAc or I in 3p path:
- Extract any qAc,CallSign or CallSign,I path elements
from the original RF path then remove the complete RF path
including the "}" and process as follows:
- If the original discarded path
has qAc path elements, append them
and process normally. If no such path elements
exist treat is as a normal packet and add our own
or convert the CallSign,I to qAR,CallSign.
- input: N0CAL>APRS,WIDE:}WA4DSY>APRS,WIDE:Data
- output: WA4DSY>APRS,WIDE,qAC,N4USR*:Data
- input: N0CAL>APRS,WIDE,qAR,N4RF*:}WA4DSY>APRS,WIDE:Data
- output: WA4DSY>APRS,WIDE,qAR,N4RF*:Data
- input: N0CAL>APRS,WIDE,N4RF,I:}WA4DSY>APRS,WIDE:Data
- output: WA4DSY>APRS,WIDE,qAR,N4RF*:Data
- Any packet with NOGATE or RFONLY in RF path, discard.
- input: N0CAL>APRS,WIDE,RFONLY:Data
- output NONE.
-
From Server or Hub (eg: first.aprs.net)
- If the packet already has a q Sting in it then
do not modify the q string or the call sign.
- Normal packet without the q String.
Add qAS,ServerAlias to the path and send to internet.
- input: N0CAL>APRS,WIDE:Data
- output: N0CAL>APRS,WIDE,qAS,first2C9*:Data
- Normal packet with q String.
- input: N0CAL>APRS,WIDE,qAR,N4USR*:Data
- output: N0CAL>APRS,WIDE,qAR,N4USR*:Data
- Normal packet with CallSign,I construct.
- input: N0CAL>APRS,WIDE,N4USR,I:Data
- output: N0CAL>APRS,WIDE,qAR,N4USR*:Data
- 3rd Party packet
- Same as in the logged on user case above
except use qAS instead of QAC.
- Any packet with NOGATE or RFONLY in RF path
DISCARD.
- input: N0CAL>APRS,WIDE,RFONLY:Data
- output NONE.
-
From aprsd UDP port
- Same as Server above except use qAU,ServerCall. (eg: qAU,aprsdATL )