I was able to virtually eliminate this problem with the following quick-n-dirty shell scripts.
It's assumed that you stop+start olsr on bootup via /usr/local/etc/rc.d/olsrd.sh
These scripts will periodically reset the wireless interfaces, plus restart olsr every three days because it has a slow memory leak if using olsr's MID functionality.
#!/bin/sh
Save file as: /usr/local/etc/rc.d/batch.sh
Required: chmod 555 /usr/local/etc/rc.d/batch.sh
/root/ath0.sh &
/root/ath1olsr.sh &
#!/bin/sh
Save file as: /root/ath0.sh
Required: chmod 555 /root/ath0.sh
ps -x >/tmp/batchath0.txt
if grep -qi "sleep 3600" /tmp/batchath0.txt
then echo "found myself already batched."
else
sleep 3600
fi
ps -x >/tmp/batchath0c.txt
if grep -qi "sleep 3600" /tmp/batchath0c.txt
then echo "found myself already batched."
else
this forces an interface reset.
ifconfig ath0 burst
#ifconfig ath0 down
#ifconfig ath0 up
sleep 2
/root/ath0.sh &
fi
if olsr crashed/halted then restart it.
ps -x >/tmp/batchath0b.txt
if grep -qi "olsrd" /tmp/batchath0b.txt
then echo "found olsr doesn't need restart."
else
olsrd -f /var/etc/olsrd.conf &
fi
#!/bin/sh
Save file as: /root/ath1olsr.sh
Required: chmod 555 /root/ath1olsr.sh
Required: chmod 555 /usr/local/etc/rc.d/olsrd.sh
ps -x >/tmp/batchath1.txt
if grep -qi "sleep 300000" /tmp/batchath1.txt
then echo "found myself already batched."
else
sleep 300000
fi
ps -x >/tmp/batchath1.txt
if grep -qi "sleep 300000" /tmp/batchath1.txt
then echo "found myself already batched."
else
this forces an interface reset on backbone (5.x/etc).
#ifconfig ath1 burst
#ifconfig ath1 down
#ifconfig ath1 up
#sleep 2
this restarts olsr because it has a slow memory leak. Or, reboot.
/usr/local/etc/rc.d/olsrd.sh
/root/ath1olsr.sh &
#reboot
fi