]>
Commit | Line | Data |
---|---|---|
56257a44 QY |
1 | /* |
2 | BGP I/O. | |
3 | Implements a consumer thread to flush packets destined for remote peers. | |
4 | ||
5 | Copyright (C) 2017 Cumulus Networks | |
6 | ||
7 | This program is free software; you can redistribute it and/or modify | |
8 | it under the terms of the GNU General Public License as published by | |
9 | the Free Software Foundation; either version 2 of the License, or | |
10 | (at your option) any later version. | |
11 | ||
12 | This program is distributed in the hope that it will be useful, but | |
13 | WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 | General Public License for more details. | |
16 | ||
17 | You should have received a copy of the GNU General Public License | |
18 | along with this program; see the file COPYING; if not, write to the | |
19 | Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, | |
20 | MA 02110-1301 USA | |
21 | */ | |
22 | ||
23 | #ifndef _FRR_BGP_IO_H | |
24 | #define _FRR_BGP_IO_H | |
25 | ||
555e09d4 QY |
26 | #define BGP_WRITE_PACKET_MAX 10U |
27 | #define BGP_READ_PACKET_MAX 10U | |
28 | ||
56257a44 | 29 | #include "bgpd/bgpd.h" |
42cf651e | 30 | #include "frr_pthread.h" |
56257a44 QY |
31 | |
32 | /** | |
33 | * Control variable for write thread. | |
34 | * | |
424ab01d | 35 | * Setting this variable to false will eventually result in thread termination. |
56257a44 QY |
36 | */ |
37 | extern bool bgp_packet_writes_thread_run; | |
38 | ||
39 | /** | |
40 | * Initializes data structures and flags for the write thread. | |
41 | * | |
42 | * This function should be called from the main thread before | |
424ab01d | 43 | * bgp_writes_start() is invoked. |
56257a44 | 44 | */ |
424ab01d | 45 | extern void bgp_io_init(void); |
56257a44 QY |
46 | |
47 | /** | |
48 | * Start function for write thread. | |
49 | * | |
424ab01d | 50 | * @param arg - unused |
56257a44 | 51 | */ |
424ab01d | 52 | extern void *bgp_io_start(void *arg); |
56257a44 QY |
53 | |
54 | /** | |
55 | * Start function for write thread. | |
56 | * | |
57 | * Uninitializes all resources and stops the thread. | |
58 | * | |
424ab01d | 59 | * @param result - where to store data result, unused |
56257a44 | 60 | */ |
424ab01d | 61 | extern int bgp_io_stop(void **result, struct frr_pthread *fpt); |
56257a44 QY |
62 | |
63 | /** | |
424ab01d | 64 | * Turns on packet writing for a peer. |
56257a44 QY |
65 | * |
66 | * After this function is called, any packets placed on peer->obuf will be | |
424ab01d QY |
67 | * written to peer->fd at regular intervals. Additionally it becomes unsafe to |
68 | * use peer->fd with select() or poll(). | |
56257a44 QY |
69 | * |
70 | * This function increments the peer reference counter with peer_lock(). | |
71 | * | |
72 | * If the peer is already registered, nothing happens. | |
73 | * | |
74 | * @param peer - peer to register | |
75 | */ | |
424ab01d | 76 | extern void bgp_writes_on(struct peer *peer); |
56257a44 QY |
77 | |
78 | /** | |
424ab01d | 79 | * Turns off packet writing for a peer. |
56257a44 QY |
80 | * |
81 | * After this function is called, any packets placed on peer->obuf will not be | |
424ab01d QY |
82 | * written to peer->fd. After this function returns it is safe to use peer->fd |
83 | * with select() or poll(). | |
56257a44 | 84 | * |
424ab01d QY |
85 | * If the flush = true, a last-ditch effort will be made to flush any remaining |
86 | * packets to peer->fd. Upon encountering any error whatsoever, the attempt | |
87 | * will abort. If the caller wishes to know whether the flush succeeded they | |
88 | * may check peer->obuf->count against zero. | |
56257a44 QY |
89 | * |
90 | * If the peer is not registered, nothing happens. | |
91 | * | |
92 | * @param peer - peer to deregister | |
424ab01d QY |
93 | * @param flush - as described |
94 | */ | |
95 | extern void bgp_writes_off(struct peer *peer); | |
96 | ||
97 | /** | |
98 | * Turns on packet reading for a peer. | |
99 | * | |
100 | * After this function is called, any packets received on peer->fd will be read | |
101 | * and copied into the FIFO queue peer->ibuf. Additionally it becomes unsafe to | |
102 | * use peer->fd with select() or poll(). | |
103 | * | |
104 | * When a full packet is read, bgp_process_packet() will be scheduled on the | |
105 | * main thread. | |
106 | * | |
107 | * This function increments the peer reference counter with peer_lock(). | |
108 | * | |
109 | * If the peer is already registered, nothing happens. | |
110 | * | |
111 | * @param peer - peer to register | |
56257a44 | 112 | */ |
424ab01d | 113 | extern void bgp_reads_on(struct peer *peer); |
56257a44 QY |
114 | |
115 | /** | |
424ab01d QY |
116 | * Turns off packet reading for a peer. |
117 | * | |
118 | * After this function is called, any packets received on peer->fd will not be | |
119 | * read. After this function returns it is safe to use peer->fd with select() | |
120 | * or poll(). | |
56257a44 | 121 | * |
424ab01d QY |
122 | * This function decrements the peer reference counter with peer_unlock(). |
123 | * | |
124 | * If the peer is not registered, nothing happens. | |
125 | * | |
126 | * @param peer - peer to deregister | |
56257a44 | 127 | */ |
424ab01d | 128 | extern void bgp_reads_off(struct peer *peer); |
56257a44 QY |
129 | |
130 | #endif /* _FRR_BGP_IO_H */ |