OpenWrt is a rather popular option that supports AVR32, ARM, CRIS, m68k, MIPS, PowerPC, SPARC, SuperH, Ubicom32, x86, and x86-64 instruction sets.
Why OpenWrt?
To quote the OpenWrt about page
Instead of trying to create a single, static firmware, OpenWrt provides a fully writable filesystem with package management. This frees you from the restrictions of the application selection and configuration provided by the vendor and allows you to use packages to customize an embedded device to suit any application.
To summarize, OpenWrt's main advantages over a static firmware are package management support (over 2000 packages are available in the official repo), a fully writeable file system, support for x86 and x86_64 targets, and a customizable kernel.
This means any requirement you've listed that is not immediately available in the base installation should be available via a package.
Why not OpenWrt?
Again, to quote the about page:
OpenWrt is not intended to be a distribution you can load onto an embedded device and expect to do everything you want out of the box. Instead, the OpenWrt framework allows you to modify your embedded operating system tailored to your own particular needs.
What you should consider, if OpenWrt is an option, is that, compared to other popular options such as Tomato and dd-wrt, OpenWrt will take quite a bit of configuration work during and post-installation. Depending on your targeted architecture you may need to compile the kernel yourself