From 2c585ca4fea3a75fbcacc03b3abb5a6c6dc80b30 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Fri, 24 Jul 2020 19:33:20 -0400 Subject: [PATCH] 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 --- include/patty/ax25.h | 3 --- include/patty/ax25/if.h | 5 ++++- include/patty/ax25/sock.h | 3 +++ src/if.c | 3 +-- src/sock.c | 24 +++++------------------- 5 files changed, 13 insertions(+), 25 deletions(-) diff --git a/include/patty/ax25.h b/include/patty/ax25.h index 84746b1..41ffe02 100644 --- a/include/patty/ax25.h +++ b/include/patty/ax25.h @@ -65,9 +65,6 @@ enum patty_ax25_param_classes { PATTY_AX25_PARAM_CLASSES_FULL_DUPLEX = (1 << 6) }; -#define PATTY_AX25_PARAM_DEFAULT_CLASSES \ - (PATTY_AX25_PARAM_CLASSES_ABM) - enum patty_ax25_param_hdlc { PATTY_AX25_PARAM_HDLC_REJ = (1 << 1), PATTY_AX25_PARAM_HDLC_SREJ = (1 << 2), diff --git a/include/patty/ax25/if.h b/include/patty/ax25/if.h index 3892c28..81dc9d9 100644 --- a/include/patty/ax25/if.h +++ b/include/patty/ax25/if.h @@ -6,6 +6,9 @@ #include +#define PATTY_AX25_IF_DEFAULT_CLASSES \ + (PATTY_AX25_PARAM_CLASSES_HALF_DUPLEX) + #define PATTY_AX25_IF_OPT_TYPE_MASK 0x1f #define PATTY_AX25_IF_OPT_TYPE(n) \ @@ -41,7 +44,7 @@ typedef struct _patty_ax25_if { char name[8]; - uint32_t flags; + uint32_t flags_classes; void *rx_buf, *tx_buf; diff --git a/include/patty/ax25/sock.h b/include/patty/ax25/sock.h index f4ffe0e..a128dc0 100644 --- a/include/patty/ax25/sock.h +++ b/include/patty/ax25/sock.h @@ -1,6 +1,9 @@ #ifndef _PATTY_AX25_SOCK_H #define _PATTY_AX25_SOCK_H +#define PATTY_AX25_SOCK_DEFAULT_CLASSES \ + (PATTY_AX25_PARAM_CLASSES_ABM) + #define PATTY_AX25_SOCK_DEFAULT_HDLC \ (PATTY_AX25_PARAM_HDLC_REJ \ | PATTY_AX25_PARAM_HDLC_XADDR | PATTY_AX25_PARAM_HDLC_MODULO_8 \ diff --git a/src/if.c b/src/if.c index aa594f6..1f9d9f9 100644 --- a/src/if.c +++ b/src/if.c @@ -52,8 +52,7 @@ patty_ax25_if *patty_ax25_if_new(int opts, patty_ax25_if_info *info) { * TODO: Eventually inherit the half/full-duplex flag from the TNC this * interface is bound to */ - iface->flags = PATTY_AX25_PARAM_DEFAULT_CLASSES - | PATTY_AX25_PARAM_CLASSES_HALF_DUPLEX; + iface->flags_classes = PATTY_AX25_IF_DEFAULT_CLASSES; if ((iface->rx_buf = malloc(PATTY_AX25_IF_DEFAULT_MRU)) == NULL) { goto error_malloc_rx_buf; diff --git a/src/sock.c b/src/sock.c index 9986269..e5156b5 100644 --- a/src/sock.c +++ b/src/sock.c @@ -112,7 +112,7 @@ patty_ax25_sock *patty_ax25_sock_new(enum patty_ax25_proto proto, sock->proto = proto; sock->type = type; sock->version = PATTY_AX25_2_0; - sock->flags_classes = PATTY_AX25_PARAM_DEFAULT_CLASSES; + sock->flags_classes = PATTY_AX25_SOCK_DEFAULT_CLASSES; sock->flags_hdlc = PATTY_AX25_SOCK_DEFAULT_HDLC; if (init_bufs(sock) < 0) { @@ -279,7 +279,7 @@ int patty_ax25_sock_bind_if(patty_ax25_sock *sock, } } - sock->flags_classes = iface->flags; + sock->flags_classes |= iface->flags_classes; return 0; @@ -526,22 +526,8 @@ ssize_t patty_ax25_sock_send_xid(patty_ax25_sock *sock, | (1 << PATTY_AX25_PARAM_ACK) | (1 << PATTY_AX25_PARAM_RETRY); - /* - * TODO: This value needs to come from the interface this socket is bound - * to - */ - params.classes = PATTY_AX25_PARAM_CLASSES_ABM - | PATTY_AX25_PARAM_CLASSES_HALF_DUPLEX; - - /* - * TODO: These flags should be part of each sock object - */ - params.hdlc = PATTY_AX25_PARAM_HDLC_REJ - | PATTY_AX25_PARAM_HDLC_SREJ - | PATTY_AX25_PARAM_HDLC_XADDR - | PATTY_AX25_PARAM_HDLC_MODULO_128 - | PATTY_AX25_PARAM_HDLC_SYNC_TX; - + params.classes = sock->flags_classes; + params.hdlc = sock->flags_hdlc; params.info_rx = sock->n_maxlen_rx; params.window_rx = sock->n_window_rx; params.ack = sock->n_ack; @@ -557,8 +543,8 @@ ssize_t patty_ax25_sock_send_xid(patty_ax25_sock *sock, buf, encoded); -error_nopeer: error_frame_encode_xid: +error_nopeer: return -1; }