     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

- Any packet that already has the q string will not be modified again.

- Any packet that has the UI-View CallSign,I construct in the path will be modifed by deleting the CallSign,I and replacing it with qAR,CallSign*. We use qAR because we assume it entered the Internet System from the TNC of "CallSign".

- Third party packets that have been gated from Internet to RF are rejected. This is determined by searching for the string "TCPIP", "q" or "I" in the 3rd party header. Third party packets that have NOT been gated to RF will be converted to normal packets and processed as usual.

- MyCall is the on-air call sign of the aprsd IGATE (not the server). For the examples I will use N4RF.

- UserCall is the call sign of the validated logged on user. For the examples I will use N4USR.

- ServerAlias is derived from the domain name of an aprs server or hub. Aprsd builds the alias by taking the first 6 characters or everything up to the first period "." then appending a 3 character HEX code of the CRC of the complete domain name. For these examples I will use hub "first.aprs.net" and its alias "first2C9".

### 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 )