Please feel free to explain in further detail. I have a lot to learn about this stuff :)
The two links above take you to software packages that implement distributed mesh networks that can operate off your standard Windows/Linux machines to establish city wide networks using WiFi. A little extra effort is required to link mesh networks together. You may have to construct a local DNS from the standard "bind" software found on Linux or hack together something on Windows using ActiveDirectory to support your DHCP and LDAP databases to re-integrate your local area. If an EMP, war or financial collapse take down the internet on a world-wide basis, you can cobble up sufficient infrastructure with Linux and these mesh networks to re-establish some level of "normal" in your city or region.
I used OLSR to create a rolling mesh network with 802.11b devices on each railcar. A train wrapped around a mountain that lacks line of sight from car to car will have a good mesh path using OLSR. I chose OLSR because it constantly updates routes and minimizes latency to transmit a data packet. That was crucial to my system design. The alternative AODV using by Freifunk minimizes transmitter on time by performing route discovery only when it is time to move a packet. That introduces latency for route discovery, but reduces power consumed and over the air bandwidth required to continually update the connectivity maps.
I stopped doing daily work with OLSR in 2009 when Obama's arrival trashed my program finances. The OLSR2 work started after that point in time, so I don't have much "hand's on" with that one.