From a4f50d6beaf3b32998c812185d1ceac38b6a6a5e Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Sun, 19 Jul 2020 01:38:36 -0400 Subject: [PATCH] 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 --- include/patty/ax25/sock.h | 25 +++++++++++++++++++++---- src/sock.c | 10 +++++++--- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/include/patty/ax25/sock.h b/include/patty/ax25/sock.h index b539d4d..0b83b37 100644 --- a/include/patty/ax25/sock.h +++ b/include/patty/ax25/sock.h @@ -1,10 +1,24 @@ #ifndef _PATTY_AX25_SOCK_H #define _PATTY_AX25_SOCK_H -#define PATTY_AX25_SOCK_DEFAULT_MAXLEN 4096 -#define PATTY_AX25_SOCK_DEFAULT_WINDOW 127 -#define PATTY_AX25_SOCK_DEFAULT_RETRY 10 -#define PATTY_AX25_SOCK_DEFAULT_ACK 3000 +#define PATTY_AX25_SOCK_DEFAULT_HDLC \ + (PATTY_AX25_PARAM_HDLC_REJ \ + | PATTY_AX25_PARAM_HDLC_XADDR | PATTY_AX25_PARAM_HDLC_MODULO_8 \ + | PATTY_AX25_PARAM_HDLC_TEST | PATTY_AX25_PARAM_HDLC_SYNC_TX) + +#define PATTY_AX25_SOCK_2_2_DEFAULT_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_TEST | PATTY_AX25_PARAM_HDLC_SYNC_TX) + +#define PATTY_AX25_SOCK_DEFAULT_MAXLEN 256 +#define PATTY_AX25_SOCK_DEFAULT_WINDOW 4 +#define PATTY_AX25_SOCK_DEFAULT_WINDOW_SABME 32 +#define PATTY_AX25_SOCK_DEFAULT_RETRY 10 +#define PATTY_AX25_SOCK_DEFAULT_ACK 3000 + +#define PATTY_AX25_SOCK_2_2_DEFAULT_MAXLEN 4096 +#define PATTY_AX25_SOCK_2_2_DEFAULT_WINDOW 127 enum patty_ax25_sock_type { PATTY_AX25_SOCK_STREAM, @@ -32,6 +46,7 @@ enum patty_ax25_sock_opt { typedef struct _patty_ax25_sock { enum patty_ax25_proto proto; enum patty_ax25_sock_type type; + enum patty_ax25_version version; enum patty_ax25_sock_status status; enum patty_ax25_sock_mode mode; @@ -49,6 +64,8 @@ typedef struct _patty_ax25_sock { unsigned int seq_send, seq_recv; + uint32_t flags_classes, + flags_hdlc; int fd; char path[PATTY_AX25_SOCK_PATH_SIZE]; diff --git a/src/sock.c b/src/sock.c index 0212f5c..59b209e 100644 --- a/src/sock.c +++ b/src/sock.c @@ -81,8 +81,11 @@ patty_ax25_sock *patty_ax25_sock_new(enum patty_ax25_proto proto, patty_ax25_sock_reset(sock); - sock->proto = proto; - sock->type = type; + sock->proto = proto; + sock->type = type; + sock->version = PATTY_AX25_2_0; + sock->flags_classes = PATTY_AX25_PARAM_DEFAULT_CLASSES; + sock->flags_hdlc = PATTY_AX25_SOCK_DEFAULT_HDLC; if ((sock->buf = malloc(PATTY_AX25_FRAME_OVERHEAD + sock->n_maxlen_rx)) == NULL) { goto error_malloc_buf; @@ -123,7 +126,6 @@ void patty_ax25_sock_reset(patty_ax25_sock *sock) { sock->timer_ack = 0; sock->timer_response = 0; sock->timer_keepalive = 0; - sock->flags = 0; sock->seq_send = 0; sock->seq_recv = 0; } @@ -167,6 +169,8 @@ int patty_ax25_sock_bind_if(patty_ax25_sock *sock, } } + sock->flags_classes = iface->flags; + return 0; error_if_promisc_add: