Commit graph

168 commits

Author SHA1 Message Date
XANTRONIX Development
5371f92cd9 Attempt to negotiate remote connections with XID
Implement the AX.25 v2.2 XID parameter exchange as a preamble for
initiating connections with peers, with the following workflow:

    * Upon a connect() call, send an XID frame to the peer

    * When a DM is received, assume the peer is unable to accept a
      connection

    * When a FRMR is received, assume the peer does not adhere to the
      AX.25 v2.2 standard, and attempt to initiate a connection with a
      SABM frame instead

    * When an XID is received, adapt local parameters to meet the
      needs of the peer, and respond with an SABM or an SABME frame,
      depending on which mode is indicated
2024-03-01 00:20:46 -05:00
XANTRONIX Development
c2550d075a Use patty_ax25_sock_bind_if() in server_connect()
Use patty_ax25_sock_bind_if() in server_connect() to ensure any other
functions which must take place are attended to when assigning an
interface to a socket
2024-03-01 00:20:46 -05:00
XANTRONIX Development
4bfe7da77b Handle XID frames in src/server.c
Handle XID frames in src/server.c by decoding the parameter information
and passing it to patty_ax25_sock_params_set()
2024-03-01 00:20:46 -05:00
XANTRONIX Development
1fbf09c9ba Refactor parameter decoding/display
Changes:

    * Implement patty_ax25_params struct to contain all parameters
      supported by patty, at the interface and socket level alike

    * Move parameter enumerate types into include/patty/ax25.h, from
      include/patty/ax25/frame.h; make corrections as necessary

    * Reimplement patty_ax25_frame_decode_xid() to parse known XID
      information parameters into a patty_ax25_params object

    * Implement patty_print_params() in src/print.c

    * Refactor patty_print_frame() as patty_print_frame_header(),
      without a call to patty_print_hexdump(); this allows
      patty_print_params() to be called prior to patty_print_hexdump(),
      for better readability

    * Use patty_print_params() in examples/ax25dump.c, decode.c

    * Refactor usage of patty_ax25_frame_decode_xid() in src/server.c to
      parse XID frames into a patty_ax25_params object
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
aeee7449eb Use new signature for XID param callback 2024-03-01 00:20:46 -05:00
XANTRONIX Development
ffe8599db1 Rename tx, rx_bufsz to mtu, mru in src/if.c 2024-03-01 00:20:46 -05:00
XANTRONIX Development
ce8c5b1cbb Initial code for handling XID in src/server.c
Write initial code for handling XID frames in src/server.c
2024-03-01 00:20:46 -05:00
XANTRONIX Development
1eb3d09608 Handle receipt of REJ, SREJ frames
Utilizing the sock TX ring buffer, respond to peer requests to resend
certain numbered I frames indicated by REJ and SREJ frames
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
6df612b910 Reply to I frames with REJ only with P/F bit set 2024-03-01 00:20:46 -05:00
XANTRONIX Development
34353fa1d9 Remove FRMR responses from server
Remove FRMR responses from server, as they are not included in the
current AX.25 v2.2 standard
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
359742f949 Implement support for handling SABME frames 2024-03-01 00:20:46 -05:00
XANTRONIX Development
905d5b117c Better handle read()s of multiple frames from TNC
Implement better handling of situations when read() captures multiple
TNC frames; ensure each frame is handled in src/server.c, function
handle_iface(), to ensure packets aren't ignored before the next
select() call
2024-03-01 00:20:46 -05:00
XANTRONIX Development
f0c1a0e782 I like those names better 2024-03-01 00:20:46 -05:00
XANTRONIX Development
566f302a1f Adhere to proper P/F procedure
Adhere to proper P/F procedure for SABM, I, and DISC frames
2024-03-01 00:20:46 -05:00
XANTRONIX Development
1265108efd Reply to I frames outside of SABM(E) with DM 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
b281925eba Significantly simplify dictionaries
Significantly simplify dictionaries so that dictionary keys are always
uint32_t; this number can be an arbitrary integer, be it a file
descriptor, for instance, or a hashed value
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
1888b70ed9 Drop patty_ax25_server member fds_w 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
9ec0255204 De-embiggen an expression 2024-03-01 00:20:46 -05:00
XANTRONIX Development
84809755a1 Implement clients_by_sock convenience methods
Implement clients_by_sock convenience methods in src/server.c
2024-03-01 00:20:46 -05:00
XANTRONIX Development
3d2922f2a4 Remove trailing whitespace 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
5a14f81c4a whitespace 2024-03-01 00:20:46 -05:00
XANTRONIX Development
619890c206 Shave off a few lines of code in src/server.c 2024-03-01 00:20:46 -05:00
XANTRONIX Development
73ae096b2d Implement openif(), raw packet interface access 2024-03-01 00:20:46 -05:00
XANTRONIX Development
c853b79529 Remove unnecessary #include <stdio.h> 2024-03-01 00:20:46 -05:00
XANTRONIX Development
65bfa95820 s/socket/fd/ for all such named members, variables 2024-03-01 00:20:46 -05:00
XANTRONIX Development
5a3660450f Get rid of patty_list_iterator (too expensive) 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
f835f19e53 Move some stuff, remove some damn labels 2024-03-01 00:20:46 -05:00
XANTRONIX Development
2b1bc4c30e Well, I have WORKING FREAKING SESSIONS BAYBEE 2024-03-01 00:20:46 -05:00
XANTRONIX Development
22bf692a61 SO BLOODY CLOSE 2024-03-01 00:20:46 -05:00
XANTRONIX Development
a60e562fdb Factor out code for handling SABM frames 2024-03-01 00:20:46 -05:00
XANTRONIX Development
17b2313edc Keep accounting of RX/TX bytes, frames 2024-03-01 00:20:46 -05:00
XANTRONIX Development
7fd05f607a Huh, I managed to make something nice 2024-03-01 00:20:46 -05:00
XANTRONIX Development
eb261c9890 Don't hardcode those values there 2024-03-01 00:20:46 -05:00
XANTRONIX Development
d98249ef77 Don't need to do that 2024-03-01 00:20:46 -05:00
XANTRONIX Development
cc21e6342b Whoops 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
89195bde69 Holy crap, getting deeper and deeper 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
22366f2d0c Need some shit for managing routing tables 2024-03-01 00:20:46 -05:00