summaryrefslogtreecommitdiffstats
path: root/libnetutils/ifc_utils.c
diff options
context:
space:
mode:
authorSzymon Jakubczak <szym@google.com>2010-06-09 16:11:09 -0400
committerSzymon Jakubczak <szym@google.com>2010-06-09 16:11:09 -0400
commitc88e09cb98fb3690c3cf49f5a825532e0d9bf300 (patch)
tree6a46ae357564c2bb76e18d072c2b2607ad1d1359 /libnetutils/ifc_utils.c
parentf2df6bb982c8e0f84b2aabdfa9843fa992b9e5e4 (diff)
downloadcore-c88e09cb98fb3690c3cf49f5a825532e0d9bf300.tar.gz
core-c88e09cb98fb3690c3cf49f5a825532e0d9bf300.tar.bz2
core-c88e09cb98fb3690c3cf49f5a825532e0d9bf300.zip
- creates proper ifc.h and dhcp.h headers for libnetutils
- adds ifc_set_hwaddr - adds hwaddr command to netcfg - code reuse: dhcp_configure calls ifc_configure; inet_ntoa is used for printing - consistency: use net.XXX.dnsX properties in favor of dhcp.XXX.dnsX properties (see related change to WifiStateTracker) - updated system/core/nexus to use new headers, although not sure if anybody still uses nexus Change-Id: Idd70c0ac6e89b38e86816578c33eff805d30cac4
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 bde336f6a..296d617d4 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;