summaryrefslogtreecommitdiffstats
path: root/openwrt/target/linux/package/nvram/src/wl_linux.c
diff options
context:
space:
mode:
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2005-07-21 11:45:36 +0000
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2005-07-21 11:45:36 +0000
commitdba6e9388f105f78f3ec6448f6456e9368266a9a (patch)
treec7e4e5abb560ab0ba739d5cb144b6848ff85fcec /openwrt/target/linux/package/nvram/src/wl_linux.c
parentb3c393cfc49f0769e199ddacbce9d726a1408b91 (diff)
move nvram,jffs2root,shared libs into target/linux/package and make them broadcom-specific
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@1517 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'openwrt/target/linux/package/nvram/src/wl_linux.c')
-rw-r--r--openwrt/target/linux/package/nvram/src/wl_linux.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/openwrt/target/linux/package/nvram/src/wl_linux.c b/openwrt/target/linux/package/nvram/src/wl_linux.c
new file mode 100644
index 000000000..126a40b4b
--- /dev/null
+++ b/openwrt/target/linux/package/nvram/src/wl_linux.c
@@ -0,0 +1,77 @@
+/*
+ * Wireless network adapter utilities (linux-specific)
+ *
+ * Copyright 2004, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $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 <wlioctl.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;
+}
+