Add SOCK_PARAMS to patty_client_setsockopt() to allow for setting (presently) the MTU and TX window of a given socket to accommodate the needs of specific remote stations
197 lines
5.7 KiB
C
197 lines
5.7 KiB
C
#ifndef _PATTY_AX25_SOCK_H
|
|
#define _PATTY_AX25_SOCK_H
|
|
|
|
#include <patty/timer.h>
|
|
|
|
#define PATTY_AX25_SOCK_DEFAULT_KEEPALIVE (1000 * 30)
|
|
#define PATTY_AX25_SOCK_DEFAULT_DELAY 3000
|
|
|
|
#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 \
|
|
| 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_FCS_16 \
|
|
| PATTY_AX25_PARAM_HDLC_SYNC_TX)
|
|
|
|
#define PATTY_AX25_SOCK_2_2_MAX_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_FCS_16 \
|
|
| PATTY_AX25_PARAM_HDLC_SYNC_TX | PATTY_AX25_PARAM_HDLC_SREJ_MULTI)
|
|
|
|
#define PATTY_AX25_SOCK_DEFAULT_I_LEN 256
|
|
#define PATTY_AX25_SOCK_DEFAULT_WINDOW 4
|
|
#define PATTY_AX25_SOCK_DEFAULT_RETRY 10
|
|
#define PATTY_AX25_SOCK_DEFAULT_ACK 3000
|
|
|
|
#define PATTY_AX25_SOCK_2_2_DEFAULT_I_LEN 256
|
|
#define PATTY_AX25_SOCK_2_2_DEFAULT_WINDOW 32
|
|
|
|
#define PATTY_AX25_SOCK_2_2_MAX_I_LEN 1536
|
|
#define PATTY_AX25_SOCK_2_2_MAX_WINDOW 127
|
|
|
|
enum patty_ax25_sock_type {
|
|
PATTY_AX25_SOCK_STREAM,
|
|
PATTY_AX25_SOCK_RAW
|
|
};
|
|
|
|
enum patty_ax25_sock_status {
|
|
PATTY_AX25_SOCK_CLOSED,
|
|
PATTY_AX25_SOCK_LISTENING,
|
|
PATTY_AX25_SOCK_PENDING_ACCEPT,
|
|
PATTY_AX25_SOCK_PENDING_CONNECT,
|
|
PATTY_AX25_SOCK_PENDING_DISCONNECT,
|
|
PATTY_AX25_SOCK_ESTABLISHED,
|
|
PATTY_AX25_SOCK_PROMISC
|
|
};
|
|
|
|
enum patty_ax25_sock_mode {
|
|
PATTY_AX25_SOCK_DM,
|
|
PATTY_AX25_SOCK_SABM,
|
|
PATTY_AX25_SOCK_SABME
|
|
};
|
|
|
|
enum patty_ax25_sock_flow {
|
|
PATTY_AX25_SOCK_WAIT,
|
|
PATTY_AX25_SOCK_READY
|
|
};
|
|
|
|
enum patty_ax25_sock_opt {
|
|
PATTY_AX25_SOCK_PARAMS,
|
|
PATTY_AX25_SOCK_IF
|
|
};
|
|
|
|
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;
|
|
enum patty_ax25_sock_flow flow;
|
|
|
|
size_t n_maxlen_tx,
|
|
n_maxlen_rx,
|
|
n_window_tx,
|
|
n_window_rx,
|
|
n_ack,
|
|
n_retry;
|
|
|
|
uint32_t flags_classes,
|
|
flags_hdlc;
|
|
|
|
patty_timer timer_t1,
|
|
timer_t2,
|
|
timer_t3;
|
|
|
|
/*
|
|
* AX.25 v2.2 Section 4.2.4 "Frame Variables and Sequence Numbers"
|
|
*/
|
|
unsigned int vs,
|
|
vr,
|
|
va;
|
|
|
|
size_t retries,
|
|
pending;
|
|
|
|
int fd;
|
|
char pty[PATTY_AX25_SOCK_PATH_SIZE];
|
|
|
|
void *tx_buf,
|
|
*rx_buf;
|
|
|
|
void *tx_slots;
|
|
|
|
patty_ax25_if *iface;
|
|
|
|
patty_kiss_tnc *raw;
|
|
|
|
patty_ax25_addr local,
|
|
remote,
|
|
repeaters[PATTY_AX25_MAX_HOPS];
|
|
|
|
unsigned int hops;
|
|
} patty_ax25_sock;
|
|
|
|
patty_ax25_sock *patty_ax25_sock_new(enum patty_ax25_proto proto,
|
|
enum patty_ax25_sock_type type);
|
|
|
|
void patty_ax25_sock_destroy(patty_ax25_sock *sock);
|
|
|
|
void patty_ax25_sock_init(patty_ax25_sock *sock);
|
|
|
|
void patty_ax25_sock_reset(patty_ax25_sock *sock);
|
|
|
|
void patty_ax25_sock_mtu_set(patty_ax25_sock *sock, size_t mtu);
|
|
|
|
void patty_ax25_sock_window_set(patty_ax25_sock *sock, size_t window);
|
|
|
|
void patty_ax25_sock_params_upgrade(patty_ax25_sock *sock);
|
|
|
|
void patty_ax25_sock_params_max(patty_ax25_sock *sock);
|
|
|
|
int patty_ax25_sock_params_negotiate(patty_ax25_sock *sock,
|
|
patty_ax25_params *params);
|
|
|
|
int patty_ax25_sock_realloc_bufs(patty_ax25_sock *sock);
|
|
|
|
char *patty_ax25_sock_pty(patty_ax25_sock *sock);
|
|
|
|
int patty_ax25_sock_bind_if(patty_ax25_sock *sock,
|
|
patty_ax25_if *iface);
|
|
|
|
void patty_ax25_sock_vs_incr(patty_ax25_sock *sock);
|
|
|
|
void patty_ax25_sock_vr_incr(patty_ax25_sock *sock);
|
|
|
|
ssize_t patty_ax25_sock_send(patty_ax25_sock *sock,
|
|
void *buf,
|
|
size_t len);
|
|
|
|
ssize_t patty_ax25_sock_recv(patty_ax25_sock *sock,
|
|
void *buf,
|
|
size_t len);
|
|
|
|
ssize_t patty_ax25_sock_recv_pending(patty_ax25_sock *sock);
|
|
|
|
ssize_t patty_ax25_sock_resend(patty_ax25_sock *sock,
|
|
unsigned int seq);
|
|
|
|
ssize_t patty_ax25_sock_send_rr(patty_ax25_sock *sock,
|
|
enum patty_ax25_frame_cr cr,
|
|
int pf);
|
|
|
|
ssize_t patty_ax25_sock_send_rnr(patty_ax25_sock *sock,
|
|
enum patty_ax25_frame_cr cr,
|
|
int pf);
|
|
|
|
ssize_t patty_ax25_sock_send_rej(patty_ax25_sock *sock,
|
|
enum patty_ax25_frame_cr cr,
|
|
int pf);
|
|
|
|
ssize_t patty_ax25_sock_send_srej(patty_ax25_sock *sock,
|
|
enum patty_ax25_frame_cr cr);
|
|
|
|
ssize_t patty_ax25_sock_send_sabm(patty_ax25_sock *sock, int pf);
|
|
|
|
ssize_t patty_ax25_sock_send_disc(patty_ax25_sock *sock, int pf);
|
|
|
|
ssize_t patty_ax25_sock_send_xid(patty_ax25_sock *sock,
|
|
enum patty_ax25_frame_cr cr);
|
|
|
|
ssize_t patty_ax25_sock_send_test(patty_ax25_sock *sock,
|
|
enum patty_ax25_frame_cr cr,
|
|
void *info,
|
|
size_t infolen);
|
|
|
|
ssize_t patty_ax25_sock_write(patty_ax25_sock *sock,
|
|
void *buf,
|
|
size_t len);
|
|
|
|
#endif /* _PATTY_AX25_SOCK_H */
|