X-Git-Url: http://git.ozo.com/?a=blobdiff_plain;f=package%2Fnvram%2Fsrc%2Fwl.c;fp=package%2Fnvram%2Fsrc%2Fwl.c;h=f09317ad065f7e0da86528bad749189997cb5ea9;hb=102ad2157b31642e029c8c176de1cc5b22c96599;hp=0000000000000000000000000000000000000000;hpb=b7740460b2e2f7d1249a001275eb1cb015cabb31;p=openwrt-10.03%2F.git diff --git a/package/nvram/src/wl.c b/package/nvram/src/wl.c new file mode 100644 index 000000000..f09317ad0 --- /dev/null +++ b/package/nvram/src/wl.c @@ -0,0 +1,86 @@ +/* + * Wireless network adapter utilities + * + * 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 + +#include +#include + +int +wl_probe(char *name) +{ + int ret, val; + + /* Check interface */ + if ((ret = wl_ioctl(name, WLC_GET_MAGIC, &val, sizeof(val)))) + return ret; + if (val != WLC_IOCTL_MAGIC) + return -1; + if ((ret = wl_ioctl(name, WLC_GET_VERSION, &val, sizeof(val)))) + return ret; + if (val > WLC_IOCTL_VERSION) + return -1; + + return ret; +} + +int +wl_set_val(char *name, char *var, void *val, int len) +{ + char buf[128]; + int buf_len; + + /* check for overflow */ + if ((buf_len = strlen(var)) + 1 + len > sizeof(buf)) + return -1; + + strcpy(buf, var); + buf_len += 1; + + /* append int value onto the end of the name string */ + memcpy(&buf[buf_len], val, len); + buf_len += len; + + return wl_ioctl(name, WLC_SET_VAR, buf, buf_len); +} + +int +wl_get_val(char *name, char *var, void *val, int len) +{ + char buf[128]; + int ret; + + /* check for overflow */ + if (strlen(var) + 1 > sizeof(buf) || len > sizeof(buf)) + return -1; + + strcpy(buf, var); + if ((ret = wl_ioctl(name, WLC_GET_VAR, buf, sizeof(buf)))) + return ret; + + memcpy(val, buf, len); + return 0; +} + +int +wl_set_int(char *name, char *var, int val) +{ + return wl_set_val(name, var, &val, sizeof(val)); +} + +int +wl_get_int(char *name, char *var, int *val) +{ + return wl_get_val(name, var, val, sizeof(*val)); +} +