Jon,
We actually ran into this a couple of days and fixed it on our end.
I was waiting for more testing before I submit the same patch.
So, I confirm that this is a big issue, it almost renders pimd useless
because it is going to hang on the first nexthop lookup.
Thank you,
Jafar
Acked-by: Jafar Al-Gharaibeh
On 4/20/2016 12:13 AM, [email protected] wrote:
From: Jonathan Hart <[email protected]>
I was running in to a bug when pimd would hang in some cases when
it had to do a nexthop lookup from zebra, such as when a PIM JOIN
was received. This issue could be easily reproduced by running
'show ip rib <ip>' from the pimd vty which forces a nexthop lookup.
The issue is in zclient_read_nexthop, the zclient_read_header function
reads the message content into the stream, but then after that the
zclient_read_nexthop function tries to read the message content again
from the socket, but there are no bytes so it hangs waiting for input.
The solution is to not try to read the message content the second time.
---
pimd/pim_zlookup.c | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/pimd/pim_zlookup.c b/pimd/pim_zlookup.c
index b5b219e..770fbf7 100644
--- a/pimd/pim_zlookup.c
+++ b/pimd/pim_zlookup.c
@@ -155,7 +155,6 @@ static int zclient_read_nexthop(struct zclient *zlookup,
u_char version;
uint16_t vrf_id;
uint16_t command;
- int nbytes;
struct in_addr raddr;
uint8_t distance;
uint32_t metric;
@@ -189,14 +188,6 @@ static int zclient_read_nexthop(struct zclient *zlookup,
return -2;
}
- nbytes = stream_read(s, zlookup->sock, length);
- if (nbytes < length) {
- zlog_err("%s %s: failure reading zclient lookup socket: nbytes=%d <
len=%d",
- __FILE__, __PRETTY_FUNCTION__, nbytes, length);
- zclient_lookup_failed(zlookup);
- return -3;
- }
-
if (command != ZEBRA_IPV4_NEXTHOP_LOOKUP_MRIB) {
zlog_err("%s: socket %d command mismatch: %d",
__func__, zlookup->sock, command);
_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev