[Linuxptp-devel] [PATCHv6 05/12] 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-10-09 14:33:12
|
Signed-off-by: Hangbin Liu <liu...@gm...> --- rtnl.c | 31 +++++++++++++++++++++++++++++++ rtnl.h | 9 +++++++++ 2 files changed, 40 insertions(+) diff --git a/rtnl.c b/rtnl.c index 3419873..cea936b 100644 --- a/rtnl.c +++ b/rtnl.c @@ -43,6 +43,37 @@ int rtnl_close(int fd) return close(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; +} + int rtnl_link_query(int fd, char *device) { struct sockaddr_nl sa; diff --git a/rtnl.h b/rtnl.h index 6eced2d..2906d74 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); /** @@ -30,6 +32,13 @@ typedef void (*rtnl_callback)(void *ctx, int linkup, int ts_index); int rtnl_close(int fd); /** + * 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); + +/** * Request the link status from the kernel. * @param fd A socket obtained via rtnl_open(). * @param device Interface name. Request all iface's status if set NULL. -- 2.5.5 |