From 2b0b03f1d23d56d76aaeb671461631ca5696c1dc Mon Sep 17 00:00:00 2001 From: "Fabio M. Di Nitto" Date: Mon, 20 Nov 2017 06:26:01 +0100 Subject: [PATCH] [nozzle] cleanup and document nozzle_(re)set_mac Signed-off-by: Fabio M. Di Nitto --- libnozzle/libnozzle.c | 27 +++++++++++++++++++++------ libnozzle/libnozzle.h | 26 ++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/libnozzle/libnozzle.c b/libnozzle/libnozzle.c index fefb040..1a4423d 100644 --- a/libnozzle/libnozzle.c +++ b/libnozzle/libnozzle.c @@ -752,11 +752,20 @@ out_clean: int nozzle_set_mac(nozzle_t nozzle, const char *ether_addr) { - int err; + int err = 0, savederrno = 0; - pthread_mutex_lock(&lib_mutex); + if ((!nozzle) || (!ether_addr)) { + errno = EINVAL; + return -1; + } - if ((!_check(nozzle)) || (!ether_addr)) { + savederrno = pthread_mutex_lock(&lib_mutex); + if (savederrno) { + errno = savederrno; + return -1; + } + + if (!_check(nozzle)) { errno = EINVAL; err = -1; goto out_clean; @@ -766,26 +775,32 @@ int nozzle_set_mac(nozzle_t nozzle, const char *ether_addr) strncpy(nozzle->ifname, nozzle->nozzlename, IFNAMSIZ); #ifdef KNET_LINUX err = ioctl(lib_cfg.sockfd, SIOCGIFHWADDR, &nozzle->ifr); - if (err) + if (err) { + savederrno = errno; goto out_clean; + } memmove(nozzle->ifr.ifr_hwaddr.sa_data, ether_aton(ether_addr), ETH_ALEN); err = ioctl(lib_cfg.sockfd, SIOCSIFHWADDR, &nozzle->ifr); + savederrno = errno; #endif #ifdef KNET_BSD err = ioctl(lib_cfg.sockfd, SIOCGIFADDR, &nozzle->ifr); - if (err) + if (err) { + savederrno = errno; goto out_clean; + } memmove(nozzle->ifr.ifr_addr.sa_data, ether_aton(ether_addr), ETHER_ADDR_LEN); nozzle->ifr.ifr_addr.sa_len = ETHER_ADDR_LEN; err = ioctl(lib_cfg.sockfd, SIOCSIFLLADDR, &nozzle->ifr); + savederrno = errno; #endif out_clean: pthread_mutex_unlock(&lib_mutex); - + errno = savederrno; return err; } diff --git a/libnozzle/libnozzle.h b/libnozzle/libnozzle.h index 5f75cb0..813ca25 100644 --- a/libnozzle/libnozzle.h +++ b/libnozzle/libnozzle.h @@ -261,7 +261,33 @@ int nozzle_reset_mtu(nozzle_t nozzle, char **error_string); */ int nozzle_get_mac(const nozzle_t nozzle, char **ether_addr); + +/** + * nozzle_set_mac + * @brief set mac address on a given nozzle interface + * + * nozzle - pointer to the nozzle struct + * + * ether_addr - pointers to string containing the new mac address. + * + * @return + * 0 on success. + * -1 on error and errno is set. + */ + int nozzle_set_mac(nozzle_t nozzle, const char *ether_addr); + +/** + * nozzle_reset_mac + * @brief reset mac address on a given nozzle interface to system default + * + * nozzle - pointer to the nozzle struct + * + * @return + * 0 on success. + * -1 on error and errno is set. + */ + int nozzle_reset_mac(nozzle_t nozzle); nozzle_t nozzle_find(char *dev, size_t dev_size); -- 2.39.5