This commit was manufactured by cvs2svn to create branch 'whiterussian'.
authorOpenWrt Development <openwrt-devel@lists.openwrt.org>
Mon, 25 Jul 2005 07:36:16 +0000 (07:36 +0000)
committerOpenWrt Development <openwrt-devel@lists.openwrt.org>
Mon, 25 Jul 2005 07:36:16 +0000 (07:36 +0000)
SVN-Revision: 1549

70 files changed:
openwrt/package/base-files/Makefile [new file with mode: 0644]
openwrt/package/base-files/default/bin/firstboot [new file with mode: 0755]
openwrt/package/base-files/default/bin/login [new file with mode: 0755]
openwrt/package/base-files/default/etc/banner [new file with mode: 0644]
openwrt/package/base-files/default/etc/firewall.user [new file with mode: 0755]
openwrt/package/base-files/default/etc/functions.sh [new file with mode: 0755]
openwrt/package/base-files/default/etc/group [new file with mode: 0644]
openwrt/package/base-files/default/etc/hosts [new file with mode: 0644]
openwrt/package/base-files/default/etc/init.d/S10boot [new file with mode: 0755]
openwrt/package/base-files/default/etc/init.d/S40network [new file with mode: 0755]
openwrt/package/base-files/default/etc/init.d/S45firewall [new file with mode: 0755]
openwrt/package/base-files/default/etc/init.d/S50httpd [new file with mode: 0755]
openwrt/package/base-files/default/etc/init.d/S50telnet [new file with mode: 0755]
openwrt/package/base-files/default/etc/init.d/S99done [new file with mode: 0755]
openwrt/package/base-files/default/etc/init.d/rcS [new file with mode: 0755]
openwrt/package/base-files/default/etc/inittab [new file with mode: 0644]
openwrt/package/base-files/default/etc/ipkg.conf [new file with mode: 0644]
openwrt/package/base-files/default/etc/passwd [new file with mode: 0644]
openwrt/package/base-files/default/etc/preinit [new file with mode: 0755]
openwrt/package/base-files/default/etc/profile [new file with mode: 0644]
openwrt/package/base-files/default/etc/protocols [new file with mode: 0644]
openwrt/package/base-files/default/etc/shells [new file with mode: 0644]
openwrt/package/base-files/default/etc/sysctl.conf [new file with mode: 0644]
openwrt/package/base-files/default/rom/note [new file with mode: 0644]
openwrt/package/base-files/default/sbin/backup [new file with mode: 0755]
openwrt/package/base-files/default/sbin/halt [new file with mode: 0755]
openwrt/package/base-files/default/sbin/hotplug [new file with mode: 0755]
openwrt/package/base-files/default/sbin/ifdown [new file with mode: 0755]
openwrt/package/base-files/default/sbin/ifup [new file with mode: 0755]
openwrt/package/base-files/default/sbin/mount_root [new file with mode: 0755]
openwrt/package/base-files/default/sbin/restore [new file with mode: 0755]
openwrt/package/base-files/default/usr/share/udhcpc/default.script [new file with mode: 0755]
openwrt/package/base-files/default/www/index.html [new file with mode: 0644]
openwrt/package/base-files/ipkg/base-files.control [new file with mode: 0644]
openwrt/package/base-files/ipkg/libgcc.control [new file with mode: 0644]
openwrt/package/base-files/ipkg/uclibc.control [new file with mode: 0644]
openwrt/package/kismet/patches/130-wrt54g_source.patch [new file with mode: 0644]
openwrt/package/mtd/Config.in [new file with mode: 0644]
openwrt/package/mtd/Makefile [new file with mode: 0644]
openwrt/package/mtd/ipkg/mtd.control [new file with mode: 0644]
openwrt/package/mtd/mtd.c [new file with mode: 0644]
openwrt/package/nvram/Makefile [new file with mode: 0644]
openwrt/package/nvram/ipkg/nvram.control [new file with mode: 0644]
openwrt/package/nvram/src/Makefile [new file with mode: 0644]
openwrt/package/nvram/src/bcmtimer.h [new file with mode: 0644]
openwrt/package/nvram/src/defaults.c [new file with mode: 0644]
openwrt/package/nvram/src/linux_timer.c [new file with mode: 0644]
openwrt/package/nvram/src/main.c [new file with mode: 0644]
openwrt/package/nvram/src/nvram_convert.c [new file with mode: 0644]
openwrt/package/nvram/src/nvram_convert.h [new file with mode: 0644]
openwrt/package/nvram/src/nvram_linux.c [new file with mode: 0644]
openwrt/package/nvram/src/shutils.c [new file with mode: 0644]
openwrt/package/nvram/src/wl.c [new file with mode: 0644]
openwrt/package/nvram/src/wl_linux.c [new file with mode: 0644]
openwrt/target/linux/package/openwrt/include/bcmnvram.h [new file with mode: 0644]
openwrt/target/linux/package/openwrt/include/bcmutils.h [new file with mode: 0644]
openwrt/target/linux/package/openwrt/include/cy_conf.h [new file with mode: 0644]
openwrt/target/linux/package/openwrt/include/epivers.h [new file with mode: 0644]
openwrt/target/linux/package/openwrt/include/proto/802.11.h [new file with mode: 0644]
openwrt/target/linux/package/openwrt/include/proto/ethernet.h [new file with mode: 0644]
openwrt/target/linux/package/openwrt/include/shutils.h [new file with mode: 0644]
openwrt/target/linux/package/openwrt/include/typedefs.h [new file with mode: 0644]
openwrt/target/linux/package/openwrt/include/utils.h [new file with mode: 0644]
openwrt/target/linux/package/openwrt/include/wlcompat.h [new file with mode: 0644]
openwrt/target/linux/package/openwrt/include/wlioctl.h [new file with mode: 0644]
openwrt/target/linux/package/openwrt/include/wlutils.h [new file with mode: 0644]
openwrt/target/linux/package/openwrt/ipkg/base-files-arch.control [new file with mode: 0644]
openwrt/target/linux/package/openwrt/jffs2root.c [new file with mode: 0644]
openwrt/toolchain/kernel-headers/config.mips [new file with mode: 0644]
openwrt/toolchain/uClibc/files/config.mips [new file with mode: 0644]

diff --git a/openwrt/package/base-files/Makefile b/openwrt/package/base-files/Makefile
new file mode 100644 (file)
index 0000000..e2c47b5
--- /dev/null
@@ -0,0 +1,71 @@
+# $Id$
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=base-files
+PKG_RELEASE:=1
+PKG_BUILD_DIR:=$(BUILD_DIR)/base-files
+
+include $(TOPDIR)/package/rules.mk
+
+IDIR_BASE:=$(PKG_BUILD_DIR)/base-files
+IPKG_BASE:=$(PACKAGE_DIR)/$(PKG_NAME)_$(PKG_RELEASE)_$(ARCH).ipk
+
+LIBC_VERSION:=${shell cat $(STAGING_DIR)/uclibc_version}
+IDIR_LIBC:=$(PKG_BUILD_DIR)/uclibc
+IPKG_LIBC:=$(PACKAGE_DIR)/uclibc_$(LIBC_VERSION)-$(PKG_RELEASE)_$(ARCH).ipk
+
+GCC_VERSION:=${shell cat $(STAGING_DIR)/gcc_version}
+IDIR_GCC:=$(PKG_BUILD_DIR)/libgcc
+IPKG_GCC:=$(PACKAGE_DIR)/libgcc_$(GCC_VERSION)-$(PKG_RELEASE)_$(ARCH).ipk
+
+PACKAGES:=$(IPKG_BASE) $(IPKG_LIBC) $(IPKG_GCC)
+
+$(PKG_BUILD_DIR)/.prepared:
+       mkdir -p $(PKG_BUILD_DIR) $(PACKAGE_DIR)
+       touch $@
+
+$(PKG_BUILD_DIR)/.built:
+       touch $@
+
+$(IPKG_BASE):
+       $(SCRIPT_DIR)/make-ipkg-dir.sh $(IDIR_BASE) ipkg/$(PKG_NAME).control $(PKG_RELEASE) $(ARCH)
+       cp -a ./default/* $(IDIR_BASE)
+       mkdir -p $(IDIR_BASE)/jffs
+       mkdir -p $(IDIR_BASE)/dev
+       mkdir -p $(IDIR_BASE)/proc
+       mkdir -p $(IDIR_BASE)/tmp
+       mkdir -p $(IDIR_BASE)/lib
+       mkdir -p $(IDIR_BASE)/usr/lib
+       mkdir -p $(IDIR_BASE)/usr/bin
+       ln -sf /tmp/resolv.conf $(IDIR_BASE)/etc/resolv.conf
+       rm -rf $(IDIR_BASE)/var
+       ln -sf /tmp $(IDIR_BASE)/var
+       -find $(IDIR_BASE) -type d -name CVS | xargs rm -rf
+       -find $(IDIR_BASE) -type d -name .svn | xargs rm -rf
+       mkdir -p $(IDIR_BASE)/etc
+       -grep \^BR2_SYSCONF $(TOPDIR)/.config > $(IDIR_BASE)/etc/sysconf
+       $(IPKG_BUILD) $(IDIR_BASE) $(PACKAGE_DIR)
+
+$(IPKG_LIBC):
+       $(SCRIPT_DIR)/make-ipkg-dir.sh $(IDIR_LIBC) ipkg/uclibc.control $(LIBC_VERSION)-$(PKG_RELEASE) $(ARCH)
+       mkdir -p $(IDIR_LIBC)/lib
+       cp -a $(STAGING_DIR)/lib/ld-uClibc*.so* $(IDIR_LIBC)/lib/
+       for file in c crypt dl m nsl resolv rt uClibc util; do \
+               cp -a $(STAGING_DIR)/lib/lib$$file*.so* $(IDIR_LIBC)/lib/; \
+       done
+       -$(STRIP) $(IDIR_LIBC)/lib/*
+       $(IPKG_BUILD) $(IDIR_LIBC) $(PACKAGE_DIR)
+
+$(IPKG_GCC):
+       $(SCRIPT_DIR)/make-ipkg-dir.sh $(IDIR_GCC) ipkg/libgcc.control $(GCC_VERSION)-$(PKG_RELEASE) $(ARCH)
+       mkdir -p $(IDIR_GCC)/lib
+       cp -a $(STAGING_DIR)/lib/libgcc*.so* $(IDIR_GCC)/lib/
+       -$(STRIP) $(IDIR_GCC)/lib/*
+       $(IPKG_BUILD) $(IDIR_GCC) $(PACKAGE_DIR)
+
+prepare:
+compile: $(PACKAGES)
+install: compile
+       mkdir -p $(TARGET_DIR)
+       $(IPKG) install $(PACKAGES)
diff --git a/openwrt/package/base-files/default/bin/firstboot b/openwrt/package/base-files/default/bin/firstboot
new file mode 100755 (executable)
index 0000000..1c3d1a7
--- /dev/null
@@ -0,0 +1,63 @@
+#!/bin/sh
+# $Id$
+
+mount | grep squashfs >&- || {
+       echo "You do not have a squashfs partition; aborting"
+       echo "(firstboot cannot be run on jffs2 based firmwares)"
+       return
+}
+
+[ -f "/tmp/.firstboot" ] && {
+       echo "firstboot is already running"
+       return
+}
+touch /tmp/.firstboot
+
+jdev=$(mount | awk '/jffs2/ {print $3}')
+
+if [ -z "$jdev" ]; then
+       echo -n "Creating jffs2 partition... "
+       mtd erase OpenWrt >&- 
+       mount -t jffs2 /dev/mtdblock/4 /jffs
+       echo "done"
+       cd /jffs
+else
+       echo "firstboot has already been run"
+       echo "jffs2 partition is mounted, only resetting files"
+       cd $jdev
+fi
+
+exec 2>/dev/null
+
+mount /dev/mtdblock/2 /rom -o ro
+
+echo -n "creating directories... "
+{
+       cd /rom
+       find . -type d
+       cd -
+} | xargs mkdir
+echo "done"
+
+echo -n "setting up symlinks... "
+for file in $(cd /rom; find *  -type f; find *  -type l;)
+do {
+  [ "${file%/*}" = "usr/lib/ipkg/info" -o "${file%/*}" = "etc/config" ] && {
+    cp -f /rom/$file $file
+  } || {
+    ln -sf /rom/$file $file
+  }
+} done
+echo "done"
+
+touch /tmp/resolv.conf
+ln -s /tmp/resolv.conf /etc/resolv.conf
+
+umount /rom
+mount none /jffs/proc -t proc
+pivot_root /jffs /jffs/rom
+mount none /dev  -t devfs
+mount none /tmp  -t ramfs
+umount /rom/proc
+umount /rom/tmp
+umount /rom/dev
diff --git a/openwrt/package/base-files/default/bin/login b/openwrt/package/base-files/default/bin/login
new file mode 100755 (executable)
index 0000000..bb065e5
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/sh
+. /etc/sysconf 2>&-
+
+[ "$FAILSAFE" != "true" ] &&
+[ "$BR2_SYSCONF_TELNET_FAILSAFE_ONLY" = "y" ] &&
+{
+  grep '^root:[^!]' /etc/passwd >&- 2>&- &&
+  {
+    echo "Login failed."
+    exit 0
+  } || {
+cat << EOF
+ === IMPORTANT ============================
+  Use 'passwd' to set your login password
+  this will disable telnet and enable SSH
+ ------------------------------------------
+EOF
+  }
+}
+exec /bin/ash --login
diff --git a/openwrt/package/base-files/default/etc/banner b/openwrt/package/base-files/default/etc/banner
new file mode 100644 (file)
index 0000000..2b2b2c0
--- /dev/null
@@ -0,0 +1,6 @@
+  _______                     ________        __
+ |       |.-----.-----.-----.|  |  |  |.----.|  |_
+ |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
+ |_______||   __|_____|__|__||________||__|  |____|
+          |__| W I R E L E S S   F R E E D O M
+          
diff --git a/openwrt/package/base-files/default/etc/firewall.user b/openwrt/package/base-files/default/etc/firewall.user
new file mode 100755 (executable)
index 0000000..7a13141
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/sh
+. /etc/functions.sh
+
+WAN=$(nvram get wan_ifname)
+LAN=$(nvram get lan_ifname)
+
+iptables -F input_rule
+iptables -F output_rule
+iptables -F forwarding_rule
+iptables -t nat -F prerouting_rule
+iptables -t nat -F postrouting_rule
+
+### BIG FAT DISCLAIMER
+### The "-i $WAN" literally means packets that came in over the $WAN interface;
+### this WILL NOT MATCH packets sent from the LAN to the WAN address.
+
+### Allow SSH on the WAN interface
+# iptables -t nat -A prerouting_rule -i $WAN -p tcp --dport 22 -j ACCEPT 
+# iptables        -A input_rule      -i $WAN -p tcp --dport 22 -j ACCEPT
+
+### Port forwarding
+# iptables -t nat -A prerouting_rule -i $WAN -p tcp --dport 22 -j DNAT --to 192.168.1.2
+# iptables        -A forwarding_rule -i $WAN -p tcp --dport 22 -d 192.168.1.2 -j ACCEPT
+
+### DMZ (should be placed after port forwarding / accept rules)
+# iptables -t nat -A prerouting_rule -i $WAN -j DNAT --to 192.168.1.2
+# iptables        -A forwarding_rule -i $WAN -d 192.168.1.2 -j ACCEPT
diff --git a/openwrt/package/base-files/default/etc/functions.sh b/openwrt/package/base-files/default/etc/functions.sh
new file mode 100755 (executable)
index 0000000..14f5011
--- /dev/null
@@ -0,0 +1,63 @@
+#!/bin/ash
+
+alias debug=${DEBUG:-:}
+
+# allow env to override nvram
+nvram () {
+  if [ -x /usr/sbin/nvram ]; then
+    case $1 in
+      get) eval "echo \${$2:-\$(command nvram get $2)}";;
+      *) command nvram $*;;
+    esac
+  else
+    case $1 in
+      get) eval "echo \${$2:-\${DEFAULT_$2}}";;
+      *);;
+    esac
+  fi  
+}
+
+# valid interface?
+if_valid () (
+  ifconfig "$1" >&- 2>&- ||
+  [ "${1%%[0-9]}" = "br" ] ||
+  {
+    [ "${1%%[0-9]}" = "vlan" ] && ( 
+      i=${1#vlan}
+      hwname=$(nvram get vlan${i}hwname)
+      hwaddr=$(nvram get ${hwname}macaddr)
+      [ -z "$hwaddr" ] && return 1
+
+      vif=$(ifconfig -a | awk '/^eth.*'$hwaddr'/ {print $1; exit}' IGNORECASE=1)
+      debug "# vlan$i => $vif"
+
+      $DEBUG ifconfig $vif up
+      $DEBUG vconfig add $vif $i 2>&-
+    )
+  } ||
+  { debug "# missing interface '$1' ignored"; false; }
+)
+
+bitcount () {
+  local c=$1
+  echo $((
+  c=((c>> 1)&0x55555555)+(c&0x55555555),
+  c=((c>> 2)&0x33333333)+(c&0x33333333),
+  c=((c>> 4)&0x0f0f0f0f)+(c&0x0f0f0f0f),
+  c=((c>> 8)&0x00ff00ff)+(c&0x00ff00ff),
+  c=((c>>16)&0x0000ffff)+(c&0x0000ffff)
+  ))
+}
+
+valid_netmask () {
+  return $((-($1)&~$1))
+}
+
+ip2int () (
+  set $(echo $1 | tr '\.' ' ')
+  echo $(($1<<24|$2<<16|$3<<8|$4))
+)
+
+int2ip () {
+  echo $(($1>>24&255)).$(($1>>16&255)).$(($1>>8&255)).$(($1&255))
+}
diff --git a/openwrt/package/base-files/default/etc/group b/openwrt/package/base-files/default/etc/group
new file mode 100644 (file)
index 0000000..c4e77f3
--- /dev/null
@@ -0,0 +1,2 @@
+root:x:0:
+nogroup:x:65534:
diff --git a/openwrt/package/base-files/default/etc/hosts b/openwrt/package/base-files/default/etc/hosts
new file mode 100644 (file)
index 0000000..ce138ec
--- /dev/null
@@ -0,0 +1 @@
+127.0.0.1 localhost OpenWrt
diff --git a/openwrt/package/base-files/default/etc/init.d/S10boot b/openwrt/package/base-files/default/etc/init.d/S10boot
new file mode 100755 (executable)
index 0000000..d45f8e8
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/sh
+echo "S" > /proc/jffs2_bbc
+
+mkdir -p /var/run
+mkdir -p /var/log
+touch /var/log/wtmp
+touch /var/log/lastlog
+
+[ -x /usr/sbin/nvram ] && {
+  [ "$(nvram get il0macaddr)" = "00:90:4c:5f:00:2a" ] && {
+    # if default wifi mac, set two higher than the lan mac
+    nvram set il0macaddr=$(nvram get et0macaddr|
+    awk '{OFS=FS=":";for(x=7,y=2;--x;){$x=sprintf("%02x",(y+="0x"$x)%256);y/=256}print}')
+  }
+
+  # set up the vlan*ports variables for the asus wl-500g deluxe
+  # if they don't already exist 
+  [  "$(nvram get boardtype)" = "bcm95365r" \
+  -a "$(nvram get boardnum)" = "45" \
+  -a -z "$(nvram get vlan0ports)"
+  -a -z "$(nvram get vlan1ports)" ] && {
+       nvram set vlan0ports="1 2 3 4 5*"
+       nvram set vlan1ports="0 5"
+  }
+}
+
+sed 's/^[^#]/insmod &/' /etc/modules /etc/modules.d/* 2>&-|ash
+
+ifconfig lo 127.0.0.1 up
+ifconfig eth0 promisc
+
+HOSTNAME=$(nvram get wan_hostname)
+HOSTNAME=${HOSTNAME%%.*}
+echo ${HOSTNAME:=OpenWrt}>/proc/sys/kernel/hostname
+
+vconfig set_name_type VLAN_PLUS_VID_NO_PAD
+
+# automagically run firstboot
+[ -z "$FAILSAFE" -a -z "$(nvram get no_root_swap)" ] && {
+       { mount|grep "on / type jffs2" 1>&-; } || firstboot
+}
diff --git a/openwrt/package/base-files/default/etc/init.d/S40network b/openwrt/package/base-files/default/etc/init.d/S40network
new file mode 100755 (executable)
index 0000000..a5afe52
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+[ -e /etc/config/network] && . /etc/config/network
+case "$1" in
+  start|restart)
+    ifup lan
+    ifup wan
+    ifup wifi
+    wifi up
+
+    for route in $(nvram get static_route); do {
+      eval "set $(echo $route | sed 's/:/ /g')"
+      $DEBUG route add -net $1 netmask $2 gw $3 metric $4 dev $5
+    } done
+    ;;
+esac
diff --git a/openwrt/package/base-files/default/etc/init.d/S45firewall b/openwrt/package/base-files/default/etc/init.d/S45firewall
new file mode 100755 (executable)
index 0000000..c998601
--- /dev/null
@@ -0,0 +1,96 @@
+#!/bin/sh
+
+## Please make changes in /etc/firewall.user
+${FAILSAFE:+exit}
+
+. /etc/functions.sh
+. /etc/network.overrides
+[ -e /etc/config/network ] && . /etc/config/network
+
+WAN=$(nvram get wan_ifname)
+LAN=$(nvram get lan_ifname)
+
+## CLEAR TABLES
+for T in filter nat mangle; do
+  iptables -t $T -F
+  iptables -t $T -X
+done
+
+iptables -N input_rule
+iptables -N output_rule
+iptables -N forwarding_rule
+
+iptables -t nat -N prerouting_rule
+iptables -t nat -N postrouting_rule
+
+### INPUT
+###  (connections with the router as destination)
+
+  # base case
+  iptables -P INPUT DROP
+  iptables -A INPUT -m state --state INVALID -j DROP
+  iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
+  iptables -A INPUT -p tcp --tcp-flags SYN SYN --tcp-option \! 2 -j  DROP
+
+  #
+  # insert accept rule or to jump to new accept-check table here
+  #
+  iptables -A INPUT -j input_rule
+
+  # allow
+  iptables -A INPUT ${WAN:+-i \! $WAN} -j ACCEPT       # allow from lan/wifi interfaces 
+  iptables -A INPUT -p icmp    -j ACCEPT       # allow ICMP
+  iptables -A INPUT -p gre     -j ACCEPT       # allow GRE
+
+  # reject (what to do with anything not allowed earlier)
+  iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
+  iptables -A INPUT -j REJECT --reject-with icmp-port-unreachable
+
+### OUTPUT
+### (connections with the router as source)
+
+  # base case
+  iptables -P OUTPUT DROP
+  iptables -A OUTPUT -m state --state INVALID -j DROP
+  iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
+
+  #
+  # insert accept rule or to jump to new accept-check table here
+  #
+  iptables -A OUTPUT -j output_rule
+
+  # allow
+  iptables -A OUTPUT -j ACCEPT         #allow everything out
+
+  # reject (what to do with anything not allowed earlier)
+  iptables -A OUTPUT -p tcp -j REJECT --reject-with tcp-reset
+  iptables -A OUTPUT -j REJECT --reject-with icmp-port-unreachable
+
+### FORWARDING
+### (connections routed through the router)
+
+  # base case
+  iptables -P FORWARD DROP 
+  iptables -A FORWARD -m state --state INVALID -j DROP
+  iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
+  iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
+
+  #
+  # insert accept rule or to jump to new accept-check table here
+  #
+  iptables -A FORWARD -j forwarding_rule
+
+  # allow
+  iptables -A FORWARD -i br0 -o br0 -j ACCEPT
+  [ -z "$WAN" ] || iptables -A FORWARD -i $LAN -o $WAN -j ACCEPT
+
+  # reject (what to do with anything not allowed earlier)
+  # uses the default -P DROP
+
+### MASQ
+  iptables -t nat -A PREROUTING -j prerouting_rule
+  iptables -t nat -A POSTROUTING -j postrouting_rule
+  [ -z "$WAN" ] || iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
+
+## USER RULES
+[ -f /etc/firewall.user ] && . /etc/firewall.user
diff --git a/openwrt/package/base-files/default/etc/init.d/S50httpd b/openwrt/package/base-files/default/etc/init.d/S50httpd
new file mode 100755 (executable)
index 0000000..9cf551e
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+httpd -p 80 -h /www -r WRT54G Router
diff --git a/openwrt/package/base-files/default/etc/init.d/S50telnet b/openwrt/package/base-files/default/etc/init.d/S50telnet
new file mode 100755 (executable)
index 0000000..599c354
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+telnetd -l /bin/login
diff --git a/openwrt/package/base-files/default/etc/init.d/S99done b/openwrt/package/base-files/default/etc/init.d/S99done
new file mode 100755 (executable)
index 0000000..ce60337
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/sh
+# set leds to normal state
+echo "0x00" > /proc/sys/diag
+sysctl -p >&-
diff --git a/openwrt/package/base-files/default/etc/init.d/rcS b/openwrt/package/base-files/default/etc/init.d/rcS
new file mode 100755 (executable)
index 0000000..7065858
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+syslog_ip=$(nvram get log_ipaddr)
+ipcalc -s "$syslog_ip" || syslog_ip=""
+syslogd -C 16 ${syslog_ip:+-L -R $syslog_ip}
+klogd
+#${FAILSAFE:+telnetd -l /bin/login; ifup lan; exit}
+for i in /etc/init.d/S*; do
+  $i start 2>&1
+done | logger -s -p 6 -t '' &
diff --git a/openwrt/package/base-files/default/etc/inittab b/openwrt/package/base-files/default/etc/inittab
new file mode 100644 (file)
index 0000000..aab2df9
--- /dev/null
@@ -0,0 +1,3 @@
+::sysinit:/etc/init.d/rcS
+::shutdown:/sbin/halt
+tts/0::askfirst:/bin/ash --login
diff --git a/openwrt/package/base-files/default/etc/ipkg.conf b/openwrt/package/base-files/default/etc/ipkg.conf
new file mode 100644 (file)
index 0000000..3867213
--- /dev/null
@@ -0,0 +1,3 @@
+src experimental http://openwrt.org/downloads/experimental/bin/packages
+dest root /
+dest ram /tmp
diff --git a/openwrt/package/base-files/default/etc/passwd b/openwrt/package/base-files/default/etc/passwd
new file mode 100644 (file)
index 0000000..3b660a0
--- /dev/null
@@ -0,0 +1,2 @@
+root:!:0:0:root:/tmp:/bin/ash
+nobody:*:65534:65534:nobody:/var:/bin/false
diff --git a/openwrt/package/base-files/default/etc/preinit b/openwrt/package/base-files/default/etc/preinit
new file mode 100755 (executable)
index 0000000..b23f883
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/sh
+export PATH=/bin:/sbin:/usr/bin:/usr/sbin
+mount none /proc -t proc
+insmod diag
+echo 0x01 > /proc/sys/diag
+sleep 1
+if [ $(cat /proc/sys/reset) = 1 -o "$(nvram get failsafe)" = 1 ]; then
+       export FAILSAFE=true
+       [ "$(nvram get boot_wait)" != "on" ] && {
+               nvram set boot_wait=on
+               nvram commit
+       }
+       while :; do { echo $(((X=(X+1)%8)%2)) > /proc/sys/diag; sleep $((X==0)); } done &
+fi
+
+mount_root ${FAILSAFE:+failsafe}
+
+exec /sbin/init
diff --git a/openwrt/package/base-files/default/etc/profile b/openwrt/package/base-files/default/etc/profile
new file mode 100644 (file)
index 0000000..1d98ae3
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+[ -f /etc/banner ] && cat /etc/banner
+
+export PATH=/bin:/sbin:/usr/bin:/usr/sbin
+export PS1='\u@\h:\w\$ '
+
+[ -x /usr/bin/less ] || alias less=more
+alias vim=vi
+
+arp() { cat /proc/net/arp; }
+ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; }
diff --git a/openwrt/package/base-files/default/etc/protocols b/openwrt/package/base-files/default/etc/protocols
new file mode 100644 (file)
index 0000000..53fecb6
--- /dev/null
@@ -0,0 +1,56 @@
+# Internet (IP) protocols
+#
+# Updated from http://www.iana.org/assignments/protocol-numbers and other
+# sources.
+# New protocols will be added on request if they have been officially
+# assigned by IANA and are not historical.
+# If you need a huge list of used numbers please install the nmap package.
+
+ip     0       IP              # internet protocol, pseudo protocol number
+#hopopt        0       HOPOPT          # IPv6 Hop-by-Hop Option [RFC1883]
+icmp   1       ICMP            # internet control message protocol
+igmp   2       IGMP            # Internet Group Management
+ggp    3       GGP             # gateway-gateway protocol
+ipencap        4       IP-ENCAP        # IP encapsulated in IP (officially ``IP'')
+st     5       ST              # ST datagram mode
+tcp    6       TCP             # transmission control protocol
+egp    8       EGP             # exterior gateway protocol
+igp    9       IGP             # any private interior gateway (Cisco)
+pup    12      PUP             # PARC universal packet protocol
+udp    17      UDP             # user datagram protocol
+hmp    20      HMP             # host monitoring protocol
+xns-idp        22      XNS-IDP         # Xerox NS IDP
+rdp    27      RDP             # "reliable datagram" protocol
+iso-tp4        29      ISO-TP4         # ISO Transport Protocol class 4 [RFC905]
+xtp    36      XTP             # Xpress Transfer Protocol
+ddp    37      DDP             # Datagram Delivery Protocol
+idpr-cmtp 38   IDPR-CMTP       # IDPR Control Message Transport
+ipv6   41      IPv6            # Internet Protocol, version 6
+ipv6-route 43  IPv6-Route      # Routing Header for IPv6
+ipv6-frag 44   IPv6-Frag       # Fragment Header for IPv6
+idrp   45      IDRP            # Inter-Domain Routing Protocol
+rsvp   46      RSVP            # Reservation Protocol
+gre    47      GRE             # General Routing Encapsulation
+esp    50      IPSEC-ESP       # Encap Security Payload [RFC2046]
+ah     51      IPSEC-AH        # Authentication Header [RFC2402]
+skip   57      SKIP            # SKIP
+ipv6-icmp 58   IPv6-ICMP       # ICMP for IPv6
+ipv6-nonxt 59  IPv6-NoNxt      # No Next Header for IPv6
+ipv6-opts 60   IPv6-Opts       # Destination Options for IPv6
+rspf   73      RSPF CPHB       # Radio Shortest Path First (officially CPHB)
+vmtp   81      VMTP            # Versatile Message Transport
+eigrp  88      EIGRP           # Enhanced Interior Routing Protocol (Cisco)
+ospf   89      OSPFIGP         # Open Shortest Path First IGP
+ax.25  93      AX.25           # AX.25 frames
+ipip   94      IPIP            # IP-within-IP Encapsulation Protocol
+etherip        97      ETHERIP         # Ethernet-within-IP Encapsulation [RFC3378]
+encap  98      ENCAP           # Yet Another IP encapsulation [RFC1241]
+#      99                      # any private encryption scheme
+pim    103     PIM             # Protocol Independent Multicast
+ipcomp 108     IPCOMP          # IP Payload Compression Protocol
+vrrp   112     VRRP            # Virtual Router Redundancy Protocol
+l2tp   115     L2TP            # Layer Two Tunneling Protocol [RFC2661]
+isis   124     ISIS            # IS-IS over IPv4
+sctp   132     SCTP            # Stream Control Transmission Protocol
+fc     133     FC              # Fibre Channel
+
diff --git a/openwrt/package/base-files/default/etc/shells b/openwrt/package/base-files/default/etc/shells
new file mode 100644 (file)
index 0000000..006aa38
--- /dev/null
@@ -0,0 +1 @@
+/bin/ash
diff --git a/openwrt/package/base-files/default/etc/sysctl.conf b/openwrt/package/base-files/default/etc/sysctl.conf
new file mode 100644 (file)
index 0000000..2050b0c
--- /dev/null
@@ -0,0 +1,7 @@
+kernel.panic=3
+net.ipv4.ip_forward=1
+net.ipv4.icmp_echo_ignore_broadcasts=1
+net.ipv4.icmp_ignore_bogus_error_responses=1
+net.ipv4.tcp_fin_timeout=30
+net.ipv4.tcp_keepalive_time=120
+net.ipv4.tcp_timestamps=0
diff --git a/openwrt/package/base-files/default/rom/note b/openwrt/package/base-files/default/rom/note
new file mode 100644 (file)
index 0000000..1746eb0
--- /dev/null
@@ -0,0 +1,3 @@
+SQUASHFS USERS:
+After firstboot has been run, / will be jffs2 and /rom will be squashfs
+(* except when in failsafe)
diff --git a/openwrt/package/base-files/default/sbin/backup b/openwrt/package/base-files/default/sbin/backup
new file mode 100755 (executable)
index 0000000..33bad53
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/sh
+for param in $*; do
+       case "$param" in
+               *)
+                       OUTPUT_FILE="$param"
+                       ;;
+       esac
+done
+
+if [ "$OUTPUT_FILE" = "-" ]; then
+       echo "Writing backup to stdout.." >&2
+elif [ "$OUTPUT_FILE" = "" ]; then
+       echo "No output file."
+       exit 1
+else
+       echo "Writing backup to $OUTPUT_FILE" >&2
+       exec > "$OUTPUT_FILE"
+fi
+
+echo __FILELIST__
+find /etc -type f > /tmp/.wlbackup_files
+cat /tmp/.wlbackup_files
+
+echo __IPKG__
+cat /etc/ipkg.conf
+
+echo __PACKAGES__
+grep '^Package:' /usr/lib/ipkg/status | cut -d' ' -f2
+
+echo __FILES__
+tar -T /tmp/.wlbackup_files -cz 2>/dev/null
+rm -f /tmp/.wlbackup_files
diff --git a/openwrt/package/base-files/default/sbin/halt b/openwrt/package/base-files/default/sbin/halt
new file mode 100755 (executable)
index 0000000..39eed26
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+/usr/bin/killall5 -9
+#umount -ar
diff --git a/openwrt/package/base-files/default/sbin/hotplug b/openwrt/package/base-files/default/sbin/hotplug
new file mode 100755 (executable)
index 0000000..74134e8
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/ash
+# $Id$
+[ "${INTERFACE%%[0-9]*}" = "wds" ] && { 
+       ifconfig $INTERFACE 0.0.0.0 up
+       /usr/sbin/brctl addif br0 $INTERFACE
+}
diff --git a/openwrt/package/base-files/default/sbin/ifdown b/openwrt/package/base-files/default/sbin/ifdown
new file mode 100755 (executable)
index 0000000..950ee12
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/ash
+[ $# = 0 ] && { echo "  $0 <group>"; exit; }
+. /etc/functions.sh
+. /etc/network.overrides
+[ -e /etc/config/network ] && . /etc/config/network
+type=$1
+debug "### ifdown $type ###"
+if=$(nvram get ${type}_ifname)
+if_valid $if || exit 
+$DEBUG ifconfig $if down
+kill $(cat /var/run/${if}.pid 2>&-) 2>&-
diff --git a/openwrt/package/base-files/default/sbin/ifup b/openwrt/package/base-files/default/sbin/ifup
new file mode 100755 (executable)
index 0000000..6aa9987
--- /dev/null
@@ -0,0 +1,64 @@
+#!/bin/ash
+[ $# = 0 ] && { echo "  $0 <group>"; exit; }
+. /etc/functions.sh
+. /etc/network.overrides
+[ -e /etc/config/network ] && . /etc/config/network
+
+type=$1
+debug "### ifup $type ###"
+
+if_proto=$(nvram get ${type}_proto)
+if=$(nvram get ${type}_ifname)
+[ "${if%%[0-9]}" = "ppp" ] && if=$(nvram get ${if_proto}_ifname)
+
+if_valid $if || exit 
+mac=$(nvram get ${type}_hwaddr)
+$DEBUG ifconfig $if down 2>&-
+
+pidfile=/var/run/${if}.pid
+[ -f $pidfile ] && $DEBUG kill $(cat $pidfile)
+
+if [ "${if%%[0-9]}" = "br" ]; then
+       stp=$(nvram get ${type}_stp)
+       $DEBUG brctl delbr $if 2>&-
+       $DEBUG brctl addbr $if
+       $DEBUG brctl setfd $if 0
+       $DEBUG brctl stp $if ${stp:-0}
+
+       for sif in $(nvram get ${type}_ifnames); do
+               if_valid $sif || continue
+               ${mac:+$DEBUG ifconfig $sif down hw ether $mac}
+               $DEBUG ifconfig $sif 0.0.0.0 up
+               $DEBUG brctl addif $if $sif
+       done
+else
+       ${mac:+$DEBUG ifconfig $if down hw ether $mac}
+fi
+
+case "$if_proto" in
+       static)
+               ip=$(nvram get ${type}_ipaddr)
+               netmask=$(nvram get ${type}_netmask)
+               gateway=$(nvram get ${type}_gateway)
+
+               $DEBUG ifconfig $if $ip ${netmask:+netmask $netmask} broadcast + up
+               ${gateway:+$DEBUG route add default gw $gateway}
+
+               [ -f /etc/resolv.conf ] && return
+
+               debug "# --- creating /etc/resolv.conf ---"
+               for dns in $(nvram get ${type}_dns); do
+                       echo "nameserver $dns" >> /etc/resolv.conf
+               done
+       ;;
+       dhcp)
+               ip=$(nvram get ${type}_ipaddr)
+               ${DEBUG:-eval} "udhcpc -R -i $if ${ip:+-r $ip} -b -p $pidfile &" 
+       ;;
+       none|"")
+       ;;
+       *)
+               [ -x "/sbin/ifup.${if_proto}" ] && { $DEBUG /sbin/ifup.${if_proto} $*; exit; }
+               echo "### ifup $type: ignored ${type}_proto=\"$if_proto\" (not supported)"
+       ;;
+esac
diff --git a/openwrt/package/base-files/default/sbin/mount_root b/openwrt/package/base-files/default/sbin/mount_root
new file mode 100755 (executable)
index 0000000..29c5126
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/sh
+if [ "$1" != "failsafe" ]; then 
+       mount | grep jffs2 >&-
+       if [ $? = 0 ] ; then
+               if [ $(cat /proc/mtd | wc -l) = 6 ]; then
+                       echo 5 > /proc/sys/diag
+                       mtd unlock linux
+                       mtd erase OpenWrt
+                       jffs2root --move
+               else
+                       mtd unlock rootfs
+                       mount -o remount,rw /dev/root /
+               fi
+       else
+               if [ -z "$(nvram get no_root_swap)" ]; then
+                       mtd unlock OpenWrt
+                       mount -t jffs2 /dev/mtdblock/4 /jffs
+                       pivot_root /jffs /jffs/rom
+                       mount none /proc -t proc
+                       mount none /dev -t devfs
+                       umount /rom/proc rom/dev >&-
+               fi
+       fi
+fi
+mount none /tmp -t tmpfs -o nosuid,nodev,mode=1777,size=50%
+mkdir -p /dev/pts
+mount none /dev/pts -t devpts
diff --git a/openwrt/package/base-files/default/sbin/restore b/openwrt/package/base-files/default/sbin/restore
new file mode 100755 (executable)
index 0000000..6b5876c
--- /dev/null
@@ -0,0 +1,71 @@
+#!/bin/sh
+for param in $*; do
+       case "$param" in
+               *)
+                       INPUT_FILE="$param"
+       esac
+done
+
+if [ "$INPUT_FILE" = "-" ]; then
+       echo "Reading backup from stdin..." >&2
+elif [ "$INPUT_FILE" = "" ]; then
+       echo "No input file."
+else
+       echo "Reading backup from $INPUT_FILE" >&2
+       exec < "$INPUT_FILE"
+fi
+
+process_line () {
+       case "$SECTION" in
+               ipkg)
+                       echo "$line" >> /etc/ipkg.conf
+                       ;;
+               nvram)
+                       echo nvram set "$line"
+                       ;;
+               package)
+                       if grep "^Package: $line" /usr/lib/ipkg/status 2>&1 > /dev/null; then
+                               echo Package "$line" already installed.
+                       else
+                               ipkg install "$line"
+                       fi
+                       ;;
+               file)
+                       rm -f "$line"
+                       ;;
+       esac
+}
+
+while true; do
+       read line
+       case "$line" in
+               __IPKG__)
+                       SECTION=ipkg
+                       echo "Restoring /etc/ipkg.conf"
+                       rm -f /etc/ipkg.conf
+                       ;;
+               __NVRAM__)
+                       SECTION=nvram
+                       echo "Restoring nvram"
+                       ;;
+               __PACKAGES__)
+                       SECTION=package
+                       echo "Restoring packages"
+                       ipkg update
+                       ;;
+               __FILELIST__)
+                       SECTION=file
+                       echo "Deleting old files"
+                       ;;
+               __FILES__)
+                       echo "Restoring /etc"
+                       tar -C / -xvz
+                       echo "Restore complete."
+                       exit 0
+                       ;;
+               *)
+                       process_line;
+                       ;;
+       esac
+done
+
diff --git a/openwrt/package/base-files/default/usr/share/udhcpc/default.script b/openwrt/package/base-files/default/usr/share/udhcpc/default.script
new file mode 100755 (executable)
index 0000000..6c64aa3
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/sh
+# udhcpc script edited by Tim Riker <Tim@Rikers.org>
+# (slightly modified for openwrt)
+
+[ -z "$1" ] && echo "Error: should be run by udhcpc" && exit 1
+
+RESOLV_CONF="/tmp/resolv.conf"
+
+case "$1" in
+        deconfig)
+                ifconfig $interface 0.0.0.0
+                ;;
+
+        renew|bound)
+                ifconfig $interface $ip \
+                netmask ${subnet:-255.255.255.0} \
+                broadcast ${broadcast:-+}
+
+                if [ -n "$router" ] ; then
+                        echo "deleting routers"
+                        while route del default gw 0.0.0.0 dev $interface ; do
+                                :
+                        done
+
+                        for i in $router ; do
+                                route add default gw $i dev $interface
+                        done
+                fi
+
+                echo -n > $RESOLV_CONF
+                ${domain:+echo search $domain} >> $RESOLV_CONF
+                for i in $dns ; do
+                        echo adding dns $i
+                        echo nameserver $i >> $RESOLV_CONF
+                done
+                ;;
+esac
+exit 0
diff --git a/openwrt/package/base-files/default/www/index.html b/openwrt/package/base-files/default/www/index.html
new file mode 100644 (file)
index 0000000..575d242
--- /dev/null
@@ -0,0 +1,7 @@
+<HTML>
+<HEAD><TITLE>OpenWrt</TITLE></HEAD>
+<BODY>
+No webpages currently available
+<br>- perhaps you need to install a package?
+</BODY>
+</HTML>
diff --git a/openwrt/package/base-files/ipkg/base-files.control b/openwrt/package/base-files/ipkg/base-files.control
new file mode 100644 (file)
index 0000000..acaa6c5
--- /dev/null
@@ -0,0 +1,6 @@
+Package: base-files
+Priority: optional
+Section: net
+Maintainer: Felix Fietkau <nbd@vd-s.ath.cx>
+Source: buildroot internal
+Description: OpenWrt filesystem structure and scripts
diff --git a/openwrt/package/base-files/ipkg/libgcc.control b/openwrt/package/base-files/ipkg/libgcc.control
new file mode 100644 (file)
index 0000000..141d88c
--- /dev/null
@@ -0,0 +1,7 @@
+Package: libgcc
+Priority: optional
+Section: net
+Maintainer: Felix Fietkau <nbd@vd-s.ath.cx>
+Source: buildroot internal
+Depends: base-files
+Description: GCC support library
diff --git a/openwrt/package/base-files/ipkg/uclibc.control b/openwrt/package/base-files/ipkg/uclibc.control
new file mode 100644 (file)
index 0000000..360a3b5
--- /dev/null
@@ -0,0 +1,7 @@
+Package: uclibc
+Priority: optional
+Section: net
+Maintainer: Felix Fietkau <nbd@vd-s.ath.cx>
+Source: buildroot internal
+Depends: base-files, libgcc
+Description: Standard C library for embedded Linux systems
diff --git a/openwrt/package/kismet/patches/130-wrt54g_source.patch b/openwrt/package/kismet/patches/130-wrt54g_source.patch
new file mode 100644 (file)
index 0000000..9192224
--- /dev/null
@@ -0,0 +1,109 @@
+diff -urN kismet.old/kis_packsources.cc kismet.dev/kis_packsources.cc
+--- kismet.old/kis_packsources.cc      2005-07-25 12:18:47.230369000 +0200
++++ kismet.dev/kis_packsources.cc      2005-07-25 12:54:44.654390736 +0200
+@@ -165,7 +165,7 @@
+                                        chancontrol_wlanng_avs, 1);
+     sourcetracker->RegisterPacketsource("wrt54g", 1, "na", 0,
+                                         pcapsource_wrt54g_registrant,
+-                                        monitor_wrt54g, NULL, NULL, 0);
++                                        monitor_wrt54g, NULL, chancontrol_wext, 1);
+ #else
+     REG_EMPTY_CARD(sourcetracker, "wlanng");
+     REG_EMPTY_CARD(sourcetracker, "wlanng_avs");
+diff -urN kismet.old/packetsourcetracker.cc kismet.dev/packetsourcetracker.cc
+--- kismet.old/packetsourcetracker.cc  2005-04-03 07:33:42.000000000 +0200
++++ kismet.dev/packetsourcetracker.cc  2005-07-25 13:29:45.698983408 +0200
+@@ -978,6 +978,7 @@
+                     (meta_packsources[chanpak.meta_num]->device.c_str(), 
+                      chanpak.channel, errstr, 
+                      (void *) (meta_packsources[chanpak.meta_num]->capsource)) < 0) {
++#if 0
+                                       meta_packsources[chanpak.meta_num]->consec_errors++;
+@@ -999,6 +1000,7 @@
+                                                                                                                                        CHANFLAG_FATAL));
+                                               continue;
+                                       }
++#endif
+                 } else {
+                                       // Otherwise reset the error count
+                                       meta_packsources[chanpak.meta_num]->consec_errors = 0;
+diff -urN kismet.old/pcapsource.cc kismet.dev/pcapsource.cc
+--- kismet.old/pcapsource.cc   2005-07-25 12:18:47.234368000 +0200
++++ kismet.dev/pcapsource.cc   2005-07-25 12:51:19.426590104 +0200
+@@ -140,6 +140,48 @@
+     return 1;
+ }
++
++// Open a source
++int PcapSourceWrt54g::OpenSource() {
++    channel = 0;
++
++    errstr[0] = '\0';
++
++    char *unconst = strdup("prism0");
++
++    pd = pcap_open_live(unconst, MAX_PACKET_LEN, 1, 1000, errstr);
++
++    free(unconst);
++
++    if (strlen(errstr) > 0)
++        return -1; // Error is already in errstr
++
++    paused = 0;
++
++    errstr[0] = '\0';
++
++    num_packets = 0;
++
++    if (DatalinkType() < 0)
++        return -1;
++
++#ifdef HAVE_PCAP_NONBLOCK
++    pcap_setnonblock(pd, 1, errstr);
++#elif !defined(SYS_OPENBSD)
++    // do something clever  (Thanks to Guy Harris for suggesting this).
++    int save_mode = fcntl(pcap_get_selectable_fd(pd), F_GETFL, 0);
++    if (fcntl(pcap_get_selectable_fd(pd), F_SETFL, save_mode | O_NONBLOCK) < 0) {
++        snprintf(errstr, 1024, "fcntl failed, errno %d (%s)",
++                 errno, strerror(errno));
++    }
++#endif
++
++    if (strlen(errstr) > 0)
++        return -1; // Ditto
++    
++    return 1;
++}
++
+ // Datalink, override as appropriate
+ carrier_type PcapSource::IEEE80211Carrier() {
+     int ch = FetchChannel();
+@@ -1609,7 +1651,7 @@
+ int monitor_wrt54g(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext) {
+     char cmdline[2048];
+-    snprintf(cmdline, 2048, "/usr/sbin/wl monitor 1");
++    snprintf(cmdline, 2048, "/usr/sbin/iwpriv %s set_monitor 1", in_dev);
+     if (RunSysCmd(cmdline) < 0) {
+         snprintf(in_err, 1024, "Unable to execute '%s'", cmdline);
+         return -1;
+diff -urN kismet.old/pcapsource.h kismet.dev/pcapsource.h
+--- kismet.old/pcapsource.h    2005-04-03 07:33:42.000000000 +0200
++++ kismet.dev/pcapsource.h    2005-07-25 12:49:22.089428064 +0200
+@@ -250,11 +250,13 @@
+ // Override packet fetching logic on this one to discard jumbo corrupt packets
+ // that it likes to generate
++// Override OpenSource() to use prism0 as pcap device
+ class PcapSourceWrt54g : public PcapSource {
+ public:
+     PcapSourceWrt54g(string in_name, string in_dev) : PcapSource(in_name, in_dev) { 
+         fcsbytes = 4;
+     }
++    int OpenSource();
+     int FetchPacket(kis_packet *packet, uint8_t *data, uint8_t *moddata);
+ protected:
+     carrier_type IEEE80211Carrier();
diff --git a/openwrt/package/mtd/Config.in b/openwrt/package/mtd/Config.in
new file mode 100644 (file)
index 0000000..df0b9bf
--- /dev/null
@@ -0,0 +1,6 @@
+config BR2_PACKAGE_MTD
+       tristate "mtd - update utility for trx firmware images"
+       default y
+       help
+        update utility for trx firmware images.
+
diff --git a/openwrt/package/mtd/Makefile b/openwrt/package/mtd/Makefile
new file mode 100644 (file)
index 0000000..bfbb301
--- /dev/null
@@ -0,0 +1,26 @@
+# $Id$
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME := mtd
+PKG_RELEASE := 1
+
+PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
+
+include $(TOPDIR)/package/rules.mk
+
+$(eval $(call PKG_template,MTD,$(PKG_NAME),$(PKG_RELEASE),$(ARCH)))
+
+$(PKG_BUILD_DIR)/.prepared:
+       mkdir -p $@
+       touch $@
+
+$(PKG_BUILD_DIR)/.built:
+       $(TARGET_CC) $(TARGET_CFLAGS) -o $(PKG_BUILD_DIR)/mtd mtd.c
+       touch $@
+
+$(IPKG_MTD): 
+       install -d -m0755 $(IDIR_MTD)/sbin
+       install -m0755 $(PKG_BUILD_DIR)/mtd $(IDIR_MTD)/sbin
+       $(RSTRIP) $(IDIR_MTD)/sbin/*
+       $(IPKG_BUILD) $(IDIR_MTD) $(PACKAGE_DIR)
diff --git a/openwrt/package/mtd/ipkg/mtd.control b/openwrt/package/mtd/ipkg/mtd.control
new file mode 100644 (file)
index 0000000..102bd70
--- /dev/null
@@ -0,0 +1,6 @@
+Package: mtd
+Priority: optional
+Section: sys
+Maintainer: Felix Fietkau <nbd@vd-s.ath.cx>
+Source: buildroot internal
+Description: Tool for modifying the flash chip
diff --git a/openwrt/package/mtd/mtd.c b/openwrt/package/mtd/mtd.c
new file mode 100644 (file)
index 0000000..74949fd
--- /dev/null
@@ -0,0 +1,370 @@
+/*
+ * mtd - simple memory technology device manipulation tool
+ *
+ * Copyright (C) 2005 Waldemar Brodkorb <wbx@dass-it.de>,
+ *                   Felix Fietkau <nbd@vd-s.ath.cx>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * $Id$
+ *
+ * code is based on linux-mtd example code
+ */
+
+#include <limits.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <error.h>
+#include <time.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <sys/reboot.h>
+#include <string.h>
+
+#include <linux/mtd/mtd.h>
+
+#define TRX_MAGIC       0x30524448      /* "HDR0" */
+#define BUFSIZE (10 * 1024)
+#define MAX_ARGS 8
+
+struct trx_header {
+       uint32_t magic;         /* "HDR0" */
+       uint32_t len;           /* Length of file including header */
+       uint32_t crc32;         /* 32-bit CRC from flag_version to end of file */
+       uint32_t flag_version;  /* 0:15 flags, 16:31 version */
+       uint32_t offsets[3];    /* Offsets of partitions from start of header */
+};
+
+int
+trx_check(const char *trxfile, const char *mtd)
+{
+       struct mtd_info_user mtdInfo;
+       int trxfd, fd;
+       size_t count;
+       struct trx_header trx;
+       struct stat trxstat;
+
+       trxfd = open(trxfile,O_RDONLY); 
+       if(trxfd < 0) {
+               fprintf(stderr, "Could not open trx image: %s\n", trxfile);
+               exit(1);
+       }
+
+       if (fstat(trxfd,&trxstat) < 0) {
+               fprintf(stderr, "Could not get trx image file status: %s\n", trxfile);
+               close(trxfd);
+               exit(1);
+       }
+
+       count = read(trxfd, &trx, sizeof(struct trx_header));
+       if (count < sizeof(struct trx_header)) {
+               fprintf(stderr, "Could not trx header, file too small (%ld bytes)\n", count);
+               close(trxfd);
+               exit(1);
+       }
+
+       if (trx.magic != TRX_MAGIC || trx.len < sizeof(struct trx_header)) {
+               fprintf(stderr, "Bad trx header\n");
+               fprintf(stderr, "If this is a firmware in bin format, like some of the\n"
+                               "original firmware files are, use following command to convert to trx:\n"
+                               "dd if=firmware.bin of=firmware.trx bs=32 skip=1\n");
+               close(trxfd);
+               exit(1);
+       }
+       
+       lseek(trxfd, 0, SEEK_SET);
+
+       /* check if image fits to mtd device */
+
+       fd = mtd_open(mtd, O_RDWR);
+       if(fd < 0) {
+               fprintf(stderr, "Could not open mtd device: %s\n", mtd);
+               exit(1);
+       }
+
+       if(ioctl(fd, MEMGETINFO, &mtdInfo)) {
+               fprintf(stderr, "Could not get MTD device info from %s\n", mtd);
+               close(fd);
+               exit(1);
+       }
+               
+       if(mtdInfo.size < trxstat.st_size) {
+               fprintf(stderr, "Image too big for partition: %s\n", mtd);
+               close(trxfd);
+               close(fd);
+               exit(1);
+       }       
+       
+       printf("Writing %s to %s ...\n", trxfile, mtd);
+
+       close(fd);
+
+       return(trxfd);
+}
+
+int
+mtd_unlock(const char *mtd)
+{
+       int fd;
+       struct mtd_info_user mtdInfo;
+       struct erase_info_user mtdLockInfo;
+
+       fd = mtd_open(mtd, O_RDWR);
+       if(fd < 0) {
+               fprintf(stderr, "Could not open mtd device: %s\n", mtd);
+               exit(1);
+       }
+
+       if(ioctl(fd, MEMGETINFO, &mtdInfo)) {
+               fprintf(stderr, "Could not get MTD device info from %s\n", mtd);
+               close(fd);
+               exit(1);
+       }
+
+       printf("Unlocking %s ...\n", mtd);
+       mtdLockInfo.start = 0;
+       mtdLockInfo.length = mtdInfo.size;
+       if(ioctl(fd, MEMUNLOCK, &mtdLockInfo)) {
+               close(fd);
+               return 0;
+       }
+               
+       close(fd);
+       return 0;
+}
+
+int
+mtd_open(const char *mtd, int flags)
+{
+       FILE *fp;
+       char dev[PATH_MAX];
+       int i;
+
+       if ((fp = fopen("/proc/mtd", "r"))) {
+               while (fgets(dev, sizeof(dev), fp)) {
+                       if (sscanf(dev, "mtd%d:", &i) && strstr(dev, mtd)) {
+                               snprintf(dev, sizeof(dev), "/dev/mtd/%d", i);
+                               fclose(fp);
+                               return open(dev, flags);
+                       }
+               }
+               fclose(fp);
+       }
+
+       return open(mtd, flags);
+}
+
+int
+mtd_erase(const char *mtd)
+{
+       int fd;
+       struct mtd_info_user mtdInfo;
+       struct erase_info_user mtdEraseInfo;
+
+       fd = mtd_open(mtd, O_RDWR);
+       if(fd < 0) {
+               fprintf(stderr, "Could not open mtd device: %s\n", mtd);
+               exit(1);
+       }
+
+       if(ioctl(fd, MEMGETINFO, &mtdInfo)) {
+               fprintf(stderr, "Could not get MTD device info from %s\n", mtd);
+               close(fd);
+               exit(1);
+       }
+
+       printf("Erasing %s ...\n", mtd);
+       mtdEraseInfo.length = mtdInfo.erasesize;
+
+       for (mtdEraseInfo.start = 0;
+                mtdEraseInfo.start < mtdInfo.size;
+                mtdEraseInfo.start += mtdInfo.erasesize) {
+               
+               ioctl(fd, MEMUNLOCK, &mtdEraseInfo);
+               if(ioctl(fd, MEMERASE, &mtdEraseInfo)) {
+                       fprintf(stderr, "Could not erase MTD device: %s\n", mtd);
+                       close(fd);
+                       exit(1);
+               }
+       }               
+
+       close(fd);
+       return 0;
+
+}
+
+int
+mtd_write(int trxfd, const char *mtd)
+{
+       int fd,i;
+       size_t result,size,written;
+       struct mtd_info_user mtdInfo;
+       struct erase_info_user mtdEraseInfo;
+       unsigned char src[BUFSIZE],dest[BUFSIZE];
+       struct stat trxstat;
+
+       if (fstat(trxfd,&trxstat) < 0) {
+               fprintf(stderr, "Could not get trx image file status\n");
+               close(trxfd);
+               exit(1);
+       }
+
+       fd = mtd_open(mtd, O_RDWR);
+       if(fd < 0) {
+               fprintf(stderr, "Could not open mtd device: %s\n", mtd);
+               exit(1);
+       }
+
+       if(ioctl(fd, MEMGETINFO, &mtdInfo)) {
+               fprintf(stderr, "Could not get MTD device info from %s\n", mtd);
+               close(fd);
+               exit(1);
+       }
+               
+       mtdEraseInfo.start = 0;
+       mtdEraseInfo.length = trxstat.st_size & ~(mtdInfo.erasesize -1);
+       if(trxstat.st_size % mtdInfo.erasesize) mtdEraseInfo.length += mtdInfo.erasesize;
+
+       /* erase the chunk */
+       if (ioctl (fd,MEMERASE,&mtdEraseInfo) < 0) {
+               fprintf(stderr, "Erasing mtd failed: %s\n", mtd);
+               exit(1);
+       }
+       
+       size = trxstat.st_size;
+       i = BUFSIZE;
+       written = 0;
+
+       while (size) {
+               if (size < BUFSIZE) i = size;
+               read(trxfd,src,i);
+               result = write(fd,src,i);
+               if (i != result) {
+                       if (result < 0) {
+                               fprintf(stderr,"Error while writing image");
+                               exit(1);
+                       }
+                       fprintf(stderr,"Error writing image");
+                       exit(1);
+               }
+               written += i;
+               size -= i;
+       }
+       
+       return 0;
+}
+
+void usage(void)
+{
+       printf("Usage: mtd [<options> ...] <command> [<arguments> ...] <device>\n\n"
+       "The device is in the format of mtdX (eg: mtd4) or its label.\n"
+       "mtd recognizes these commands:\n"
+       "       unlock                  unlock the device\n"
+       "       erase                   erase all data on device\n"
+       "       write <imagefile>       write imagefile to device\n"
+       "Following options are available:\n"
+       "       -r                      reboot after successful command\n"
+       "       -e <device>             erase <device> before executing the command\n\n"
+       "Example: To write linux.trx to mtd4 labeled as linux and reboot afterwards\n"
+       "         mtd -r write linux.trx linux\n\n");
+       exit(1);
+}
+
+int main (int argc, char **argv)
+{
+       int ch, i, boot, unlock, trxfd;
+       char *erase[MAX_ARGS], *device;
+       enum {
+               CMD_ERASE,
+               CMD_WRITE,
+               CMD_UNLOCK
+       } cmd;
+       
+       erase[0] = NULL;
+       boot = 0;
+
+       while ((ch = getopt(argc, argv, "re:")) != -1)
+               switch (ch) {
+                       case 'r':
+                               boot = 1;
+                               break;
+                       case 'e':
+                               i = 0;
+                               while ((erase[i] != NULL) && ((i + 1) < MAX_ARGS))
+                                       i++;
+                                       
+                               erase[i++] = optarg;
+                               erase[i] = NULL;
+                               break;
+                       
+                       case '?':
+                       default:
+                               usage();
+               }
+       argc -= optind;
+       argv += optind;
+       
+       if (argc < 2)
+               usage();
+
+       if ((strcmp(argv[0], "unlock") == 0) && (argc == 2)) {
+               cmd = CMD_UNLOCK;
+               device = argv[1];
+       } else if ((strcmp(argv[0], "erase") == 0) && (argc == 2)) {
+               cmd = CMD_ERASE;
+               device = argv[1];
+       } else if ((strcmp(argv[0], "write") == 0) && (argc == 3)) {
+               cmd = CMD_WRITE;
+               device = argv[2];
+               /* check trx file before erasing or writing anything */
+               trxfd = trx_check(argv[1], device);
+       } else {
+               usage();
+       }
+
+       sync();
+
+       i = 0;
+       while (erase[i] != NULL) {
+               mtd_unlock(erase[i]);
+               mtd_erase(erase[i]);
+               i++;
+       }
+       
+       mtd_unlock(device);
+
+       switch (cmd) {
+               case CMD_UNLOCK:
+                       break;
+               case CMD_ERASE:
+                       mtd_erase(device);
+                       break;
+               case CMD_WRITE:
+                       mtd_write(trxfd, device);
+                       break;
+       }
+
+       if (boot)
+               kill(1, 15); // send SIGTERM to init for reboot
+
+       return 0;
+}
diff --git a/openwrt/package/nvram/Makefile b/openwrt/package/nvram/Makefile
new file mode 100644 (file)
index 0000000..9885f99
--- /dev/null
@@ -0,0 +1,46 @@
+# $Id$
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=nvram
+PKG_RELEASE:=1
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
+
+include $(TOPDIR)/package/rules.mk
+
+# does not depend on menuconfig
+ifneq ($(BOARD),brcm)
+BR2_PACKAGE_NVRAM:=m
+else
+BR2_PACKAGE_NVRAM:=y
+endif
+
+$(eval $(call PKG_template,NVRAM,nvram,$(PKG_RELEASE),$(ARCH)))
+
+$(PKG_BUILD_DIR)/.prepared:
+       mkdir -p $(PKG_BUILD_DIR)
+       cp -a ./src/* $(PKG_BUILD_DIR)
+       touch $@
+
+$(PKG_BUILD_DIR)/.built:
+       $(MAKE) -C $(PKG_BUILD_DIR) \
+               $(TARGET_CONFIGURE_OPTS) \
+               CFLAGS="$(TARGET_CFLAGS) -I $(STAGING_DIR)/usr/include"
+       touch $@
+
+$(IPKG_NVRAM):
+       mkdir -p $(IDIR_NVRAM)/usr/lib
+       cp $(PKG_BUILD_DIR)/*.so $(IDIR_NVRAM)/usr/lib
+       mkdir -p $(IDIR_NVRAM)/usr/sbin
+       cp $(PKG_BUILD_DIR)/nvram $(IDIR_NVRAM)/usr/sbin
+       $(RSTRIP) $(IDIR_NVRAM)
+       $(IPKG_BUILD) $(IDIR_NVRAM) $(PACKAGE_DIR)
+
+
+compile: install-dev
+install-dev:
+       mkdir -p $(STAGING_DIR)/usr/lib
+       cp $(PKG_BUILD_DIR)/*.so $(STAGING_DIR)/usr/lib
+       
+
diff --git a/openwrt/package/nvram/ipkg/nvram.control b/openwrt/package/nvram/ipkg/nvram.control
new file mode 100644 (file)
index 0000000..bb25813
--- /dev/null
@@ -0,0 +1,7 @@
+Package: nvram
+Priority: optional
+Section: sys
+Maintainer: Felix Fietkau <nbd@vd-s.ath.cx>
+Source: buildroot internal
+Description: NVRAM utility and libraries for Broadcom hardware
+
diff --git a/openwrt/package/nvram/src/Makefile b/openwrt/package/nvram/src/Makefile
new file mode 100644 (file)
index 0000000..376c2b7
--- /dev/null
@@ -0,0 +1,22 @@
+# $Id$
+
+EXTRA_CFLAGS := -c -I. -I../include
+LIBSHARED_OBJS := shutils.o wl.o wl_linux.o defaults.o linux_timer.o
+LIBNVRAM_OBJS := nvram_linux.o nvram_convert.o
+
+all: libshared.so libnvram.so nvram
+
+%.o: %.c
+       $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ $^
+
+libshared.so: $(LIBSHARED_OBJS)
+       $(CC) -shared -o $@ $^
+
+libnvram.so: $(LIBNVRAM_OBJS)
+       $(CC) -shared -o $@ $^
+
+nvram: main.o
+       $(CC) -o $@ $^ -L. -lnvram
+
+clean:
+       rm -f *.o *.so nvram
diff --git a/openwrt/package/nvram/src/bcmtimer.h b/openwrt/package/nvram/src/bcmtimer.h
new file mode 100644 (file)
index 0000000..3db9e62
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ *
+ * Low resolution timer interface. Timer handlers may be called 
+ * in a deferred manner in a different task context after the 
+ * timer expires or in the task context from which the timer
+ * was created, depending on the implementation.
+ *
+ * $Id$
+ */
+#ifndef __bcmtimer_h__
+#define __bcmtimer_h__
+
+/* ANSI headers */
+#include <time.h>
+
+/* timer ID */
+typedef unsigned int bcm_timer_module_id;
+typedef unsigned int bcm_timer_id;
+
+/* timer callback */
+typedef void (*bcm_timer_cb)(bcm_timer_id id, int data);
+
+/* OS-independant interfaces, applications should call these functions only */
+int bcm_timer_module_init(int timer_entries, bcm_timer_module_id *module_id);
+int bcm_timer_module_cleanup(bcm_timer_module_id module_id);
+int bcm_timer_module_enable(bcm_timer_module_id module_id, int enable);
+int bcm_timer_create(bcm_timer_module_id module_id, bcm_timer_id *timer_id);
+int bcm_timer_delete(bcm_timer_id timer_id);
+int bcm_timer_gettime(bcm_timer_id timer_id, struct itimerspec *value);
+int bcm_timer_settime(bcm_timer_id timer_id, const struct itimerspec *value);
+int bcm_timer_connect(bcm_timer_id timer_id, bcm_timer_cb func, int data);
+int bcm_timer_cancel(bcm_timer_id timer_id);
+int bcm_timer_change_expirytime(bcm_timer_id timer_id, const struct itimerspec *timer_spec);
+
+#endif /* #ifndef __bcmtimer_h__ */
diff --git a/openwrt/package/nvram/src/defaults.c b/openwrt/package/nvram/src/defaults.c
new file mode 100644 (file)
index 0000000..119eaac
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+ * Router default NVRAM values
+ *
+ * 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 <epivers.h>
+#include <string.h>
+#include <bcmnvram.h>
+#include <typedefs.h>
+#include <wlioctl.h>
+
+#define XSTR(s) STR(s)
+#define STR(s) #s
+
+struct nvram_tuple router_defaults[] = {
+       /* OS parameters */
+       { "os_name", "", 0 },                   /* OS name string */
+       { "os_version", EPI_VERSION_STR, 0 },   /* OS revision */
+       { "os_date", __DATE__, 0 },             /* OS date */
+
+       /* Miscellaneous parameters */
+       { "timer_interval", "3600", 0 },        /* Timer interval in seconds */
+       { "ntp_server", "192.5.41.40 192.5.41.41 133.100.9.2", 0 },             /* NTP server */
+       { "time_zone", "PST8PDT", 0 },          /* Time zone (GNU TZ format) */
+       { "log_level", "0", 0 },                /* Bitmask 0:off 1:denied 2:accepted */
+       { "upnp_enable", "0", 0 },              /* Start UPnP */
+       { "ezc_enable", "1", 0 },               /* Enable EZConfig updates */
+       { "ezc_version", "1", 0 },              /* EZConfig version */
+       { "is_default", "1", 0 },               /* is it default setting: 1:yes 0:no*/
+       { "os_server", "", 0 },                 /* URL for getting upgrades */
+       { "stats_server", "", 0 },              /* URL for posting stats */
+       { "console_loglevel", "1", 0 },         /* Kernel panics only */
+
+       /* Big switches */
+       { "router_disable", "0", 0 },           /* lan_proto=static lan_stp=0 wan_proto=disabled */
+       { "fw_disable", "0", 0 },               /* Disable firewall (allow new connections from the WAN) */
+
+       { "log_ipaddr", "", 0 },                /* syslog recipient */
+       
+       /* LAN H/W parameters */
+       { "lan_ifname", "", 0 },                /* LAN interface name */
+       { "lan_ifnames", "", 0 },               /* Enslaved LAN interfaces */
+       { "lan_hwnames", "", 0 },               /* LAN driver names (e.g. et0) */
+       { "lan_hwaddr", "", 0 },                /* LAN interface MAC address */
+       
+       /* LAN TCP/IP parameters */
+       { "lan_proto", "dhcp", 0 },             /* [static|dhcp] */
+       { "lan_ipaddr", "192.168.1.1", 0 },     /* LAN IP address */
+       { "lan_netmask", "255.255.255.0", 0 },  /* LAN netmask */
+       { "lan_stp", "0", 0 },                  /* LAN spanning tree protocol */
+       { "lan_wins", "", 0 },                  /* x.x.x.x x.x.x.x ... */
+       { "lan_domain", "", 0 },                /* LAN domain name */
+       { "lan_lease", "86400", 0 },            /* LAN lease time in seconds */
+
+       /* WAN H/W parameters */
+       { "wan_ifname", "", 0 },                /* WAN interface name */
+       { "wan_ifnames", "", 0 },               /* WAN interface names */
+       { "wan_hwname", "", 0 },                /* WAN driver name (e.g. et1) */
+       { "wan_hwaddr", "", 0 },                /* WAN interface MAC address */
+       
+       /* WAN TCP/IP parameters */
+       { "wan_proto", "dhcp", 0 },             /* [static|dhcp|pppoe|disabled] */
+       { "wan_ipaddr", "0.0.0.0", 0 },         /* WAN IP address */
+       { "wan_netmask", "0.0.0.0", 0 },        /* WAN netmask */
+       { "wan_gateway", "0.0.0.0", 0 },        /* WAN gateway */
+       { "wan_dns", "", 0 },                   /* x.x.x.x x.x.x.x ... */
+       { "wan_wins", "", 0 },                  /* x.x.x.x x.x.x.x ... */
+       { "wan_hostname", "", 0 },              /* WAN hostname */
+       { "wan_domain", "", 0 },                /* WAN domain name */
+       { "wan_lease", "86400", 0 },            /* WAN lease time in seconds */
+       
+       /* PPPoE parameters */
+       { "wan_pppoe_ifname", "", 0 },          /* PPPoE enslaved interface */
+       { "wan_pppoe_username", "", 0 },        /* PPP username */
+       { "wan_pppoe_passwd", "", 0 },          /* PPP password */
+       { "wan_pppoe_idletime", "60", 0 },      /* Dial on demand max idle time (seconds) */
+       { "wan_pppoe_keepalive", "0", 0 },      /* Restore link automatically */
+       { "wan_pppoe_demand", "0", 0 },         /* Dial on demand */
+       { "wan_pppoe_mru", "1492", 0 },         /* Negotiate MRU to this value */
+       { "wan_pppoe_mtu", "1492", 0 },         /* Negotiate MTU to the smaller of this value or the peer MRU */
+       { "wan_pppoe_service", "", 0 },         /* PPPoE service name */
+       { "wan_pppoe_ac", "", 0 },              /* PPPoE access concentrator name */
+
+       /* Misc WAN parameters */
+       { "wan_desc", "", 0 },                  /* WAN connection description */
+       { "wan_route", "", 0 },                 /* Static routes (ipaddr:netmask:gateway:metric:ifname ...) */
+       { "wan_primary", "0", 0 },              /* Primary wan connection */
+
+       { "wan_unit", "0", 0 },                 /* Last configured connection */
+       
+       /* Filters */
+       { "filter_maclist", "", 0 },            /* xx:xx:xx:xx:xx:xx ... */
+       { "filter_macmode", "deny", 0 },        /* "allow" only, "deny" only, or "disabled" (allow all) */
+       { "filter_client0", "", 0 },            /* [lan_ipaddr0-lan_ipaddr1|*]:lan_port0-lan_port1,proto,enable,day_start-day_end,sec_start-sec_end,desc */
+
+       /* Port forwards */
+       { "dmz_ipaddr", "", 0 },                /* x.x.x.x (equivalent to 0-60999>dmz_ipaddr:0-60999) */
+       { "forward_port0", "", 0 },             /* wan_port0-wan_port1>lan_ipaddr:lan_port0-lan_port1[:,]proto[:,]enable[:,]desc */
+       { "autofw_port0", "", 0 },              /* out_proto:out_port,in_proto:in_port0-in_port1>to_port0-to_port1,enable,desc */
+
+       /* DHCP server parameters */
+       { "dhcp_start", "192.168.1.100", 0 },   /* First assignable DHCP address */
+       { "dhcp_end", "192.168.1.150", 0 },     /* Last assignable DHCP address */
+       { "dhcp_domain", "wan", 0 },            /* Use WAN domain name first if available (wan|lan) */
+       { "dhcp_wins", "wan", 0 },              /* Use WAN WINS first if available (wan|lan) */
+
+       /* Web server parameters */
+       { "http_username", "", 0 },             /* Username */
+       { "http_passwd", "admin", 0 },          /* Password */
+       { "http_wanport", "", 0 },              /* WAN port to listen on */
+       { "http_lanport", "80", 0 },            /* LAN port to listen on */
+
+       /* Wireless parameters */
+       { "wl_ifname", "", 0 },                 /* Interface name */
+       { "wl_hwaddr", "", 0 },                 /* MAC address */
+       { "wl_phytype", "g", 0 },               /* Current wireless band ("a" (5 GHz), "b" (2.4 GHz), or "g" (2.4 GHz)) */
+       { "wl_corerev", "", 0 },                /* Current core revision */
+       { "wl_phytypes", "", 0 },               /* List of supported wireless bands (e.g. "ga") */
+       { "wl_radioids", "", 0 },               /* List of radio IDs */
+       { "wl_ssid", "OpenWrt", 0 },            /* Service set ID (network name) */
+       { "wl_country", "", 0 },                /* Country (default obtained from driver) */
+       { "wl_radio", "1", 0 },                 /* Enable (1) or disable (0) radio */
+       { "wl_closed", "0", 0 },                /* Closed (hidden) network */
+        { "wl_ap_isolate", "0", 0 },            /* AP isolate mode */
+       { "wl_mode", "ap", 0 },                 /* AP mode (ap|sta|wds) */
+       { "wl_lazywds", "0", 0 },               /* Enable "lazy" WDS mode (0|1) */
+       { "wl_wds", "", 0 },                    /* xx:xx:xx:xx:xx:xx ... */
+       { "wl_wep", "disabled", 0 },            /* WEP data encryption (enabled|disabled) */
+       { "wl_auth", "0", 0 },                  /* Shared key authentication optional (0) or required (1) */
+       { "wl_key", "1", 0 },                   /* Current WEP key */
+       { "wl_key1", "", 0 },                   /* 5/13 char ASCII or 10/26 char hex */
+       { "wl_key2", "", 0 },                   /* 5/13 char ASCII or 10/26 char hex */
+       { "wl_key3", "", 0 },                   /* 5/13 char ASCII or 10/26 char hex */
+       { "wl_key4", "", 0 },                   /* 5/13 char ASCII or 10/26 char hex */
+       { "wl_maclist", "", 0 },                /* xx:xx:xx:xx:xx:xx ... */
+       { "wl_macmode", "disabled", 0 },        /* "allow" only, "deny" only, or "disabled" (allow all) */
+       { "wl_channel", "11", 0 },              /* Channel number */
+       { "wl_rate", "0", 0 },                  /* Rate (bps, 0 for auto) */
+       { "wl_rateset", "default", 0 },         /* "default" or "all" or "12" */
+       { "wl_frag", "2346", 0 },               /* Fragmentation threshold */
+       { "wl_rts", "2347", 0 },                /* RTS threshold */
+       { "wl_dtim", "1", 0 },                  /* DTIM period */
+       { "wl_bcn", "100", 0 },                 /* Beacon interval */
+       { "wl_plcphdr", "long", 0 },            /* 802.11b PLCP preamble type */
+       { "wl_net_mode", "mixed", 0 },          /* 54g mode */
+       { "wl_gmode", "6", 0 },                 /* 54g mode */
+       { "wl_gmode_protection", "auto", 0 },   /* 802.11g RTS/CTS protection (off|auto) */
+       { "wl_afterburner", "auto", 0 },        /* AfterBurner */
+       { "wl_frameburst", "off", 0 },          /* BRCM Frambursting mode (off|on) */
+       { "wl_antdiv", "-1", 0 },               /* Antenna Diversity (-1|0|1|3) */
+       { "wl_infra", "1", 0 },                 /* Network Type (BSS/IBSS) */
+
+       /* WPA parameters */
+       { "security_mode", "open", 0 },
+       { "wl_auth_mode", "open", 0 },          /* Network authentication mode (open|shared|radius|wpa|psk) */
+       { "wl_wpa_psk", "", 0 },                /* WPA pre-shared key */
+       { "wl_wpa_gtk_rekey", "3600", 0 },      /* GTK rotation interval */
+       { "wl_radius_ipaddr", "", 0 },          /* RADIUS server IP address */
+       { "wl_radius_key", "", 0 },             /* RADIUS shared secret */
+       { "wl_radius_port", "1812", 0 },        /* RADIUS server UDP port */
+       { "wl_crypto", "tkip", 0 },             /* WPA data encryption */
+
+
+       { "wl_unit", "0", 0 },                  /* Last configured interface */
+               
+       /* Restore defaults */
+       { "restore_defaults", "0", 0 },         /* Set to 0 to not restore defaults on boot */
+
+       { 0, 0, 0 }
+};
diff --git a/openwrt/package/nvram/src/linux_timer.c b/openwrt/package/nvram/src/linux_timer.c
new file mode 100644 (file)
index 0000000..0402e44
--- /dev/null
@@ -0,0 +1,738 @@
+/*
+ * 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.
+ *
+ * Low resolution timer interface linux specific implementation.
+ *
+ * $Id$
+ */
+
+/*
+* debug facilities
+*/
+#define TIMER_DEBUG    0
+#if TIMER_DEBUG
+#define TIMERDBG(fmt, args...) printf("%s: " fmt "\n" , __FUNCTION__ , ## args)
+#else
+#define TIMERDBG(fmt, args...)
+#endif
+
+
+/*
+ * POSIX timer support for Linux. Taken from linux_timer.c in upnp
+ */
+
+#define __USE_GNU
+
+
+#include <stdlib.h>        // for malloc, free, etc.
+#include <string.h>        // for memset, strncasecmp, etc.
+#include <assert.h>        // for assert, of course.
+#include <signal.h>        // for sigemptyset, etc.
+#include <stdio.h>         // for printf, etc.
+#include <sys/time.h>
+#include <time.h>
+
+/* define TIMER_PROFILE to enable code which guages how accurate the timer functions are.
+   For each expiring timer the code will print the expected time interval and the actual time interval.
+#define TIMER_PROFILE
+*/
+#undef TIMER_PROFILE
+
+/*
+timer_cancel( ) - cancel a timer
+timer_connect( ) - connect a user routine to the timer signal
+timer_create( ) - allocate a timer using the specified clock for a timing base (POSIX)
+timer_delete( ) - remove a previously created timer (POSIX)
+timer_gettime( ) - get the remaining time before expiration and the reload value (POSIX)
+timer_getoverrun( ) - return the timer expiration overrun (POSIX)
+timer_settime( ) - set the time until the next expiration and arm timer (POSIX)
+nanosleep( ) - suspend the current task until the time interval elapses (POSIX)
+*/
+
+#define MS_PER_SEC 1000
+#define US_PER_SEC 1000000
+#define US_PER_MS  1000
+#define UCLOCKS_PER_SEC 1000000
+
+typedef void (*event_callback_t)(timer_t, int);
+
+#ifndef TIMESPEC_TO_TIMEVAL
+# define TIMESPEC_TO_TIMEVAL(tv, ts) {                                   \
+        (tv)->tv_sec = (ts)->tv_sec;                                    \
+        (tv)->tv_usec = (ts)->tv_nsec / 1000;                           \
+}
+#endif
+
+#ifndef TIMEVAL_TO_TIMESPEC
+# define TIMEVAL_TO_TIMESPEC(tv, ts) {                                   \
+        (ts)->tv_sec = (tv)->tv_sec;                                    \
+        (ts)->tv_nsec = (tv)->tv_usec * 1000;                           \
+}
+#endif
+
+#define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y))
+
+#define timerroundup(t,g) \
+    do { \
+       if (!timerisset(t)) (t)->tv_usec=1; \
+       if ((t)->tv_sec == 0) (t)->tv_usec=ROUNDUP((t)->tv_usec, g); \
+    } while (0)
+
+typedef long uclock_t;
+
+#define TFLAG_NONE     0
+#define TFLAG_CANCELLED        (1<<0)
+#define TFLAG_DELETED  (1<<1)
+
+struct event {
+    struct timeval it_interval;
+    struct timeval it_value;
+    event_callback_t func;
+    int arg;
+    unsigned short flags;
+    struct event *next;
+#ifdef TIMER_PROFILE
+    uint expected_ms;
+    uclock_t start;
+#endif
+};
+
+void timer_cancel(timer_t timerid);
+
+static void alarm_handler(int i);
+static void check_event_queue();
+static void print_event_queue();
+static void check_timer();
+#if THIS_FINDS_USE
+static int count_queue(struct event *);
+#endif
+static int timer_change_settime(timer_t timer_id, const struct itimerspec *timer_spec);
+void block_timer();
+void unblock_timer();
+
+static struct event *event_queue = NULL;
+static struct event *event_freelist;
+static uint g_granularity;
+static int g_maxevents = 0;
+
+uclock_t uclock()
+{
+    struct timeval tv;
+
+    gettimeofday(&tv, NULL);
+    return ((tv.tv_sec * US_PER_SEC) + tv.tv_usec);
+}
+
+
+void init_event_queue(int n)
+{
+    int i;
+    struct itimerval tv;
+    
+    g_maxevents = n;
+    event_freelist = (struct event *) malloc(n * sizeof(struct event));
+    memset(event_freelist, 0, n * sizeof(struct event));
+
+    for (i = 0; i < (n-1); i++) 
+       event_freelist[i].next = &event_freelist[i+1];
+
+    event_freelist[i].next = NULL;
+
+    tv.it_interval.tv_sec = 0;
+    tv.it_interval.tv_usec = 1;
+    tv.it_value.tv_sec = 0;
+    tv.it_value.tv_usec = 0;
+    setitimer (ITIMER_REAL, &tv, 0);
+    setitimer (ITIMER_REAL, 0, &tv);
+    g_granularity = tv.it_interval.tv_usec;
+
+    signal(SIGALRM, alarm_handler);
+}
+
+
+int clock_gettime(
+    clockid_t         clock_id, /* clock ID (always CLOCK_REALTIME) */
+    struct timespec * tp        /* where to store current time */
+)
+{
+    struct timeval tv;
+    int n;
+
+
+    n = gettimeofday(&tv, NULL);
+    TIMEVAL_TO_TIMESPEC(&tv, tp);
+    
+    return n;
+}
+
+
+int timer_create(
+    clockid_t         clock_id, /* clock ID (always CLOCK_REALTIME) */
+    struct sigevent * evp,      /* user event handler */
+    timer_t *         pTimer    /* ptr to return value */
+)
+{
+    struct event *event;
+
+    if (clock_id != CLOCK_REALTIME) {
+       TIMERDBG("timer_create can only support clock id CLOCK_REALTIME");
+       exit(1);
+    }
+
+    if (evp != NULL) {
+       if (evp->sigev_notify != SIGEV_SIGNAL || evp->sigev_signo != SIGALRM) {
+           TIMERDBG("timer_create can only support signalled alarms using SIGALRM");
+           exit(1);
+       }
+    }
+
+    event = event_freelist;
+    if (event == NULL) {
+       print_event_queue();
+    }
+    assert(event != NULL);
+
+    event->flags = TFLAG_NONE;
+    
+    event_freelist = event->next;
+    event->next = NULL;
+
+    check_event_queue();
+
+    *pTimer = (timer_t) event;
+
+    return 0;
+}
+
+int timer_delete(
+    timer_t timerid /* timer ID */
+)
+{
+    struct event *event = (struct event *) timerid;
+    
+    if (event->flags & TFLAG_DELETED) {
+       TIMERDBG("Cannot delete a deleted event");
+       return 1;
+    }
+
+    timer_cancel(timerid);
+    
+    event->flags |= TFLAG_DELETED;
+
+    event->next = event_freelist;
+    event_freelist = event;
+
+    return 0;
+}
+
+int timer_connect
+(
+    timer_t     timerid, /* timer ID */
+    void (*routine)(timer_t, int), /* user routine */
+    int         arg      /* user argument */
+)
+{
+    struct event *event = (struct event *) timerid;
+
+    assert(routine != NULL);
+    event->func = routine;
+    event->arg = arg;
+    
+    return 0;
+}    
+
+/* 
+ * Please Call this function only from the call back functions of the alarm_handler.
+ * This is just a hack 
+*/
+int timer_change_settime
+(
+    timer_t                   timerid, /* timer ID */
+    const struct itimerspec * value   /* time to be set */
+)
+{
+    struct event *event = (struct event *) timerid;
+
+    TIMESPEC_TO_TIMEVAL(&event->it_interval, &value->it_interval);
+    TIMESPEC_TO_TIMEVAL(&event->it_value, &value->it_value);
+
+    return 1;  
+}
+
+int timer_settime
+(
+    timer_t                   timerid, /* timer ID */
+    int                       flags,   /* absolute or relative */
+    const struct itimerspec * value,   /* time to be set */
+    struct itimerspec *       ovalue   /* previous time set (NULL=no result) */
+)
+{
+    struct itimerval itimer;
+    struct event *event = (struct event *) timerid;
+    struct event **ppevent;
+
+    TIMESPEC_TO_TIMEVAL(&event->it_interval, &value->it_interval);
+    TIMESPEC_TO_TIMEVAL(&event->it_value, &value->it_value);
+
+    /* if .it_value is zero, the timer is disarmed */
+    if (!timerisset(&event->it_value)) {
+       timer_cancel(timerid);
+       return 0;
+    }
+
+    block_timer();
+
+#ifdef TIMER_PROFILE
+    event->expected_ms = (event->it_value.tv_sec * MS_PER_SEC) + (event->it_value.tv_usec / US_PER_MS);
+    event->start = uclock();
+#endif
+    if (event->next) {
+       TIMERDBG("calling timer_settime with a timer that is already on the queue.");
+    }
+
+
+    /* We always want to make sure that the event at the head of the
+       queue has a timeout greater than the itimer granularity.
+       Otherwise we end up with the situation that the time remaining
+       on an itimer is greater than the time at the head of the queue
+       in the first place. */
+    timerroundup(&event->it_value, g_granularity);
+
+    timerclear(&itimer.it_value);
+    getitimer(ITIMER_REAL, &itimer);
+    if (timerisset(&itimer.it_value)) {
+       // reset the top timer to have an interval equal to the remaining interval 
+       // when the timer was cancelled.
+       if (event_queue) {
+           if (timercmp(&(itimer.it_value), &(event_queue->it_value), >)) {
+               // it is an error if the amount of time remaining is more than the amount of time 
+               // requested by the top event.
+               //
+               TIMERDBG("timer_settime: TIMER ERROR!");
+
+           } else {
+               // some portion of the top event has already expired.
+               // Reset the interval of the top event to remaining
+               // time left in that interval.
+               //
+               event_queue->it_value = itimer.it_value;
+
+               // if we were the earliest timer before now, we are still the earliest timer now.
+               // we do not need to reorder the list.
+           }
+       }
+    }
+
+    // Now, march down the list, decrementing the new timer by the
+    // current it_value of each event on the queue.
+    ppevent = &event_queue;
+    while (*ppevent) {
+       if ( timercmp(&(event->it_value), &((*ppevent)->it_value), <) ) {
+           // if the proposed event will trigger sooner than the next event
+           // in the queue, we will insert the new event just before the next one.
+           //
+           // we also need to adjust the delta value to the next event.
+           timersub(&((*ppevent)->it_value), &(event->it_value), &((*ppevent)->it_value));
+           break;
+       }
+       // subtract the interval of the next event from the proposed interval.
+       timersub(&(event->it_value), &((*ppevent)->it_value), &(event->it_value));
+
+       ppevent = &((*ppevent)->next);
+    }
+    
+    // we have found our proper place in the queue, 
+    // link our new event into the pending event queue.
+    event->next = *ppevent;
+    *ppevent = event;
+
+    check_event_queue();
+
+    // if our new event ended up at the front of the queue, reissue the timer.
+    if (event == event_queue) {
+       timerroundup(&event_queue->it_value, g_granularity);
+       timerclear(&itimer.it_interval);
+       itimer.it_value = event_queue->it_value;
+       
+       // we want to be sure to never turn off the timer completely, 
+       // so if the next interval is zero, set it to some small value.
+       if (!timerisset(&(itimer.it_value)))
+           itimer.it_value = (struct timeval) { 0, 1 };
+       
+       assert(!timerisset(&itimer.it_interval));
+       assert(itimer.it_value.tv_sec > 0 || itimer.it_value.tv_usec >= g_granularity);
+       assert(event_queue->it_value.tv_sec > 0 || event_queue->it_value.tv_usec >= g_granularity);
+       setitimer(ITIMER_REAL, &itimer, NULL);
+       check_timer();
+    }
+
+    event->flags &= ~TFLAG_CANCELLED;
+    
+    unblock_timer();
+
+    return 0;
+}
+
+static void check_timer()
+{
+    struct itimerval itimer;
+    
+    getitimer(ITIMER_REAL, &itimer);
+    if (timerisset(&itimer.it_interval)) {
+       TIMERDBG("ERROR timer interval is set.");
+    }
+    if (timercmp(&(itimer.it_value), &(event_queue->it_value), >)) {
+       TIMERDBG("ERROR timer expires later than top event.");
+    }
+}
+
+
+static void check_event_queue()
+{
+    struct timeval sum;
+    struct event *event;
+    int i = 0;
+
+#ifdef notdef
+    int nfree = 0;
+    struct event *p;
+    for (p = event_freelist; p; p = p->next)
+       nfree++;
+    printf("%d free events\n", nfree);
+#endif
+    
+    timerclear(&sum);
+    for (event = event_queue; event; event = event->next) {
+       if (i > g_maxevents) {
+           TIMERDBG("timer queue looks like it loops back on itself!");
+           print_event_queue();
+           exit(1);
+       }
+       i++;
+    }
+}
+
+#if THIS_FINDS_USE
+/* The original upnp version has this unused function, so I left it in
+   to maintain the resemblance. */
+static int count_queue(struct event *event_queue)
+{
+    struct event *event;
+    int i = 0;
+    for (event = event_queue; event; event = event->next) 
+       i++;
+    return i;
+}
+#endif
+
+static void print_event_queue()
+{
+    struct event *event;
+    int i = 0;
+
+    for (event = event_queue; event; event = event->next) {
+       printf("#%d (0x%x)->0x%x: \t%d sec %d usec\t%p\n", 
+              i++, (unsigned int) event, (unsigned int) event->next, (int) event->it_value.tv_sec, (int) event->it_value.tv_usec, event->func);
+       if (i > g_maxevents) {
+           printf("...(giving up)\n");
+           break;
+       }
+    }
+}
+
+// The top element of the event queue must have expired.
+// Remove that element, run its function, and reset the timer.
+// if there is no interval, recycle the event structure.
+static void alarm_handler(int i)
+{
+    struct event *event, **ppevent;
+    struct itimerval itimer;
+    struct timeval small_interval = { 0, g_granularity/2 };
+#ifdef TIMER_PROFILE
+    uint junk;
+    uclock_t end;
+    uint actual;
+#endif
+
+    block_timer();
+
+    // Loop through the event queue and remove the first event plus any 
+    // subsequent events that will expire very soon thereafter (within 'small_interval'}.
+    //
+    do {
+       // remove the top event.
+       event = event_queue;
+       event_queue = event_queue->next;
+       event->next = NULL;
+
+#ifdef TIMER_PROFILE
+       end = uclock();
+       actual = ((end-event->start)/((uclock_t)UCLOCKS_PER_SEC/1000));
+       if (actual < 0)
+           junk = end;
+       TIMERDBG("expected %d ms  actual %d ms", event->expected_ms, ((end-event->start)/((uclock_t)UCLOCKS_PER_SEC/1000)));
+#endif
+       
+           // call the event callback function
+           (*(event->func))((timer_t) event, (int)event->arg);
+
+       /* If the event has been cancelled, do NOT put it back on the queue. */
+       if ( !(event->flags & TFLAG_CANCELLED) ) {
+
+           // if the event is a recurring event, reset the timer and
+           // find its correct place in the sorted list of events.
+           //
+           if (timerisset(&event->it_interval)) {
+               // event is recurring...
+               //
+               event->it_value = event->it_interval;
+#ifdef TIMER_PROFILE
+               event->expected_ms = (event->it_value.tv_sec * MS_PER_SEC) + (event->it_value.tv_usec / US_PER_MS);
+               event->start = uclock();
+#endif
+               timerroundup(&event->it_value, g_granularity);
+
+               // Now, march down the list, decrementing the new timer by the
+               // current delta of each event on the queue.
+               ppevent = &event_queue;
+               while (*ppevent) {
+                   if ( timercmp(&(event->it_value), &((*ppevent)->it_value), <) ) {
+                       // if the proposed event will trigger sooner than the next event
+                       // in the queue, we will insert the new event just before the next one.
+                       //
+                       // we also need to adjust the delta value to the next event.
+                       timersub(&((*ppevent)->it_value), &(event->it_value), &((*ppevent)->it_value));
+                       break;
+                   }
+                   timersub(&(event->it_value), &((*ppevent)->it_value), &(event->it_value));
+                   ppevent = &((*ppevent)->next);
+               }
+
+               // we have found our proper place in the queue, 
+               // link our new event into the pending event queue.
+               event->next = *ppevent;
+               *ppevent = event;
+           } else {
+               // there is no interval, so recycle the event structure.
+               //timer_delete((timer_t) event);
+           }
+       }
+
+       check_event_queue();
+       
+    } while (event_queue && timercmp(&event_queue->it_value, &small_interval, <));
+    
+    // re-issue the timer...
+    if (event_queue) {
+       timerroundup(&event_queue->it_value, g_granularity);
+
+       timerclear(&itimer.it_interval);
+       itimer.it_value = event_queue->it_value;
+       // we want to be sure to never turn off the timer completely, 
+       // so if the next interval is zero, set it to some small value.
+       if (!timerisset(&(itimer.it_value)))
+           itimer.it_value = (struct timeval) { 0, 1 };
+
+       setitimer(ITIMER_REAL, &itimer, NULL);
+       check_timer();
+    } else {
+       TIMERDBG("There are no events in the queue - timer not reset.");
+    }
+
+    unblock_timer();
+}
+
+static int block_count = 0;
+
+void block_timer()
+{
+    sigset_t set;
+
+    if (block_count++ == 0) {
+       sigemptyset(&set);
+       sigaddset(&set, SIGALRM);
+       sigprocmask(SIG_BLOCK, &set, NULL);
+    }
+}
+
+void unblock_timer()
+{
+    sigset_t set;
+
+    if (--block_count == 0) {
+       sigemptyset(&set);
+       sigaddset(&set, SIGALRM);
+       sigprocmask(SIG_UNBLOCK, &set, NULL);
+    }
+}
+
+void timer_cancel_all()
+{
+    struct itimerval timeroff = { { 0, 0 }, { 0, 0} };
+    struct event *event;
+    struct event **ppevent;
+
+    setitimer(ITIMER_REAL, &timeroff, NULL);
+
+    ppevent = &event_queue;
+    while (*ppevent) {
+       event = *ppevent;
+       *ppevent = event->next;
+       event->next = NULL;
+    }
+}
+
+
+
+void timer_cancel(timer_t timerid)
+{
+    struct itimerval itimer;
+    struct itimerval timeroff = { { 0, 0 }, { 0, 0} };
+    struct event *event = (struct event *) timerid;
+    struct event **ppevent;
+
+    if (event->flags & TFLAG_CANCELLED) {
+       TIMERDBG("Cannot cancel a cancelled event");
+       return;
+    }
+
+    block_timer();
+    
+    ppevent = &event_queue;
+    while (*ppevent) {
+       if ( *ppevent == event ) {
+
+           /* RACE CONDITION - if the alarm goes off while we are in
+              this loop, and if the timer we want to cancel is the
+              next to expire, the alarm will end up firing
+              after this routine is complete, causing it to go off early. */
+
+           /* If the cancelled timer is the next to expire, 
+              we need to do something special to clean up correctly. */
+           if (event == event_queue && event->next != NULL) {
+               timerclear(&itimer.it_value);
+               getitimer(ITIMER_REAL, &itimer);
+               
+               /* subtract the time that has already passed while waiting for this timer... */
+               timersub(&(event->it_value), &(itimer.it_value), &(event->it_value));
+
+               /* and add any remainder to the next timer in the list */
+               timeradd(&(event->next->it_value), &(event->it_value), &(event->next->it_value));
+           }
+
+           *ppevent = event->next;
+           event->next = NULL;
+
+           if (event_queue) {
+               timerroundup(&event_queue->it_value, g_granularity);
+               timerclear(&itimer.it_interval);
+               itimer.it_value = event_queue->it_value;
+               
+               /* We want to be sure to never turn off the timer
+                  completely if there are more events on the queue,
+                  so if the next interval is zero, set it to some
+                  small value.  */
+
+               if (!timerisset(&(itimer.it_value)))
+                   itimer.it_value = (struct timeval) { 0, 1 };
+               
+               assert(itimer.it_value.tv_sec > 0 || itimer.it_value.tv_usec >= g_granularity);
+               assert(event_queue->it_value.tv_sec > 0 || event_queue->it_value.tv_usec >= g_granularity);
+               setitimer(ITIMER_REAL, &itimer, NULL);
+               check_timer();
+           } else {
+               setitimer(ITIMER_REAL, &timeroff, NULL);
+           }
+           break;
+       }
+       ppevent = &((*ppevent)->next);
+    }
+
+    event->flags |= TFLAG_CANCELLED;
+
+    unblock_timer();
+}
+
+/*
+* timer related headers
+*/
+#include "bcmtimer.h"
+
+/*
+* locally used global variables and constants
+*/
+
+/*
+* Initialize internal resources used in the timer module. It must be called
+* before any other timer function calls. The param 'timer_entries' is used
+* to pre-allocate fixed number of timer entries.
+*/
+int bcm_timer_module_init(int timer_entries, bcm_timer_module_id *module_id)
+{
+       init_event_queue(timer_entries);
+       *module_id = (bcm_timer_module_id)event_freelist;
+       return 0;
+}
+
+/*
+* Cleanup internal resources used by this timer module. It deletes all
+* pending timer entries from the backend timer system as well.
+*/
+int bcm_timer_module_cleanup(bcm_timer_module_id module_id)
+{
+       module_id = 0;
+       return 0;
+}
+
+/* Enable/Disable timer module */
+int bcm_timer_module_enable(bcm_timer_module_id module_id, int enable)
+{
+       if (enable)
+               unblock_timer();
+       else
+               block_timer();
+       return 0;
+}
+
+int bcm_timer_create(bcm_timer_module_id module_id, bcm_timer_id *timer_id)
+{
+       module_id = 0;
+       return timer_create(CLOCK_REALTIME, NULL, (timer_t *)timer_id);
+}
+
+int bcm_timer_delete(bcm_timer_id timer_id)
+{
+       return timer_delete((timer_t)timer_id);
+}
+
+int bcm_timer_gettime(bcm_timer_id timer_id, struct itimerspec *timer_spec)
+{
+       return -1;
+}
+
+int bcm_timer_settime(bcm_timer_id timer_id, const struct itimerspec *timer_spec)
+{
+       return timer_settime((timer_t)timer_id, 0, timer_spec, NULL);
+}
+
+int bcm_timer_connect(bcm_timer_id timer_id, bcm_timer_cb func, int data)
+{
+       return timer_connect((timer_t)timer_id, (void *)func, data);
+}
+
+int bcm_timer_cancel(bcm_timer_id timer_id)
+{
+       timer_cancel((timer_t)timer_id);
+       return 0;
+}
+int bcm_timer_change_expirytime(bcm_timer_id timer_id, const struct itimerspec *timer_spec)
+{
+       timer_change_settime((timer_t)timer_id, timer_spec);
+       return 1;
+}
diff --git a/openwrt/package/nvram/src/main.c b/openwrt/package/nvram/src/main.c
new file mode 100644 (file)
index 0000000..a64430f
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * Frontend command-line utility for Linux NVRAM layer
+ *
+ * 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 <stdlib.h>
+#include <string.h>
+
+#include <typedefs.h>
+#include <bcmnvram.h>
+
+static void
+usage(void)
+{
+       fprintf(stderr, "usage: nvram [get name] [set name=value] [unset name] [show]\n");
+       exit(0);
+}
+
+/* NVRAM utility */
+int
+main(int argc, char **argv)
+{
+       char *name, *value, buf[NVRAM_SPACE];
+       int size;
+
+       /* Skip program name */
+       --argc;
+       ++argv;
+
+       if (!*argv) 
+               usage();
+
+       /* Process the remaining arguments. */
+       for (; *argv; argv++) {
+               if (!strncmp(*argv, "get", 3)) {
+                       if (*++argv) {
+                               if ((value = nvram_get(*argv)))
+                                       puts(value);
+                       }
+               }
+               else if (!strncmp(*argv, "set", 3)) {
+                       if (*++argv) {
+                               strncpy(value = buf, *argv, sizeof(buf));
+                               name = strsep(&value, "=");
+                               nvram_set(name, value);
+                       }
+               }
+               else if (!strncmp(*argv, "unset", 5)) {
+                       if (*++argv)
+                               nvram_unset(*argv);
+               }
+               else if (!strncmp(*argv, "commit", 5)) {
+                       nvram_commit();
+               }
+               else if (!strncmp(*argv, "show", 4) ||
+                          !strncmp(*argv, "getall", 6)) {
+                       nvram_getall(buf, sizeof(buf));
+                       for (name = buf; *name; name += strlen(name) + 1)
+                               puts(name);
+                       size = sizeof(struct nvram_header) + (int) name - (int) buf;
+                       fprintf(stderr, "size: %d bytes (%d left)\n", size, NVRAM_SPACE - size);
+               }
+               if (!*argv)
+                       break;
+       }
+
+       return 0;
+}      
diff --git a/openwrt/package/nvram/src/nvram_convert.c b/openwrt/package/nvram/src/nvram_convert.c
new file mode 100644 (file)
index 0000000..4859090
--- /dev/null
@@ -0,0 +1,77 @@
+
+#define WL(a)  "wl_"a  
+#define WL0(a) "wl0_"a 
+#define D11G(a)        "d11g_"a
+
+#define PPP(a)         "ppp_"a
+#define PPPOE(a)       "pppoe_"a
+
+struct nvram_convert {
+        char *name;            // for WEB
+       char *wl0_name;         // for driver
+        char *d11g_name;       // for old nv name
+};
+
+struct nvram_convert nvram_converts[] = {
+       // Bellow change from 3.11.48.7
+       { WL("ssid"),           WL0("ssid"),    ""},
+       { WL("radio"),          WL0("mode"),    ""},
+       { WL("mode"),           WL0("mode"),    ""},
+       { WL("wds"),            WL0("wds"),     ""},
+       { WL("auth"),           WL0("auth"),    ""},
+       { WL("key"),            WL0("key"),     ""},
+       { WL("key1"),           WL0("key1"),    ""},
+       { WL("key2"),           WL0("key2"),    ""},
+       { WL("key3"),           WL0("key3"),    ""},
+       { WL("key4"),           WL0("key4"),    ""},
+       { WL("maclist"),        WL0("maclist"), ""},
+       { WL("channel"),        WL0("channel"), D11G("channel")},
+       { WL("rateset"),        WL0("rateset"), D11G("rateset")},
+       { WL("rts"),            WL0("rts"),     D11G("rts")},
+       { WL("bcn"),            WL0("bcn"),     D11G("bcn")},
+       { WL("gmode"),          WL0("gmode"),   "d11g_mode"},
+       { WL("unit"),           WL0("unit"),    ""},
+       { WL("ifname"),         WL0("ifname"),  ""},
+       { WL("phytype"),        WL0("phytype"), ""},
+       { WL("country"),        WL0("country"), ""},
+       { WL("closed"),         WL0("closed"),  ""},
+       { WL("lazywds"),        WL0("lazywds"), ""},
+       { WL("wep"),            WL0("wep"),     ""},
+       { WL("macmode"),        WL0("macmode"), ""},
+       { WL("rate"),           WL0("rate"),    D11G("rate")},
+       { WL("frag"),           WL0("frag"),    D11G("frag")},
+       { WL("dtim"),           WL0("dtim"),    D11G("dtim")},
+       { WL("plcphdr"),        WL0("plcphdr"), ""},
+       { WL("gmode_protection"),       WL0("gmode_protection"),        ""},
+       { WL("radio"),          WL0("radio"),   ""},
+       // Bellow change from 3.21.9.0
+       { WL("auth_mode"),      WL0("auth_mode"),       ""},
+       { WL("radius_ipaddr"),  WL0("radius_ipaddr"),   ""},
+       { WL("radius_port"),    WL0("radius_port"),     ""},
+       { WL("radius_key"),     WL0("radius_key"),      ""},
+       { WL("wpa_psk"),        WL0("wpa_psk"),         ""},
+       { WL("wpa_gtk_rekey"),  WL0("wpa_gtk_rekey"),   ""},
+       { WL("frameburst"),     WL0("frameburst"),      ""},
+       { WL("crypto"),         WL0("crypto"),          ""},
+       { WL("ap_isolate"),     WL0("ap_isolate"),      ""},
+       { WL("afterburner"),    WL0("afterburner"),     ""},
+       // for PPPoE
+       { PPP("username"),      PPPOE("username"),      ""},
+       { PPP("passwd"),        PPPOE("passwd"),        ""},
+       { PPP("idletime"),      PPPOE("idletime"),      ""},
+       { PPP("keepalive"),     PPPOE("keepalive"),     ""},
+       { PPP("demand"),        PPPOE("demand"),        ""},
+       { PPP("service"),       PPPOE("service"),       ""},
+       { PPP("ac"),            PPPOE("ac"),            ""},
+       { PPP("static"),        PPPOE("static"),        ""},
+       { PPP("static_ip"),     PPPOE("static_ip"),     ""},
+       { PPP("username_1"),    PPPOE("username_1"),    ""},
+       { PPP("passwd_1"),      PPPOE("passwd_1"),      ""},
+       { PPP("idletime_1"),    PPPOE("idletime_1"),    ""},
+       { PPP("keepalive_1"),   PPPOE("keepalive_1"),   ""},
+       { PPP("demand_1"),      PPPOE("demand_1"),      ""},
+       { PPP("service_1"),     PPPOE("service_1"),     ""},
+       { PPP("ac_1"),          PPPOE("ac_1"),          ""},
+       
+       { 0, 0, 0},
+};
diff --git a/openwrt/package/nvram/src/nvram_convert.h b/openwrt/package/nvram/src/nvram_convert.h
new file mode 100644 (file)
index 0000000..70e1232
--- /dev/null
@@ -0,0 +1,7 @@
+
+struct nvram_convert {
+        char *name;
+       char *wl0_name;
+        char *d11g_name;
+};
+
diff --git a/openwrt/package/nvram/src/nvram_linux.c b/openwrt/package/nvram/src/nvram_linux.c
new file mode 100644 (file)
index 0000000..c41e321
--- /dev/null
@@ -0,0 +1,320 @@
+/*
+ * NVRAM variable manipulation (Linux user mode half)
+ *
+ * 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 <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <error.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#include <typedefs.h>
+#include <bcmnvram.h>
+#include <nvram_convert.h>
+#include <shutils.h>
+#include <utils.h>
+
+#define PATH_DEV_NVRAM "/dev/nvram"
+
+/* Globals */
+static int nvram_fd = -1;
+static char *nvram_buf = NULL;
+int check_action(void);
+int file_to_buf(char *path, char *buf, int len);
+
+int
+nvram_init(void *unused)
+{
+       if ((nvram_fd = open(PATH_DEV_NVRAM, O_RDWR)) < 0)
+               goto err;
+
+       /* Map kernel string buffer into user space */
+       if ((nvram_buf = mmap(NULL, NVRAM_SPACE, PROT_READ, MAP_SHARED, nvram_fd, 0)) == MAP_FAILED) {
+               close(nvram_fd);
+               nvram_fd = -1;
+               goto err;
+       }
+
+       return 0;
+
+ err:
+       perror(PATH_DEV_NVRAM);
+       return errno;
+}
+
+char *
+nvram_get(const char *name)
+{
+       size_t count = strlen(name) + 1;
+       char tmp[100], *value;
+       unsigned long *off = (unsigned long *) tmp;
+
+       if (nvram_fd < 0)
+               if (nvram_init(NULL))
+                       return NULL;
+
+       if (count > sizeof(tmp)) {
+               if (!(off = malloc(count)))
+                       return NULL;
+       }
+
+       /* Get offset into mmap() space */
+       strcpy((char *) off, name);
+
+       count = read(nvram_fd, off, count);
+
+       if (count == sizeof(unsigned long))
+               value = &nvram_buf[*off];
+       else
+               value = NULL;
+
+       if (count < 0)
+               perror(PATH_DEV_NVRAM);
+
+       if (off != (unsigned long *) tmp)
+               free(off);
+
+       return value;
+}
+
+int
+nvram_getall(char *buf, int count)
+{
+       int ret;
+
+       if (nvram_fd < 0)
+               if ((ret = nvram_init(NULL)))
+                       return ret;
+
+       if (count == 0)
+               return 0;
+
+       /* Get all variables */
+       *buf = '\0';
+
+       ret = read(nvram_fd, buf, count);
+
+       if (ret < 0)
+               perror(PATH_DEV_NVRAM);
+
+       return (ret == count) ? 0 : ret;
+}
+
+static int
+_nvram_set(const char *name, const char *value)
+{
+       size_t count = strlen(name) + 1;
+       char tmp[100], *buf = tmp;
+       int ret;
+
+       if (nvram_fd < 0)
+               if ((ret = nvram_init(NULL)))
+                       return ret;
+
+       /* Unset if value is NULL */
+       if (value)
+               count += strlen(value) + 1;
+
+       if (count > sizeof(tmp)) {
+               if (!(buf = malloc(count)))
+                       return -ENOMEM;
+       }
+
+       if (value)
+               sprintf(buf, "%s=%s", name, value);
+       else
+               strcpy(buf, name);
+
+       ret = write(nvram_fd, buf, count);
+
+       if (ret < 0)
+               perror(PATH_DEV_NVRAM);
+
+       if (buf != tmp)
+               free(buf);
+
+       return (ret == count) ? 0 : ret;
+}
+
+int
+nvram_set(const char *name, const char *value)
+{
+        extern struct nvram_convert nvram_converts[];
+         struct nvram_convert *v;
+         int ret;
+
+         ret = _nvram_set(name, value);
+
+         for(v = nvram_converts ; v->name ; v++) {
+                 if(!strcmp(v->name, name)){
+                         if(strcmp(v->wl0_name,""))      _nvram_set(v->wl0_name, value);
+                         if(strcmp(v->d11g_name,""))     _nvram_set(v->d11g_name, value);
+                 }
+         }
+
+         return ret;
+}
+
+int
+nvram_unset(const char *name)
+{
+       return _nvram_set(name, NULL);
+}
+
+int
+nvram_commit(void)
+{
+       int ret;
+       
+       cprintf("nvram_commit(): start\n");     
+       
+       if((check_action() == ACT_IDLE) || 
+          (check_action() == ACT_SW_RESTORE) || 
+          (check_action() == ACT_HW_RESTORE)){
+               if (nvram_fd < 0)
+                       if ((ret = nvram_init(NULL)))
+                               return ret;
+
+               ret = ioctl(nvram_fd, NVRAM_MAGIC, NULL);
+
+               if (ret < 0)
+                       perror(PATH_DEV_NVRAM);
+       
+               cprintf("nvram_commit(): end\n");       
+       }
+       else
+               cprintf("nvram_commit():  nothing to do...\n");
+
+       return ret;
+}
+
+int file2nvram(char *filename, char *varname) {
+   FILE *fp;
+   int c,count;
+   int i=0,j=0;
+   char mem[10000],buf[30000];
+
+   if ( !(fp=fopen(filename,"rb") ))
+        return 0;
+
+   count=fread(mem,1,sizeof(mem),fp);
+   fclose(fp);
+   for (j=0;j<count;j++) {
+        if  (i > sizeof(buf)-3 )
+                break;
+        c=mem[j];
+        if (c >= 32 && c <= 126 && c != '\\' && c != '~')  {
+                buf[i++]=(unsigned char) c;
+        } else if (c==0) {
+               buf[i++]='~';
+        } else {
+                buf[i++]='\\';
+                sprintf(buf+i,"%02X",c);
+                i+=2;
+        }
+   }
+   if (i==0) return 0;
+   buf[i]=0;
+   //fprintf(stderr,"================ > file2nvram %s = [%s] \n",varname,buf); 
+   nvram_set(varname,buf);
+   //nvram_commit(); //Barry adds for test
+}
+
+int nvram2file(char *varname, char *filename) {
+   FILE *fp;
+   int c,tmp;
+   int i=0,j=0;
+   char *buf;
+   char mem[10000];
+   
+   if ( !(fp=fopen(filename,"wb") ))
+        return 0;
+        
+   buf=strdup(nvram_safe_get(varname));
+   //fprintf(stderr,"=================> nvram2file %s = [%s] \n",varname,buf);
+   while (  buf[i] && j < sizeof(mem)-3 ) {
+        if (buf[i] == '\\')  {
+                i++;
+                tmp=buf[i+2];
+                buf[i+2]=0;
+                sscanf(buf+i,"%02X",&c);
+                buf[i+2]=tmp;
+                i+=2;
+                mem[j]=c;j++;
+        } else if (buf[i] == '~') {
+               mem[j]=0;j++;
+               i++;
+        } else {
+                mem[j]=buf[i];j++;
+                i++;
+        }       
+   }
+   if (j<=0) return j;
+   j=fwrite(mem,1,j,fp);
+   fclose(fp);
+   free(buf);
+   return j;
+}  
+
+int
+check_action(void)
+{
+       char buf[80] = "";
+       
+       if(file_to_buf(ACTION_FILE, buf, sizeof(buf))){
+               if(!strcmp(buf, "ACT_TFTP_UPGRADE")){
+                       cprintf("Upgrading from tftp now, quiet exit....\n");
+                       return ACT_TFTP_UPGRADE;
+               }
+               else if(!strcmp(buf, "ACT_WEBS_UPGRADE")){
+                       cprintf("Upgrading from web (https) now, quiet exit....\n");
+                       return ACT_WEBS_UPGRADE;
+               }
+               else if(!strcmp(buf, "ACT_WEB_UPGRADE")){
+                       cprintf("Upgrading from web (http) now, quiet exit....\n");
+                       return ACT_WEB_UPGRADE;
+               }
+               else if(!strcmp(buf, "ACT_SW_RESTORE")){
+                       cprintf("Receive restore command from web, quiet exit....\n");
+                       return ACT_SW_RESTORE;
+               }
+               else if(!strcmp(buf, "ACT_HW_RESTORE")){
+                       cprintf("Receive restore commond from resetbutton, quiet exit....\n");
+                       return ACT_HW_RESTORE;
+               }
+       }
+       //fprintf(stderr, "Waiting for upgrading....\n");
+       return ACT_IDLE;
+}
+
+int
+file_to_buf(char *path, char *buf, int len)
+{
+       FILE *fp;
+
+       memset(buf, 0 , len);
+
+       if ((fp = fopen(path, "r"))) {
+               fgets(buf, len, fp);
+               fclose(fp);
+               return 1;
+       }
+
+       return 0;
+}
diff --git a/openwrt/package/nvram/src/shutils.c b/openwrt/package/nvram/src/shutils.c
new file mode 100644 (file)
index 0000000..49ad41a
--- /dev/null
@@ -0,0 +1,329 @@
+/*
+ * Shell-like utility functions
+ *
+ * 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 <stdlib.h>
+#include <stdarg.h>
+#include <errno.h>
+#include <error.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <unistd.h>
+#include <signal.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <termios.h>
+#include <sys/ioctl.h>
+#include <sys/time.h>
+#include <net/ethernet.h>
+
+#include <shutils.h>
+
+/*
+ * Reads file and returns contents
+ * @param      fd      file descriptor
+ * @return     contents of file or NULL if an error occurred
+ */
+char *
+fd2str(int fd)
+{
+       char *buf = NULL;
+       size_t count = 0, n;
+
+       do {
+               buf = realloc(buf, count + 512);
+               n = read(fd, buf + count, 512);
+               if (n < 0) {
+                       free(buf);
+                       buf = NULL;
+               }
+               count += n;
+       } while (n == 512);
+
+       close(fd);
+       if (buf)
+               buf[count] = '\0';
+       return buf;
+}
+
+/*
+ * Reads file and returns contents
+ * @param      path    path to file
+ * @return     contents of file or NULL if an error occurred
+ */
+char *
+file2str(const char *path)
+{
+       int fd;
+
+       if ((fd = open(path, O_RDONLY)) == -1) {
+               perror(path);
+               return NULL;
+       }
+
+       return fd2str(fd);
+}
+
+/* 
+ * Waits for a file descriptor to change status or unblocked signal
+ * @param      fd      file descriptor
+ * @param      timeout seconds to wait before timing out or 0 for no timeout
+ * @return     1 if descriptor changed status or 0 if timed out or -1 on error
+ */
+int
+waitfor(int fd, int timeout)
+{
+       fd_set rfds;
+       struct timeval tv = { timeout, 0 };
+
+       FD_ZERO(&rfds);
+       FD_SET(fd, &rfds);
+       return select(fd + 1, &rfds, NULL, NULL, (timeout > 0) ? &tv : NULL);
+}
+
+/* 
+ * Concatenates NULL-terminated list of arguments into a single
+ * commmand and executes it
+ * @param      argv    argument list
+ * @param      path    NULL, ">output", or ">>output"
+ * @param      timeout seconds to wait before timing out or 0 for no timeout
+ * @param      ppid    NULL to wait for child termination or pointer to pid
+ * @return     return value of executed command or errno
+ */
+int
+_eval(char *const argv[], char *path, int timeout, int *ppid)
+{
+       pid_t pid;
+       int status;
+       int fd;
+       int flags;
+       int sig;
+       char buf[254]="";
+       int i;
+
+       switch (pid = fork()) {
+       case -1:        /* error */
+               perror("fork");
+               return errno;
+       case 0:         /* child */
+               /* Reset signal handlers set for parent process */
+               for (sig = 0; sig < (_NSIG-1); sig++)
+                       signal(sig, SIG_DFL);
+
+               /* Clean up */
+               ioctl(0, TIOCNOTTY, 0);
+               close(STDIN_FILENO);
+               close(STDOUT_FILENO);
+               close(STDERR_FILENO);
+               setsid();
+
+               /* We want to check the board if exist UART? , add by honor 2003-12-04 */
+               if ((fd = open("/dev/console", O_RDWR)) < 0) {
+                        (void) open("/dev/null", O_RDONLY);
+                        (void) open("/dev/null", O_WRONLY);
+                        (void) open("/dev/null", O_WRONLY);
+               }
+               else{
+                       close(fd);
+                        (void) open("/dev/console", O_RDONLY);
+                        (void) open("/dev/console", O_WRONLY);
+                        (void) open("/dev/console", O_WRONLY);
+               }
+
+               /* Redirect stdout to <path> */
+               if (path) {
+                       flags = O_WRONLY | O_CREAT;
+                       if (!strncmp(path, ">>", 2)) {
+                               /* append to <path> */
+                               flags |= O_APPEND;
+                               path += 2;
+                       } else if (!strncmp(path, ">", 1)) {
+                               /* overwrite <path> */
+                               flags |= O_TRUNC;
+                               path += 1;
+                       }
+                       if ((fd = open(path, flags, 0644)) < 0)
+                               perror(path);
+                       else {
+                               dup2(fd, STDOUT_FILENO);
+                               close(fd);
+                       }
+               }
+
+               /* execute command */
+               for(i=0 ; argv[i] ; i++)
+                       snprintf(buf+strlen(buf), sizeof(buf), "%s ", argv[i]);
+               dprintf("cmd=[%s]\n", buf);
+               setenv("PATH", "/sbin:/bin:/usr/sbin:/usr/bin", 1);
+               alarm(timeout);
+               execvp(argv[0], argv);
+               perror(argv[0]);
+               exit(errno);
+       default:        /* parent */
+               if (ppid) {
+                       *ppid = pid;
+                       return 0;
+               } else {
+                       waitpid(pid, &status, 0);
+                       if (WIFEXITED(status))
+                               return WEXITSTATUS(status);
+                       else
+                               return status;
+               }
+       }
+}
+
+/* 
+ * Concatenates NULL-terminated list of arguments into a single
+ * commmand and executes it
+ * @param      argv    argument list
+ * @return     stdout of executed command or NULL if an error occurred
+ */
+char *
+_backtick(char *const argv[])
+{
+       int filedes[2];
+       pid_t pid;
+       int status;
+       char *buf = NULL;
+
+       /* create pipe */
+       if (pipe(filedes) == -1) {
+               perror(argv[0]);
+               return NULL;
+       }
+
+       switch (pid = fork()) {
+       case -1:        /* error */
+               return NULL;
+       case 0:         /* child */
+               close(filedes[0]);      /* close read end of pipe */
+               dup2(filedes[1], 1);    /* redirect stdout to write end of pipe */
+               close(filedes[1]);      /* close write end of pipe */
+               execvp(argv[0], argv);
+               exit(errno);
+               break;
+       default:        /* parent */
+               close(filedes[1]);      /* close write end of pipe */
+               buf = fd2str(filedes[0]);
+               waitpid(pid, &status, 0);
+               break;
+       }
+       
+       return buf;
+}
+
+/* 
+ * Kills process whose PID is stored in plaintext in pidfile
+ * @param      pidfile PID file
+ * @return     0 on success and errno on failure
+ */
+int
+kill_pidfile(char *pidfile)
+{
+       FILE *fp = fopen(pidfile, "r");
+       char buf[256];
+
+       if (fp && fgets(buf, sizeof(buf), fp)) {
+               pid_t pid = strtoul(buf, NULL, 0);
+               fclose(fp);
+               return kill(pid, SIGTERM);
+       } else
+               return errno;
+}
+
+/*
+ * fread() with automatic retry on syscall interrupt
+ * @param      ptr     location to store to
+ * @param      size    size of each element of data
+ * @param      nmemb   number of elements
+ * @param      stream  file stream
+ * @return     number of items successfully read
+ */
+int
+safe_fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
+{
+       size_t ret = 0;
+
+       do {
+               clearerr(stream);
+               ret += fread((char *)ptr + (ret * size), size, nmemb - ret, stream);
+       } while (ret < nmemb && ferror(stream) && errno == EINTR);
+
+       return ret;
+}
+
+/*
+ * fwrite() with automatic retry on syscall interrupt
+ * @param      ptr     location to read from
+ * @param      size    size of each element of data
+ * @param      nmemb   number of elements
+ * @param      stream  file stream
+ * @return     number of items successfully written
+ */
+int
+safe_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
+{
+       size_t ret = 0;
+
+       do {
+               clearerr(stream);
+               ret += fwrite((char *)ptr + (ret * size), size, nmemb - ret, stream);
+       } while (ret < nmemb && ferror(stream) && errno == EINTR);
+
+       return ret;
+}
+
+/*
+ * Convert Ethernet address string representation to binary data
+ * @param      a       string in xx:xx:xx:xx:xx:xx notation
+ * @param      e       binary data
+ * @return     TRUE if conversion was successful and FALSE otherwise
+ */
+int
+ether_atoe(const char *a, unsigned char *e)
+{
+       char *c = (char *) a;
+       int i = 0;
+
+       memset(e, 0, ETHER_ADDR_LEN);
+       for (;;) {
+               e[i++] = (unsigned char) strtoul(c, &c, 16);
+               if (!*c++ || i == ETHER_ADDR_LEN)
+                       break;
+       }
+       return (i == ETHER_ADDR_LEN);
+}
+
+/*
+ * Convert Ethernet address binary data to string representation
+ * @param      e       binary data
+ * @param      a       string in xx:xx:xx:xx:xx:xx notation
+ * @return     a
+ */
+char *
+ether_etoa(const unsigned char *e, char *a)
+{
+       char *c = a;
+       int i;
+
+       for (i = 0; i < ETHER_ADDR_LEN; i++) {
+               if (i)
+                       *c++ = ':';
+               c += sprintf(c, "%02X", e[i] & 0xff);
+       }
+       return a;
+}
diff --git a/openwrt/package/nvram/src/wl.c b/openwrt/package/nvram/src/wl.c
new file mode 100644 (file)
index 0000000..f09317a
--- /dev/null
@@ -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 <string.h>
+
+#include <typedefs.h>
+#include <wlutils.h>
+
+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));
+}
+
diff --git a/openwrt/package/nvram/src/wl_linux.c b/openwrt/package/nvram/src/wl_linux.c
new file mode 100644 (file)
index 0000000..126a40b
--- /dev/null
@@ -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;
+}      
+
diff --git a/openwrt/target/linux/package/openwrt/include/bcmnvram.h b/openwrt/target/linux/package/openwrt/include/bcmnvram.h
new file mode 100644 (file)
index 0000000..3c45263
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * NVRAM variable manipulation
+ *
+ * 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$
+ */
+
+#ifndef _bcmnvram_h_
+#define _bcmnvram_h_
+
+#ifndef _LANGUAGE_ASSEMBLY
+
+#include <typedefs.h>
+
+struct nvram_header {
+       uint32 magic;
+       uint32 len;
+       uint32 crc_ver_init;    /* 0:7 crc, 8:15 ver, 16:27 init, mem. test 28, 29-31 reserved */
+       uint32 config_refresh;  /* 0:15 config, 16:31 refresh */
+       uint32 config_ncdl;     /* ncdl values for memc */
+};
+
+struct nvram_tuple {
+       char *name;
+       char *value;
+       struct nvram_tuple *next;
+};
+
+/*
+ * Initialize NVRAM access. May be unnecessary or undefined on certain
+ * platforms.
+ */
+extern int nvram_init(void *sbh);
+
+/*
+ * Disable NVRAM access. May be unnecessary or undefined on certain
+ * platforms.
+ */
+extern void nvram_exit(void);
+
+/*
+ * Get the value of an NVRAM variable. The pointer returned may be
+ * invalid after a set.
+ * @param      name    name of variable to get
+ * @return     value of variable or NULL if undefined
+ */
+extern char * nvram_get(const char *name);
+
+/* 
+ * Get the value of an NVRAM variable.
+ * @param      name    name of variable to get
+ * @return     value of variable or NUL if undefined
+ */
+#define nvram_safe_get(name) (nvram_get(name) ? : "")
+
+#define nvram_safe_unset(name) ({ \
+       if(nvram_get(name)) \
+               nvram_unset(name); \
+})
+
+#define nvram_safe_set(name, value) ({ \
+       if(!nvram_get(name) || strcmp(nvram_get(name), value)) \
+               nvram_set(name, value); \
+})
+
+/*
+ * Match an NVRAM variable.
+ * @param      name    name of variable to match
+ * @param      match   value to compare against value of variable
+ * @return     TRUE if variable is defined and its value is string equal
+ *             to match or FALSE otherwise
+ */
+static INLINE int
+nvram_match(char *name, char *match) {
+       const char *value = nvram_get(name);
+       return (value && !strcmp(value, match));
+}
+
+/*
+ * Inversely match an NVRAM variable.
+ * @param      name    name of variable to match
+ * @param      match   value to compare against value of variable
+ * @return     TRUE if variable is defined and its value is not string
+ *             equal to invmatch or FALSE otherwise
+ */
+static INLINE int
+nvram_invmatch(char *name, char *invmatch) {
+       const char *value = nvram_get(name);
+       return (value && strcmp(value, invmatch));
+}
+
+/*
+ * Set the value of an NVRAM variable. The name and value strings are
+ * copied into private storage. Pointers to previously set values
+ * may become invalid. The new value may be immediately
+ * retrieved but will not be permanently stored until a commit.
+ * @param      name    name of variable to set
+ * @param      value   value of variable
+ * @return     0 on success and errno on failure
+ */
+extern int nvram_set(const char *name, const char *value);
+
+/*
+ * Unset an NVRAM variable. Pointers to previously set values
+ * remain valid until a set.
+ * @param      name    name of variable to unset
+ * @return     0 on success and errno on failure
+ * NOTE: use nvram_commit to commit this change to flash.
+ */
+extern int nvram_unset(const char *name);
+
+/*
+ * Commit NVRAM variables to permanent storage. All pointers to values
+ * may be invalid after a commit.
+ * NVRAM values are undefined after a commit.
+ * @return     0 on success and errno on failure
+ */
+extern int nvram_commit(void);
+
+/*
+ * Get all NVRAM variables (format name=value\0 ... \0\0).
+ * @param      buf     buffer to store variables
+ * @param      count   size of buffer in bytes
+ * @return     0 on success and errno on failure
+ */
+extern int nvram_getall(char *buf, int count);
+
+extern int file2nvram(char *filename, char *varname);
+extern int nvram2file(char *varname, char *filename);
+
+#endif /* _LANGUAGE_ASSEMBLY */
+
+#define NVRAM_MAGIC            0x48534C46      /* 'FLSH' */
+#define NVRAM_VERSION          1
+#define NVRAM_HEADER_SIZE      20
+#define NVRAM_SPACE            0x8000
+#define FLASH_BASE             0xbfc00000      /* Extif core */
+#define FLASH_MIN              0x00100000      /* Minimum flash size */
+#define FLASH_MAX              0x00400000      /* Maximum flash size with extif */
+
+#endif /* _bcmnvram_h_ */
diff --git a/openwrt/target/linux/package/openwrt/include/bcmutils.h b/openwrt/target/linux/package/openwrt/include/bcmutils.h
new file mode 100644 (file)
index 0000000..05ad41d
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+ * Misc useful os-independent macros and functions.
+ *
+ * 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$
+ */
+
+#ifndef        _bcmutils_h_
+#define        _bcmutils_h_
+
+#ifndef MIN
+#define        MIN(a, b)               (((a)<(b))?(a):(b))
+#endif
+
+#ifndef MAX
+#define        MAX(a, b)               (((a)>(b))?(a):(b))
+#endif
+
+#define CEIL(x, y)             (((x) + ((y)-1)) / (y))
+#define        ROUNDUP(x, y)           ((((ulong)(x)+((y)-1))/(y))*(y))
+#define        ISALIGNED(a, x)         (((uint)(a) & ((x)-1)) == 0)
+#define        ISPOWEROF2(x)           ((((x)-1)&(x))==0)
+#define        OFFSETOF(type, member)  ((uint) &((type *)0)->member)
+#define ARRAYSIZE(a)           (sizeof(a)/sizeof(a[0]))
+
+/* bit map related macros */
+#ifndef setbit
+#define        NBBY    8       /* 8 bits per byte */
+#define        setbit(a,i)     ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
+#define        clrbit(a,i)     ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
+#define        isset(a,i)      ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
+#define        isclr(a,i)      (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
+#endif
+
+#define        NBITS(type)     (sizeof (type) * 8)
+
+#define _BCM_U 0x01    /* upper */
+#define _BCM_L 0x02    /* lower */
+#define _BCM_D 0x04    /* digit */
+#define _BCM_C 0x08    /* cntrl */
+#define _BCM_P 0x10    /* punct */
+#define _BCM_S 0x20    /* white space (space/lf/tab) */
+#define _BCM_X 0x40    /* hex digit */
+#define _BCM_SP        0x80    /* hard space (0x20) */
+
+extern unsigned char bcm_ctype[];
+#define bcm_ismask(x) (bcm_ctype[(int)(unsigned char)(x)])
+
+#define bcm_isalnum(c) ((bcm_ismask(c)&(_BCM_U|_BCM_L|_BCM_D)) != 0)
+#define bcm_isalpha(c) ((bcm_ismask(c)&(_BCM_U|_BCM_L)) != 0)
+#define bcm_iscntrl(c) ((bcm_ismask(c)&(_BCM_C)) != 0)
+#define bcm_isdigit(c) ((bcm_ismask(c)&(_BCM_D)) != 0)
+#define bcm_isgraph(c) ((bcm_ismask(c)&(_BCM_P|_BCM_U|_BCM_L|_BCM_D)) != 0)
+#define bcm_islower(c) ((bcm_ismask(c)&(_BCM_L)) != 0)
+#define bcm_isprint(c) ((bcm_ismask(c)&(_BCM_P|_BCM_U|_BCM_L|_BCM_D|_BCM_SP)) != 0)
+#define bcm_ispunct(c) ((bcm_ismask(c)&(_BCM_P)) != 0)
+#define bcm_isspace(c) ((bcm_ismask(c)&(_BCM_S)) != 0)
+#define bcm_isupper(c) ((bcm_ismask(c)&(_BCM_U)) != 0)
+#define bcm_isxdigit(c)        ((bcm_ismask(c)&(_BCM_D|_BCM_X)) != 0)
+
+/*
+ * Spin at most 'us' microseconds while 'exp' is true.
+ * Caller should explicitly test 'exp' when this completes
+ * and take appropriate error action if 'exp' is still true.
+ */
+#define SPINWAIT(exp, us) { \
+       uint countdown = (us) + 9; \
+       while ((exp) && (countdown >= 10)) {\
+               OSL_DELAY(10); \
+               countdown -= 10; \
+       } \
+}
+
+/* generic osl packet queue */
+struct pktq {
+       void *head;     /* first packet to dequeue */
+       void *tail;     /* last packet to dequeue */
+       uint len;       /* number of queued packets */
+       uint maxlen;    /* maximum number of queued packets */
+       bool priority;  /* enqueue by packet priority */
+};
+#define DEFAULT_QLEN   128
+
+#define        pktq_len(q)     ((q)->len)
+#define        pktq_avail(q)   ((q)->maxlen - (q)->len)
+#define        pktq_head(q)    ((q)->head)
+#define        pktq_full(q)    ((q)->len >= (q)->maxlen)
+
+/* crc defines */
+#define CRC8_INIT_VALUE  0xff          /* Initial CRC8 checksum value */
+#define CRC8_GOOD_VALUE  0x9f          /* Good final CRC8 checksum value */
+#define CRC16_INIT_VALUE 0xffff                /* Initial CRC16 checksum value */
+#define CRC16_GOOD_VALUE 0xf0b8                /* Good final CRC16 checksum value */
+#define CRC32_INIT_VALUE 0xffffffff    /* Initial CRC32 checksum value */
+#define CRC32_GOOD_VALUE 0xdebb20e3    /* Good final CRC32 checksum value */
+
+/* tag_ID/length/value_buffer tuple */
+typedef struct bcm_tlv {
+       uint8   id;
+       uint8   len;
+       uint8   data[1];
+} bcm_tlv_t;
+
+/* Check that bcm_tlv_t fits into the given buflen */
+#define bcm_valid_tlv(elt, buflen) ((buflen) >= 2 && (buflen) >= 2 + (elt)->len)
+
+/* buffer length for ethernet address from bcm_ether_ntoa() */
+#define ETHER_ADDR_STR_LEN     18
+
+/*
+* load 32-bit value from unaligned byte array
+*/
+#ifdef IL_BIGENDIAN
+#define load32_ua(a)   ((((uint8 *)(a))[0] << 24) + (((uint8 *)(a))[1] << 16) + \
+                       (((uint8 *)(a))[2] << 8) + ((uint8 *)(a))[3])
+#else
+#define load32_ua(a)   ((((uint8 *)(a))[3] << 24) + (((uint8 *)(a))[2] << 16) + \
+                       (((uint8 *)(a))[1] << 8) + ((uint8 *)(a))[0])
+#endif
+
+/* externs */
+extern uint bcm_atoi(char *s);
+extern uchar bcm_toupper(uchar c);
+extern ulong bcm_strtoul(char *cp, char **endp, uint base);
+extern void deadbeef(char *p, uint len);
+extern void prhex(char *msg, uchar *buf, uint len);
+extern void prpkt(char *msg, void *drv, void *p0);
+extern uint pktcopy(void *drv, void *p, uint offset, int len, uchar *buf);
+extern uint pkttotlen(void *drv, void *);
+extern uchar *bcm_ether_ntoa(char *ea, char *buf);
+extern int bcm_ether_atoe(char *p, char *ea);
+extern void bcm_mdelay(uint ms);
+extern char *getvar(char *vars, char *name);
+extern int getintvar(char *vars, char *name);
+extern char *bcmstrstr(char *haystack, char *needle);
+
+extern uint8 crc8(uint8 *p, uint nbytes, uint8 crc);
+extern uint16 crc16(uint8 *p, uint nbytes, uint16 crc);
+extern uint32 crc32(uint8 *p, uint nbytes, uint32 crc);
+extern bcm_tlv_t *bcm_next_tlv(bcm_tlv_t *elt, int *buflen);
+extern bcm_tlv_t *bcm_parse_tlvs(void *buf, int buflen, uint key);
+extern bcm_tlv_t *bcm_parse_ordered_tlvs(void *buf, int buflen, uint key);
+extern void pktq_init(struct pktq *q, uint maxlen, bool priority);
+extern bool pktenq(struct pktq *q, void *p, bool lifo);
+extern void *pktdeq(struct pktq *q);
+
+#define        bcmlog(fmt, a1, a2)
+#define        bcmdumplog(buf, size)   *buf = '\0'
+#define        bcmdumplogent(buf, idx) -1
+
+#endif /* _bcmutils_h_ */
diff --git a/openwrt/target/linux/package/openwrt/include/cy_conf.h b/openwrt/target/linux/package/openwrt/include/cy_conf.h
new file mode 100644 (file)
index 0000000..dbe387b
--- /dev/null
@@ -0,0 +1,69 @@
+
+#define        DNSMASQ_SUPPORT 1
+#define        CONFIG_DNSMASQ  y
+#define        UDHCPD_SUPPORT  1
+#define        CONFIG_UDHCPD   y
+#define        UDHCPC_SUPPORT  1
+#define        CONFIG_UDHCPC   y
+#define        PPPOE_SUPPORT   1
+#define        CONFIG_PPPOE    y
+#define        PPTP_SUPPORT    1
+#define        CONFIG_PPTP     y
+#define        L2TP_SUPPORT    1
+#define        CONFIG_L2TP     y
+#define        PPPD_SUPPORT    1
+#define        CONFIG_PPPD     y
+#define        ZEBRA_SUPPORT   1
+#define        CONFIG_ZEBRA    y
+#define        TFTPD_SUPPORT   1
+#define        CONFIG_TFTPD    y
+#define        DDNS_SUPPORT    1
+#define        CONFIG_DDNS     y
+#define        CRON_SUPPORT    1
+#define        CONFIG_CRON     y
+#define        HTTPD_SUPPORT   1
+#define        CONFIG_HTTPD    y
+#define        GET_POST_SUPPORT        1
+#define        CONFIG_GET_POST y
+
+#if 1
+#define        HEARTBEAT_SUPPORT       1
+#define        CONFIG_HEARTBEAT        y
+#define        MULTICAST_SUPPORT       1
+#define        CONFIG_MULTICAST        y
+#define        SETUP_WIZARD_SUPPORT    1
+#define        CONFIG_SETUP_WIZARD     y
+#define        PARENTAL_CONTROL_SUPPORT        1
+#define        CONFIG_PARENTAL_CONTROL y
+#define        HTTPS_SUPPORT   1
+#define        CONFIG_HTTPS    y
+#define        EOU_SUPPORT     1
+#define        CONFIG_EOU      y
+#define        EZC_SUPPORT     1
+#define        CONFIG_EZC      y
+#define        WRITE_MAC_SUPPORT       1
+#define        CONFIG_WRITE_MAC        y
+#define        DIAG_SUPPORT    1
+#define        CONFIG_DIAG     y
+#endif
+
+#define        SPEED_BOOSTER_SUPPORT   1
+#define        CONFIG_SPEED_BOOSTER    y
+#define        XBOX_SUPPORT    1
+#define        CONFIG_XBOX     y
+
+#if 0
+#define        MPPPOE_SUPPORT  1
+#define        CONFIG_MPPPOE   y
+#define        UNNUMBERIP_SUPPORT      1
+#define        CONFIG_UNNUMBERIP       y
+#endif
+
+#define        WL_STA_SUPPORT  1
+#define        CONFIG_WL_STA   y
+#define        BACKUP_RESTORE_SUPPORT  1
+#define        CONFIG_BACKUP_RESTORE   y
+#define        PORT_TRIGGER_SUPPORT    1
+#define        CONFIG_PORT_TRIGGER     y
+#define        HW_QOS_SUPPORT  1
+#define        CONFIG_HW_QOS   y
diff --git a/openwrt/target/linux/package/openwrt/include/epivers.h b/openwrt/target/linux/package/openwrt/include/epivers.h
new file mode 100644 (file)
index 0000000..e174fb5
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * 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$
+ *
+*/
+
+#ifndef _epivers_h_
+#define _epivers_h_
+
+#ifdef linux
+#include <linux/config.h>
+#endif
+
+/* Vendor Name, ASCII, 32 chars max */
+#ifdef COMPANYNAME
+#define        HPNA_VENDOR             COMPANYNAME
+#else
+#define        HPNA_VENDOR             "Broadcom Corporation"
+#endif
+
+/* Driver Date, ASCII, 32 chars max */
+#define HPNA_DRV_BUILD_DATE    __DATE__
+
+/* Hardware Manufacture Date, ASCII, 32 chars max */
+#define HPNA_HW_MFG_DATE       "Not Specified"
+
+/* See documentation for Device Type values, 32 values max */
+#ifndef        HPNA_DEV_TYPE
+
+#if    defined(CONFIG_BRCM_VJ)
+#define HPNA_DEV_TYPE          { CDCF_V0_DEVICE_DISPLAY }
+
+#elif  defined(CONFIG_BCRM_93725)
+#define HPNA_DEV_TYPE          { CDCF_V0_DEVICE_CM_BRIDGE, CDCF_V0_DEVICE_DISPLAY }
+
+#else
+#define HPNA_DEV_TYPE          { CDCF_V0_DEVICE_PCINIC }
+
+#endif
+
+#endif /* !HPNA_DEV_TYPE */
+
+
+#define        EPI_MAJOR_VERSION       3
+
+#define        EPI_MINOR_VERSION       60
+
+#define        EPI_RC_NUMBER           13
+
+#define        EPI_INCREMENTAL_NUMBER  0
+
+#define        EPI_BUILD_NUMBER        0
+
+#define        EPI_VERSION             3,60,13,0
+
+#define        EPI_VERSION_NUM         0x033c0d00
+
+/* Driver Version String, ASCII, 32 chars max */
+#define        EPI_VERSION_STR         "3.60.13.0"
+#define        EPI_ROUTER_VERSION_STR  "3.61.13.0"
+
+#endif /* _epivers_h_ */
diff --git a/openwrt/target/linux/package/openwrt/include/proto/802.11.h b/openwrt/target/linux/package/openwrt/include/proto/802.11.h
new file mode 100644 (file)
index 0000000..ea57850
--- /dev/null
@@ -0,0 +1,852 @@
+/*
+ * 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.      
+ *
+ * Fundamental types and constants relating to 802.11 
+ *
+ * $Id$
+ */
+
+#ifndef _802_11_H_
+#define _802_11_H_
+
+#ifndef _TYPEDEFS_H_
+#include <typedefs.h>
+#endif
+
+#ifndef _NET_ETHERNET_H_
+#include <proto/ethernet.h>
+#endif
+
+/* enable structure packing */
+#if !defined(__GNUC__)
+#pragma pack(1)
+#endif
+
+/* some platforms require stronger medicine */
+#if defined(__GNUC__)
+#define        PACKED  __attribute__((packed))
+#else
+#define        PACKED
+#endif
+
+
+#define DOT11_TU_TO_US                 1024    /* 802.11 Time Unit is 1024 microseconds */
+
+/* Generic 802.11 frame constants */
+#define DOT11_A3_HDR_LEN               24
+#define DOT11_A4_HDR_LEN               30
+#define DOT11_MAC_HDR_LEN              DOT11_A3_HDR_LEN
+#define DOT11_FCS_LEN                  4
+#define DOT11_ICV_LEN                  4
+#define DOT11_ICV_AES_LEN              8
+#define DOT11_QOS_LEN                  2
+
+#define DOT11_KEY_INDEX_SHIFT          6
+#define DOT11_IV_LEN                   4
+#define DOT11_IV_TKIP_LEN              8
+#define DOT11_IV_AES_OCB_LEN           4
+#define DOT11_IV_AES_CCM_LEN           8
+
+/* Includes MIC */
+#define DOT11_MAX_MPDU_BODY_LEN                2304
+/* A4 header + QoS + CCMP + PDU + ICV + FCS = 2352 */
+#define DOT11_MAX_MPDU_LEN             (DOT11_A4_HDR_LEN + \
+                                        DOT11_QOS_LEN + \
+                                        DOT11_IV_AES_CCM_LEN + \
+                                        DOT11_MAX_MPDU_BODY_LEN + \
+                                        DOT11_ICV_LEN + \
+                                        DOT11_FCS_LEN)
+
+#define DOT11_MAX_SSID_LEN             32
+
+/* dot11RTSThreshold */
+#define DOT11_DEFAULT_RTS_LEN          2347
+#define DOT11_MAX_RTS_LEN              2347
+
+/* dot11FragmentationThreshold */
+#define DOT11_MIN_FRAG_LEN             256
+#define DOT11_MAX_FRAG_LEN             2346    /* Max frag is also limited by aMPDUMaxLength of the attached PHY */
+#define DOT11_DEFAULT_FRAG_LEN         2346
+
+/* dot11BeaconPeriod */
+#define DOT11_MIN_BEACON_PERIOD                1
+#define DOT11_MAX_BEACON_PERIOD                0xFFFF
+
+/* dot11DTIMPeriod */
+#define DOT11_MIN_DTIM_PERIOD          1
+#define DOT11_MAX_DTIM_PERIOD          0xFF
+
+/* 802.2 LLC/SNAP header used by 802.11 per 802.1H */
+#define DOT11_LLC_SNAP_HDR_LEN 8
+#define DOT11_OUI_LEN                  3
+struct dot11_llc_snap_header {
+       uint8   dsap;                           /* always 0xAA */
+       uint8   ssap;                           /* always 0xAA */
+       uint8   ctl;                            /* always 0x03 */
+       uint8   oui[DOT11_OUI_LEN];             /* RFC1042: 0x00 0x00 0x00
+                                                  Bridge-Tunnel: 0x00 0x00 0xF8 */
+       uint16  type;                           /* ethertype */
+} PACKED;
+
+/* RFC1042 header used by 802.11 per 802.1H */
+#define RFC1042_HDR_LEN                        (ETHER_HDR_LEN + DOT11_LLC_SNAP_HDR_LEN)
+
+/* Generic 802.11 MAC header */
+/*
+ * N.B.: This struct reflects the full 4 address 802.11 MAC header.
+ *              The fields are defined such that the shorter 1, 2, and 3
+ *              address headers just use the first k fields.
+ */
+struct dot11_header {
+       uint16                  fc;             /* frame control */
+       uint16                  durid;          /* duration/ID */
+       struct ether_addr       a1;             /* address 1 */
+       struct ether_addr       a2;             /* address 2 */
+       struct ether_addr       a3;             /* address 3 */
+       uint16                  seq;            /* sequence control */
+       struct ether_addr       a4;             /* address 4 */
+} PACKED;
+
+/* Control frames */
+
+struct dot11_rts_frame {
+       uint16                  fc;             /* frame control */
+       uint16                  durid;          /* duration/ID */
+       struct ether_addr       ra;             /* receiver address */
+       struct ether_addr       ta;             /* transmitter address */
+} PACKED;
+#define        DOT11_RTS_LEN           16
+
+struct dot11_cts_frame {
+       uint16                  fc;             /* frame control */
+       uint16                  durid;          /* duration/ID */
+       struct ether_addr       ra;             /* receiver address */
+} PACKED;
+#define        DOT11_CTS_LEN           10
+
+struct dot11_ack_frame {
+       uint16                  fc;             /* frame control */
+       uint16                  durid;          /* duration/ID */
+       struct ether_addr       ra;             /* receiver address */
+} PACKED;
+#define        DOT11_ACK_LEN           10
+
+struct dot11_ps_poll_frame {
+       uint16                  fc;             /* frame control */
+       uint16                  durid;          /* AID */
+       struct ether_addr       bssid;          /* receiver address, STA in AP */
+       struct ether_addr       ta;             /* transmitter address */
+} PACKED;
+#define        DOT11_PS_POLL_LEN       16
+
+struct dot11_cf_end_frame {
+       uint16                  fc;             /* frame control */
+       uint16                  durid;          /* duration/ID */
+       struct ether_addr       ra;             /* receiver address */
+       struct ether_addr       bssid;          /* transmitter address, STA in AP */
+} PACKED;
+#define        DOT11_CS_END_LEN        16
+
+/* Management frame header */
+struct dot11_management_header {
+       uint16                  fc;             /* frame control */
+       uint16                  durid;          /* duration/ID */
+       struct ether_addr       da;             /* receiver address */
+       struct ether_addr       sa;             /* transmitter address */
+       struct ether_addr       bssid;          /* BSS ID */
+       uint16                  seq;            /* sequence control */
+} PACKED;
+#define        DOT11_MGMT_HDR_LEN      24
+
+/* Management frame payloads */
+
+struct dot11_bcn_prb {
+       uint32                  timestamp[2];
+       uint16                  beacon_interval;
+       uint16                  capability;
+} PACKED;
+#define        DOT11_BCN_PRB_LEN       12
+
+struct dot11_auth {
+       uint16                  alg;            /* algorithm */
+       uint16                  seq;            /* sequence control */
+       uint16                  status;         /* status code */
+} PACKED;
+#define DOT11_AUTH_FIXED_LEN   6               /* length of auth frame without challenge info elt */
+
+struct dot11_assoc_req {
+       uint16                  capability;     /* capability information */
+       uint16                  listen;         /* listen interval */
+} PACKED;
+
+struct dot11_assoc_resp {
+       uint16                  capability;     /* capability information */
+       uint16                  status;         /* status code */
+       uint16                  aid;            /* association ID */
+} PACKED;
+
+struct dot11_action_measure {
+       uint8   category;
+       uint8   action;
+       uint8   token;
+       uint8   data[1];
+} PACKED;
+#define DOT11_ACTION_MEASURE_LEN       3
+
+/**************
+  802.11h related definitions.
+**************/
+typedef struct {
+       uint8 id;
+       uint8 len;
+       uint8 power;
+} dot11_power_cnst_t;
+
+typedef struct {
+       uint8 min;
+       uint8 max;
+} dot11_power_cap_t;
+
+typedef struct {
+       uint8 id;
+       uint8 len;
+       uint8 tx_pwr;
+       uint8 margin;
+} dot11_tpc_rep_t;
+#define DOT11_MNG_IE_TPC_REPORT_LEN    2       /* length of IE data, not including 2 byte header */
+
+typedef struct {
+       uint8 id;
+       uint8 len;
+       uint8 first_channel;
+       uint8 num_channels;
+} dot11_supp_channels_t;
+
+struct dot11_channel_switch {
+       uint8 id;
+       uint8 len;
+       uint8 mode;
+       uint8 channel;
+       uint8 count;
+}  PACKED;
+typedef struct dot11_channel_switch dot11_channel_switch_t;
+
+/* 802.11h Measurement Request/Report IEs */
+/* Measurement Type field */
+#define DOT11_MEASURE_TYPE_BASIC       0
+#define DOT11_MEASURE_TYPE_CCA                 1
+#define DOT11_MEASURE_TYPE_RPI         2
+
+/* Measurement Mode field */
+
+/* Measurement Request Modes */
+#define DOT11_MEASURE_MODE_ENABLE      (1<<1)
+#define DOT11_MEASURE_MODE_REQUEST     (1<<2)
+#define DOT11_MEASURE_MODE_REPORT      (1<<3)
+/* Measurement Report Modes */
+#define DOT11_MEASURE_MODE_LATE        (1<<0)
+#define DOT11_MEASURE_MODE_INCAPABLE   (1<<1)
+#define DOT11_MEASURE_MODE_REFUSED     (1<<2)
+/* Basic Measurement Map bits */
+#define DOT11_MEASURE_BASIC_MAP_BSS    ((uint8)(1<<0))
+#define DOT11_MEASURE_BASIC_MAP_OFDM   ((uint8)(1<<1))
+#define DOT11_MEASURE_BASIC_MAP_UKNOWN ((uint8)(1<<2))
+#define DOT11_MEASURE_BASIC_MAP_RADAR  ((uint8)(1<<3))
+#define DOT11_MEASURE_BASIC_MAP_UNMEAS ((uint8)(1<<4))
+
+typedef struct {
+       uint8 id;
+       uint8 len;
+       uint8 token;
+       uint8 mode;
+       uint8 type;
+       uint8 channel;
+       uint8 start_time[8];
+       uint16 duration;
+} dot11_meas_req_t;
+#define DOT11_MNG_IE_MREQ_LEN 14
+/* length of Measure Request IE data not including variable len */
+#define DOT11_MNG_IE_MREQ_FIXED_LEN 3
+
+struct dot11_meas_rep {
+       uint8 id;
+       uint8 len;
+       uint8 token;
+       uint8 mode;
+       uint8 type;
+       union 
+       {
+               struct {
+                       uint8 channel;
+                       uint8 start_time[8];
+                       uint16 duration;
+                       uint8 map;
+               } PACKED basic;
+               uint8 data[1];
+       } PACKED rep;
+} PACKED;
+typedef struct dot11_meas_rep dot11_meas_rep_t;
+
+/* length of Measure Report IE data not including variable len */
+#define DOT11_MNG_IE_MREP_FIXED_LEN    3
+
+struct dot11_meas_rep_basic {
+       uint8 channel;
+       uint8 start_time[8];
+       uint16 duration;
+       uint8 map;
+} PACKED;
+typedef struct dot11_meas_rep_basic dot11_meas_rep_basic_t;
+#define DOT11_MEASURE_BASIC_REP_LEN    12
+
+struct dot11_quiet {
+       uint8 id;
+       uint8 len;
+       uint8 count;    /* TBTTs until beacon interval in quiet starts */
+       uint8 period;   /* Beacon intervals between periodic quiet periods ? */
+       uint16 duration;/* Length of quiet period, in TU's */
+       uint16 offset;  /* TU's offset from TBTT in Count field */
+} PACKED;
+typedef struct dot11_quiet dot11_quiet_t;
+
+typedef struct {
+       uint8 channel;
+       uint8 map;
+} chan_map_tuple_t;
+
+typedef struct {
+       uint8 id;
+       uint8 len;
+       uint8 eaddr[ETHER_ADDR_LEN];
+       uint8 interval;
+       chan_map_tuple_t map[1];
+} dot11_ibss_dfs_t;
+
+/* WME Elements */
+#define WME_OUI                        "\x00\x50\xf2"
+#define WME_VER                        1
+#define WME_TYPE               2
+#define WME_SUBTYPE_IE         0       /* Information Element */
+#define WME_SUBTYPE_PARAM_IE   1       /* Parameter Element */
+#define WME_SUBTYPE_TSPEC      2       /* Traffic Specification */
+
+/* WME Access Category Indices (ACIs) */
+#define AC_BE                  0       /* Best Effort */
+#define AC_BK                  1       /* Background */
+#define AC_VI                  2       /* Video */
+#define AC_VO                  3       /* Voice */
+#define AC_MAX                 4
+
+/* WME Information Element (IE) */
+struct wme_ie {
+       uint8 oui[3];
+       uint8 type;
+       uint8 subtype;
+       uint8 version;
+       uint8 acinfo;
+} PACKED;
+typedef struct wme_ie wme_ie_t;
+#define WME_IE_LEN 7
+
+struct wme_acparam {
+       uint8   ACI;
+       uint8   ECW;
+       uint16  TXOP;           /* stored in network order (ls octet first) */
+} PACKED;
+typedef struct wme_acparam wme_acparam_t;
+
+/* WME Parameter Element (PE) */
+struct wme_params {
+       uint8 oui[3];
+       uint8 type;
+       uint8 subtype;
+       uint8 version;
+       uint8 acinfo;
+       uint8 rsvd;
+       wme_acparam_t acparam[4];
+} PACKED;
+typedef struct wme_params wme_params_t;
+#define WME_PARAMS_IE_LEN      24
+
+/* acinfo */
+#define WME_COUNT_MASK         0x0f
+/* ACI */
+#define WME_AIFS_MASK  0x0f
+#define WME_ACM_MASK   0x10
+#define WME_ACI_MASK   0x60
+#define WME_ACI_SHIFT  5
+/* ECW */
+#define WME_CWMIN_MASK 0x0f
+#define WME_CWMAX_MASK 0xf0
+#define WME_CWMAX_SHIFT        4
+
+#define WME_TXOP_UNITS 32
+
+/* WME Traffic Specification (TSPEC) element */
+#define WME_SUBTYPE_TSPEC 2
+#define WME_TSPEC_HDR_LEN              2
+#define WME_TSPEC_BODY_OFF             2
+struct wme_tspec {
+       uint8 oui[DOT11_OUI_LEN];       /* WME_OUI */
+       uint8 type;                     /* WME_TYPE */
+       uint8 subtype;                  /* WME_SUBTYPE_TSPEC */
+       uint8 version;                  /* WME_VERSION */
+       uint16 ts_info;                 /* TS Info */
+       uint16 nom_msdu_size;           /* (Nominal or fixed) MSDU Size (bytes) */
+       uint16 max_msdu_size;           /* Maximum MSDU Size (bytes) */
+       uint32 min_service_interval;    /* Minimum Service Interval (us) */
+       uint32 max_service_interval;    /* Maximum Service Interval (us) */
+       uint32 inactivity_interval;     /* Inactivity Interval (us) */
+       uint32 service_start;           /* Service Start Time (us) */
+       uint32 min_rate;                /* Minimum Data Rate (bps) */
+       uint32 mean_rate;               /* Mean Data Rate (bps) */
+       uint32 max_burst_size;          /* Maximum Burst Size (bytes) */
+       uint32 min_phy_rate;            /* Minimum PHY Rate (bps) */
+       uint32 peak_rate;               /* Peak Data Rate (bps) */
+       uint32 delay_bound;             /* Delay Bound (us) */
+       uint16 surplus_bandwidth;       /* Surplus Bandwidth Allowance Factor */
+       uint16 medium_time;             /* Medium Time (32 us/s periods) */
+} PACKED;
+typedef struct wme_tspec wme_tspec_t;
+#define WME_TSPEC_LEN 56               /* not including 2-byte header */
+
+/* ts_info */
+/* 802.1D priority is duplicated - bits 13-11 AND bits 3-1 */
+#define TS_INFO_PRIO_SHIFT_HI          11
+#define TS_INFO_PRIO_MASK_HI           (0x7 << TS_INFO_PRIO_SHIFT_HI)
+#define TS_INFO_PRIO_SHIFT_LO          1
+#define TS_INFO_PRIO_MASK_LO           (0x7 << TS_INFO_PRIO_SHIFT_LO)
+#define TS_INFO_CONTENTION_SHIFT       7
+#define TS_INFO_CONTENTION_MASK                (0x1 << TS_INFO_CONTENTION_SHIFT)
+#define TS_INFO_DIRECTION_SHIFT                5
+#define TS_INFO_DIRECTION_MASK         (0x3 << TS_INFO_DIRECTION_SHIFT)
+#define TS_INFO_UPLINK                 (0 << TS_INFO_DIRECTION_SHIFT)
+#define TS_INFO_DOWNLINK               (1 << TS_INFO_DIRECTION_SHIFT)
+#define TS_INFO_BIDIRECTIONAL          (3 << TS_INFO_DIRECTION_SHIFT)
+
+/* nom_msdu_size */
+#define FIXED_MSDU_SIZE 0x8000         /* MSDU size is fixed */
+#define MSDU_SIZE_MASK 0x7fff          /* (Nominal or fixed) MSDU size */
+
+/* surplus_bandwidth */
+/* Represented as 3 bits of integer, binary point, 13 bits fraction */
+#define        INTEGER_SHIFT   13
+#define FRACTION_MASK  0x1FFF
+
+/* Management Notification Frame */
+struct dot11_management_notification {
+       uint8 category;                 /* DOT11_ACTION_NOTIFICATION */
+       uint8 action;
+       uint8 token;
+       uint8 status;
+       uint8 data[1];                  /* Elements */
+} PACKED;
+#define DOT11_MGMT_NOTIFICATION_LEN 4  /* Fixed length */
+
+/* WME Action Codes */
+#define WME_SETUP_REQUEST      0
+#define WME_SETUP_RESPONSE     1
+#define WME_TEARDOWN           2
+
+/* WME Setup Response Status Codes */
+#define WME_ADMISSION_ACCEPTED 0
+#define WME_INVALID_PARAMETERS 1
+#define WME_ADMISSION_REFUSED  3
+
+/* Macro to take a pointer to a beacon or probe response
+ * header and return the char* pointer to the SSID info element
+ */
+#define BCN_PRB_SSID(hdr) ((char*)(hdr) + DOT11_MGMT_HDR_LEN + DOT11_BCN_PRB_LEN)
+
+/* Authentication frame payload constants */
+#define DOT11_OPEN_SYSTEM      0
+#define DOT11_SHARED_KEY       1
+#define DOT11_CHALLENGE_LEN    128
+
+/* Frame control macros */
+#define FC_PVER_MASK           0x3
+#define FC_PVER_SHIFT          0
+#define FC_TYPE_MASK           0xC
+#define FC_TYPE_SHIFT          2
+#define FC_SUBTYPE_MASK                0xF0
+#define FC_SUBTYPE_SHIFT       4
+#define FC_TODS                        0x100
+#define FC_TODS_SHIFT          8
+#define FC_FROMDS              0x200
+#define FC_FROMDS_SHIFT                9
+#define FC_MOREFRAG            0x400
+#define FC_MOREFRAG_SHIFT      10
+#define FC_RETRY               0x800
+#define FC_RETRY_SHIFT         11
+#define FC_PM                  0x1000
+#define FC_PM_SHIFT            12
+#define FC_MOREDATA            0x2000
+#define FC_MOREDATA_SHIFT      13
+#define FC_WEP                 0x4000
+#define FC_WEP_SHIFT           14
+#define FC_ORDER               0x8000
+#define FC_ORDER_SHIFT         15
+
+/* sequence control macros */
+#define SEQNUM_SHIFT           4
+#define FRAGNUM_MASK           0xF
+
+/* Frame Control type/subtype defs */
+
+/* FC Types */
+#define FC_TYPE_MNG            0
+#define FC_TYPE_CTL            1
+#define FC_TYPE_DATA           2
+
+/* Management Subtypes */
+#define FC_SUBTYPE_ASSOC_REQ           0
+#define FC_SUBTYPE_ASSOC_RESP          1
+#define FC_SUBTYPE_REASSOC_REQ         2
+#define FC_SUBTYPE_REASSOC_RESP                3
+#define FC_SUBTYPE_PROBE_REQ           4
+#define FC_SUBTYPE_PROBE_RESP          5
+#define FC_SUBTYPE_BEACON              8
+#define FC_SUBTYPE_ATIM                        9
+#define FC_SUBTYPE_DISASSOC            10
+#define FC_SUBTYPE_AUTH                        11
+#define FC_SUBTYPE_DEAUTH              12
+#define FC_SUBTYPE_ACTION              13
+
+/* Control Subtypes */
+#define FC_SUBTYPE_PS_POLL             10
+#define FC_SUBTYPE_RTS                 11
+#define FC_SUBTYPE_CTS                 12
+#define FC_SUBTYPE_ACK                 13
+#define FC_SUBTYPE_CF_END              14
+#define FC_SUBTYPE_CF_END_ACK          15
+
+/* Data Subtypes */
+#define FC_SUBTYPE_DATA                        0
+#define FC_SUBTYPE_DATA_CF_ACK         1
+#define FC_SUBTYPE_DATA_CF_POLL                2
+#define FC_SUBTYPE_DATA_CF_ACK_POLL    3
+#define FC_SUBTYPE_NULL                        4
+#define FC_SUBTYPE_CF_ACK              5
+#define FC_SUBTYPE_CF_POLL             6
+#define FC_SUBTYPE_CF_ACK_POLL         7
+#define FC_SUBTYPE_QOS_DATA            8
+#define FC_SUBTYPE_QOS_NULL            12
+
+/* type-subtype combos */
+#define FC_KIND_MASK           (FC_TYPE_MASK | FC_SUBTYPE_MASK)
+
+#define FC_KIND(t, s) (((t) << FC_TYPE_SHIFT) | ((s) << FC_SUBTYPE_SHIFT))
+
+#define FC_ASSOC_REQ   FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ASSOC_REQ)
+#define FC_ASSOC_RESP  FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ASSOC_RESP)
+#define FC_REASSOC_REQ FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_REASSOC_REQ)
+#define FC_REASSOC_RESP        FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_REASSOC_RESP)
+#define FC_PROBE_REQ   FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_PROBE_REQ)
+#define FC_PROBE_RESP  FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_PROBE_RESP)
+#define FC_BEACON      FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_BEACON)
+#define FC_DISASSOC    FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_DISASSOC)
+#define FC_AUTH                FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_AUTH)
+#define FC_DEAUTH      FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_DEAUTH)
+#define FC_ACTION      FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ACTION)
+
+#define FC_PS_POLL     FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_PS_POLL)
+#define FC_RTS         FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_RTS)
+#define FC_CTS         FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CTS)
+#define FC_ACK         FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_ACK)
+#define FC_CF_END      FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CF_END)
+#define FC_CF_END_ACK  FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CF_END_ACK)
+
+#define FC_DATA                FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_DATA)
+#define FC_NULL_DATA   FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_NULL)
+#define FC_DATA_CF_ACK FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_DATA_CF_ACK)
+#define FC_QOS_DATA    FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_QOS_DATA)
+#define FC_QOS_NULL    FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_QOS_NULL)
+
+/* QoS Control Field */
+
+/* 802.1D Tag */
+#define QOS_PRIO_SHIFT         0
+#define QOS_PRIO_MASK          0x0007
+#define QOS_PRIO(qos)          (((qos) & QOS_PRIO_MASK) >> QOS_PRIO_SHIFT)
+
+/* Ack Policy (0 means Acknowledge) */
+#define QOS_ACK_SHIFT          5
+#define QOS_ACK_MASK           0x0060
+#define QOS_ACK(qos)           (((qos) & QOS_ACK_MASK) >> QOS_ACK_SHIFT)
+
+/* Management Frames */
+
+/* Management Frame Constants */
+
+/* Fixed fields */
+#define DOT11_MNG_AUTH_ALGO_LEN                2
+#define DOT11_MNG_AUTH_SEQ_LEN         2
+#define DOT11_MNG_BEACON_INT_LEN       2
+#define DOT11_MNG_CAP_LEN              2
+#define DOT11_MNG_AP_ADDR_LEN          6
+#define DOT11_MNG_LISTEN_INT_LEN       2
+#define DOT11_MNG_REASON_LEN           2
+#define DOT11_MNG_AID_LEN              2
+#define DOT11_MNG_STATUS_LEN           2
+#define DOT11_MNG_TIMESTAMP_LEN                8
+
+/* DUR/ID field in assoc resp is 0xc000 | AID */
+#define DOT11_AID_MASK                 0x3fff
+
+/* Reason Codes */
+#define DOT11_RC_RESERVED                      0
+#define DOT11_RC_UNSPECIFIED                   1       /* Unspecified reason */
+#define DOT11_RC_AUTH_INVAL                    2       /* Previous authentication no longer valid */
+#define DOT11_RC_DEAUTH_LEAVING                        3       /* Deauthenticated because sending station is
+                                                          leaving (or has left) IBSS or ESS */
+#define DOT11_RC_INACTIVITY                    4       /* Disassociated due to inactivity */
+#define DOT11_RC_BUSY                          5       /* Disassociated because AP is unable to handle
+                                                          all currently associated stations */
+#define DOT11_RC_INVAL_CLASS_2                 6       /* Class 2 frame received from
+                                                          nonauthenticated station */
+#define DOT11_RC_INVAL_CLASS_3                 7       /* Class 3 frame received from
+                                                          nonassociated station */
+#define DOT11_RC_DISASSOC_LEAVING              8       /* Disassociated because sending station is
+                                                          leaving (or has left) BSS */
+#define DOT11_RC_NOT_AUTH                      9       /* Station requesting (re)association is
+                                                          not authenticated with responding station */
+#define DOT11_RC_MAX                           23      /* Reason codes > 23 are reserved */
+
+/* Status Codes */
+#define DOT11_STATUS_SUCCESS                   0       /* Successful */
+#define DOT11_STATUS_FAILURE                   1       /* Unspecified failure */
+#define DOT11_STATUS_CAP_MISMATCH              10      /* Cannot support all requested capabilities
+                                                          in the Capability Information field */
+#define DOT11_STATUS_REASSOC_FAIL              11      /* Reassociation denied due to inability to
+                                                          confirm that association exists */
+#define DOT11_STATUS_ASSOC_FAIL                        12      /* Association denied due to reason outside
+                                                          the scope of this standard */
+#define DOT11_STATUS_AUTH_MISMATCH             13      /* Responding station does not support the
+                                                          specified authentication algorithm */
+#define DOT11_STATUS_AUTH_SEQ                  14      /* Received an Authentication frame with
+                                                          authentication transaction sequence number
+                                                          out of expected sequence */
+#define DOT11_STATUS_AUTH_CHALLENGE_FAIL       15      /* Authentication rejected because of challenge failure */
+#define DOT11_STATUS_AUTH_TIMEOUT              16      /* Authentication rejected due to timeout waiting
+                                                          for next frame in sequence */
+#define DOT11_STATUS_ASSOC_BUSY_FAIL           17      /* Association denied because AP is unable to
+                                                          handle additional associated stations */
+#define DOT11_STATUS_ASSOC_RATE_MISMATCH       18      /* Association denied due to requesting station
+                                                          not supporting all of the data rates in the
+                                                          BSSBasicRateSet parameter */
+#define DOT11_STATUS_ASSOC_SHORT_REQUIRED      19      /* Association denied due to requesting station
+                                                          not supporting the Short Preamble option */
+#define DOT11_STATUS_ASSOC_PBCC_REQUIRED       20      /* Association denied due to requesting station
+                                                          not supporting the PBCC Modulation option */
+#define DOT11_STATUS_ASSOC_AGILITY_REQUIRED    21      /* Association denied due to requesting station
+                                                          not supporting the Channel Agility option */
+#define DOT11_STATUS_ASSOC_SPECTRUM_REQUIRED   22      /* Association denied because Spectrum Management 
+                                                          capability is required. */
+#define DOT11_STATUS_ASSOC_BAD_POWER_CAP       23      /* Association denied because the info in the 
+                                                          Power Cap element is unacceptable. */
+#define DOT11_STATUS_ASSOC_BAD_SUP_CHANNELS    24      /* Association denied because the info in the 
+                                                          Supported Channel element is unacceptable */
+#define DOT11_STATUS_ASSOC_SHORTSLOT_REQUIRED  25      /* Association denied due to requesting station
+                                                          not supporting the Short Slot Time option */
+#define DOT11_STATUS_ASSOC_ERPBCC_REQUIRED     26      /* Association denied due to requesting station
+                                                          not supporting the ER-PBCC Modulation option */
+#define DOT11_STATUS_ASSOC_DSSOFDM_REQUIRED    27      /* Association denied due to requesting station
+                                                          not supporting the DSS-OFDM option */
+
+/* Info Elts, length of INFORMATION portion of Info Elts */
+#define DOT11_MNG_DS_PARAM_LEN                 1
+#define DOT11_MNG_IBSS_PARAM_LEN               2
+
+/* TIM Info element has 3 bytes fixed info in INFORMATION field,
+ * followed by 1 to 251 bytes of Partial Virtual Bitmap */
+#define DOT11_MNG_TIM_FIXED_LEN                        3
+#define DOT11_MNG_TIM_DTIM_COUNT               0
+#define DOT11_MNG_TIM_DTIM_PERIOD              1
+#define DOT11_MNG_TIM_BITMAP_CTL               2
+#define DOT11_MNG_TIM_PVB                      3
+
+/* TLV defines */
+#define TLV_TAG_OFF            0
+#define TLV_LEN_OFF            1
+#define TLV_HDR_LEN            2
+#define TLV_BODY_OFF           2
+
+/* Management Frame Information Element IDs */
+#define DOT11_MNG_SSID_ID                      0
+#define DOT11_MNG_RATES_ID                     1
+#define DOT11_MNG_FH_PARMS_ID                  2
+#define DOT11_MNG_DS_PARMS_ID                  3
+#define DOT11_MNG_CF_PARMS_ID                  4
+#define DOT11_MNG_TIM_ID                       5
+#define DOT11_MNG_IBSS_PARMS_ID                        6
+#define DOT11_MNG_COUNTRY_ID                   7
+#define DOT11_MNG_HOPPING_PARMS_ID             8
+#define DOT11_MNG_HOPPING_TABLE_ID             9
+#define DOT11_MNG_REQUEST_ID                   10
+#define DOT11_MNG_CHALLENGE_ID                 16
+#define DOT11_MNG_PWR_CONSTRAINT_ID            32    /* 11H PowerConstraint    */
+#define DOT11_MNG_PWR_CAP_ID                   33    /* 11H PowerCapability    */
+#define DOT11_MNG_TPC_REQUEST_ID               34    /* 11H TPC Request        */
+#define DOT11_MNG_TPC_REPORT_ID                        35    /* 11H TPC Report         */
+#define DOT11_MNG_SUPP_CHANNELS_ID             36    /* 11H Supported Channels */
+#define DOT11_MNG_CHANNEL_SWITCH_ID            37    /* 11H ChannelSwitch Announcement*/
+#define DOT11_MNG_MEASURE_REQUEST_ID           38    /* 11H MeasurementRequest */
+#define DOT11_MNG_MEASURE_REPORT_ID            39    /* 11H MeasurementReport  */
+#define DOT11_MNG_QUIET_ID                     40    /* 11H Quiet              */
+#define DOT11_MNG_IBSS_DFS_ID                  41    /* 11H IBSS_DFS           */
+#define DOT11_MNG_ERP_ID                       42
+#define DOT11_MNG_NONERP_ID                    47
+#define DOT11_MNG_EXT_RATES_ID                 50
+#define DOT11_MNG_WPA_ID                       221
+#define DOT11_MNG_PROPR_ID                     221
+
+/* ERP info element bit values */
+#define DOT11_MNG_ERP_LEN                      1       /* ERP is currently 1 byte long */
+#define DOT11_MNG_NONERP_PRESENT               0x01    /* NonERP (802.11b) STAs are present in the BSS */
+#define DOT11_MNG_USE_PROTECTION               0x02    /* Use protection mechanisms for ERP-OFDM frames */
+#define DOT11_MNG_BARKER_PREAMBLE              0x04    /* Short Preambles: 0 == allowed, 1 == not allowed */
+
+/* Capability Information Field */
+#define DOT11_CAP_ESS                          0x0001
+#define DOT11_CAP_IBSS                         0x0002
+#define DOT11_CAP_POLLABLE                     0x0004
+#define DOT11_CAP_POLL_RQ                      0x0008
+#define DOT11_CAP_PRIVACY                      0x0010
+#define DOT11_CAP_SHORT                                0x0020
+#define DOT11_CAP_PBCC                         0x0040
+#define DOT11_CAP_AGILITY                      0x0080
+#define DOT11_CAP_SPECTRUM                     0x0100
+#define DOT11_CAP_SHORTSLOT                    0x0400
+#define DOT11_CAP_CCK_OFDM                     0x2000
+
+/* Action Frame Constants */
+#define DOT11_ACTION_CAT_ERR_MASK      0x80
+#define DOT11_ACTION_CAT_SPECT_MNG     0x00
+#define DOT11_ACTION_NOTIFICATION      0x11    /* 17 */
+
+#define DOT11_ACTION_ID_M_REQ          0
+#define DOT11_ACTION_ID_M_REP          1
+#define DOT11_ACTION_ID_TPC_REQ                2
+#define DOT11_ACTION_ID_TPC_REP                3
+#define DOT11_ACTION_ID_CHANNEL_SWITCH 4
+
+/* MLME Enumerations */
+#define DOT11_BSSTYPE_INFRASTRUCTURE           0
+#define DOT11_BSSTYPE_INDEPENDENT              1
+#define DOT11_BSSTYPE_ANY                      2
+#define DOT11_SCANTYPE_ACTIVE                  0
+#define DOT11_SCANTYPE_PASSIVE                 1
+
+/* 802.11 A PHY constants */
+#define APHY_SLOT_TIME         9
+#define APHY_SIFS_TIME         16
+#define APHY_DIFS_TIME         (APHY_SIFS_TIME + (2 * APHY_SLOT_TIME))
+#define APHY_PREAMBLE_TIME     16
+#define APHY_SIGNAL_TIME       4
+#define APHY_SYMBOL_TIME       4
+#define APHY_SERVICE_NBITS     16
+#define APHY_TAIL_NBITS                6
+#define        APHY_CWMIN              15
+
+/* 802.11 B PHY constants */
+#define BPHY_SLOT_TIME         20
+#define BPHY_SIFS_TIME         10
+#define BPHY_DIFS_TIME         50
+#define BPHY_PLCP_TIME         192
+#define BPHY_PLCP_SHORT_TIME   96
+#define        BPHY_CWMIN              31
+
+/* 802.11 G constants */
+#define DOT11_OFDM_SIGNAL_EXTENSION    6
+
+#define PHY_CWMAX              1023
+
+#define        DOT11_MAXNUMFRAGS       16      /* max # fragments per MSDU */
+
+/* dot11Counters Table - 802.11 spec., Annex D */
+typedef struct d11cnt {
+       uint32          txfrag;         /* dot11TransmittedFragmentCount */
+       uint32          txmulti;        /* dot11MulticastTransmittedFrameCount */
+       uint32          txfail;         /* dot11FailedCount */
+       uint32          txretry;        /* dot11RetryCount */
+       uint32          txretrie;       /* dot11MultipleRetryCount */
+       uint32          rxdup;          /* dot11FrameduplicateCount */
+       uint32          txrts;          /* dot11RTSSuccessCount */
+       uint32          txnocts;        /* dot11RTSFailureCount */
+       uint32          txnoack;        /* dot11ACKFailureCount */
+       uint32          rxfrag;         /* dot11ReceivedFragmentCount */
+       uint32          rxmulti;        /* dot11MulticastReceivedFrameCount */
+       uint32          rxcrc;          /* dot11FCSErrorCount */
+       uint32          txfrmsnt;       /* dot11TransmittedFrameCount */
+       uint32          rxundec;        /* dot11WEPUndecryptableCount */
+} d11cnt_t;
+
+/* BRCM OUI */
+#define BRCM_OUI               "\x00\x10\x18"
+
+/* BRCM info element */
+struct brcm_ie {
+       uchar   id;             
+       uchar   len;   
+       uchar   oui[3];
+       uchar   ver;
+       uchar   assoc;          /*  # of assoc STAs */
+       uchar   flags;          /* misc flags */
+} PACKED;
+#define BRCM_IE_LEN            8
+typedef        struct brcm_ie brcm_ie_t;
+#define BRCM_IE_VER            1
+
+/* brcm_ie flags */
+#define        BRF_ABCAP               0x1     /* afterburner capable */
+#define        BRF_ABRQRD              0x2     /* afterburner requested */
+
+/* WPA definitions */
+#define WPA_VERSION            1
+#define WPA_OUI                        "\x00\x50\xF2"
+
+#define WPA_OUI_LEN    3
+
+/* WPA authentication modes */
+#define WPA_AUTH_NONE          0       /* None */
+#define WPA_AUTH_UNSPECIFIED   1       /* Unspecified authentication over 802.1X: default for WPA */
+#define WPA_AUTH_PSK           2       /* Pre-shared Key over 802.1X */
+#define WPA_AUTH_DISABLED      255     /* Legacy (i.e., non-WPA) */
+                                
+#define IS_WPA_AUTH(auth)      ((auth) == WPA_AUTH_NONE || \
+                                (auth) == WPA_AUTH_UNSPECIFIED || \
+                                (auth) == WPA_AUTH_PSK)
+
+
+/* Key related defines */
+#define DOT11_MAX_DEFAULT_KEYS 4       /* number of default keys */
+#define DOT11_MAX_KEY_SIZE     32      /* max size of any key */
+#define DOT11_MAX_IV_SIZE      16      /* max size of any IV */
+#define DOT11_EXT_IV_FLAG      (1<<5)  /* flag to indicate IV is > 4 bytes */
+
+#define WEP1_KEY_SIZE          5       /* max size of any WEP key */
+#define WEP1_KEY_HEX_SIZE      10      /* size of WEP key in hex. */
+#define WEP128_KEY_SIZE                13      /* max size of any WEP key */
+#define WEP128_KEY_HEX_SIZE    26      /* size of WEP key in hex. */
+#define TKIP_MIC_SIZE          8       /* size of TKIP MIC */
+#define TKIP_EOM_SIZE          7       /* max size of TKIP EOM */
+#define TKIP_EOM_FLAG          0x5a    /* TKIP EOM flag byte */
+#define TKIP_KEY_SIZE          32      /* size of any TKIP key */
+#define TKIP_MIC_AUTH_TX       16      /* offset to Authenticator MIC TX key */
+#define TKIP_MIC_AUTH_RX       24      /* offset to Authenticator MIC RX key */
+#define TKIP_MIC_SUP_RX                16      /* offset to Supplicant MIC RX key */
+#define TKIP_MIC_SUP_TX                24      /* offset to Supplicant MIC TX key */
+#define AES_KEY_SIZE           16      /* size of AES key */
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* _802_11_H_ */
diff --git a/openwrt/target/linux/package/openwrt/include/proto/ethernet.h b/openwrt/target/linux/package/openwrt/include/proto/ethernet.h
new file mode 100644 (file)
index 0000000..173464a
--- /dev/null
@@ -0,0 +1,179 @@
+/*******************************************************************************
+ * $Id$
+ * 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.      
+ * From FreeBSD 2.2.7: Fundamental constants relating to ethernet.
+ ******************************************************************************/
+
+#ifndef _NET_ETHERNET_H_           /* use native BSD ethernet.h when available */
+#define _NET_ETHERNET_H_
+
+#ifndef _TYPEDEFS_H_
+#include "typedefs.h"
+#endif
+
+#if defined(__GNUC__)
+#define        PACKED  __attribute__((packed))
+#else
+#define        PACKED
+#endif
+
+/*
+ * The number of bytes in an ethernet (MAC) address.
+ */
+#ifndef ETHER_ADDR_LEN
+#define        ETHER_ADDR_LEN          6
+#endif
+
+/*
+ * The number of bytes in the type field.
+ */
+#ifndef        ETHER_TYPE_LEN
+#define        ETHER_TYPE_LEN          2
+#endif
+
+/*
+ * The number of bytes in the trailing CRC field.
+ */
+#ifndef        ETHER_CRC_LEN
+#define        ETHER_CRC_LEN           4
+#endif
+
+/*
+ * The length of the combined header.
+ */
+#ifndef        ETHER_HDR_LEN
+#define        ETHER_HDR_LEN           (ETHER_ADDR_LEN*2+ETHER_TYPE_LEN)
+#endif
+
+/*
+ * The minimum packet length.
+ */
+#ifndef ETHER_MIN_LEN
+#define        ETHER_MIN_LEN           64
+#endif
+
+/*
+ * The minimum packet user data length.
+ */
+#ifndef ETHER_MIN_DATA
+#define        ETHER_MIN_DATA          46
+#endif
+
+/*
+ * The maximum packet length.
+ */
+#ifndef ETHER_MAX_LEN
+#define        ETHER_MAX_LEN           1518
+#endif
+
+/*
+ * The maximum packet user data length.
+ */
+#define        ETHER_MAX_DATA          1500
+
+/*
+ * Used to uniquely identify a 802.1q VLAN-tagged header.
+ */
+#define        VLAN_TAG                        0x8100
+
+/*
+ * Located after dest & src address in ether header.
+ */
+#define VLAN_FIELDS_OFFSET             (ETHER_ADDR_LEN * 2)
+
+/*
+ * 4 bytes of vlan field info.
+ */
+#define VLAN_FIELDS_SIZE               4
+
+/* location of bits in 16-bit vlan fields */
+#define VLAN_PRI_SHIFT         13      /* user priority */
+#define VLAN_CFI_SHIFT         12      /* canonical format indicator bit */
+
+/* 3 bits of priority */
+#define VLAN_PRI_MASK                  7
+/* 12 bits of vlan identfier (VID) */
+#define VLAN_VID_MASK          0xFFF   /* VLAN identifier (VID) field */
+
+struct  vlan_tags {
+       uint16  tag_type;       /* 0x8100 for VLAN */
+       uint16  tag_control;    /* prio | cfi | vid */
+} PACKED ;
+
+/* 802.1X ethertype */
+
+#define        ETHER_TYPE_IP           0x0800          /* IP */
+#define        ETHER_TYPE_BRCM         0x886c          /* Broadcom Corp. */
+#define        ETHER_TYPE_802_1X       0x888e          /* 802.1x */
+
+#define        ETHER_BRCM_SUBTYPE_LEN  4               /* Broadcom 4byte subtype follows ethertype */
+#define        ETHER_BRCM_CRAM         0x1             /* Broadcom subtype cram protocol */
+
+/*
+ * A macro to validate a length with
+ */
+#define        ETHER_IS_VALID_LEN(foo) \
+       ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN)
+
+#ifndef __NET_ETHERNET_H
+#ifndef __INCif_etherh     /* Quick and ugly hack for VxWorks */
+/*
+ * Structure of a 10Mb/s Ethernet header.
+ */
+struct ether_header {
+       uint8   ether_dhost[ETHER_ADDR_LEN];
+       uint8   ether_shost[ETHER_ADDR_LEN];
+       uint16  ether_type;
+} PACKED ;
+
+/*
+ * Structure of a 48-bit Ethernet address.
+ */
+struct ether_addr {
+       uint8 octet[ETHER_ADDR_LEN];
+} PACKED ;
+#endif
+#endif
+
+/*
+ * Takes a pointer, returns true if a 48-bit multicast address
+ * (including broadcast, since it is all ones)
+ */
+#define ETHER_ISMULTI(ea) (((uint8 *)(ea))[0] & 1)
+
+/*
+ * Takes a pointer, returns true if a 48-bit broadcast (all ones)
+ */
+#define ETHER_ISBCAST(ea) ((((uint8 *)(ea))[0] &               \
+                           ((uint8 *)(ea))[1] &                \
+                           ((uint8 *)(ea))[2] &                \
+                           ((uint8 *)(ea))[3] &                \
+                           ((uint8 *)(ea))[4] &                \
+                           ((uint8 *)(ea))[5]) == 0xff)
+
+static const struct ether_addr ether_bcast = {{255, 255, 255, 255, 255, 255}};
+
+/*
+ * Takes a pointer, returns true if a 48-bit null address (all zeros)
+ */
+#define ETHER_ISNULLADDR(ea) ((((uint8 *)(ea))[0] |            \
+                           ((uint8 *)(ea))[1] |                \
+                           ((uint8 *)(ea))[2] |                \
+                           ((uint8 *)(ea))[3] |                \
+                           ((uint8 *)(ea))[4] |                \
+                           ((uint8 *)(ea))[5]) == 0)
+
+/* Differentiated Services Codepoint - lower 6 bits of tos in iphdr */
+#define        DSCP_PRI_MASK           0x3F            /* bits 0-6 */
+#define        DSCP_WME_PRI_MASK       0x38            /* bits 3-6 */
+#define        DSCP_WME_PRI_SHIFT      3
+
+#undef PACKED
+
+#endif /* _NET_ETHERNET_H_ */
diff --git a/openwrt/target/linux/package/openwrt/include/shutils.h b/openwrt/target/linux/package/openwrt/include/shutils.h
new file mode 100644 (file)
index 0000000..783ee9e
--- /dev/null
@@ -0,0 +1,200 @@
+/*
+ * Shell-like utility functions
+ *
+ * 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$
+ */
+
+#ifndef _shutils_h_
+#define _shutils_h_
+#include <string.h>
+/*
+ * Reads file and returns contents
+ * @param      fd      file descriptor
+ * @return     contents of file or NULL if an error occurred
+ */
+extern char * fd2str(int fd);
+
+/*
+ * Reads file and returns contents
+ * @param      path    path to file
+ * @return     contents of file or NULL if an error occurred
+ */
+extern char * file2str(const char *path);
+
+/* 
+ * Waits for a file descriptor to become available for reading or unblocked signal
+ * @param      fd      file descriptor
+ * @param      timeout seconds to wait before timing out or 0 for no timeout
+ * @return     1 if descriptor changed status or 0 if timed out or -1 on error
+ */
+extern int waitfor(int fd, int timeout);
+
+/* 
+ * Concatenates NULL-terminated list of arguments into a single
+ * commmand and executes it
+ * @param      argv    argument list
+ * @param      path    NULL, ">output", or ">>output"
+ * @param      timeout seconds to wait before timing out or 0 for no timeout
+ * @param      ppid    NULL to wait for child termination or pointer to pid
+ * @return     return value of executed command or errno
+ */
+extern int _eval(char *const argv[], char *path, int timeout, pid_t *ppid);
+
+/* 
+ * Concatenates NULL-terminated list of arguments into a single
+ * commmand and executes it
+ * @param      argv    argument list
+ * @return     stdout of executed command or NULL if an error occurred
+ */
+extern char * _backtick(char *const argv[]);
+
+/* 
+ * Kills process whose PID is stored in plaintext in pidfile
+ * @param      pidfile PID file
+ * @return     0 on success and errno on failure
+ */
+extern int kill_pidfile(char *pidfile);
+
+/*
+ * fread() with automatic retry on syscall interrupt
+ * @param      ptr     location to store to
+ * @param      size    size of each element of data
+ * @param      nmemb   number of elements
+ * @param      stream  file stream
+ * @return     number of items successfully read
+ */
+extern int safe_fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
+
+/*
+ * fwrite() with automatic retry on syscall interrupt
+ * @param      ptr     location to read from
+ * @param      size    size of each element of data
+ * @param      nmemb   number of elements
+ * @param      stream  file stream
+ * @return     number of items successfully written
+ */
+extern int safe_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
+
+/*
+ * Convert Ethernet address string representation to binary data
+ * @param      a       string in xx:xx:xx:xx:xx:xx notation
+ * @param      e       binary data
+ * @return     TRUE if conversion was successful and FALSE otherwise
+ */
+extern int ether_atoe(const char *a, unsigned char *e);
+
+/*
+ * Convert Ethernet address binary data to string representation
+ * @param      e       binary data
+ * @param      a       string in xx:xx:xx:xx:xx:xx notation
+ * @return     a
+ */
+extern char * ether_etoa(const unsigned char *e, char *a);
+
+/*
+ * Concatenate two strings together into a caller supplied buffer
+ * @param      s1      first string
+ * @param      s2      second string
+ * @param      buf     buffer large enough to hold both strings
+ * @return     buf
+ */
+static inline char * strcat_r(const char *s1, const char *s2, char *buf)
+{
+       strcpy(buf, s1);
+       strcat(buf, s2);
+       return buf;
+}      
+
+/* Check for a blank character; that is, a space or a tab */
+#define isblank(c) ((c) == ' ' || (c) == '\t')
+
+/* Strip trailing CR/NL from string <s> */
+#define chomp(s) ({ \
+       char *c = (s) + strlen((s)) - 1; \
+       while ((c > (s)) && (*c == '\n' || *c == '\r' || *c == ' ')) \
+               *c-- = '\0'; \
+       s; \
+})
+
+/* Simple version of _backtick() */
+#define backtick(cmd, args...) ({ \
+       char *argv[] = { cmd, ## args, NULL }; \
+       _backtick(argv); \
+})
+
+/* Simple version of _eval() (no timeout and wait for child termination) */
+#define eval(cmd, args...) ({ \
+       char *argv[] = { cmd, ## args, NULL }; \
+       _eval(argv, ">/dev/console", 0, NULL); \
+})
+
+/* Copy each token in wordlist delimited by space into word */
+#define foreach(word, wordlist, next) \
+       for (next = &wordlist[strspn(wordlist, " ")], \
+            strncpy(word, next, sizeof(word)), \
+            word[strcspn(word, " ")] = '\0', \
+            word[sizeof(word) - 1] = '\0', \
+            next = strchr(next, ' '); \
+            strlen(word); \
+            next = next ? &next[strspn(next, " ")] : "", \
+            strncpy(word, next, sizeof(word)), \
+            word[strcspn(word, " ")] = '\0', \
+            word[sizeof(word) - 1] = '\0', \
+            next = strchr(next, ' '))
+
+/* Return NUL instead of NULL if undefined */
+#define safe_getenv(s) (getenv(s) ? : "")
+
+/* Print directly to the console */
+#define cprintf(fmt, args...) do { \
+       FILE *fp = fopen("/dev/console", "w"); \
+       if (fp) { \
+               fprintf(fp, fmt, ## args); \
+               fclose(fp); \
+       } \
+} while (0)
+
+/* Debug print */
+#ifdef DEBUG
+#define dprintf(fmt, args...) cprintf("%s: " fmt, __FUNCTION__, ## args)
+#else
+#define dprintf(fmt, args...)
+#endif
+
+#ifdef vxworks
+
+#include <inetLib.h>
+#define inet_aton(a, n) ((inet_aton((a), (n)) == ERROR) ? 0 : 1)
+#define inet_ntoa(n) ({ char a[INET_ADDR_LEN]; inet_ntoa_b ((n), a); a; })
+
+#include <typedefs.h>
+#include <bcmutils.h>
+#define ether_atoe(a, e) bcm_ether_atoe((a), (e))
+#define ether_etoa(e, a) bcm_ether_ntoa((e), (a))
+
+/* These declarations are not available where you would expect them */
+extern int vsnprintf (char *, size_t, const char *, va_list);
+extern int snprintf(char *str, size_t count, const char *fmt, ...);
+extern char *strdup(const char *);
+extern char *strsep(char **stringp, char *delim);
+extern int strcasecmp(const char *s1, const char *s2); 
+extern int strncasecmp(const char *s1, const char *s2, size_t n); 
+
+/* Neither are socket() and connect() */
+#include <sockLib.h>
+
+#ifdef DEBUG
+#undef dprintf
+#define dprintf printf
+#endif
+#endif
+
+#endif /* _shutils_h_ */
diff --git a/openwrt/target/linux/package/openwrt/include/typedefs.h b/openwrt/target/linux/package/openwrt/include/typedefs.h
new file mode 100644 (file)
index 0000000..6b0c25e
--- /dev/null
@@ -0,0 +1,293 @@
+/*
+ * 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$
+ */
+
+#ifndef _TYPEDEFS_H_
+#define _TYPEDEFS_H_
+
+
+/* Define 'SITE_TYPEDEFS' in the compile to include a site specific
+ * typedef file "site_typedefs.h".
+ *
+ * If 'SITE_TYPEDEFS' is not defined, then the "Inferred Typedefs"
+ * section of this file makes inferences about the compile environment
+ * based on defined symbols and possibly compiler pragmas.
+ *
+ * Following these two sections is the "Default Typedefs"
+ * section. This section is only prcessed if 'USE_TYPEDEF_DEFAULTS' is
+ * defined. This section has a default set of typedefs and a few
+ * proprocessor symbols (TRUE, FALSE, NULL, ...).
+ */
+
+#ifdef SITE_TYPEDEFS
+
+/*******************************************************************************
+ * Site Specific Typedefs
+ *******************************************************************************/
+
+#include "site_typedefs.h"
+
+#else
+
+/*******************************************************************************
+ * Inferred Typedefs
+ *******************************************************************************/
+
+/* Infer the compile environment based on preprocessor symbols and pramas.
+ * Override type definitions as needed, and include configuration dependent
+ * header files to define types.
+ */
+
+#ifdef __cplusplus
+
+#define TYPEDEF_BOOL
+#ifndef FALSE
+#define FALSE  false
+#endif
+#ifndef TRUE
+#define TRUE   true
+#endif
+
+#else  /* ! __cplusplus */
+
+/* for Windows build, define bool as a uchar instead of the default int */
+#if defined(_WIN32)
+
+#define TYPEDEF_BOOL
+typedef        unsigned char   bool;
+
+#endif /* _WIN32 */
+
+#endif /* ! __cplusplus */
+
+#ifdef _MSC_VER            /* Microsoft C */
+#define TYPEDEF_INT64
+#define TYPEDEF_UINT64
+typedef signed __int64 int64;
+typedef unsigned __int64 uint64;
+#endif
+
+#if defined(MACOSX) && defined(KERNEL)
+#define TYPEDEF_BOOL
+#endif
+
+
+#if defined(linux)
+#define TYPEDEF_UINT
+#define TYPEDEF_USHORT
+#define TYPEDEF_ULONG
+#endif
+
+#if !defined(linux) && !defined(_WIN32) && !defined(PMON) && !defined(_CFE_)
+#define TYPEDEF_UINT
+#define TYPEDEF_USHORT
+#endif
+
+
+/* Do not support the (u)int64 types with strict ansi for GNU C */
+#if defined(__GNUC__) && defined(__STRICT_ANSI__)
+#define TYPEDEF_INT64
+#define TYPEDEF_UINT64
+#endif
+
+/* ICL accepts unsigned 64 bit type only, and complains in ANSI mode
+ * for singned or unsigned */
+#if defined(__ICL)
+
+#define TYPEDEF_INT64
+
+#if defined(__STDC__)
+#define TYPEDEF_UINT64
+#endif
+
+#endif /* __ICL */
+
+
+#if !defined(_WIN32) && !defined(PMON) && !defined(_CFE_)
+
+/* pick up ushort & uint from standard types.h */
+#if defined(linux) && defined(__KERNEL__)
+
+#include <linux/types.h>       /* sys/types.h and linux/types.h are oil and water */
+
+#else
+
+#include <sys/types.h> 
+
+#endif
+
+#endif /* !_WIN32 && !PMON && !_CFE_ */
+
+#if defined(MACOSX) && defined(KERNEL)
+#include <IOKit/IOTypes.h>
+#endif
+
+
+/* use the default typedefs in the next section of this file */
+#define USE_TYPEDEF_DEFAULTS
+
+#endif /* SITE_TYPEDEFS */
+
+
+/*******************************************************************************
+ * Default Typedefs
+ *******************************************************************************/
+
+#ifdef USE_TYPEDEF_DEFAULTS
+#undef USE_TYPEDEF_DEFAULTS
+
+#ifndef TYPEDEF_BOOL
+typedef        int     bool;
+#endif
+
+/*----------------------- define uchar, ushort, uint, ulong ----------------*/
+
+#ifndef TYPEDEF_UCHAR
+typedef unsigned char  uchar;
+#endif
+
+#ifndef TYPEDEF_USHORT
+typedef unsigned short ushort;
+#endif
+
+#ifndef TYPEDEF_UINT
+typedef unsigned int   uint;
+#endif
+
+#ifndef TYPEDEF_ULONG
+typedef unsigned long  ulong;
+#endif
+
+/*----------------------- define [u]int8/16/32/64 --------------------------*/
+
+#ifndef TYPEDEF_UINT8
+typedef unsigned char  uint8;
+#endif
+
+#ifndef TYPEDEF_UINT16
+typedef unsigned short uint16;
+#endif
+
+#ifndef TYPEDEF_UINT32
+typedef unsigned int   uint32;
+#endif
+
+#ifndef TYPEDEF_UINT64
+typedef unsigned long long uint64;
+#endif
+
+#ifndef TYPEDEF_INT8
+typedef signed char    int8;
+#endif
+
+#ifndef TYPEDEF_INT16
+typedef signed short   int16;
+#endif
+
+#ifndef TYPEDEF_INT32
+typedef signed int     int32;
+#endif
+
+#ifndef TYPEDEF_INT64
+typedef signed long long int64;
+#endif
+
+/*----------------------- define float32/64, float_t -----------------------*/
+
+#ifndef TYPEDEF_FLOAT32
+typedef float          float32;
+#endif
+
+#ifndef TYPEDEF_FLOAT64
+typedef double         float64;
+#endif
+
+/*
+ * abstracted floating point type allows for compile time selection of
+ * single or double precision arithmetic.  Compiling with -DFLOAT32
+ * selects single precision; the default is double precision.
+ */
+
+#ifndef TYPEDEF_FLOAT_T
+
+#if defined(FLOAT32)
+typedef float32 float_t;
+#else /* default to double precision floating point */
+typedef float64 float_t;
+#endif
+
+#endif /* TYPEDEF_FLOAT_T */
+
+/*----------------------- define macro values -----------------------------*/
+
+#ifndef FALSE
+#define FALSE  0
+#endif
+
+#ifndef TRUE
+#define TRUE   1
+#endif
+
+#ifndef NULL
+#define        NULL    0
+#endif
+
+#ifndef OFF
+#define        OFF     0
+#endif
+
+#ifndef ON
+#define        ON      1
+#endif
+
+/*----------------------- define PTRSZ, INLINE ----------------------------*/
+
+#ifndef PTRSZ
+#define        PTRSZ   sizeof (char*)
+#endif
+
+#ifndef INLINE
+
+#ifdef _MSC_VER
+
+#define INLINE __inline
+
+#elif __GNUC__
+
+#define INLINE __inline__
+
+#else
+
+#define INLINE
+
+#endif /* _MSC_VER */
+
+#endif /* INLINE */
+
+#undef TYPEDEF_BOOL
+#undef TYPEDEF_UCHAR
+#undef TYPEDEF_USHORT
+#undef TYPEDEF_UINT
+#undef TYPEDEF_ULONG
+#undef TYPEDEF_UINT8
+#undef TYPEDEF_UINT16
+#undef TYPEDEF_UINT32
+#undef TYPEDEF_UINT64
+#undef TYPEDEF_INT8
+#undef TYPEDEF_INT16
+#undef TYPEDEF_INT32
+#undef TYPEDEF_INT64
+#undef TYPEDEF_FLOAT32
+#undef TYPEDEF_FLOAT64
+#undef TYPEDEF_FLOAT_T
+
+#endif /* USE_TYPEDEF_DEFAULTS */
+
+#endif /* _TYPEDEFS_H_ */
diff --git a/openwrt/target/linux/package/openwrt/include/utils.h b/openwrt/target/linux/package/openwrt/include/utils.h
new file mode 100644 (file)
index 0000000..b8d1cdb
--- /dev/null
@@ -0,0 +1,131 @@
+#include <cy_conf.h>
+
+extern int diag_led(int type, int act);
+extern int C_led(int i);
+extern int get_single_ip(char *ipaddr, int which);
+extern char *get_mac_from_ip(char *ip);
+extern struct dns_lists *get_dns_list(int no);
+extern int dns_to_resolv(void);
+extern char *get_wan_face(void);
+extern int check_wan_link(int num);
+extern char *get_complete_lan_ip(char *ip);
+extern int get_int_len(int num);
+extern int file_to_buf(char *path, char *buf, int len);
+extern int buf_to_file(char *path, char *buf);
+extern pid_t* find_pid_by_name( char* pidName);
+extern int find_pid_by_ps(char* pidName);
+extern int *find_all_pid_by_ps(char* pidName);
+extern char *find_name_by_proc(int pid);
+extern int get_ppp_pid(char *file);
+extern long convert_ver(char *ver);
+extern int check_flash(void);
+extern int check_action(void);
+extern int check_now_boot(void);
+extern int check_hw_type(void);
+extern int is_exist(char *filename);
+extern void set_ip_forward(char c);
+struct mtu_lists *get_mtu(char *proto);
+extern void set_host_domain_name(void);
+
+extern void encode(char *buf, int len);
+extern void decode(char *buf, int len);
+
+extern int sys_netdev_ioctl(int family, int socket, char *if_name, int cmd, struct ifreq *ifr);
+
+int ct_openlog(const char *ident, int option, int facility, char *log_name);
+void ct_syslog(int level, int enable, const char *fmt,...);
+void ct_logger(int level, const char *fmt,...);
+struct wl_assoc_mac * get_wl_assoc_mac(int *c);
+       
+
+
+enum { DMZ, SESSION, DIAG , WL};
+
+enum { START_LED, STOP_LED };
+
+typedef enum { ACT_IDLE, 
+              ACT_TFTP_UPGRADE, 
+              ACT_WEB_UPGRADE, 
+              ACT_WEBS_UPGRADE, 
+              ACT_SW_RESTORE, 
+              ACT_HW_RESTORE } ACTION;
+
+enum { UNKNOWN_BOOT = -1, PMON_BOOT, CFE_BOOT };
+
+enum { BCM4702_CHIP, BCM4712_CHIP, BCM5325E_CHIP };
+
+enum { FIRST, SECOND };
+
+enum { SYSLOG_LOG=1, SYSLOG_DEBUG, CONSOLE_ONLY, LOG_CONSOLE, DEBUG_CONSOLE };
+
+#define ACTION(cmd)    buf_to_file(ACTION_FILE, cmd)
+
+struct dns_lists {
+        int num_servers;
+        char dns_server[4][16];
+};
+
+#define NOT_USING      0
+#define USING          1
+
+struct wl_assoc_mac
+{
+       char mac[18];
+};
+
+struct mtu_lists {
+        char   *proto; /* protocol */
+        char   *min;   /* min mtu */
+        char   *max;   /* max mtu */
+};
+
+
+#define PPP_PSEUDO_IP  "10.64.64.64"
+#define PPP_PSEUDO_NM  "255.255.255.255"
+#define PPP_PSEUDO_GW  "10.112.112.112"
+
+#define PING_TMP       "/tmp/ping.log"
+#define TRACEROUTE_TMP "/tmp/traceroute.log"
+#define MAX_BUF_LEN    254
+
+#define RESOLV_FILE    "/tmp/resolv.conf"
+#define HOSTS_FILE     "/tmp/hosts"
+
+#define LOG_FILE       "/var/log/mess"
+
+#define ACTION_FILE    "/tmp/action"
+
+
+#define split(word, wordlist, next, delim) \
+       for (next = wordlist, \
+            strncpy(word, next, sizeof(word)), \
+            word[(next=strstr(next, delim)) ? strstr(word, delim) - word : sizeof(word) - 1] = '\0', \
+            next = next ? next + sizeof(delim) - 1 : NULL ; \
+            strlen(word); \
+            next = next ? : "", \
+            strncpy(word, next, sizeof(word)), \
+            word[(next=strstr(next, delim)) ? strstr(word, delim) - word : sizeof(word) - 1] = '\0', \
+            next = next ? next + sizeof(delim) - 1 : NULL)
+
+#define STRUCT_LEN(name)    sizeof(name)/sizeof(name[0])
+
+#define printHEX(str,len) { \
+       int i; \
+       for (i=0 ; i<len ; i++) { \
+               printf("%02X ", (unsigned char)*(str+i)); \
+               if(((i+1)%16) == 0) printf("- "); \
+               if(((i+1)%32) == 0) printf("\n"); \
+       } \
+       printf("\n\n"); \
+}
+
+
+#define printASC(str,len) { \
+       int i; \
+       for (i=0 ; i<len ; i++) { \
+               printf("%c", (unsigned char)*(str+i)); \
+               if(((i+1)%16) == 0) printf("- "); \
+               if(((i+1)%32) == 0) printf("\n"); \
+       } \
+       printf("\n\n"); \
+}
diff --git a/openwrt/target/linux/package/openwrt/include/wlcompat.h b/openwrt/target/linux/package/openwrt/include/wlcompat.h
new file mode 100644 (file)
index 0000000..a4fc134
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * wlcompat.h
+ *
+ * Copyright (C) 2005 Felix Fietkau <nbd@vd-s.ath.cx>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * $Id$
+ */
+#include <linux/wireless.h>
+
+#ifndef WLCOMPAT_H
+#define WLCOMPAT_H
+
+#define WLCOMPAT_SET_MONITOR           SIOCIWFIRSTPRIV + 0
+#define WLCOMPAT_GET_MONITOR           SIOCIWFIRSTPRIV + 1
+#define WLCOMPAT_SET_TXPWR_LIMIT       SIOCIWFIRSTPRIV + 2
+#define WLCOMPAT_GET_TXPWR_LIMIT       SIOCIWFIRSTPRIV + 3
+#define WLCOMPAT_SET_ANTDIV            SIOCIWFIRSTPRIV + 4
+#define WLCOMPAT_GET_ANTDIV            SIOCIWFIRSTPRIV + 5
+#define WLCOMPAT_SET_TXANT             SIOCIWFIRSTPRIV + 6
+#define WLCOMPAT_GET_TXANT             SIOCIWFIRSTPRIV + 7
+
+#endif
diff --git a/openwrt/target/linux/package/openwrt/include/wlioctl.h b/openwrt/target/linux/package/openwrt/include/wlioctl.h
new file mode 100644 (file)
index 0000000..d5ef11f
--- /dev/null
@@ -0,0 +1,1094 @@
+/*
+ * Custom OID/ioctl definitions for
+ * Broadcom 802.11abg Networking Device Driver
+ *
+ * Definitions subject to change without notice.
+ *
+ * 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$
+ */
+
+#ifndef _wlioctl_h_
+#define        _wlioctl_h_
+
+#include <typedefs.h>
+#include <proto/ethernet.h>
+#include <proto/802.11.h>
+
+#if defined(__GNUC__)
+#define        PACKED  __attribute__((packed))
+#else
+#define        PACKED
+#endif
+
+#define WLC_ESSID_MAX_SIZE     32
+
+#define WL_NUMRATES            255     /* max # of rates in a rateset */
+
+typedef struct wl_rateset {
+       uint32  count;                  /* # rates in this set */
+       uint8   rates[WL_NUMRATES];     /* rates in 500kbps units w/hi bit set if basic */
+} wl_rateset_t;
+
+#define WL_CHANSPEC_CHAN_MASK  0x0fff
+#define WL_CHANSPEC_BAND_MASK  0xf000
+#define WL_CHANSPEC_BAND_SHIFT 12
+#define WL_CHANSPEC_BAND_A     0x1000
+#define WL_CHANSPEC_BAND_B     0x2000
+
+/*
+ * Per-bss information structure.
+ */
+
+#define        WL_LEGACY_BSS_INFO_VERSION      106     /* an older supported version of wl_bss_info struct */
+#define        WL_BSS_INFO_VERSION             107     /* current version of wl_bss_info struct */
+
+typedef struct wl_bss_info106 {
+       uint            version;        /* version field */
+       struct ether_addr BSSID;
+       uint8           SSID_len;
+       uint8           SSID[32];
+       uint8           Privacy;        /* 0=No WEP, 1=Use WEP */
+       int16           RSSI;           /* receive signal strength (in dBm) */
+       uint16          beacon_period;  /* units are Kusec */
+       uint16          atim_window;    /* units are Kusec */
+       uint8           channel;        /* Channel no. */
+       int8            infra;          /* 0=IBSS, 1=infrastructure, 2=unknown */
+       struct {
+               uint    count;          /* # rates in this set */
+               uint8   rates[12];      /* rates in 500kbps units w/hi bit set if basic */
+       } rateset;                      /* supported rates */
+        uint8           dtim_period;    /* DTIM period */
+       int8            phy_noise;      /* noise right after tx (in dBm) */
+       uint16          capability;     /* Capability information */
+       struct dot11_bcn_prb *prb;      /* probe response frame (ioctl na) */
+       uint16          prb_len;        /* probe response frame length (ioctl na) */
+       struct {
+               uint8 supported;        /* wpa supported */
+               uint8 multicast;        /* multicast cipher */
+               uint8 ucount;           /* count of unicast ciphers */
+               uint8 unicast[4];       /* unicast ciphers */
+               uint8 acount;           /* count of auth modes */
+               uint8 auth[4];          /* Authentication modes */
+       } wpa;
+} wl_bss_info106_t;
+
+typedef struct wl_bss_info {
+       uint32          version;        /* version field */
+       uint32          length;         /* byte length of data in this record, starting at version and including IEs */
+       struct ether_addr BSSID;
+       uint16          beacon_period;  /* units are Kusec */
+       uint16          capability;     /* Capability information */
+       uint8           SSID_len;
+       uint8           SSID[32];
+       struct {
+               uint    count;          /* # rates in this set */
+               uint8   rates[16];      /* rates in 500kbps units w/hi bit set if basic */
+       } rateset;                      /* supported rates */
+       uint8           channel;        /* Channel no. */
+       uint16          atim_window;    /* units are Kusec */
+        uint8           dtim_period;    /* DTIM period */
+       int16           RSSI;           /* receive signal strength (in dBm) */
+       int8            phy_noise;      /* noise (in dBm) */
+       uint32          ie_length;      /* byte length of Information Elements */
+       /* variable length Information Elements */
+} wl_bss_info_t;
+
+typedef struct wlc_ssid {
+       uint32          SSID_len;
+       uchar           SSID[32];
+} wlc_ssid_t;
+
+typedef struct wl_scan_params {
+       wlc_ssid_t ssid;        /* default is {0, ""} */
+       struct ether_addr bssid;/* default is bcast */
+       int8 bss_type;          /* default is any, DOT11_BSSTYPE_ANY/INFRASTRUCTURE/INDEPENDENT */
+       int8 scan_type;         /* -1 use default, DOT11_SCANTYPE_ACTIVE/PASSIVE */
+       int32 nprobes;          /* -1 use default, number of probes per channel */
+       int32 active_time;      /* -1 use default, dwell time per channel for active scanning */
+       int32 passive_time;     /* -1 use default, dwell time per channel for passive scanning */
+       int32 home_time;        /* -1 use default, dwell time for the home channel between channel scans */
+       int32 channel_num;      /* 0 use default (all available channels), count of channels in channel_list */
+       uint16 channel_list[1]; /* list of chanspecs */
+} wl_scan_params_t;
+/* size of wl_scan_params not including variable length array */
+#define WL_SCAN_PARAMS_FIXED_SIZE 64
+
+typedef struct wl_scan_results {
+       uint32 buflen;
+       uint32 version;
+       uint32 count;
+       wl_bss_info_t bss_info[1];
+} wl_scan_results_t;
+/* size of wl_scan_results not including variable length array */
+#define WL_SCAN_RESULTS_FIXED_SIZE 12
+
+/* uint32 list */
+typedef struct wl_uint32_list {
+       /* in - # of elements, out - # of entries */
+       uint32 count;
+       /* variable length uint32 list */
+       uint32 element[1];
+} wl_uint32_list_t;
+
+#define WLC_CNTRY_BUF_SZ        4       /* Country string is 3 bytes + NULL */
+
+typedef struct wl_channels_in_country {
+       uint32 buflen;
+       uint32 band;
+       char country_abbrev[WLC_CNTRY_BUF_SZ];
+       uint32 count;
+       uint32 channel[1];
+} wl_channels_in_country_t;
+
+typedef struct wl_country_list {
+       uint32 buflen;
+       uint32 band_set;
+       uint32 band;
+       uint32 count;
+       char country_abbrev[1];
+} wl_country_list_t;
+
+#define WL_RM_TYPE_BASIC       1
+#define WL_RM_TYPE_CCA         2
+#define WL_RM_TYPE_RPI         3
+
+#define WL_RM_FLAG_PARALLEL    (1<<0)
+
+#define WL_RM_FLAG_LATE                (1<<1)
+#define WL_RM_FLAG_INCAPABLE   (1<<2)
+#define WL_RM_FLAG_REFUSED     (1<<3)
+
+typedef struct wl_rm_req_elt {
+       int8    type;
+       int8    flags;
+       uint16  chanspec;
+       uint32  token;          /* token for this measurement */
+       uint32  tsf_h;          /* TSF high 32-bits of Measurement start time */
+       uint32  tsf_l;          /* TSF low 32-bits */
+       uint32  dur;            /* TUs */
+} wl_rm_req_elt_t;
+
+typedef struct wl_rm_req {
+       uint32  token;          /* overall measurement set token */
+       uint32  count;          /* number of measurement reqests */
+       wl_rm_req_elt_t req[1]; /* variable length block of requests */
+} wl_rm_req_t;
+#define WL_RM_REQ_FIXED_LEN    8
+
+typedef struct wl_rm_rep_elt {
+       int8    type;
+       int8    flags;
+       uint16  chanspec;
+       uint32  token;          /* token for this measurement */
+       uint32  tsf_h;          /* TSF high 32-bits of Measurement start time */
+       uint32  tsf_l;          /* TSF low 32-bits */
+       uint32  dur;            /* TUs */
+       uint32  len;            /* byte length of data block */
+       uint8   data[1];        /* variable length data block */
+} wl_rm_rep_elt_t;
+#define WL_RM_REP_ELT_FIXED_LEN        24      /* length excluding data block */
+
+#define WL_RPI_REP_BIN_NUM 8
+typedef struct wl_rm_rpi_rep {
+       uint8   rpi[WL_RPI_REP_BIN_NUM];
+       int8    rpi_max[WL_RPI_REP_BIN_NUM];
+} wl_rm_rpi_rep_t;
+
+typedef struct wl_rm_rep {
+       uint32  token;          /* overall measurement set token */
+       uint32  len;            /* length of measurement report block */
+       wl_rm_rep_elt_t rep[1]; /* variable length block of reports */
+} wl_rm_rep_t;
+#define WL_RM_REP_FIXED_LEN    8
+
+
+#define WLC_MAX_KEY_SIZE       32      /* max size of any key */
+#define WLC_MAX_IV_SIZE                16      /* max size of any IV */
+#define WLC_EXT_IV_FLAG                (1<<5)  /* flag to indicate IV is > 4 bytes */
+#define WLC_MAX_DEFAULT_KEYS   4       /* # of default WEP keys */
+#define WLC_MAX_KEYS           54      /* Max # of WEP keys */
+#define WLC_WEP1_KEY_SIZE      5       /* max size of any WEP key */
+#define WLC_WEP1_KEY_HEX_SIZE  10      /* size of WEP key in hex. */
+#define WLC_WEP128_KEY_SIZE    13      /* max size of any WEP key */
+#define WLC_WEP128_KEY_HEX_SIZE        26      /* size of WEP key in hex. */
+#define WLC_TKIP_MIC_SIZE      8       /* size of TKIP MIC */
+#define WLC_TKIP_EOM_SIZE      7       /* max size of TKIP EOM */
+#define WLC_TKIP_EOM_FLAG      0x5a    /* TKIP EOM flag byte */
+#define WLC_TKIP_KEY_SIZE      32      /* size of any TKIP key */
+#define WLC_TKIP_MIC_AUTH_TX   16      /* offset to Authenticator MIC TX key */
+#define WLC_TKIP_MIC_AUTH_RX   24      /* offset to Authenticator MIC RX key */
+#define WLC_TKIP_MIC_SUP_RX    16      /* offset to Supplicant MIC RX key */
+#define WLC_TKIP_MIC_SUP_TX    24      /* offset to Supplicant MIC TX key */
+#define WLC_TKIP_P1_KEY_SIZE   10      /* size of TKHash Phase1 output, in bytes */
+#define WLC_TKIP_P2_KEY_SIZE   16      /* size of TKHash Phase2 output */
+#define WLC_AES_KEY_SIZE       16      /* size of AES key */
+
+
+typedef enum sup_auth_status {
+       WLC_SUP_DISCONNECTED = 0,
+       WLC_SUP_CONNECTING,
+       WLC_SUP_IDREQUIRED,
+       WLC_SUP_AUTHENTICATING,
+       WLC_SUP_AUTHENTICATED,
+       WLC_SUP_KEYXCHANGE,
+       WLC_SUP_KEYED
+} sup_auth_status_t;
+
+/* Enumerate crypto algorithms */
+#define        CRYPTO_ALGO_OFF                 0
+#define        CRYPTO_ALGO_WEP1                1
+#define        CRYPTO_ALGO_TKIP                2
+#define        CRYPTO_ALGO_WEP128              3
+#define CRYPTO_ALGO_AES_CCM            4
+#define CRYPTO_ALGO_AES_OCB_MSDU       5
+#define CRYPTO_ALGO_AES_OCB_MPDU       6
+#define CRYPTO_ALGO_NALG               7
+
+#define WSEC_GEN_MIC_ERROR     0x0001
+#define WSEC_GEN_REPLAY                0x0002
+
+#define WL_SOFT_KEY    (1 << 0)        /* Indicates this key is using soft encrypt */
+#define WL_PRIMARY_KEY (1 << 1)        /* Indicates this key is the primary (ie tx) key */
+#define WL_KF_RES_4    (1 << 4)        /* Reserved for backward compat */
+#define WL_KF_RES_5    (1 << 5)        /* Reserved for backward compat */
+
+
+typedef struct wlc_tkip_info {
+       uint16          phase1[WLC_TKIP_P1_KEY_SIZE/sizeof(uint16)];    /* tkhash phase1 result */
+       uint8           phase2[WLC_TKIP_P2_KEY_SIZE];   /* tkhash phase2 result */
+       uint32          micl;
+       uint32          micr;
+} tkip_info_t;
+
+typedef struct _wsec_iv {
+       uint32          hi;     /* upper 32 bits of IV */
+       uint16          lo;     /* lower 16 bits of IV */
+} wsec_iv_t;
+
+typedef struct wsec_key {
+       uint32          index;          /* key index */
+       uint32          len;            /* key length */
+       uint8           data[WLC_MAX_KEY_SIZE]; /* key data */
+       tkip_info_t     tkip_tx;        /* tkip transmit state */
+       tkip_info_t     tkip_rx;        /* tkip receive state */
+       uint32          algo;           /* CRYPTO_ALGO_AES_CCM, CRYPTO_ALGO_WEP128, etc */
+       uint32          flags;          /* misc flags */
+       uint32          algo_hw;        /* cache for hw register*/
+       uint32          aes_mode;       /* cache for hw register*/
+       int             iv_len;         /* IV length */         
+       int             iv_initialized; /* has IV been initialized already? */          
+       int             icv_len;        /* ICV length */
+       wsec_iv_t       rxiv;           /* Rx IV */
+       wsec_iv_t       txiv;           /* Tx IV */
+       struct ether_addr ea;           /* per station */
+} wsec_key_t;
+
+
+
+typedef struct wl_wsec_key {
+       uint32          index;          /* key index */
+       uint32          len;            /* key length */
+       uint8           data[DOT11_MAX_KEY_SIZE];       /* key data */
+       uint32          pad_1[18];
+       uint32          algo;           /* CRYPTO_ALGO_AES_CCM, CRYPTO_ALGO_WEP128, etc */
+       uint32          flags;          /* misc flags */
+       uint32          pad_2[2];
+       int             pad_3;
+       int             iv_initialized; /* has IV been initialized already? */          
+       int             pad_4;
+       /* Rx IV */
+       struct {
+               uint32  hi;             /* upper 32 bits of IV */
+               uint16  lo;             /* lower 16 bits of IV */
+       } rxiv;
+       uint32          pad_5[2];
+       struct ether_addr ea;           /* per station */
+} wl_wsec_key_t;
+
+/* For use with wlc_wep_key.flags */
+#define WSEC_PRIMARY_KEY       (1 << 1)        /* Indicates this key is the primary (ie tx) key */
+#define WSEC_TKIP_ERROR                (1 << 2)        /* Provoke deliberate error */
+
+#define WSEC_MIN_PSK_LEN       8
+#define WSEC_MAX_PSK_LEN       64
+
+/* Flag for key material needing passhash'ing */
+#define WSEC_PASSPHRASE                (1<<0)
+
+/* recepticle for WLC_SET_WSEC_PMK parameter */
+typedef struct {
+       ushort  key_len;                /* octets in key material */
+       ushort  flags;                  /* key handling qualification */
+       uint8   key[WSEC_MAX_PSK_LEN];  /* PMK material */
+} wsec_pmk_t;
+
+/* wireless security bitvec */
+#define WEP_ENABLED            1
+#define TKIP_ENABLED           2
+#define AES_ENABLED            4
+#define WSEC_SWFLAG            8
+
+#define WSEC_SW(wsec)          ((wsec) & WSEC_SWFLAG)
+#define WSEC_HW(wsec)          (!WSEC_SW(wsec))
+#define WSEC_WEP_ENABLED(wsec) ((wsec) & WEP_ENABLED)
+#define WSEC_TKIP_ENABLED(wsec)        ((wsec) & TKIP_ENABLED)
+#define WSEC_AES_ENABLED(wsec) ((wsec) & AES_ENABLED)
+#define WSEC_ENABLED(wsec)     ((wsec) & (WEP_ENABLED | TKIP_ENABLED | AES_ENABLED))
+
+
+/* wireless authentication bit vector */
+#define WPA_ENABLED    1
+#define PSK_ENABLED    2
+
+#define WAUTH_WPA_ENABLED(wauth)       ((wauth) & WPA_ENABLED)
+#define WAUTH_PSK_ENABLED(wauth)       ((wauth) & PSK_ENABLED)
+#define WAUTH_ENABLED(wauth)           ((wauth) & (WPA_ENABLED | PSK_ENABLED))
+
+/* group/mcast cipher */
+#define WPA_MCAST_CIPHER(wsec) (((wsec) & TKIP_ENABLED) ? WPA_CIPHER_TKIP : \
+                               ((wsec) & AES_ENABLED) ? WPA_CIPHER_AES_CCM : \
+                               WPA_CIPHER_NONE)
+
+
+typedef struct wl_led_info {
+       uint32          index;          /* led index */
+       uint32          behavior;
+       bool            activehi;
+} wl_led_info_t;
+
+/*
+ * definitions for driver messages passed from WL to NAS.
+ */
+/* Use this to recognize wpa and 802.1x driver messages. */
+static const uint8 wl_wpa_snap_template[] =
+       { 0xaa, 0xaa, 0x03, 0x00, 0x90, 0x4c };
+
+#define WL_WPA_MSG_IFNAME_MAX  16
+
+/* WPA driver message */
+typedef struct wl_wpa_header {
+       struct ether_header eth;
+       struct dot11_llc_snap_header snap;
+       uint8 version;
+       uint8 type;
+       /* version 2 additions */
+       char ifname[WL_WPA_MSG_IFNAME_MAX];
+       /* version specific data */
+       /* uint8 data[1]; */
+} wl_wpa_header_t PACKED;
+
+/*
+ * definitions for 802.2 messages passed from WL to NAS.
+ */
+/* This seems not to be defined outside the kernel on linux. */
+#ifndef ETH_P_802_2
+#define ETH_P_802_2            4
+#endif
+
+#define WL_WPA_HEADER_LEN      (ETHER_HDR_LEN + DOT11_LLC_SNAP_HDR_LEN + 2 + WL_WPA_MSG_IFNAME_MAX)
+
+/* WPA driver message ethertype - private between wlc and nas */
+#define WL_WPA_ETHER_TYPE      0x9999
+
+/* WPA driver message current version */
+#define WL_WPA_MSG_VERSION     2
+
+/* Type field values for the 802.2 driver messages for WPA. */
+#define WLC_ASSOC_MSG          1
+#define WLC_DISASSOC_MSG       2
+#define WLC_PTK_MIC_MSG                3
+#define WLC_GTK_MIC_MSG                4
+
+/* Use this to recognize 802.2 driver messages. */
+static const uint8 wpa_snap_template[] =
+       { 0xaa, 0xaa, 0x03, 0x00, 0x90, 0x4c };
+
+
+/* 802.1x driver message */
+typedef struct wl_eapol_header {
+       struct ether_header eth;
+       struct dot11_llc_snap_header snap;
+       uint8 version;
+       uint8 reserved;
+       char ifname[WL_WPA_MSG_IFNAME_MAX];
+       /* version specific data */
+       /* uint8 802_1x_msg[1]; */
+} wl_eapol_header_t PACKED;
+
+#define WL_EAPOL_HEADER_LEN    (ETHER_HDR_LEN + DOT11_LLC_SNAP_HDR_LEN + 2 + WL_WPA_MSG_IFNAME_MAX)
+
+/* 802.1x driver message ethertype - private between wlc and nas */
+#define WL_EAPOL_ETHER_TYPE    0x999A
+
+/* 802.1x driver message current version */
+#define WL_EAPOL_MSG_VERSION   1
+
+/* srom read/write struct passed through ioctl */
+typedef struct {
+       uint   byteoff;         /* byte offset */
+       uint   nbytes;          /* number of bytes */
+       uint16 buf[1];
+} srom_rw_t;
+
+/* R_REG and W_REG struct passed through ioctl */
+typedef struct {
+       uint32  byteoff;        /* byte offset of the field in d11regs_t */
+       uint32  val;            /* read/write value of the field */
+       uint32  size;           /* sizeof the field */
+} rw_reg_t;
+
+/* Structure used by GET/SET_ATTEN ioctls */
+typedef struct {
+       uint16  auto_ctrl;      /* 1: Automatic control, 0: overriden */
+       uint16  bb;             /* Baseband attenuation */
+       uint16  radio;          /* Radio attenuation */
+       uint16  txctl1;         /* Radio TX_CTL1 value */
+} atten_t;
+
+/* Used to get specific STA parameters */ 
+typedef struct {
+       uint32  val;
+       struct ether_addr ea;
+} scb_val_t;
+
+/* callback registration data types */
+
+typedef struct _mac_event_params {
+       uint msg;
+       struct ether_addr *addr;
+       uint result;
+       uint status; 
+       uint auth_type;
+} mac_event_params_t;
+
+typedef struct _mic_error_params {
+       struct ether_addr *ea;
+       bool group;
+       bool flush_txq;
+} mic_error_params_t;
+
+typedef enum _wl_callback {
+       WL_MAC_EVENT_CALLBACK = 0,
+       WL_LINK_UP_CALLBACK,
+       WL_LINK_DOWN_CALLBACK,
+       WL_MIC_ERROR_CALLBACK,
+       WL_LAST_CALLBACK
+} wl_callback_t;
+
+typedef struct _callback {
+       void (*fn)(void *, void *);
+       void *context;
+} callback_t;
+
+typedef struct _scan_callback {
+       void (*fn)(void *);
+       void *context;
+} scan_callback_t;
+
+/* used to register an arbitrary callback via the IOCTL interface */
+typedef struct _set_callback {
+       int index;
+       callback_t callback;
+} set_callback_t;
+
+
+
+/* Event data type */
+typedef struct {
+       uint msg;                       /* Message (see below) */
+       struct ether_addr *addr;        /* Station address (if applicable) */
+       uint status;                    /* Status code (see below) */
+       uint reason;                    /* Reason code (if applicable) */
+       uint auth_type;                 /* WLC_E_AUTH */
+       bool link;                      /* WLC_E_LINK */
+       bool group;                     /* WLC_E_MIC_ERROR */
+       bool flush_txq;                 /* WLC_E_MIC_ERROR */
+} wlc_event_t;
+
+typedef struct {
+       uint16          ver;    /* version of this struct */
+       uint16          cap;    /* sta's advertized capabilities */
+       uint32          flags;  /* flags defined below */
+       uint32          idle;   /* time since data pkt rx'd from sta */
+       struct ether_addr       ea;     /* Station address */
+       wl_rateset_t    rateset;        /* rateset in use */
+} sta_info_t;
+
+#define WL_STA_INFO_LEN        300
+#define WL_STA_VER     1
+
+/* flags fields */
+#define WL_STA_BRCM    0x01
+#define WL_STA_WME     0x02
+#define WL_STA_ABCAP   0x04
+#define WL_STA_AUTHE   0x08 
+#define WL_STA_ASSOC   0x10 
+#define WL_STA_AUTHO   0x20 
+
+/* Event messages */
+#define WLC_E_SET_SSID         1
+#define WLC_E_JOIN             2
+#define WLC_E_START            3
+#define WLC_E_AUTH             4
+#define WLC_E_AUTH_IND         5
+#define WLC_E_DEAUTH           6
+#define WLC_E_DEAUTH_IND       7
+#define WLC_E_ASSOC            8
+#define WLC_E_ASSOC_IND                9
+#define WLC_E_REASSOC          10
+#define WLC_E_REASSOC_IND      11
+#define WLC_E_DISASSOC         12
+#define WLC_E_DISASSOC_IND     13
+#define WLC_E_QUIET_START      14      /* 802.11h Quiet period started */
+#define WLC_E_QUIET_END                15      /* 802.11h Quiet period ended */
+#define WLC_E_GOT_BEACONS      16      
+#define WLC_E_LINK             17      /* Link indication */
+#define WLC_E_MIC_ERROR                18      /* TKIP MIC error occurred */
+#define WLC_E_NDIS_LINK                19      /* NDIS style link indication */
+#define WLC_E_ROAM             20
+#define WLC_E_LAST             21
+
+/* Event status codes */
+#define WLC_E_STATUS_SUCCESS           0
+#define WLC_E_STATUS_FAIL              1
+#define WLC_E_STATUS_TIMEOUT           2
+#define WLC_E_STATUS_NO_NETWORKS       3
+#define WLC_E_STATUS_ABORT             4
+
+typedef struct wlc_event_cb {
+       uint msg;                               /* Event message or 0 for all */
+       void (*fn)(void *, wlc_event_t *);      /* Callback function */
+       void *context;                          /* Passed to callback function */
+       struct wlc_event_cb *next;              /* Next in the chain */
+} wlc_event_cb_t;
+
+/*
+ * Country locale determines which channels are available to us.
+ */
+typedef enum _wlc_locale {
+       WLC_WW = 0,     /* Worldwide */
+       WLC_THA,        /* Thailand */
+       WLC_ISR,        /* Israel */
+       WLC_JDN,        /* Jordan */
+       WLC_PRC,        /* China */
+       WLC_JPN,        /* Japan */
+       WLC_FCC,        /* USA */
+       WLC_EUR,        /* Europe */
+       WLC_USL,        /* US Low Band only */
+       WLC_JPH,        /* Japan High Band only */
+       WLC_ALL,        /* All the channels in this band */
+       WLC_11D,        /* Represents locale recieved by 11d beacons */
+       WLC_LAST_LOCALE,
+       WLC_UNDEFINED_LOCALE = 0xf
+} wlc_locale_t;
+
+/* channel encoding */
+typedef struct channel_info {
+       int hw_channel;
+       int target_channel;
+       int scan_channel;
+} channel_info_t;
+
+/* For ioctls that take a list of MAC addresses */
+struct maclist {
+       uint count;                     /* number of MAC addresses */
+       struct ether_addr ea[1];        /* variable length array of MAC addresses */
+};
+
+/* get pkt count struct passed through ioctl */
+typedef struct get_pktcnt {
+       uint rx_good_pkt;
+       uint rx_bad_pkt;
+       uint tx_good_pkt;
+       uint tx_bad_pkt;
+} get_pktcnt_t;
+
+/* Linux network driver ioctl encoding */
+typedef struct wl_ioctl {
+       uint cmd;       /* common ioctl definition */
+       void *buf;      /* pointer to user buffer */
+       uint len;       /* length of user buffer */
+       bool set;       /* get or set request (optional) */
+       uint used;      /* bytes read or written (optional) */
+       uint needed;    /* bytes needed (optional) */
+} wl_ioctl_t;
+
+/* 
+ * Structure for passing hardware and software 
+ * revision info up from the driver. 
+ */
+typedef struct wlc_rev_info {
+       uint            vendorid;       /* PCI vendor id */
+       uint            deviceid;       /* device id of chip */
+       uint            radiorev;       /* radio revision */
+       uint            chiprev;        /* chip revision */
+       uint            corerev;        /* core revision */
+       uint            boardid;        /* board identifier (usu. PCI sub-device id) */
+       uint            boardvendor;    /* board vendor (usu. PCI sub-vendor id) */
+       uint            boardrev;       /* board revision */
+       uint            driverrev;      /* driver version */
+       uint            ucoderev;       /* microcode version */
+       uint            bus;            /* bus type */
+       uint        chipnum;    /* chip number */
+} wlc_rev_info_t;
+
+/* check this magic number */
+#define WLC_IOCTL_MAGIC                0x14e46c77
+
+/* bump this number if you change the ioctl interface */
+#define WLC_IOCTL_VERSION      1
+
+/* maximum length buffer required */
+#define WLC_IOCTL_MAXLEN       8192
+
+/* common ioctl definitions */
+#define WLC_GET_MAGIC                          0
+#define WLC_GET_VERSION                                1
+#define WLC_UP                                 2
+#define WLC_DOWN                               3
+#define WLC_GET_LOOP                           4
+#define WLC_SET_LOOP                           5
+#define WLC_DUMP                               6
+#define WLC_GET_MSGLEVEL                       7
+#define WLC_SET_MSGLEVEL                       8
+#define WLC_GET_PROMISC                                9
+#define WLC_SET_PROMISC                                10
+#define WLC_OBSOLETE                           11 
+#define WLC_GET_RATE                           12
+#define WLC_SET_RATE                           13
+#define WLC_GET_INSTANCE                       14
+#define WLC_GET_FRAG                           15
+#define WLC_SET_FRAG                           16
+#define WLC_GET_RTS                            17
+#define WLC_SET_RTS                            18
+#define WLC_GET_INFRA                          19
+#define WLC_SET_INFRA                          20
+#define WLC_GET_AUTH                           21
+#define WLC_SET_AUTH                           22
+#define WLC_GET_BSSID                          23
+#define WLC_SET_BSSID                          24
+#define WLC_GET_SSID                           25
+#define WLC_SET_SSID                           26
+#define WLC_RESTART                            27
+#define WLC_DUMP_SCB                           28 
+#define WLC_GET_CHANNEL                                29
+#define WLC_SET_CHANNEL                                30
+#define WLC_GET_SRL                            31
+#define WLC_SET_SRL                            32
+#define WLC_GET_LRL                            33
+#define WLC_SET_LRL                            34
+#define WLC_GET_PLCPHDR                                35
+#define WLC_SET_PLCPHDR                                36
+#define WLC_GET_RADIO                          37
+#define WLC_SET_RADIO                          38
+#define WLC_GET_PHYTYPE                                39
+#define WLC_DUMP_RATE                          40
+#define WLC_SET_RATE_PARAMS                    41
+#define WLC_GET_WEP                            42
+#define WLC_SET_WEP                            43
+#define WLC_GET_KEY                            44
+#define WLC_SET_KEY                            45
+#define WLC_GET_REGULATORY                     46
+#define WLC_SET_REGULATORY                     47
+#define WLC_GET_PASSIVE                                48      /* added by nbd */
+#define WLC_SET_PASSIVE                                49      /* added by nbd */
+#define WLC_SCAN                               50
+#define WLC_SCAN_RESULTS                       51
+#define WLC_DISASSOC                           52
+#define WLC_REASSOC                            53
+#define WLC_GET_ROAM_TRIGGER                   54
+#define WLC_SET_ROAM_TRIGGER                   55
+#define WLC_GET_ROAM_DELTA                     56
+#define WLC_SET_ROAM_DELTA                     57
+#define WLC_GET_ROAM_SCAN_PERIOD               58
+#define WLC_SET_ROAM_SCAN_PERIOD               59
+#define WLC_EVM                                        60
+#define WLC_GET_TXANT                          61
+#define WLC_SET_TXANT                          62
+#define WLC_GET_ANTDIV                         63
+#define WLC_SET_ANTDIV                         64
+#define WLC_GET_TXPWR                          65
+#define WLC_SET_TXPWR                          66
+#define WLC_GET_CLOSED                         67
+#define WLC_SET_CLOSED                         68
+#define WLC_GET_MACLIST                                69
+#define WLC_SET_MACLIST                                70
+#define WLC_GET_RATESET                                71
+#define WLC_SET_RATESET                                72
+#define WLC_GET_LOCALE                         73
+#define WLC_SET_LOCALE                         74
+#define WLC_GET_BCNPRD                         75
+#define WLC_SET_BCNPRD                         76
+#define WLC_GET_DTIMPRD                                77
+#define WLC_SET_DTIMPRD                                78
+#define WLC_GET_SROM                           79
+#define WLC_SET_SROM                           80
+#define WLC_GET_WEP_RESTRICT                   81
+#define WLC_SET_WEP_RESTRICT                   82
+#define WLC_GET_COUNTRY                                83
+#define WLC_SET_COUNTRY                                84
+#define WLC_GET_PM                             85
+#define WLC_SET_PM                             86
+#define WLC_GET_WAKE                           87
+#define WLC_SET_WAKE                           88
+#define        WLC_GET_D11CNTS                         89
+#define WLC_GET_FORCELINK                      90      /* ndis only */
+#define WLC_SET_FORCELINK                      91      /* ndis only */
+#define WLC_FREQ_ACCURACY                      92
+#define WLC_CARRIER_SUPPRESS                   93
+#define WLC_GET_PHYREG                         94
+#define WLC_SET_PHYREG                         95
+#define WLC_GET_RADIOREG                       96
+#define WLC_SET_RADIOREG                       97
+#define WLC_GET_REVINFO                                98
+#define WLC_GET_UCANTDIV                       99
+#define WLC_SET_UCANTDIV                       100
+#define WLC_R_REG                              101
+#define WLC_W_REG                              102
+#define WLC_DIAG_LOOPBACK                      103
+#define WLC_RESET_D11CNTS                      104
+#define WLC_GET_MACMODE                                105
+#define WLC_SET_MACMODE                                106
+#define WLC_GET_MONITOR                                107     /* added by nbd */
+#define WLC_SET_MONITOR                                108     /* added by nbd */
+#define WLC_GET_GMODE                          109
+#define WLC_SET_GMODE                          110
+#define WLC_GET_LEGACY_ERP                     111
+#define WLC_SET_LEGACY_ERP                     112
+#define WLC_GET_RX_ANT                         113
+#define WLC_GET_CURR_RATESET                   114     /* current rateset */
+#define WLC_GET_SCANSUPPRESS                   115
+#define WLC_SET_SCANSUPPRESS                   116
+#define WLC_GET_AP                             117
+#define WLC_SET_AP                             118
+#define WLC_GET_EAP_RESTRICT                   119
+#define WLC_SET_EAP_RESTRICT                   120
+#define WLC_SCB_AUTHORIZE                      121
+#define WLC_SCB_DEAUTHORIZE                    122
+#define WLC_GET_WDSLIST                                123
+#define WLC_SET_WDSLIST                                124
+#define WLC_GET_ATIM                           125
+#define WLC_SET_ATIM                           126
+#define WLC_GET_RSSI                           127
+#define WLC_GET_PHYANTDIV                      128
+#define WLC_SET_PHYANTDIV                      129
+#define WLC_AP_RX_ONLY                         130
+#define WLC_GET_TX_PATH_PWR                    131
+#define WLC_SET_TX_PATH_PWR                    132
+#define WLC_GET_WSEC                           133
+#define WLC_SET_WSEC                           134
+#define WLC_GET_PHY_NOISE                      135
+#define WLC_GET_BSS_INFO                       136
+#define WLC_GET_PKTCNTS                                137
+#define WLC_GET_LAZYWDS                                138
+#define WLC_SET_LAZYWDS                                139
+#define WLC_GET_BANDLIST                       140
+#define WLC_GET_BAND                           141
+#define WLC_SET_BAND                           142
+#define WLC_SCB_DEAUTHENTICATE                 143
+#define WLC_GET_SHORTSLOT                      144
+#define WLC_GET_SHORTSLOT_OVERRIDE             145
+#define WLC_SET_SHORTSLOT_OVERRIDE             146
+#define WLC_GET_SHORTSLOT_RESTRICT             147
+#define WLC_SET_SHORTSLOT_RESTRICT             148
+#define WLC_GET_GMODE_PROTECTION               149
+#define WLC_GET_GMODE_PROTECTION_OVERRIDE      150
+#define WLC_SET_GMODE_PROTECTION_OVERRIDE      151
+#define WLC_UPGRADE                            152
+#define WLC_GET_MRATE                          153
+#define WLC_SET_MRATE                          154
+#define WLC_GET_IGNORE_BCNS                    155
+#define WLC_SET_IGNORE_BCNS                    156
+#define WLC_GET_SCB_TIMEOUT                    157
+#define WLC_SET_SCB_TIMEOUT                    158
+#define WLC_GET_ASSOCLIST                      159
+#define WLC_GET_CLK                            160
+#define WLC_SET_CLK                            161
+#define WLC_GET_UP                             162
+#define WLC_OUT                                        163
+#define WLC_GET_WPA_AUTH                       164
+#define WLC_SET_WPA_AUTH                       165
+#define WLC_GET_UCFLAGS                                166
+#define WLC_SET_UCFLAGS                                167
+#define WLC_GET_PWRIDX                         168
+#define WLC_SET_PWRIDX                         169
+#define WLC_GET_TSSI                           170
+#define WLC_GET_SUP_RATESET_OVERRIDE           171
+#define WLC_SET_SUP_RATESET_OVERRIDE           172
+#define WLC_SET_FAST_TIMER                     173
+#define WLC_GET_FAST_TIMER                     174
+#define WLC_SET_SLOW_TIMER                     175
+#define WLC_GET_SLOW_TIMER                     176
+#define WLC_DUMP_PHYREGS                       177
+#define WLC_GET_GMODE_PROTECTION_CONTROL       178
+#define WLC_SET_GMODE_PROTECTION_CONTROL       179
+#define WLC_GET_PHYLIST                                180
+#define WLC_ENCRYPT_STRENGTH                   181     /* ndis only */
+#define WLC_DECRYPT_STATUS                     182     /* ndis only */
+#define WLC_GET_KEY_SEQ                                183
+#define WLC_GET_SCAN_CHANNEL_TIME              184
+#define WLC_SET_SCAN_CHANNEL_TIME              185
+#define WLC_GET_SCAN_UNASSOC_TIME              186
+#define WLC_SET_SCAN_UNASSOC_TIME              187
+#define WLC_GET_SCAN_HOME_TIME                 188
+#define WLC_SET_SCAN_HOME_TIME                 189
+#define WLC_GET_SCAN_PASSES                    190
+#define WLC_SET_SCAN_PASSES                    191
+#define WLC_GET_PRB_RESP_TIMEOUT               192
+#define WLC_SET_PRB_RESP_TIMEOUT               193
+#define WLC_GET_ATTEN                          194
+#define WLC_SET_ATTEN                          195
+#define WLC_GET_SHMEM                          196     /* diag */
+#define WLC_SET_SHMEM                          197     /* diag */
+#define WLC_GET_GMODE_PROTECTION_CTS           198
+#define WLC_SET_GMODE_PROTECTION_CTS           199
+#define WLC_SET_TKIP_MIC_FLAG                  200
+#define WLC_SCB_DEAUTHENTICATE_FOR_REASON      201
+#define WLC_TKIP_COUNTERMEASURES               202
+#define WLC_GET_PIOMODE                                203
+#define WLC_SET_PIOMODE                                204
+#define WLC_SET_LED                            209
+#define WLC_GET_LED                            210
+#define WLC_GET_INTERFERENCE_MODE              211
+#define WLC_SET_INTERFERENCE_MODE              212
+#define WLC_GET_CHANNEL_QA                     213
+#define WLC_START_CHANNEL_QA                   214
+#define WLC_GET_CHANNEL_SEL                    215
+#define WLC_START_CHANNEL_SEL                  216
+#define WLC_GET_VALID_CHANNELS                 217
+#define WLC_GET_FAKEFRAG                       218
+#define WLC_SET_FAKEFRAG                       219
+#define WLC_GET_PWROUT_PERCENTAGE              220
+#define WLC_SET_PWROUT_PERCENTAGE              221
+#define WLC_SET_BAD_FRAME_PREEMPT              222
+#define WLC_GET_BAD_FRAME_PREEMPT              223
+#define WLC_SET_LEAP_LIST                      224
+#define WLC_GET_LEAP_LIST                      225
+#define WLC_GET_CWMIN                          226
+#define WLC_SET_CWMIN                          227
+#define WLC_GET_CWMAX                          228
+#define WLC_SET_CWMAX                          229
+#define WLC_GET_WET                            230
+#define WLC_SET_WET                            231
+#define WLC_GET_KEY_PRIMARY                    235
+#define WLC_SET_KEY_PRIMARY                    236
+#define WLC_SCAN_WITH_CALLBACK                 240
+#define WLC_WDS_GET_REMOTE_HWADDR              246     /* currently handled in wl_linux.c/wl_vx.c */
+#define WLC_SET_CS_SCAN_TIMER                  248
+#define WLC_GET_CS_SCAN_TIMER                  249
+#define WLC_CURRENT_PWR                                256
+#define WLC_GET_CHANNELS_IN_COUNTRY            260
+#define WLC_GET_COUNTRY_LIST                   261
+#define WLC_GET_VAR                            262     /* get value of named variable */
+#define WLC_SET_VAR                            263     /* set named variable to value */
+#define WLC_NVRAM_GET                          264
+#define WLC_NVRAM_SET                          265
+#define WLC_SET_WSEC_PMK                       268
+#define WLC_GET_AUTH_MODE                      269
+#define WLC_SET_AUTH_MODE                      270
+#define WLC_LAST                               273     /* do not change - use get_var/set_var */
+
+/*
+ * Minor kludge alert:
+ * Duplicate a few definitions that irelay requires from epiioctl.h here
+ * so caller doesn't have to include this file and epiioctl.h .
+ * If this grows any more, it would be time to move these irelay-specific
+ * definitions out of the epiioctl.h and into a separate driver common file.
+ */
+#ifndef EPICTRL_COOKIE
+#define EPICTRL_COOKIE         0xABADCEDE
+#endif
+
+/* vx wlc ioctl's offset */
+#define CMN_IOCTL_OFF 0x180
+
+/*
+ * custom OID support
+ *
+ * 0xFF - implementation specific OID
+ * 0xE4 - first byte of Broadcom PCI vendor ID
+ * 0x14 - second byte of Broadcom PCI vendor ID
+ * 0xXX - the custom OID number
+ */
+
+/* begin 0x1f values beyond the start of the ET driver range. */
+#define WL_OID_BASE            0xFFE41420
+
+/* NDIS overrides */
+#define OID_WL_GETINSTANCE     (WL_OID_BASE + WLC_GET_INSTANCE)
+#define OID_WL_GET_FORCELINK   (WL_OID_BASE + WLC_GET_FORCELINK)
+#define OID_WL_SET_FORCELINK   (WL_OID_BASE + WLC_SET_FORCELINK)
+#define        OID_WL_ENCRYPT_STRENGTH (WL_OID_BASE + WLC_ENCRYPT_STRENGTH)
+#define OID_WL_DECRYPT_STATUS  (WL_OID_BASE + WLC_DECRYPT_STATUS)
+
+#define WL_DECRYPT_STATUS_SUCCESS      1
+#define WL_DECRYPT_STATUS_FAILURE      2
+#define WL_DECRYPT_STATUS_UNKNOWN      3
+
+/* allows user-mode app to poll the status of USB image upgrade */
+#define WLC_UPGRADE_SUCCESS                    0
+#define WLC_UPGRADE_PENDING                    1
+
+/* Bit masks for radio disabled status - returned by WL_GET_RADIO */
+#define WL_RADIO_SW_DISABLE    (1<<0)
+#define WL_RADIO_HW_DISABLE    (1<<1)
+
+/* Override bit for WLC_SET_TXPWR.  if set, ignore other level limits */
+#define WL_TXPWR_OVERRIDE      (1<<31)
+
+
+/* Bus types */
+#define WL_SB_BUS      0       /* Silicon Backplane */
+#define WL_PCI_BUS     1       /* PCI target */
+#define WL_PCMCIA_BUS  2       /* PCMCIA target */
+
+/* band types */
+#define        WLC_BAND_AUTO           0       /* auto-select */
+#define        WLC_BAND_A              1       /* "a" band (5   Ghz) */
+#define        WLC_BAND_B              2       /* "b" band (2.4 Ghz) */
+
+/* MAC list modes */
+#define WLC_MACMODE_DISABLED   0       /* MAC list disabled */
+#define WLC_MACMODE_DENY       1       /* Deny specified (i.e. allow unspecified) */
+#define WLC_MACMODE_ALLOW      2       /* Allow specified (i.e. deny unspecified) */   
+
+
+/* 54g modes (basic bits may still be overridden) */
+#define GMODE_LEGACY_B         0       /* Rateset: 1b, 2b, 5.5, 11 */
+                                       /* Preamble: Long */
+                                       /* Shortslot: Off */
+#define GMODE_AUTO             1       /* Rateset: 1b, 2b, 5.5b, 11b, 18, 24, 36, 54 */
+                                       /* Extended Rateset: 6, 9, 12, 48 */
+                                       /* Preamble: Long */
+                                       /* Shortslot: Auto */
+#define GMODE_ONLY             2       /* Rateset: 1b, 2b, 5.5b, 11b, 18, 24b, 36, 54 */
+                                       /* Extended Rateset: 6b, 9, 12b, 48 */
+                                       /* Preamble: Short required */
+                                       /* Shortslot: Auto */
+#define GMODE_B_DEFERRED       3       /* Rateset: 1b, 2b, 5.5b, 11b, 18, 24, 36, 54 */
+                                       /* Extended Rateset: 6, 9, 12, 48 */
+                                       /* Preamble: Long */
+                                       /* Shortslot: On */
+#define GMODE_PERFORMANCE      4       /* Rateset: 1b, 2b, 5.5b, 6b, 9, 11b, 12b, 18, 24b, 36, 48, 54 */
+                                       /* Preamble: Short required */
+                                       /* Shortslot: On and required */
+#define GMODE_LRS              5       /* Rateset: 1b, 2b, 5.5b, 11b */
+                                       /* Extended Rateset: 6, 9, 12, 18, 24, 36, 48, 54 */
+                                       /* Preamble: Long */
+                                       /* Shortslot: Auto */
+#define GMODE_MAX              6
+
+
+/* values for PLCPHdr_override */
+#define WLC_PLCP_AUTO  -1
+#define WLC_PLCP_SHORT 0
+#define WLC_PLCP_LONG  1
+
+/* values for g_protection_override */
+#define WLC_G_PROTECTION_AUTO  -1
+#define WLC_G_PROTECTION_OFF   0
+#define WLC_G_PROTECTION_ON    1
+
+/* values for g_protection_control */
+#define WLC_G_PROTECTION_CTL_OFF       0
+#define WLC_G_PROTECTION_CTL_LOCAL     1
+#define WLC_G_PROTECTION_CTL_OVERLAP   2
+
+/* Values for PM */
+#define PM_OFF 0
+#define PM_MAX 1
+#define PM_FAST 2
+
+/* interference mitigation options */
+#define        INTERFERE_NONE  0       /* off */
+#define        NON_WLAN        1       /* foreign/non 802.11 interference, no auto detect */
+#define        WLAN_MANUAL     2       /* ACI: no auto detection */
+#define        WLAN_AUTO       3       /* ACI: auto - detact */
+
+/* Message levels */
+#define WL_ERROR_VAL           0x0001
+#define WL_TRACE_VAL           0x0002
+#define WL_PRHDRS_VAL          0x0004
+#define WL_PRPKT_VAL           0x0008
+#define WL_INFORM_VAL          0x0010
+#define WL_TMP_VAL             0x0020
+#define WL_OID_VAL             0x0040
+#define WL_RATE_VAL            0x0080
+#define WL_ASSOC_VAL           0x0100
+#define WL_PRUSR_VAL           0x0200
+#define WL_PS_VAL              0x0400
+#define WL_TXPWR_VAL           0x0800
+#define WL_GMODE_VAL           0x1000
+#define WL_DUAL_VAL            0x2000
+#define WL_WSEC_VAL            0x4000
+#define WL_WSEC_DUMP_VAL       0x8000
+#define WL_LOG_VAL             0x10000
+#define WL_NRSSI_VAL           0x20000
+#define WL_LOFT_VAL            0x40000
+#define WL_REGULATORY_VAL      0x80000
+#define WL_ACI_VAL             0x100000
+
+
+/* 802.11h enforcement levels */
+#define SPECT_MNGMT_OFF         0   /* 11h disabled */
+#define SPECT_MNGMT_LOOSE       1   /* Allow scan lists to contain non-11h AP */
+                                   /* when 11h is enabled */
+#define SPECT_MNGMT_STRICT      2   /* Prine out non-11h APs from scan list */
+
+
+
+/* max # of leds supported by GPIO (gpio pin# == led index#) */
+#define        WL_LED_NUMGPIO          16      /* gpio 0-15 */
+
+/* led per-pin behaviors */
+#define        WL_LED_OFF              0               /* always off */
+#define        WL_LED_ON               1               /* always on */
+#define        WL_LED_ACTIVITY         2               /* activity */
+#define        WL_LED_RADIO            3               /* radio enabled */
+#define        WL_LED_ARADIO           4               /* 5  Ghz radio enabled */
+#define        WL_LED_BRADIO           5               /* 2.4Ghz radio enabled */
+#define        WL_LED_BGMODE           6               /* on if gmode, off if bmode */
+#define        WL_LED_WI1              7               
+#define        WL_LED_WI2              8               
+#define        WL_LED_WI3              9               
+#define        WL_LED_ASSOC            10              /* associated state indicator */
+#define        WL_LED_INACTIVE         11              /* null behavior (clears default behavior) */
+#define        WL_LED_NUMBEHAVIOR      12
+
+/* led behavior numeric value format */
+#define        WL_LED_BEH_MASK         0x7f            /* behavior mask */
+#define        WL_LED_AL_MASK          0x80            /* activelow (polarity) bit */
+
+
+/* maximum channels */
+#define WL_NUMCHANNELS 64      /* max # of channels in the band */
+
+/* rate check */
+#define WL_RATE_OFDM(r)                (((r) & 0x7f) == 12 || ((r) & 0x7f) == 18 || \
+                                ((r) & 0x7f) == 24 || ((r) & 0x7f) == 36 || \
+                                ((r) & 0x7f) == 48 || ((r) & 0x7f) == 72 || \
+                                ((r) & 0x7f) == 96 || ((r) & 0x7f) == 108)
+
+/* WDS link local endpoint WPA role */
+#define WL_WDS_WPA_ROLE_AUTH   0       /* authenticator */
+#define WL_WDS_WPA_ROLE_SUP    1       /* supplicant */
+#define WL_WDS_WPA_ROLE_AUTO   255     /* auto, based on mac addr value */
+
+/* afterburner_override */
+#define        ABO_AUTO                -1      /* auto - no override */
+#define        ABO_OFF                 0       /* force afterburner off */
+#define        ABO_ON                  1       /* force afterburner on */
+
+#define GMODE_AFTERBURNER 6
+
+#undef PACKED
+
+#endif /* _wlioctl_h_ */
diff --git a/openwrt/target/linux/package/openwrt/include/wlutils.h b/openwrt/target/linux/package/openwrt/include/wlutils.h
new file mode 100644 (file)
index 0000000..07e2536
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Broadcom wireless network adapter utility functions
+ *
+ * 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$
+ */
+
+#ifndef _wlutils_h_
+#define _wlutils_h_
+
+#include <typedefs.h>
+#include <wlioctl.h>
+
+/*
+ * Pass a wlioctl request to the specified interface.
+ * @param      name    interface name
+ * @param      cmd     WLC_GET_MAGIC <= cmd < WLC_LAST
+ * @param      buf     buffer for passing in and/or receiving data
+ * @param      len     length of buf
+ * @return     >= 0 if successful or < 0 otherwise
+ */
+extern int wl_ioctl(char *name, int cmd, void *buf, int len);
+
+/*
+ * Get the MAC (hardware) address of the specified interface.
+ * @param      name    interface name
+ * @param      hwaddr  6-byte buffer for receiving address
+ * @return     >= 0 if successful or < 0 otherwise
+ */
+extern int wl_hwaddr(char *name, unsigned char *hwaddr);
+
+/*
+ * Probe the specified interface.
+ * @param      name    interface name
+ * @return     >= 0 if a Broadcom wireless device or < 0 otherwise
+ */
+extern int wl_probe(char *name);
+
+/*
+ * Set/Get named variable.
+ * @param      name    interface name
+ * @param      var     variable name
+ * @param      val     variable value/buffer
+ * @param      len     variable value/buffer length
+ * @return     success == 0, failure != 0
+ */
+extern int wl_set_val(char *name, char *var, void *val, int len);
+extern int wl_get_val(char *name, char *var, void *val, int len);
+extern int wl_set_int(char *name, char *var, int val);
+extern int wl_get_int(char *name, char *var, int *val);
+
+#endif /* _wlutils_h_ */
diff --git a/openwrt/target/linux/package/openwrt/ipkg/base-files-arch.control b/openwrt/target/linux/package/openwrt/ipkg/base-files-arch.control
new file mode 100644 (file)
index 0000000..5396f68
--- /dev/null
@@ -0,0 +1,6 @@
+Package: base-files-arch
+Priority: optional
+Section: sys
+Maintainer: Felix Fietkau <nbd@vd-s.ath.cx>
+Source: buildroot internal
+Description: Board/architecture specific files 
diff --git a/openwrt/target/linux/package/openwrt/jffs2root.c b/openwrt/target/linux/package/openwrt/jffs2root.c
new file mode 100644 (file)
index 0000000..36b928f
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * jffs2root.c
+ *
+ * Copyright (C) 2005 Mike Baker 
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * $Id$
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <string.h>
+
+#include <sys/ioctl.h>
+#include <linux/mtd/mtd.h>
+
+#define FILENAME "/dev/mtdblock/1"
+
+struct trx_header {
+    unsigned magic;            /* "HDR0" */
+    unsigned len;              /* Length of file including header */
+    unsigned crc32;            /* 32-bit CRC from flag_version to end of file */
+    unsigned flag_version;     /* 0:15 flags, 16:31 version */
+    unsigned offsets[3];       /* Offsets of partitions from start of header */
+};
+
+unsigned long *crc32;
+
+void init_crc32()
+{
+    unsigned long crc;
+    unsigned long poly = 0xEDB88320L;
+    int n, bit;
+    if ((crc32 = (unsigned long *) malloc(256 * sizeof(unsigned long))) == (void *)-1) {
+           perror("malloc");
+           exit(1);
+    }
+    for (n = 0; n < 256; n++) {
+       crc = (unsigned long) n;
+       for (bit = 0; bit < 8; bit++)
+           crc = (crc & 1) ? (poly ^ (crc >> 1)) : (crc >> 1);
+       crc32[n] = crc;
+    }
+}
+
+unsigned int crc32buf(char *buf, size_t len)
+{
+    unsigned int crc = 0xFFFFFFFF;
+    for (; len; len--, buf++)
+       crc = crc32[(crc ^ *buf) & 0xff] ^ (crc >> 8);
+    return crc;
+}
+
+int main(int argc, char **argv)
+{
+    int fd;
+    struct mtd_info_user mtdInfo;
+    unsigned long len;
+    struct trx_header *ptr;
+       
+    if (((fd = open(FILENAME, O_RDWR))  < 0)
+    || ((len = lseek(fd, 0, SEEK_END)) < 0)
+    || ((ptr = (struct trx_header *) mmap(0, len, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0)) == (void *) (-1))
+    || (ptr->magic != 0x30524448)) {
+       printf("Error reading trx info\n");
+       exit(-1);
+    }
+    close (fd);
+
+    if (((fd = open("/dev/mtd/1", O_RDWR))  < 0)
+    || (ioctl(fd, MEMGETINFO, &mtdInfo))) {
+      fprintf(stderr, "Could not get MTD device info from %s\n", FILENAME);
+      close(fd);
+      exit(1);
+    }
+    close(fd);
+
+    if (argc > 1 && !strcmp(argv[1],"--move")) {
+      if (ptr->offsets[2] >= ptr->len) {
+        printf("Partition already moved outside trx\n");
+      } else {
+       init_crc32();
+       ptr->offsets[2] +=  (mtdInfo.erasesize - 1);
+       ptr->offsets[2] &= ~(mtdInfo.erasesize - 1);
+        ptr->len = ptr->offsets[2];
+        ptr->crc32 = crc32buf((void *) &(ptr->flag_version), ptr->len - offsetof(struct trx_header, flag_version));
+       msync(ptr,sizeof(struct trx_header),MS_SYNC|MS_INVALIDATE);
+       printf("Partition moved; please reboot\n");
+      }
+    } else {
+      int x;
+      printf(" erase: 0x%08x\n",mtdInfo.erasesize);
+      printf("=== trx ===\n");
+      printf("mapped: 0x%08x\n", (unsigned)ptr);
+      printf(" magic: 0x%08x\n", ptr->magic);
+      printf("   len: 0x%08x\n", ptr->len);
+      printf("   crc: 0x%08x\n", ptr->crc32);
+      for (x = 0; x < 3; x++)
+       printf(" offset[%d]: 0x%08x\n", x, ptr->offsets[x]);
+    }
+
+    munmap((void *) ptr, len);
+    return 0;
+}
diff --git a/openwrt/toolchain/kernel-headers/config.mips b/openwrt/toolchain/kernel-headers/config.mips
new file mode 100644 (file)
index 0000000..d641202
--- /dev/null
@@ -0,0 +1,1045 @@
+#
+# Automatically generated make config: don't edit
+#
+CONFIG_MIPS=y
+CONFIG_MIPS32=y
+# CONFIG_MIPS64 is not set
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_KMOD is not set
+
+#
+# Machine selection
+#
+# CONFIG_ACER_PICA_61 is not set
+# CONFIG_MIPS_BOSPORUS is not set
+# CONFIG_MIPS_MIRAGE is not set
+# CONFIG_MIPS_DB1000 is not set
+# CONFIG_MIPS_DB1100 is not set
+# CONFIG_MIPS_DB1500 is not set
+# CONFIG_MIPS_DB1550 is not set
+# CONFIG_MIPS_PB1000 is not set
+# CONFIG_MIPS_PB1100 is not set
+# CONFIG_MIPS_PB1500 is not set
+# CONFIG_MIPS_HYDROGEN3 is not set
+# CONFIG_MIPS_PB1550 is not set
+# CONFIG_MIPS_XXS1500 is not set
+# CONFIG_MIPS_MTX1 is not set
+# CONFIG_COGENT_CSB250 is not set
+# CONFIG_BAGET_MIPS is not set
+# CONFIG_CASIO_E55 is not set
+# CONFIG_MIPS_COBALT is not set
+# CONFIG_DECSTATION is not set
+# CONFIG_MIPS_EV64120 is not set
+# CONFIG_MIPS_EV96100 is not set
+# CONFIG_MIPS_IVR is not set
+# CONFIG_HP_LASERJET is not set
+# CONFIG_IBM_WORKPAD is not set
+# CONFIG_LASAT is not set
+# CONFIG_MIPS_ITE8172 is not set
+# CONFIG_MIPS_ATLAS is not set
+# CONFIG_MIPS_MAGNUM_4000 is not set
+# CONFIG_MIPS_MALTA is not set
+# CONFIG_MIPS_SEAD is not set
+# CONFIG_MOMENCO_OCELOT is not set
+# CONFIG_MOMENCO_OCELOT_G is not set
+# CONFIG_MOMENCO_OCELOT_C is not set
+# CONFIG_MOMENCO_JAGUAR_ATX is not set
+# CONFIG_PMC_BIG_SUR is not set
+# CONFIG_PMC_STRETCH is not set
+# CONFIG_PMC_YOSEMITE is not set
+# CONFIG_DDB5074 is not set
+# CONFIG_DDB5476 is not set
+# CONFIG_DDB5477 is not set
+# CONFIG_NEC_OSPREY is not set
+# CONFIG_NEC_EAGLE is not set
+# CONFIG_OLIVETTI_M700 is not set
+# CONFIG_NINO is not set
+# CONFIG_SGI_IP22 is not set
+# CONFIG_SGI_IP27 is not set
+# CONFIG_SIBYTE_SB1xxx_SOC is not set
+# CONFIG_SNI_RM200_PCI is not set
+# CONFIG_TANBAC_TB0226 is not set
+# CONFIG_TANBAC_TB0229 is not set
+# CONFIG_TOSHIBA_JMR3927 is not set
+# CONFIG_TOSHIBA_RBTX4927 is not set
+# CONFIG_VICTOR_MPC30X is not set
+# CONFIG_ZAO_CAPCELLA is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+# CONFIG_MIPS_AU1000 is not set
+
+#
+# CPU selection
+#
+CONFIG_CPU_MIPS32=y
+# CONFIG_CPU_MIPS64 is not set
+# CONFIG_CPU_R3000 is not set
+# CONFIG_CPU_TX39XX is not set
+# CONFIG_CPU_VR41XX is not set
+# CONFIG_CPU_R4300 is not set
+# CONFIG_CPU_R4X00 is not set
+# CONFIG_CPU_TX49XX is not set
+# CONFIG_CPU_R5000 is not set
+# CONFIG_CPU_R5432 is not set
+# CONFIG_CPU_R6000 is not set
+# CONFIG_CPU_NEVADA is not set
+# CONFIG_CPU_R8000 is not set
+# CONFIG_CPU_R10000 is not set
+# CONFIG_CPU_RM7000 is not set
+# CONFIG_CPU_RM9000 is not set
+# CONFIG_CPU_SB1 is not set
+CONFIG_PAGE_SIZE_4KB=y
+# CONFIG_PAGE_SIZE_16KB is not set
+# CONFIG_PAGE_SIZE_64KB is not set
+CONFIG_CPU_HAS_PREFETCH=y
+# CONFIG_VTAG_ICACHE is not set
+# CONFIG_64BIT_PHYS_ADDR is not set
+# CONFIG_CPU_ADVANCED is not set
+CONFIG_CPU_HAS_LLSC=y
+# CONFIG_CPU_HAS_LLDSCD is not set
+# CONFIG_CPU_HAS_WB is not set
+CONFIG_CPU_HAS_SYNC=y
+
+#
+# General setup
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
+# CONFIG_BUILD_ELF64 is not set
+CONFIG_NET=y
+CONFIG_PCI=y
+# CONFIG_PCI_NEW is not set
+CONFIG_PCI_AUTO=y
+# CONFIG_PCI_NAMES is not set
+# CONFIG_ISA is not set
+# CONFIG_TC is not set
+# CONFIG_MCA is not set
+# CONFIG_SBUS is not set
+# CONFIG_HOTPLUG is not set
+# CONFIG_PCMCIA is not set
+# CONFIG_HOTPLUG_PCI is not set
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_MIPS32_COMPAT is not set
+# CONFIG_MIPS32_O32 is not set
+# CONFIG_MIPS32_N32 is not set
+# CONFIG_BINFMT_ELF32 is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_OOM_KILLER is not set
+# CONFIG_CMDLINE_BOOL is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_CFI_B1 is not set
+CONFIG_MTD_CFI_B2=y
+# CONFIG_MTD_CFI_B4 is not set
+# CONFIG_MTD_CFI_B8 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_AMDSTD is not set
+# CONFIG_MTD_SHARP is not set
+# CONFIG_MTD_JEDEC is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_PB1000 is not set
+# CONFIG_MTD_PB1500 is not set
+# CONFIG_MTD_PB1100 is not set
+# CONFIG_MTD_CSTM_MIPS_IXX is not set
+# CONFIG_MTD_OCELOT is not set
+# CONFIG_MTD_LASAT is not set
+# CONFIG_MTD_PCI is not set
+# CONFIG_MTD_PCMCIA is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC1000 is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOCPROBE is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play configuration
+#
+# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_CISS_SCSI_TAPE is not set
+# CONFIG_CISS_MONITOR_THREAD is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_SX8 is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_BLK_STATS is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=m
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+# CONFIG_FILTER is not set
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_FWMARK=y
+CONFIG_IP_ROUTE_NAT=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_TOS=y
+# CONFIG_IP_ROUTE_VERBOSE is not set
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_ARPD is not set
+# CONFIG_INET_ECN is not set
+# CONFIG_SYN_COOKIES is not set
+
+#
+#   IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=y
+CONFIG_IP_NF_FTP=y
+# CONFIG_IP_NF_AMANDA is not set
+CONFIG_IP_NF_TFTP=y
+CONFIG_IP_NF_IRC=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MATCH_LIMIT=m
+CONFIG_IP_NF_MATCH_MAC=m
+CONFIG_IP_NF_MATCH_PKTTYPE=m
+CONFIG_IP_NF_MATCH_MARK=y
+CONFIG_IP_NF_MATCH_MULTIPORT=y
+CONFIG_IP_NF_MATCH_TOS=m
+# CONFIG_IP_NF_MATCH_RECENT is not set
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_DSCP=m
+CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_LENGTH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_TCPMSS=y
+CONFIG_IP_NF_MATCH_HELPER=m
+CONFIG_IP_NF_MATCH_STATE=y
+CONFIG_IP_NF_MATCH_CONNTRACK=m
+CONFIG_IP_NF_MATCH_UNCLEAN=m
+# CONFIG_IP_NF_MATCH_OWNER is not set
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_TARGET_MIRROR=m
+CONFIG_IP_NF_NAT=y
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=y
+CONFIG_IP_NF_TARGET_REDIRECT=y
+CONFIG_IP_NF_NAT_SNMP_BASIC=m
+CONFIG_IP_NF_NAT_IRC=y
+CONFIG_IP_NF_NAT_FTP=y
+CONFIG_IP_NF_NAT_TFTP=y
+CONFIG_IP_NF_MANGLE=y
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_DSCP=m
+CONFIG_IP_NF_TARGET_MARK=y
+CONFIG_IP_NF_TARGET_LOG=y
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=y
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+# CONFIG_IP_NF_ARP_MANGLE is not set
+
+#
+#   IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+
+#
+#   IPv6: Netfilter Configuration
+#
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_LIMIT=m
+CONFIG_IP6_NF_MATCH_MAC=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+CONFIG_IP6_NF_MATCH_MULTIPORT=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_MARK=m
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AHESP is not set
+CONFIG_IP6_NF_MATCH_LENGTH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_MARK=m
+# CONFIG_KHTTPD is not set
+
+#
+#    SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+CONFIG_VLAN_8021Q=y
+
+#
+#  
+#
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_DECNET is not set
+CONFIG_BRIDGE=y
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_CSZ=m
+# CONFIG_NET_SCH_HFSC is not set
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+# CONFIG_NET_SCH_NETEM is not set
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_INGRESS=m
+CONFIG_NET_QOS=y
+CONFIG_NET_ESTIMATOR=y
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_POLICE=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+# CONFIG_PHONE_IXJ is not set
+# CONFIG_PHONE_IXJ_PCMCIA is not set
+
+#
+# ATA/IDE/MFM/RLL support
+#
+# CONFIG_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI support
+#
+CONFIG_SCSI=m
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_SD_EXTRA_DEVS=5
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+CONFIG_CHR_DEV_SG=m
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_DEBUG_QUEUES is not set
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AHA1740 is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_AM53C974 is not set
+# CONFIG_SCSI_MEGARAID is not set
+# CONFIG_SCSI_MEGARAID2 is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_SATA_AHCI is not set
+# CONFIG_SCSI_SATA_SVW is not set
+# CONFIG_SCSI_ATA_PIIX is not set
+# CONFIG_SCSI_SATA_NV is not set
+# CONFIG_SCSI_SATA_PROMISE is not set
+# CONFIG_SCSI_SATA_SX4 is not set
+# CONFIG_SCSI_SATA_SIL is not set
+# CONFIG_SCSI_SATA_SIS is not set
+# CONFIG_SCSI_SATA_ULI is not set
+# CONFIG_SCSI_SATA_VIA is not set
+# CONFIG_SCSI_SATA_VITESSE is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_CPQFCTS is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_EATA_DMA is not set
+# CONFIG_SCSI_EATA_PIO is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_NCR53C7xx is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_NCR53C8XX is not set
+# CONFIG_SCSI_SYM53C8XX is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PCI2000 is not set
+# CONFIG_SCSI_PCI2220I is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_QLOGIC_ISP is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_SIM710 is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_BOOT is not set
+# CONFIG_FUSION_ISENSE is not set
+# CONFIG_FUSION_CTL is not set
+# CONFIG_FUSION_LAN is not set
+
+#
+# IEEE 1394 (FireWire) support (EXPERIMENTAL)
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_PCI is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_ETHERTAP is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_SUNLANCE is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNBMAC is not set
+# CONFIG_SUNQE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_MYRI_SBUS is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+# CONFIG_RCPCI is not set
+CONFIG_SHAPER=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+# CONFIG_IRDA is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input core support
+#
+# CONFIG_INPUT is not set
+# CONFIG_INPUT_KEYBDEV is not set
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_UINPUT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+CONFIG_SERIAL=y
+CONFIG_SERIAL_CONSOLE=y
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=128
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+# CONFIG_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_GAMEPORT is not set
+
+#
+# Input core support is needed for gameports
+#
+
+#
+# Input core support is needed for joysticks
+#
+# CONFIG_QIC02_TAPE is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_IPMI_PANIC_EVENT is not set
+# CONFIG_IPMI_DEVICE_INTERFACE is not set
+# CONFIG_IPMI_KCS is not set
+# CONFIG_IPMI_WATCHDOG is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+# CONFIG_ACQUIRE_WDT is not set
+# CONFIG_ADVANTECH_WDT is not set
+# CONFIG_ALIM1535_WDT is not set
+# CONFIG_ALIM7101_WDT is not set
+# CONFIG_SC520_WDT is not set
+# CONFIG_PCWATCHDOG is not set
+# CONFIG_EUROTECH_WDT is not set
+# CONFIG_IB700_WDT is not set
+# CONFIG_WAFER_WDT is not set
+# CONFIG_I810_TCO is not set
+# CONFIG_MIXCOMWD is not set
+# CONFIG_60XX_WDT is not set
+# CONFIG_SC1200_WDT is not set
+# CONFIG_SCx200_WDT is not set
+CONFIG_SOFT_WATCHDOG=y
+# CONFIG_W83877F_WDT is not set
+# CONFIG_WDT is not set
+# CONFIG_WDTPCI is not set
+# CONFIG_MACHZ_WDT is not set
+# CONFIG_SCx200 is not set
+# CONFIG_SCx200_GPIO is not set
+# CONFIG_AMD_PM768 is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_MIPS_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+
+#
+# Direct Rendering Manager (XFree86 DRI support)
+#
+# CONFIG_DRM is not set
+
+#
+# File systems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_QFMT_V2 is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BEFS_DEBUG is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+# CONFIG_UMSDOS_FS is not set
+CONFIG_VFAT_FS=m
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_CRAMFS=y
+# CONFIG_TMPFS is not set
+CONFIG_RAMFS=y
+# CONFIG_ISO9660_FS is not set
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
+# CONFIG_HPFS_FS is not set
+CONFIG_PROC_FS=y
+CONFIG_DEVFS_FS=y
+CONFIG_DEVFS_MOUNT=y
+# CONFIG_DEVFS_DEBUG is not set
+# CONFIG_DEVPTS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_EXT2_FS=m
+# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_TRACE is not set
+# CONFIG_XFS_DEBUG is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_ROOT_NFS is not set
+# CONFIG_NFSD is not set
+# CONFIG_NFSD_V3 is not set
+# CONFIG_NFSD_TCP is not set
+CONFIG_SUNRPC=m
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+# CONFIG_SMB_FS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+# CONFIG_ZISOFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SMB_NLS is not set
+CONFIG_NLS=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS_DEFAULT="iso8859-1"
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ISO8859_1 is not set
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_EHCI_HCD is not set
+# CONFIG_USB_UHCI is not set
+# CONFIG_USB_UHCI_ALT is not set
+CONFIG_USB_OHCI=m
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_BLUETOOTH is not set
+# CONFIG_USB_MIDI is not set
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+# CONFIG_USB_STORAGE_ISD200 is not set
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_HP8200e=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+# CONFIG_USB_ACM is not set
+CONFIG_USB_PRINTER=m
+
+#
+# USB Human Interface Devices (HID)
+#
+# CONFIG_USB_HID is not set
+
+#
+#     Input core support is needed for USB HID input layer or HIDBP support
+#
+# CONFIG_USB_HIDINPUT is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_SCANNER is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+
+#
+# USB Multimedia devices
+#
+
+#
+#   Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network adaptors
+#
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_CDCETHER is not set
+# CONFIG_USB_USBNET is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_TIGL is not set
+# CONFIG_USB_BRLVGER is not set
+# CONFIG_USB_LCD is not set
+
+#
+# Support for USB gadgets
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# Bluetooth support
+#
+# CONFIG_BLUEZ is not set
+
+#
+# Kernel hacking
+#
+CONFIG_CROSSCOMPILE=y
+# CONFIG_RUNTIME_DEBUG is not set
+# CONFIG_KGDB is not set
+# CONFIG_GDB_CONSOLE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_MIPS_UNCACHED is not set
+CONFIG_LOG_BUF_SHIFT=0
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+# CONFIG_CRC32 is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
diff --git a/openwrt/toolchain/uClibc/files/config.mips b/openwrt/toolchain/uClibc/files/config.mips
new file mode 100644 (file)
index 0000000..32859af
--- /dev/null
@@ -0,0 +1,155 @@
+#
+# Automatically generated make config: don't edit
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+TARGET_mips=y
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+
+#
+# Target Architecture Features and Options
+#
+HAVE_ELF=y
+ARCH_SUPPORTS_LITTLE_ENDIAN=y
+TARGET_ARCH="mips"
+ARCH_CFLAGS="-mno-split-addresses"
+ARCH_SUPPORTS_BIG_ENDIAN=y
+# CONFIG_MIPS_ISA_1 is not set
+# CONFIG_MIPS_ISA_2 is not set
+# CONFIG_MIPS_ISA_3 is not set
+# CONFIG_MIPS_ISA_4 is not set
+CONFIG_MIPS_ISA_MIPS32=y
+# CONFIG_MIPS_ISA_MIPS64 is not set
+ARCH_LITTLE_ENDIAN=y
+# ARCH_BIG_ENDIAN is not set
+# ARCH_HAS_NO_MMU is not set
+ARCH_HAS_MMU=y
+UCLIBC_HAS_FLOATS=y
+HAS_FPU=y
+DO_C99_MATH=y
+WARNINGS="-Wall"
+KERNEL_SOURCE="./toolchain_build_mipsel/linux"
+C_SYMBOL_PREFIX=""
+HAVE_DOT_CONFIG=y
+
+#
+# General Library Settings
+#
+# HAVE_NO_PIC is not set
+DOPIC=y
+# HAVE_NO_SHARED is not set
+HAVE_SHARED=y
+# ARCH_HAS_NO_LDSO is not set
+BUILD_UCLIBC_LDSO=y
+# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
+LDSO_LDD_SUPPORT=y
+LDSO_CACHE_SUPPORT=y
+# LDSO_PRELOAD_FILE_SUPPORT is not set
+LDSO_BASE_FILENAME="ld.so"
+UCLIBC_CTOR_DTOR=y
+# HAS_NO_THREADS is not set
+UCLIBC_HAS_THREADS=y
+# PTHREADS_DEBUG_SUPPORT is not set
+UCLIBC_HAS_LFS=y
+# MALLOC is not set
+# MALLOC_SIMPLE is not set
+MALLOC_STANDARD=y
+MALLOC_GLIBC_COMPAT=y
+UCLIBC_DYNAMIC_ATEXIT=y
+HAS_SHADOW=y
+# UNIX98PTY_ONLY is not set
+ASSUME_DEVPTS=y
+UCLIBC_HAS_TM_EXTENSIONS=y
+UCLIBC_HAS_TZ_CACHING=y
+UCLIBC_HAS_TZ_FILE=y
+UCLIBC_HAS_TZ_FILE_READ_MANY=y
+UCLIBC_TZ_FILE_PATH="/etc/TZ"
+
+#
+# Networking Support
+#
+UCLIBC_HAS_IPV6=y
+UCLIBC_HAS_RPC=y
+UCLIBC_HAS_FULL_RPC=y
+
+#
+# String and Stdio Support
+#
+UCLIBC_HAS_STRING_GENERIC_OPT=y
+UCLIBC_HAS_STRING_ARCH_OPT=y
+UCLIBC_HAS_CTYPE_TABLES=y
+UCLIBC_HAS_CTYPE_SIGNED=y
+# UCLIBC_HAS_CTYPE_UNSAFE is not set
+UCLIBC_HAS_CTYPE_CHECKED=y
+# UCLIBC_HAS_CTYPE_ENFORCED is not set
+UCLIBC_HAS_WCHAR=y
+# UCLIBC_HAS_LOCALE is not set
+UCLIBC_HAS_HEXADECIMAL_FLOATS=y
+UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y
+UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
+UCLIBC_HAS_SCANF_GLIBC_A_FLAG=y
+# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
+UCLIBC_HAS_STDIO_BUFSIZ_4096=y
+# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
+UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
+UCLIBC_HAS_STDIO_GETC_MACRO=y
+UCLIBC_HAS_STDIO_PUTC_MACRO=y
+UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
+# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
+UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
+UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
+UCLIBC_HAS_PRINTF_M_SPEC=y
+UCLIBC_HAS_ERRNO_MESSAGES=y
+# UCLIBC_HAS_SYS_ERRLIST is not set
+UCLIBC_HAS_SIGNUM_MESSAGES=y
+# UCLIBC_HAS_SYS_SIGLIST is not set
+UCLIBC_HAS_GNU_GETOPT=y
+
+#
+# Big and Tall
+#
+UCLIBC_HAS_REGEX=y
+# UCLIBC_HAS_WORDEXP is not set
+UCLIBC_HAS_FTW=y
+UCLIBC_HAS_GLOB=y
+
+#
+# Library Installation Options
+#
+SHARED_LIB_LOADER_PREFIX="/lib"
+RUNTIME_PREFIX="/"
+DEVEL_PREFIX="/usr/"
+
+#
+# uClibc security related options
+#
+# UCLIBC_SECURITY is not set
+
+#
+# uClibc development/debugging options
+#
+# DODEBUG is not set
+# DOASSERTS is not set
+# SUPPORT_LD_DEBUG is not set
+# SUPPORT_LD_DEBUG_EARLY is not set
+# UCLIBC_MJN3_ONLY is not set