Commit graph

239 commits

Author SHA1 Message Date
b505f2743c Set default sock frame len to 328
Set default sock frame len to 328 as per AX.25 spec, to handle full
header with maximum number of repeaters, 8-bit control field, protocol
identifier, and 256 information field bytes
2024-03-01 00:20:46 -05:00
61f84054e4 Remove unused patty_ax25_frame_decode() def 2024-03-01 00:20:46 -05:00
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
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
79d1393e74 Implement patty_ax25_addr_copy()
Implement patty_ax25_addr_copy() as a means to copy a patty_ax25_addr
object from one location in memory to another, ensuring that the SSID
field only contains at minimum the station identifier (0-15) and the
reserved bits 0x60
2024-03-01 00:20:46 -05:00
cbae61db27 Use PATTY_AX25_CALLSIGN_LEN in patty_ax25_addr 2024-03-01 00:20:46 -05:00
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
5be0f40405 Allow all printable 7-bit ASCII chars in addresses 2024-03-01 00:20:46 -05:00
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
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
0bfd5795ad Do a slightly better job handling sock control fields 2024-03-01 00:20:46 -05:00
aa5fda4424 Simplify U frame test macros 2024-03-01 00:20:46 -05:00
4d397f76f1 Fix PATTY_AX25_CONTROL_UNNUMBERED_INFO() macro 2024-03-01 00:20:46 -05:00
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
8d24566e83 Implement generalized enumerate types; REJ reply 2024-03-01 00:20:46 -05:00
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
cbea4ad7a8 Implement src/print.c
Implement src/print.c to provide facilities for pretty printing packets
to any FILE handle
2024-03-01 00:20:46 -05:00
73ae096b2d Implement openif(), raw packet interface access 2024-03-01 00:20:46 -05:00
65bfa95820 s/socket/fd/ for all such named members, variables 2024-03-01 00:20:46 -05:00
5a3660450f Get rid of patty_list_iterator (too expensive) 2024-03-01 00:20:46 -05:00
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
ffcc171c48 Remove PATTY_AX25_SOCK_NONBLOCK option 2024-03-01 00:20:46 -05:00
2b1bc4c30e Well, I have WORKING FREAKING SESSIONS BAYBEE 2024-03-01 00:20:46 -05:00
22bf692a61 SO BLOODY CLOSE 2024-03-01 00:20:46 -05:00
7fd05f607a Huh, I managed to make something nice 2024-03-01 00:20:46 -05:00
d5ee0c7a9e No need to make a big fuss 2024-03-01 00:20:46 -05:00
4ff1f1a714 Nomenclature is important 2024-03-01 00:20:46 -05:00
b9c3568c43 This is a slog with no real end 2024-03-01 00:20:46 -05:00
89195bde69 Holy crap, getting deeper and deeper 2024-03-01 00:20:46 -05:00
b242cf9285 Hmmst, coalescing upon something 2024-03-01 00:20:46 -05:00
4478241319 I'm in a world of hurt 2024-03-01 00:20:46 -05:00
cec916a44a Fix SABM control field test macro 2024-03-01 00:20:46 -05:00
bdb73c8805 Making significant headway towards a working server 2024-03-01 00:20:46 -05:00
22366f2d0c Need some shit for managing routing tables 2024-03-01 00:20:46 -05:00
94b9a9d481 Start working on routing table 2024-03-01 00:20:46 -05:00
4aced9e9c1 ...I've been busy. 2024-03-01 00:20:46 -05:00
d265ce8756 More stuff 2024-03-01 00:20:46 -05:00
2491f85c62 Rearrange patty/ax25/sock.h for more logical layout 2024-03-01 00:20:46 -05:00
df466dc02b Slightly rethinking something 2024-03-01 00:20:46 -05:00
eb45bd192d Just need to make a damn client/server test already 2024-03-01 00:20:46 -05:00
c4fa41dab4 I am getting AWFULLY close to being able to run this code 2024-03-01 00:20:46 -05:00
5607dbede6 Split patty_ax25_sock into patty/ax25/sock.h 2024-03-01 00:20:46 -05:00
ac55d13057 Writing a network stack from scratch is extremely tiring 2024-03-01 00:20:46 -05:00
d25b799e4e Moving right along! 2024-03-01 00:20:46 -05:00
d2e278f715 Massive refactoring afoot 2024-03-01 00:20:46 -05:00
fa3f4a2e0e Start of massive refactor 2024-03-01 00:20:46 -05:00
0f37a37775 Better prototypes; better config 2024-03-01 00:20:46 -05:00
3927f1b343 Initial implementation of new headers 2024-03-01 00:20:46 -05:00
2162512896 Whitespace 2024-03-01 00:20:46 -05:00
f3d42c61f9 Implement stub patty_ax25_accept() 2024-03-01 00:20:46 -05:00