doc: start defining the layer 2
This commit is contained in:
parent
fe5bcabd14
commit
ccc4e452ff
|
@ -106,6 +106,86 @@ The filter is applied to the whole symbol sequence of the burst. The same filter
|
||||||
|
|
||||||
== Layer 2: Link Layer
|
== Layer 2: Link Layer
|
||||||
|
|
||||||
|
The Hamnet70 link layer is designed to ensure reliable communication between a central station (digipeater) and several clients, while making efficient use of the available airtime. To accomplish this, it uses several technologies, including variable-length addressing and Go-Back-N retransmission.
|
||||||
|
|
||||||
|
=== Node Addresses
|
||||||
|
|
||||||
|
Node addresses use the https://github.com/arngll/arnce-spec/blob/main/n6drc-arnce.md#introduction[HAM-64 address format]. This format allows to encode callsigns of up to 12 characters in a number of 16, 32, 48 or 64 bits. Additionally, it allows to replace the full version of an address with a temporary short address with only 16 bits that is used during a connection. Multicast and broadcast addresses are also specified.
|
||||||
|
|
||||||
|
=== Link Layer Header
|
||||||
|
|
||||||
|
Each layer 2 packet contains a header that identifies how the message should be interpreted. It is of variable length and composed as follows:
|
||||||
|
|
||||||
|
[cols="2,1,5", options="header"]
|
||||||
|
.Link layer header layout
|
||||||
|
|===
|
||||||
|
| Field | Length | Description
|
||||||
|
|
||||||
|
| Message type
|
||||||
|
| 3 bit
|
||||||
|
| The type of the message. See below for a list of values.
|
||||||
|
|
||||||
|
| TX request
|
||||||
|
| 1 bit
|
||||||
|
| After this message, the burst ends and the destination may transmit.
|
||||||
|
|
||||||
|
| Source address length
|
||||||
|
| 2 bit
|
||||||
|
| Length of the source address.
|
||||||
|
|
||||||
|
| Destination address length
|
||||||
|
| 2 bit
|
||||||
|
| Length of the destination address.
|
||||||
|
|
||||||
|
| TX sequence number
|
||||||
|
| 4 bit
|
||||||
|
| Sequence number of the currently transmitted packet.
|
||||||
|
|
||||||
|
| RX sequence number
|
||||||
|
| 4 bit
|
||||||
|
| Sequence number of the packet expected next.
|
||||||
|
|
||||||
|
| Source address
|
||||||
|
| 16, 32, 48 or 64 bit
|
||||||
|
| HAM-64 address identifying the sending station.
|
||||||
|
|
||||||
|
| Destination address length
|
||||||
|
| 16, 32, 48 or 64 bit
|
||||||
|
| HAM-64 address identifying the target station.
|
||||||
|
|===
|
||||||
|
|
||||||
|
The total Link Layer Header length is therefore at least 6 byte and at most 18 byte.
|
||||||
|
|
||||||
|
[cols="1,2,5", options="header"]
|
||||||
|
.Message types
|
||||||
|
|===
|
||||||
|
| Value | Name | Description
|
||||||
|
|
||||||
|
| `000`
|
||||||
|
| Data frame
|
||||||
|
| A regular data packet.
|
||||||
|
|
||||||
|
| `100`
|
||||||
|
| Connection management
|
||||||
|
| Includes functions such as establishing (or denying) new connections or closing open connections.
|
||||||
|
|
||||||
|
| _other_
|
||||||
|
| _reserved_
|
||||||
|
| All values not explicitly listed are reserved and shall be ignored by receivers.
|
||||||
|
|
||||||
|
|===
|
||||||
|
|
||||||
|
The length of the source and destination addresses is encoded as follows: `00` = 16 bit, `01` = 32 bit, `10` = 48 bit, `11` = 64 bit.
|
||||||
|
|
||||||
|
=== Ideas
|
||||||
|
|
||||||
|
To be defined:
|
||||||
|
- connection establishment procedure (request, response)
|
||||||
|
- when are new clients allowed to connect?
|
||||||
|
- handling of packets from unknown clients that are not connection requests
|
||||||
|
- signal quality handling
|
||||||
|
- go-back-N algorithm (maybe dynamic burst length depending on previous packet loss?)
|
||||||
|
|
||||||
== Higher Layer Protocols
|
== Higher Layer Protocols
|
||||||
|
|
||||||
[appendix]
|
[appendix]
|
||||||
|
|
Loading…
Reference in a new issue