mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-05 22:50:14 +00:00
![]() Implement non-blocking zclient I/O with buffering. * zclient.h (struct zclient): Add two fields to support non-blocking I/O: struct buffer *wb, and struct thread *t_write. (zclient_free): Remove function. (zebra_redistribute_send): Change 2nd arg from socket fd to struct zclient * (needed to support non-blocking I/O and buffering). (zclient_send_message): New function to send an arbitrary message with non-blocking I/O. * zclient.c (zclient_new): Create write buffer. (zclient_free): Remove unused function. (zclient_stop): Must cancel new t_write thread. Also, reset all buffers: ibuf, obuf, and wb. (zclient_failed): New helper function for typical error handling. (zclient_flush_data): New thread to flush queued data. (zclient_send_message): New function to send the message in zclient->obuf to zebra using non-blocking I/O and buffering. (zebra_message_send, zapi_ipv4_route, zapi_ipv6_route): Use new zclient_send_message function instead of calling writen. (zclient_start): Set socket non-blocking. Also, change 2nd arg to zebra_redistribute_send from zclient->sock to zclient. (zebra_redistribute_send): Change 2nd arg to struct zclient *. Can now use zclient->obuf to assemble the message instead of allocating a temporary stream. And call zclient_send_message to send the message instead of writen. (zclient_read): Convert to support non-blocking I/O by using stream_read_try instead of deprecated stream_read. (zclient_redistribute): Change 2nd arg to zebra_redistribute_send from zclient->sock to zclient. * ospf6_zebra.c (ospf6_zebra_redistribute, ospf6_zebra_no_redistribute): Change 2nd arg to zebra_redistribute_send from zclient->sock to zclient. * ospf_zebra.c (ospf_zebra_add): Call zclient_send_message instead of writen. * rip_zebra.c (rip_redistribute_set, rip_redistribute_unset, rip_redistribute_clean): Change 2nd arg to zebra_redistribute_send from zclient->sock to zclient. * ripng_zebra.c (ripng_redistribute_unset, ripng_redistribute_clean): Change 2nd arg to zebra_redistribute_send from zclient->sock to zclient. * bgp_zebra.c (bgp_redistribute_set, bgp_redistribute_unset): The 2nd arg to zebra_redistribute_send is now zclient instead of zclient->sock. * isis_zebra.h (isis_zebra_finish): Remove declaration of unused function. * isis_zebra.c (isis_zebra_route_add_ipv4): Call zclient_send_message to send the message to zebra instead of calling writen directly, since zclient_send_message understands non-blocking I/O and will manage the buffer queue appropriately. (isis_zebra_finish): Remove unused function, particularly since the zclient_free function has been removed. |
||
---|---|---|
.. | ||
.cvsignore | ||
buffer.c | ||
buffer.h | ||
ChangeLog | ||
checksum.c | ||
command.c | ||
command.h | ||
daemon.c | ||
distribute.c | ||
distribute.h | ||
filter.c | ||
filter.h | ||
getopt1.c | ||
getopt.c | ||
getopt.h | ||
hash.c | ||
hash.h | ||
if_rmap.c | ||
if_rmap.h | ||
if.c | ||
if.h | ||
jhash.c | ||
jhash.h | ||
keychain.c | ||
keychain.h | ||
linklist.c | ||
linklist.h | ||
log.c | ||
log.h | ||
Makefile.am | ||
md5-gnu.h | ||
md5.c | ||
memory.c | ||
memory.h | ||
network.c | ||
network.h | ||
pid_output.c | ||
plist.c | ||
plist.h | ||
pqueue.c | ||
pqueue.h | ||
prefix.c | ||
prefix.h | ||
privs.c | ||
privs.h | ||
regex-gnu.h | ||
regex.c | ||
routemap.c | ||
routemap.h | ||
sigevent.c | ||
sigevent.h | ||
smux.c | ||
smux.h | ||
sockopt.c | ||
sockopt.h | ||
sockunion.c | ||
sockunion.h | ||
str.c | ||
str.h | ||
stream.c | ||
stream.h | ||
table.c | ||
table.h | ||
thread.c | ||
thread.h | ||
vector.c | ||
vector.h | ||
version.h.in | ||
vty.c | ||
vty.h | ||
zassert.h | ||
zclient.c | ||
zclient.h | ||
zebra.h |