[Linuxptp-devel] [PATCHv4 05/10] rtnl: add function rtnl_get_ts_label to get interface ts_label inf
PTP IEEE 1588 stack for Linux
Brought to you by:
rcochran
From: Hangbin L. <liu...@gm...> - 2017-09-20 01:52:10
|
Signed-off-by: Hangbin Liu <liu...@gm...> --- rtnl.c | 31 +++++++++++++++++++++++++++++++ rtnl.h | 8 ++++++++ 2 files changed, 39 insertions(+) diff --git a/rtnl.c b/rtnl.c index d841245..2ac0b96 100644 --- a/rtnl.c +++ b/rtnl.c @@ -244,3 +244,34 @@ int rtnl_open(void) } return fd; } + +static void rtnl_get_ts_label_callback(void *ctx, int linkup, int ts_index) +{ + int *dst = ctx; + *dst = ts_index; +} + +int rtnl_get_ts_label(struct interface *iface) +{ + int err, fd; + int ts_index = -1; + + fd = rtnl_open(); + if (fd < 0) + return fd; + + err = rtnl_link_query(fd, iface->name); + if (err) { + goto no_info; + } + + rtnl_link_status(fd, iface->name, rtnl_get_ts_label_callback, &ts_index); + if (ts_index > 0 && if_indextoname(ts_index, iface->ts_label)) + err = 0; + else + err = -1; + +no_info: + rtnl_close(fd); + return err; +} diff --git a/rtnl.h b/rtnl.h index 20f1491..d335c40 100644 --- a/rtnl.h +++ b/rtnl.h @@ -20,6 +20,8 @@ #ifndef HAVE_RTNL_H #define HAVE_RTNL_H +#include "config.h" + typedef void (*rtnl_callback)(void *ctx, int linkup, int ts_index); /** @@ -53,4 +55,10 @@ int rtnl_link_status(int fd, char *device, rtnl_callback cb, void *ctx); */ int rtnl_open(void); +/** + * Get interface ts_label information + * @param iface struct interface. + * @return Zero on success, or -1 on error. + */ +int rtnl_get_ts_label(struct interface *iface); #endif -- 2.5.5 |