Use bit fields for setsockopt() SOCK_OPT_PARAMS

This commit is contained in:
XANTRONIX 2020-08-12 17:27:11 -04:00 committed by XANTRONIX Industrial
parent 7a76da651c
commit 893ddefd57
3 changed files with 24 additions and 5 deletions

View file

@ -46,6 +46,15 @@
#define PATTY_AX25_SOCK_2_2_MAX_I_LEN 1536 #define PATTY_AX25_SOCK_2_2_MAX_I_LEN 1536
#define PATTY_AX25_SOCK_2_2_MAX_WINDOW 127 #define PATTY_AX25_SOCK_2_2_MAX_WINDOW 127
/*
* Parameters flags to be set when calling patty_client_setsockopt() with
* PATTY_AX25_SOCK_PARAMS
*/
#define PATTY_AX25_SOCK_PARAM_MTU (1 << PATTY_AX25_PARAM_INFO_TX)
#define PATTY_AX25_SOCK_PARAM_WINDOW (1 << PATTY_AX25_PARAM_WINDOW_TX)
#define PATTY_AX25_SOCK_PARAM_ACK (1 << PATTY_AX25_PARAM_ACK)
#define PATTY_AX25_SOCK_PARAM_RETRY (1 << PATTY_AX25_PARAM_RETRY)
enum patty_ax25_sock_type { enum patty_ax25_sock_type {
PATTY_AX25_SOCK_STREAM, PATTY_AX25_SOCK_STREAM,
PATTY_AX25_SOCK_DGRAM, PATTY_AX25_SOCK_DGRAM,

View file

@ -57,6 +57,8 @@ typedef struct _patty_client_setsockopt_request {
} patty_client_setsockopt_request; } patty_client_setsockopt_request;
typedef struct _patty_client_setsockopt_params { typedef struct _patty_client_setsockopt_params {
uint32_t flags;
size_t mtu, size_t mtu,
window, window,
retry; retry;

View file

@ -613,12 +613,20 @@ static int server_setsockopt(patty_ax25_server *server,
goto error_read; goto error_read;
} }
if (data.mtu) patty_ax25_sock_mtu_set(sock, data.mtu); if (data.flags & PATTY_AX25_SOCK_PARAM_MTU)
if (data.window) patty_ax25_sock_window_set(sock, data.window); patty_ax25_sock_mtu_set(sock, data.mtu);
if (data.ack) patty_ax25_sock_ack_set(sock, data.ack);
if (data.retry) patty_ax25_sock_retry_set(sock, data.retry);
if (data.mtu || data.window) { if (data.flags & PATTY_AX25_SOCK_PARAM_WINDOW)
patty_ax25_sock_window_set(sock, data.window);
if (data.flags & PATTY_AX25_SOCK_PARAM_ACK)
patty_ax25_sock_ack_set(sock, data.ack);
if (data.flags & PATTY_AX25_SOCK_PARAM_RETRY)
patty_ax25_sock_retry_set(sock, data.retry);
if (data.flags & (PATTY_AX25_SOCK_PARAM_MTU
| PATTY_AX25_SOCK_PARAM_WINDOW)) {
if (patty_ax25_sock_realloc_bufs(sock) < 0) { if (patty_ax25_sock_realloc_bufs(sock) < 0) {
goto error_realloc_bufs; goto error_realloc_bufs;
} }