There's a bug in stop part of init script, here's a fix:
stop() {
echo -n "Stopping $prog: "
killall `echo $UPNPD|cut -d "/" -f 3`
route del -net 239.0.0.0 netmask 255.0.0.0 $INTIFACE
echo "OK"
}
killall /sbin/upnpd just doesn't work, because killall on openwrt doesn't like paths, this fix strips $UPNPD from "/sbin/upnpd" to just "upnpd"
Second thing.. I have ADSL2MUE setup as a bridge, I changed my upnp setup a little so speed settings are acquired from the modem and set inside upnpd.conf during upnpd startup.
To make this work, you need your ADSL2MUE to be reachable from your router, I wrote a howto on that subject, it's here: http://forum.openwrt.org/viewtopic.php?pid=30739
Okay, now you can reach your ADSL2MUE, right? I use firmware 4.22EU (Plain linksys firmware) but I assume that this works with all linksys's adsl2mue firmware's (expect 2.17TI, I bet it doesn't work with that).
Happy with this and still reading? Okay, let's make changes then..
Move your /etc/upnpd.conf to /etc/config/upnpd.conf
then edit file, remove everything about speed (well, lines containing downstream_bitrate and upstream_bitrate is enough)
My script also writes original comments in upnpd.conf just because.. Well, I just made it do so 
Then do a symlink from /tmp/upnpd.conf to /etc/upnpd.conf
#ln -s /tmp/upnpd.conf /etc/upnpd.conf
Yeah, I know, file doesn't exist, but ln doesn't complain about that. My startup script will write file /tmp/upnpd.conf.
Okay, now we are ready to go. Here's a new /etc/init.d/S65upnpd:
#!/bin/sh
#
# /etc/linux-igd/upnpd
#
# Starts the upnpd daemon
#
# description: Internet Gateway Device
# processname: upnpd
# Setup Internal and External interfaces
#Put your DSL Modem's IP or hostname in this variable.
#If you use hostname, make sure that it resolves correctly.
MODEM_IP="10.0.0.9"
#Also make sure that route to your modem exists BEFORE
#upnpd starts.
nvram=/usr/sbin/nvram
INTIFACE=$($nvram get lan_ifname)
EXTIFACE=$($nvram get wan_ifname)
UPNPD=/sbin/upnpd
test -x "$UPNPD" || exit 1
#
# See how we were called.
#
prog="upnpd"
start() {
echo -n "Acquiring link speed: "
wget -q -O - "http://${MODEM_IP}/cgi-bin/webcm?getpage=../html/StatusModem.htm&var:conid=connection0" | grep "var dsl_" > /tmp/.speedreport
DOWNSTREAM=`grep 'dsl_ds_rate = "' /tmp/.speedreport | cut -d '"' -f 2`
UPSTREAM=`grep 'dsl_us_rate = "' /tmp/.speedreport | cut -d '"' -f 2`
rm /tmp/.speedreport
echo "OK"
echo Downstream: ${DOWNSTREAM}
echo Upstream: ${UPSTREAM}
echo -n "Generating upnpd.conf: "
cp /etc/config/upnpd.conf /tmp/upnpd.conf
echo -n "#
# The internet line upstream bit rate reported from
# the daemon. Value in bits per second
# default = 0
upstream_bitrate = ">>/tmp/upnpd.conf
echo $(( $UPSTREAM * 1000))>>/tmp/upnpd.conf
echo >>/tmp/upnpd.conf
echo -n "#
# The internet line downstream bit rate reported from
# the daemon. Value in bits per second
# default = 0
downstream_bitrate = ">>/tmp/upnpd.conf
echo $(( $DOWNSTREAM * 1000))>>/tmp/upnpd.conf
echo >>/tmp/upnpd.conf
echo "OK"
echo -n "Starting $prog: "
route add -net 239.0.0.0 netmask 255.0.0.0 $INTIFACE
"$UPNPD" $EXTIFACE $INTIFACE
echo "OK"
}
stop() {
echo -n "Stopping $prog: "
killall `echo $UPNPD|cut -d "/" -f 3`
route del -net 239.0.0.0 netmask 255.0.0.0 $INTIFACE
echo "OK"
}
restart() {
stop
sleep 10
start
}
reload() {
restart
}
case "$1" in
start)
start
;;
stop)
stop
;;
reload|restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|reload|restart}"
exit 1
esac
There you go. In windows XP, it says Speed: 8.0 Mbps to me. Works just as it shoulds 
EDIT: It doesn't seem to work so fine. After I rebooted both devices, adsl2mue wants me to login and I can't do this with wget utility of busybox. But hang on.. I am working on a solution, hard part in this is that password needs to be sent as encrypted (encryption is quite simple as it is done with javascript, but maybe I'll just skip that part since propably nobody has changed from default "admin" password.. or then they have:)
I'll continue tomorrow.. Too tired now..
(Last edited by jake1981 on 19 Jul 2006, 00:59)