diff options
Diffstat (limited to 'bgpd/bgp_io.h')
-rw-r--r-- | bgpd/bgp_io.h | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/bgpd/bgp_io.h b/bgpd/bgp_io.h new file mode 100644 index 0000000..8d48112 --- /dev/null +++ b/bgpd/bgp_io.h @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* BGP I/O. + * Implements packet I/O in a pthread. + * Copyright (C) 2017 Cumulus Networks + * Quentin Young + */ + +#ifndef _FRR_BGP_IO_H +#define _FRR_BGP_IO_H + +#define BGP_WRITE_PACKET_MAX 64U +#define BGP_READ_PACKET_MAX 10U + +#include "bgpd/bgpd.h" +#include "frr_pthread.h" + +struct peer_connection; + +/** + * Start function for write thread. + * + * @param arg - unused + */ +extern void *bgp_io_start(void *arg); + +/** + * Start function for write thread. + * + * Uninitializes all resources and stops the thread. + * + * @param result - where to store data result, unused + */ +extern int bgp_io_stop(void **result, struct frr_pthread *fpt); + +/** + * Turns on packet writing for a peer. + * + * After this function is called, any packets placed on connection->obuf will be + * written to connection->fd until no more packets remain. + * + * Additionally, it becomes unsafe to perform socket actions on connection->fd. + * + * @param peer - peer to register + */ +extern void bgp_writes_on(struct peer_connection *peer); + +/** + * Turns off packet writing for a peer. + * + * After this function returns, packets placed on connection->obuf will not be + * written to connection->fd by the I/O thread. + * + * After this function returns it becomes safe to perform socket actions on + * connection->fd. + * + * @param connection - connection to deregister + * @param flush - as described + */ +extern void bgp_writes_off(struct peer_connection *connection); + +/** + * Turns on packet reading for a peer. + * + * After this function is called, any packets received on connection->fd + * will be read and copied into the FIFO queue connection->ibuf. + * + * Additionally, it becomes unsafe to perform socket actions on connection->fd. + * + * Whenever one or more packets are placed onto connection->ibuf, a task of type + * THREAD_EVENT will be placed on the main thread whose handler is + * + * bgp_packet.c:bgp_process_packet() + * + * @param connection - The connection to register + */ +extern void bgp_reads_on(struct peer_connection *connection); + +/** + * Turns off packet reading for a peer. + * + * After this function is called, any packets received on connection->fd + * will not be read by the I/O thread. + * + * After this function returns it becomes safe to perform socket actions on + * connection->fd. + * + * @param connection - The connection to register for + */ +extern void bgp_reads_off(struct peer_connection *connection); + +#endif /* _FRR_BGP_IO_H */ |