diff options
| author | Szymon Jakubczak <szym@google.com> | 2010-06-09 16:11:09 -0400 |
|---|---|---|
| committer | Szymon Jakubczak <szym@google.com> | 2010-06-09 16:11:09 -0400 |
| commit | c88e09cb98fb3690c3cf49f5a825532e0d9bf300 (patch) | |
| tree | 6a46ae357564c2bb76e18d072c2b2607ad1d1359 /libnetutils/ifc_utils.c | |
| parent | f2df6bb982c8e0f84b2aabdfa9843fa992b9e5e4 (diff) | |
| download | core-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.c | 21 |
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; |
