diff options
| author | Julien Floret <julien.floret@6wind.com> | 2019-08-06 11:15:05 +0200 |
|---|---|---|
| committer | Philippe Guibert <philippe.guibert@6wind.com> | 2019-09-17 18:38:42 +0200 |
| commit | 594c28781672aeb80b62a6fc6f876db2d0f865e1 (patch) | |
| tree | be2d8c22fd9d9966de92cdef6b39a467da46281a /zebra/interface.c | |
| parent | 215e03fe5328404e543760fecbbbf096a612bebc (diff) | |
zebra: inform upper layer error when reading correct speed interface
speed interface is done 15 seconds after interface creation. during that
time, the vrf or the interface may have disappeared. to protect this,
return an error in case it is not possible to create a vrf socket or it
is not possible to get speed of an interface because of a missing
device.
Signed-off-by: Julien Floret <julien.floret@6wind.com>
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
Diffstat (limited to 'zebra/interface.c')
| -rw-r--r-- | zebra/interface.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/zebra/interface.c b/zebra/interface.c index 6486c01430..771f05857b 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -70,10 +70,19 @@ static int if_zebra_speed_update(struct thread *thread) struct zebra_if *zif = ifp->info; uint32_t new_speed; bool changed = false; + int error = 0; zif->speed_update = NULL; - new_speed = kernel_get_speed(ifp); + new_speed = kernel_get_speed(ifp, &error); + + /* error may indicate vrf not available or + * interfaces not available. + * note that loopback & virtual interfaces can return 0 as speed + */ + if (error < 0) + return 1; + if (new_speed != ifp->speed) { zlog_info("%s: %s old speed: %u new speed: %u", __PRETTY_FUNCTION__, ifp->name, ifp->speed, |
