Implement patty_ax25_if_ready()

Implement patty_ax25_if_ready() to provide a means of testing an
interface's readiness for performing I/O; this may also be used in the
future for some interface drivers which may require occasional keepalive
timers to maintain a link
This commit is contained in:
XANTRONIX Development 2020-10-03 14:56:58 -04:00 committed by XANTRONIX Industrial
parent 4604cccdb4
commit 2b931ec357
7 changed files with 24 additions and 1 deletions

View file

@ -37,6 +37,8 @@ void patty_ax25_aprs_is_destroy(patty_ax25_aprs_is *aprs);
int patty_ax25_aprs_is_fd(patty_ax25_aprs_is *aprs); int patty_ax25_aprs_is_fd(patty_ax25_aprs_is *aprs);
int patty_ax25_aprs_is_ready(patty_ax25_aprs_is *aprs, fd_set *fds);
ssize_t patty_ax25_aprs_is_fill(patty_ax25_aprs_is *aprs); ssize_t patty_ax25_aprs_is_fill(patty_ax25_aprs_is *aprs);
ssize_t patty_ax25_aprs_is_drain(patty_ax25_aprs_is *, void *buf, size_t len); ssize_t patty_ax25_aprs_is_drain(patty_ax25_aprs_is *, void *buf, size_t len);

View file

@ -35,6 +35,8 @@ typedef patty_ax25_if_stats *(patty_ax25_if_driver_stats)(void *);
typedef int (patty_ax25_if_driver_fd)(void *); typedef int (patty_ax25_if_driver_fd)(void *);
typedef int (patty_ax25_if_driver_ready)(void *, fd_set *);
typedef ssize_t (patty_ax25_if_driver_fill)(void *); typedef ssize_t (patty_ax25_if_driver_fill)(void *);
typedef ssize_t (patty_ax25_if_driver_drain)(void *, void *, size_t); typedef ssize_t (patty_ax25_if_driver_drain)(void *, void *, size_t);
@ -50,6 +52,7 @@ typedef struct _patty_ax25_if_driver {
patty_ax25_if_driver_destroy *destroy; patty_ax25_if_driver_destroy *destroy;
patty_ax25_if_driver_stats *stats; patty_ax25_if_driver_stats *stats;
patty_ax25_if_driver_fd *fd; patty_ax25_if_driver_fd *fd;
patty_ax25_if_driver_ready *ready;
patty_ax25_if_driver_fill *fill; patty_ax25_if_driver_fill *fill;
patty_ax25_if_driver_drain *drain; patty_ax25_if_driver_drain *drain;
patty_ax25_if_driver_pending *pending; patty_ax25_if_driver_pending *pending;
@ -104,6 +107,8 @@ void patty_ax25_if_drop(patty_ax25_if *iface);
int patty_ax25_if_fd(patty_ax25_if *iface); int patty_ax25_if_fd(patty_ax25_if *iface);
int patty_ax25_if_ready(patty_ax25_if *iface, fd_set *fds);
ssize_t patty_ax25_if_fill(patty_ax25_if *iface); ssize_t patty_ax25_if_fill(patty_ax25_if *iface);
ssize_t patty_ax25_if_drain(patty_ax25_if *iface, void *buf, size_t len); ssize_t patty_ax25_if_drain(patty_ax25_if *iface, void *buf, size_t len);

View file

@ -35,6 +35,8 @@ patty_kiss_tnc *patty_kiss_tnc_new(patty_kiss_tnc_info *info);
int patty_kiss_tnc_fd(patty_kiss_tnc *tnc); int patty_kiss_tnc_fd(patty_kiss_tnc *tnc);
int patty_kiss_tnc_ready(patty_kiss_tnc *tnc, fd_set *fds);
void patty_kiss_tnc_destroy(patty_kiss_tnc *tnc); void patty_kiss_tnc_destroy(patty_kiss_tnc *tnc);
ssize_t patty_kiss_tnc_fill(patty_kiss_tnc *tnc); ssize_t patty_kiss_tnc_fill(patty_kiss_tnc *tnc);

View file

@ -173,6 +173,10 @@ int patty_ax25_aprs_is_fd(patty_ax25_aprs_is *aprs) {
return aprs->fd; return aprs->fd;
} }
int patty_ax25_aprs_is_ready(patty_ax25_aprs_is *aprs, fd_set *fds) {
return FD_ISSET(aprs->fd, fds);
}
ssize_t patty_ax25_aprs_is_fill(patty_ax25_aprs_is *aprs) { ssize_t patty_ax25_aprs_is_fill(patty_ax25_aprs_is *aprs) {
int attempt = 0; int attempt = 0;
@ -442,6 +446,7 @@ patty_ax25_if_driver *patty_ax25_aprs_is_driver() {
.destroy = (patty_ax25_if_driver_destroy *)patty_ax25_aprs_is_destroy, .destroy = (patty_ax25_if_driver_destroy *)patty_ax25_aprs_is_destroy,
.stats = (patty_ax25_if_driver_stats *)patty_ax25_aprs_is_stats, .stats = (patty_ax25_if_driver_stats *)patty_ax25_aprs_is_stats,
.fd = (patty_ax25_if_driver_fd *)patty_ax25_aprs_is_fd, .fd = (patty_ax25_if_driver_fd *)patty_ax25_aprs_is_fd,
.ready = (patty_ax25_if_driver_ready *)patty_ax25_aprs_is_ready,
.fill = (patty_ax25_if_driver_fill *)patty_ax25_aprs_is_fill, .fill = (patty_ax25_if_driver_fill *)patty_ax25_aprs_is_fill,
.drain = (patty_ax25_if_driver_drain *)patty_ax25_aprs_is_drain, .drain = (patty_ax25_if_driver_drain *)patty_ax25_aprs_is_drain,
.pending = (patty_ax25_if_driver_pending *)patty_ax25_aprs_is_pending, .pending = (patty_ax25_if_driver_pending *)patty_ax25_aprs_is_pending,

View file

@ -272,6 +272,10 @@ int patty_ax25_if_fd(patty_ax25_if *iface) {
return iface->driver->fd(iface->phy); return iface->driver->fd(iface->phy);
} }
int patty_ax25_if_ready(patty_ax25_if *iface, fd_set *fds) {
return iface->driver->ready(iface->phy, fds);
}
ssize_t patty_ax25_if_fill(patty_ax25_if *iface) { ssize_t patty_ax25_if_fill(patty_ax25_if *iface) {
return iface->driver->fill(iface->phy); return iface->driver->fill(iface->phy);
} }

View file

@ -2038,7 +2038,7 @@ static int handle_iface(patty_ax25_server *server, struct if_entry *entry) {
ssize_t len; ssize_t len;
if (!FD_ISSET(entry->fd, &server->fds_r)) { if (!patty_ax25_if_ready(entry->iface, &server->fds_r)) {
goto done; goto done;
} }

View file

@ -201,6 +201,10 @@ int patty_kiss_tnc_fd(patty_kiss_tnc *tnc) {
return tnc->fd; return tnc->fd;
} }
int patty_kiss_tnc_ready(patty_kiss_tnc *tnc, fd_set *fds) {
return FD_ISSET(tnc->fd, fds);
}
static void tnc_drop(patty_kiss_tnc *tnc) { static void tnc_drop(patty_kiss_tnc *tnc) {
tnc->state = KISS_NONE; tnc->state = KISS_NONE;
tnc->offset_i = 0; tnc->offset_i = 0;
@ -366,6 +370,7 @@ patty_ax25_if_driver *patty_kiss_tnc_driver() {
.destroy = (patty_ax25_if_driver_destroy *)patty_kiss_tnc_destroy, .destroy = (patty_ax25_if_driver_destroy *)patty_kiss_tnc_destroy,
.stats = (patty_ax25_if_driver_stats *)patty_kiss_tnc_stats, .stats = (patty_ax25_if_driver_stats *)patty_kiss_tnc_stats,
.fd = (patty_ax25_if_driver_fd *)patty_kiss_tnc_fd, .fd = (patty_ax25_if_driver_fd *)patty_kiss_tnc_fd,
.ready = (patty_ax25_if_driver_ready *)patty_kiss_tnc_ready,
.fill = (patty_ax25_if_driver_fill *)patty_kiss_tnc_fill, .fill = (patty_ax25_if_driver_fill *)patty_kiss_tnc_fill,
.drain = (patty_ax25_if_driver_drain *)patty_kiss_tnc_drain, .drain = (patty_ax25_if_driver_drain *)patty_kiss_tnc_drain,
.pending = (patty_ax25_if_driver_pending *)patty_kiss_tnc_pending, .pending = (patty_ax25_if_driver_pending *)patty_kiss_tnc_pending,