]>
Commit | Line | Data |
---|---|---|
51abb4b4 QY |
1 | /* BGP I/O. |
2 | * Implements packet I/O in a pthread. | |
3 | * Copyright (C) 2017 Cumulus Networks | |
4 | * Quentin Young | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License as published by | |
8 | * the Free Software Foundation; either version 2 of the License, or | |
9 | * (at your option) any later version. | |
10 | * | |
11 | * This program is distributed in the hope that it will be useful, but | |
12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 | * General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU General Public License | |
17 | * along with this program; see the file COPYING; if not, write to the | |
18 | * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, | |
19 | * MA 02110-1301 USA | |
56257a44 QY |
20 | */ |
21 | ||
22 | #ifndef _FRR_BGP_IO_H | |
23 | #define _FRR_BGP_IO_H | |
24 | ||
555e09d4 QY |
25 | #define BGP_WRITE_PACKET_MAX 10U |
26 | #define BGP_READ_PACKET_MAX 10U | |
27 | ||
56257a44 | 28 | #include "bgpd/bgpd.h" |
42cf651e | 29 | #include "frr_pthread.h" |
56257a44 | 30 | |
56257a44 QY |
31 | /** |
32 | * Initializes data structures and flags for the write thread. | |
33 | * | |
34 | * This function should be called from the main thread before | |
424ab01d | 35 | * bgp_writes_start() is invoked. |
56257a44 | 36 | */ |
424ab01d | 37 | extern void bgp_io_init(void); |
56257a44 QY |
38 | |
39 | /** | |
40 | * Start function for write thread. | |
41 | * | |
424ab01d | 42 | * @param arg - unused |
56257a44 | 43 | */ |
424ab01d | 44 | extern void *bgp_io_start(void *arg); |
56257a44 QY |
45 | |
46 | /** | |
47 | * Start function for write thread. | |
48 | * | |
49 | * Uninitializes all resources and stops the thread. | |
50 | * | |
424ab01d | 51 | * @param result - where to store data result, unused |
56257a44 | 52 | */ |
424ab01d | 53 | extern int bgp_io_stop(void **result, struct frr_pthread *fpt); |
56257a44 QY |
54 | |
55 | /** | |
424ab01d | 56 | * Turns on packet writing for a peer. |
56257a44 QY |
57 | * |
58 | * After this function is called, any packets placed on peer->obuf will be | |
51abb4b4 | 59 | * written to peer->fd until no more packets remain. |
56257a44 | 60 | * |
51abb4b4 | 61 | * Additionally, it becomes unsafe to perform socket actions on peer->fd. |
56257a44 QY |
62 | * |
63 | * @param peer - peer to register | |
64 | */ | |
424ab01d | 65 | extern void bgp_writes_on(struct peer *peer); |
56257a44 QY |
66 | |
67 | /** | |
424ab01d | 68 | * Turns off packet writing for a peer. |
56257a44 | 69 | * |
51abb4b4 QY |
70 | * After this function returns, packets placed on peer->obuf will not be |
71 | * written to peer->fd by the I/O thread. | |
56257a44 | 72 | * |
51abb4b4 QY |
73 | * After this function returns it becomes safe to perform socket actions on |
74 | * peer->fd. | |
56257a44 QY |
75 | * |
76 | * @param peer - peer to deregister | |
424ab01d QY |
77 | * @param flush - as described |
78 | */ | |
79 | extern void bgp_writes_off(struct peer *peer); | |
80 | ||
81 | /** | |
82 | * Turns on packet reading for a peer. | |
83 | * | |
84 | * After this function is called, any packets received on peer->fd will be read | |
51abb4b4 | 85 | * and copied into the FIFO queue peer->ibuf. |
424ab01d | 86 | * |
51abb4b4 | 87 | * Additionally, it becomes unsafe to perform socket actions on peer->fd. |
424ab01d | 88 | * |
51abb4b4 QY |
89 | * Whenever one or more packets are placed onto peer->ibuf, a task of type |
90 | * THREAD_EVENT will be placed on the main thread whose handler is | |
424ab01d | 91 | * |
51abb4b4 | 92 | * bgp_packet.c:bgp_process_packet() |
424ab01d QY |
93 | * |
94 | * @param peer - peer to register | |
56257a44 | 95 | */ |
424ab01d | 96 | extern void bgp_reads_on(struct peer *peer); |
56257a44 QY |
97 | |
98 | /** | |
424ab01d QY |
99 | * Turns off packet reading for a peer. |
100 | * | |
101 | * After this function is called, any packets received on peer->fd will not be | |
51abb4b4 | 102 | * read by the I/O thread. |
424ab01d | 103 | * |
51abb4b4 QY |
104 | * After this function returns it becomes safe to perform socket actions on |
105 | * peer->fd. | |
424ab01d QY |
106 | * |
107 | * @param peer - peer to deregister | |
56257a44 | 108 | */ |
424ab01d | 109 | extern void bgp_reads_off(struct peer *peer); |
56257a44 QY |
110 | |
111 | #endif /* _FRR_BGP_IO_H */ |