X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/f52d66ff00b24111f87c274d3d7085ef2e1d27b1..ab94b8b851e1ba5a315d340c59be864b1521f397:/package/nvram/src/wl.c?ds=sidebyside

diff --git a/package/nvram/src/wl.c b/package/nvram/src/wl.c
index 5738e2cd0..c33610310 100644
--- a/package/nvram/src/wl.c
+++ b/package/nvram/src/wl.c
@@ -11,11 +11,68 @@
  *
  * $Id$
  */
+#include <stdio.h>
+#include <unistd.h>
 #include <string.h>
+#include <errno.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
 
 #include <typedefs.h>
 #include <wlutils.h>
 
+int
+wl_ioctl(char *name, int cmd, void *buf, int len)
+{
+	struct ifreq ifr;
+	wl_ioctl_t ioc;
+	int ret = 0;
+ 	int s;
+
+	/* open socket to kernel */
+	if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+		perror("socket");
+		return errno;
+	}
+
+	/* do it */
+	ioc.cmd = cmd;
+	ioc.buf = buf;
+	ioc.len = len;
+	strncpy(ifr.ifr_name, name, IFNAMSIZ);
+	ifr.ifr_data = (caddr_t) &ioc;
+	if ((ret = ioctl(s, SIOCDEVPRIVATE, &ifr)) < 0)
+		if (cmd != WLC_GET_MAGIC)
+			perror(ifr.ifr_name);
+
+	/* cleanup */
+	close(s);
+	return ret;
+}
+
+int
+wl_hwaddr(char *name, unsigned char *hwaddr)
+{
+	struct ifreq ifr;
+	int ret = 0;
+ 	int s;
+
+	/* open socket to kernel */
+	if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+		perror("socket");
+		return errno;
+	}
+
+	/* do it */
+	strncpy(ifr.ifr_name, name, IFNAMSIZ);
+	if ((ret = ioctl(s, SIOCGIFHWADDR, &ifr)) == 0)
+		memcpy(hwaddr, ifr.ifr_hwaddr.sa_data, ETHER_ADDR_LEN);
+
+	/* cleanup */
+	close(s);
+	return ret;
+}	
+
 int
 wl_probe(char *name)
 {