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;
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;
}
*/
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);