summaryrefslogtreecommitdiffstats
path: root/libnetutils/ifc_utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnetutils/ifc_utils.c')
-rw-r--r--libnetutils/ifc_utils.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/libnetutils/ifc_utils.c b/libnetutils/ifc_utils.c
index bde336f..296d617 100644
--- a/libnetutils/ifc_utils.c
+++ b/libnetutils/ifc_utils.c
@@ -27,6 +27,8 @@
#include <arpa/inet.h>
#include <linux/if.h>
+#include <linux/if_ether.h>
+#include <linux/if_arp.h>
#include <linux/sockios.h>
#include <linux/route.h>
#include <linux/wireless.h>
@@ -45,7 +47,7 @@
static int ifc_ctl_sock = -1;
void printerr(char *fmt, ...);
-static const char *ipaddr_to_string(uint32_t addr)
+static const char *ipaddr_to_string(in_addr_t addr)
{
struct in_addr in_addr;
@@ -88,7 +90,7 @@ int ifc_get_hwaddr(const char *name, void *ptr)
r = ioctl(ifc_ctl_sock, SIOCGIFHWADDR, &ifr);
if(r < 0) return -1;
- memcpy(ptr, &ifr.ifr_hwaddr.sa_data, 6);
+ memcpy(ptr, &ifr.ifr_hwaddr.sa_data, ETH_ALEN);
return 0;
}
@@ -143,6 +145,17 @@ int ifc_set_addr(const char *name, in_addr_t addr)
return ioctl(ifc_ctl_sock, SIOCSIFADDR, &ifr);
}
+int ifc_set_hwaddr(const char *name, const void *ptr)
+{
+ int r;
+ struct ifreq ifr;
+ ifc_init_ifr(name, &ifr);
+
+ ifr.ifr_hwaddr.sa_family = ARPHRD_ETHER;
+ memcpy(&ifr.ifr_hwaddr.sa_data, ptr, ETH_ALEN);
+ return ioctl(ifc_ctl_sock, SIOCSIFHWADDR, &ifr);
+}
+
int ifc_set_mask(const char *name, in_addr_t mask)
{
struct ifreq ifr;
@@ -429,9 +442,9 @@ ifc_configure(const char *ifname,
ifc_close();
- snprintf(dns_prop_name, sizeof(dns_prop_name), "dhcp.%s.dns1", ifname);
+ snprintf(dns_prop_name, sizeof(dns_prop_name), "net.%s.dns1", ifname);
property_set(dns_prop_name, dns1 ? ipaddr_to_string(dns1) : "");
- snprintf(dns_prop_name, sizeof(dns_prop_name), "dhcp.%s.dns2", ifname);
+ snprintf(dns_prop_name, sizeof(dns_prop_name), "net.%s.dns2", ifname);
property_set(dns_prop_name, dns2 ? ipaddr_to_string(dns2) : "");
return 0;