Looking into why my phone (HTC One Android 4.4) won’t go into deep sleep because of wlan_rx_wake locks keeping it awake led to many things to try with no good solution. After installing WireShark on my PC I determined that my network connected printer was flooding the network with SSDP UPnP broadcast messages that would cause my phone to come out of sleep, acknowledge and then try to go back to sleep. The problem is that happened every five seconds or so.
I don’t need to print from my phone, but I do need to print from my computers so the solution was to fence off the phone from the printer, but not remove the printer from the network. My router does allow custom routing and firewall rules that with enough work I could have crafted into a solution to make the router do the work. But it turns out there’s an easier and more elegant way, put the phone on a guest network.
Modern routers have a main network and then an option for a secondary network for guests to login to so that they can’t access your LAN but can access the internet. No LAN access is exactly what I wanted.
Setup was easy but will depend on the router. Basically, enable a guest network and give it a security setting and password. Then tell the phone to forget the primary network and point it at the guest network. This way the phone can’t see the printer and does not get the SSDP packets. I still get some wlan_rx_wake locks but nothing near what I was getting. Battery life at home has improved significantly.