Commit graph

47 commits

Author SHA1 Message Date
XANTRONIX Development
0aea65487a (Re)implement patty_ax25_sock_reset()
Begin to reimplement patty_ax25_sock_reset() to follow the AX.25 v2.2
Specification, Section 6.5 "Resetting Procedure" indications to set V(S)
and V(R) to 0
2024-03-01 00:20:46 -05:00
XANTRONIX Development
df7c0fad38 Rename patty_ax25_sock_reset() to _init(),
Rename patty_ax25_sock_reset() to patty_ax25_sock_init(), so as to allow
for the implementation of a future _reset() method which shall be used
to implement AX.25 v2.2 Section 6.5 "Resetting Procedure"
2024-03-01 00:20:46 -05:00
XANTRONIX Development
1bd93e3bcc Make functions sending RR, RNR, REJ take P/F flag
Changes:

    * Make patty_ax25_sock_send_rr() accept a P/F flag value

    * Make patty_ax25_sock_send_rnr() accept a P/F flag value

    * Make patty_ax25_sock_send_rej() accept a P/F flag value
2024-03-01 00:20:46 -05:00
XANTRONIX Development
7b25597e6e realloc() TX/RX bufs on XID negotiation 2024-03-01 00:20:46 -05:00
XANTRONIX Development
3ef0da27b5 Ensure socket TX buf size is separate from RX size
After performing XID parameter negotiation, do not simply use the
negotiated TX buffer size when allocating the RX buffer; this resolves
an issue wherein read()s into the RX buffer (allocated with a size equal
to the TX buffer, which may be smaller) would cause memory errors
2024-03-01 00:20:46 -05:00
XANTRONIX Development
7fd8be445a Fix REJ handling when N(R) > V(S)
Changes:

    * Allow REJ handling to occur when the V(S) send state counter wraps
      to a value lower than indicated in the frame N(R) field

    * Fix tx_slot() in src/sock.c to not buffer overflow when the TX
      window is less than the maximum for the SABM/SABME mode
2024-03-01 00:20:46 -05:00
XANTRONIX Development
8a26cace95 Allow upgrading socks to certain versions of AX.25
Changes:

    * Add an enum patty_ax25_version argument to the function
      patty_ax25_sock_upgrade() to allow upgrading a socket to a certain
      set of AX.25 defaults
2024-03-01 00:20:46 -05:00
XANTRONIX Development
810361647a Switch to struct timeval for sock timers 2024-03-01 00:20:46 -05:00
XANTRONIX Development
a0660345bb Fix typo in patty_ax25_sock_reset()
Fix typo in patty_ax25_sock_reset() wherein n_maxlen_rx would never be
initialized with its proper default
2024-03-01 00:20:46 -05:00
XANTRONIX Development
1a87ac3858 Improve patty_ax25_sock_params_set() validation
Changes:

    * Improve patty_ax25_sock_params_set() validation by setting ENOTSUP
      when setting options on a socket that don't make sense, such as no
      Asynchronous Balanced Mode
2024-03-01 00:20:46 -05:00
XANTRONIX Development
e90b5803bf Add validation to patty_ax25_sock_send_xid()
Changes:

    * Make patty_ax25_sock_send_xid() set ENETDOWN when no network
      interface is associated with a sock
2024-03-01 00:20:46 -05:00
XANTRONIX Development
fe72380888 Add validation to patty_ax25_sock_send()
Changes:

    * Make patty_ax25_sock_send() set ENETDOWN when no network interface
      is associated with a sock

    * Make patty_ax25_sock_send() set EBADF when no remote address is
      associated with a sock
2024-03-01 00:20:46 -05:00
XANTRONIX Development
2c585ca4fe Keep default Classes of Procedures for socks, ifs
Keep distinct default Classes of Procedures parameter flag values for
sockets and interfaces, as the Asynchronous Balanced Mode parameter does
not apply to the interface itself, and the Half/Full Duplex parameters
do not apply to the sock
2024-03-01 00:20:46 -05:00
XANTRONIX Development
f75a78eb4b Encode I frames as commands 2024-03-01 00:20:46 -05:00
XANTRONIX Development
fa53b8d49d Keep separate TX, RX single buffers in socks
Changes:

    * Replace patty_ax25_sock member 'buf' with 'tx_buf' and 'rx_buf'
      for transmitting or receiving single, non-sequential packets

    * Make patty_ax25_sock_upgrade() reallocate all I/O buffers based on
      window size and MTU/MRU, useful when entering SABME mode
2024-03-01 00:20:46 -05:00
XANTRONIX Development
6711f37ab9 Ensure XID frame response is encoded as responses
Changes:

    * Modify patty_ax25_sock_send_xid() to require the 'cr' argument,
      which specifies whether the frame address field is to be encoded
      with the 'command' or 'response' bits set as appropriate
2024-03-01 00:20:46 -05:00
XANTRONIX Development
0fa6a29024 Fix subtle sequence issues in src/sock.c
Fix subtle sequence issues in src/sock.c wherein non-I frames which are
sent may overwrite a previously sent I frame with the same sequence
number, which would cause issues with the remote end expecting an I
frame and possibly getting a non-I frame
2024-03-01 00:20:46 -05:00
XANTRONIX Development
08c952ae07 Fix issue setting parameter bit fields in sock.c
Fix issue setting parameter bit fields in patty_ax25_sock_send_xid() in
src/sock.c, wherein the numerical values were simply bitwise ORed
2024-03-01 00:20:46 -05:00
XANTRONIX Development
d494ffecfc Fix issues encoding extended frame control fields
Changes:

    * When encoding extended frame control fields, ensure the least
      significant byte is written first, as per the AX.25 v2.2 standard
2024-03-01 00:20:46 -05:00
XANTRONIX Development
8b741cadc8 Remove patty_ax25_sock_mode_set() 2024-03-01 00:20:46 -05:00
XANTRONIX Development
052c7d94d0 Implement functions for setting params on sockets
Changes:

    * Implement patty_ax25_sock_upgrade() to upgrade a socket from the
      default AX.25 2.0 parameters to AX.25 2.2 parameters, meant to be
      used upon receipt of an XID frame

    * Implement patty_ax25_sock_params_set() to set lowest common
      denominator parameters to a socket, downgrading or adapting to the
      parameters advertised by a peer XID frame as necessary
2024-03-01 00:20:46 -05:00
XANTRONIX Development
a4f50d6bea Add Classes of Procedures, HDLC params to sockets
Changes:

    * Define different sets of default parameters for AX.25 versions
      2.2 and prior

    * Add flags_classes, flags_hdlc and version to patty_ax25_sock

    * Remove flags member from patty_ax25_sock

    * Inherit Classes of Procedures value from interface when an
      interface is bound to a socket
2024-03-01 00:20:46 -05:00
XANTRONIX Development
87a9f1eb3f Fix sequencing issues with SABM vs SABME sockets 2024-03-01 00:20:46 -05:00
XANTRONIX Development
e95994bf19 Implement patty_ax25_sock_send_xid()
Implement patty_ax25_sock_send_xid() to send the current socket
parameters to a remote peer
2024-03-01 00:20:46 -05:00
XANTRONIX Development
92ff180d57 Use bigger defaults for session parameters
Changes:

    * Declare bigger defaults for certain session parameters in
      include/patty/ax25/sock.h

    * Use patty_ax25_sock_reset() to initialize parameter variables in
      patty_ax25_sock_new(), to save many lines of code

    * Add patty_ax25_sock member n_ack
2024-03-01 00:20:46 -05:00
XANTRONIX Development
5e1d74c971 Rename 'flag' arguments to 'pf' in sock methods 2024-03-01 00:20:46 -05:00
XANTRONIX Development
a722b8f9b3 Better implementation of AX.25 v2.2 default params 2024-03-01 00:20:46 -05:00
XANTRONIX Development
a638966486 Add peer parameter flags to patty_ax25_sock 2024-03-01 00:20:46 -05:00
XANTRONIX Development
7715a8c070 Implement variable size sock frame slots 2024-03-01 00:20:46 -05:00
XANTRONIX Development
c26c7509f4 Implement ring buffer for sock sent frames
Implement ring buffer for frames sent in a SABM or SABME session,
facilitating the ability to retransmit select frames upon request,
retaining a copy of the full frame and its transmitted size
2024-03-01 00:20:46 -05:00
XANTRONIX Development
9066fe10da Implement better handling of command/response bits
Implement better handling of command/response bits whilst decoding and
encoding addresses

Changes:

    * Add an enum patty_ax25_frame_cr argument to functions in
      src/sock.c which send specific types of frames

    * Detect AX.25 version >2.0 based on the command/response SSID bits

    * Simplify address copying/encoding by usage of the new function
      patty_ax25_addr_copy()

    * Implement showing AX.25 version, command/response indicator for
      frames in src/print.c
2024-03-01 00:20:46 -05:00
XANTRONIX Development
a4518a839a Implement better modulo-128 I and S frame support
Changes:

    * Split patty_ax25_frame_decode() into the following:

      - patty_ax25_frame_decode_address()
      - patty_ax25_frame_decode_control()

      This allows for look up an established socket for a given address
      pair, to determine if an SABME session is in progress,
      necessitating modulo-128 control decoding

    * Decode I and S N(R), N(S) sequence numbers, poll/final
      bits properly in both modulo-8 and modulo-128 mode

    * Perform better frame control validation

    * Implement the following functions in src/sock.c:

      - patty_ax25_sock_send_rr()
      - patty_ax25_sock_send_rnr()
      - patty_ax25_sock_send_rej()
      - patty_ax25_sock_send_srej()

      Corresponding functions have been removed from src/server.c

    * Implement better functions in src/sock.c for encoding frame
      control, with send/receive sequences associated with the socket,
      with modulo-128 encoding for SABME sessions

Other changes:

    * Move or delete macros from include/patty/ax25/macros.h into
      include/patty/ax25.h and include/patty/ax25/frame.h

    * Move definitions from include/patty/ax25/proto.h to header file
      include/patty/ax25.h

    * Perform better bounds checking while decoding frames

    * Improve frame control printing in src/print.c; display frame
      type names, N(R), (NS) sequence numbers, and poll/final bits
2024-03-01 00:20:46 -05:00
XANTRONIX Development
a7cab09e47 Handle incrementing seq_send elsewhere 2024-03-01 00:20:46 -05:00
XANTRONIX Development
0bfd5795ad Do a slightly better job handling sock control fields 2024-03-01 00:20:46 -05:00
XANTRONIX Development
84ae427037 Move raw frame capture to patty_ax25_if
Move raw frame interface capture to patty_ax25_if, patty_ax25_sock; this
resolves the issue wherein only bytes received, not sent, would be
captured by a raw socket bound to a specific interface with setsockopt()
2024-03-01 00:20:46 -05:00
XANTRONIX Development
8d24566e83 Implement generalized enumerate types; REJ reply 2024-03-01 00:20:46 -05:00
XANTRONIX Development
ab2c283542 Refactor socket(), openif() as setsockopt()
Other changes:

    * Fix blocking on disconnects when a raw socket is bound to an
      interface
2024-03-01 00:20:46 -05:00
XANTRONIX Development
c6aac035e1 Add proto arg to patty_ax25_sock_new()
Other changes:

    * Remove proto arg from patty_ax25_sock_send() and
      patty_ax25_sock_write(); instead, use the proto member of
      patty_ax25_sock
2024-03-01 00:20:46 -05:00
XANTRONIX Development
085ac4e650 Implement missing functions in src/sock.c
Implement the following missing functions in src/sock.c:

    * patty_ax25_sock_pty()

    * patty_ax25_sock_bind_if()
2024-03-01 00:20:46 -05:00
XANTRONIX Development
484e68e417 Remove commented cruft from src/sock.c 2024-03-01 00:20:46 -05:00
XANTRONIX Development
22bf692a61 SO BLOODY CLOSE 2024-03-01 00:20:46 -05:00
XANTRONIX Development
255e15fb7b Minor formatting foibles 2024-03-01 00:20:46 -05:00
XANTRONIX Development
b9c3568c43 This is a slog with no real end 2024-03-01 00:20:46 -05:00
XANTRONIX Development
4478241319 I'm in a world of hurt 2024-03-01 00:20:46 -05:00
XANTRONIX Development
d983672619 Fix address writing 2024-03-01 00:20:46 -05:00
XANTRONIX Development
bdb73c8805 Making significant headway towards a working server 2024-03-01 00:20:46 -05:00
XANTRONIX Development
4aced9e9c1 ...I've been busy. 2024-03-01 00:20:46 -05:00