Here's an interesting problem which I'd like to hear suggestions on. Many networked devices that you buy off-the-shelf come preconfigured on a static IP address; for example, many home routers are 192.168.1.1, Cisco 800-series routers are 10.10.10.1, etc. Now, I want to build a workstation for configuring these sorts of devices before they get shipped out into the field. This will involve telnetting to them, performing tftp transfers and so on. The whole process can take several minutes, so ideally I'd like to be able to do this to several devices concurrently. But how can I do that, if they all have the same IP address? The setup would look something like this, if using VLANs: Linux server +-----------------+ eth0.1 10.10.10.1 +----------+ | process 1 --|-------------------------| router 1 | | | +----------+ | | eth0.2 10.10.10.1 +----------+ | process 2 --|-------------------------| router 2 | | | +----------+ | | eth0.3 10.10.10.1 +----------+ | process 3 --|-------------------------| router 3 | | | +----------+ | | eth0.4 10.10.10.1 +----------+ | process 4 --|-------------------------| router 4 | | | +----------+ +-----------------+ Now, I don't think that NATing the targets will help me here, because as far as I know it's not possible to configure multiple local interfaces with the same subnet. It would also require each interface to have its own isolated ARP table. What I'm thinking is that it may be possible using raw sockets to send packets, and libpcap to receive the responses. That means that ARP would be handled entirely in userland. However, in order to telnet the router, I would also need a complete TCP stack which runs entirely in userland. Is such a thing publically available? (*) I also remember reading about a modular software router called "Click": http://www.read.cs.ucla.edu/click/ Would this be able to handle what I want? It seems to be aimed at layer 3 forwarding, but if it doesn't have a TCP stack and sockets API, could I interface it to a kernel TCP socket somehow? I'm not looking for stellar performance - a few hundred packets per second would be fine. The "Linux server" would ideally be a small MIPS box running OpenWrt, such as the Buffalo WHR-G54S; this gives me a CPU plus five port VLAN switch for about $50. The easiest solution is just to buy four of these, but then the wiring gets messy on the desktop :-) This choice of hardware, with only 4MB flash and 16MB RAM, would rule out "heavyweight" solutions such as running four separate Linux kernels under VMware or UML. Any other suggestions or comments welcome... maybe I'm just missing a trick. Regards, Brian. (*) I came across this paper: http://nms.csail.mit.edu/~kandula/data/daytona.pdf but I can't find the actual code published anywhere. Also, a bunch of links at http://tcp.cs.st-andrews.ac.uk/index.shtml?stacks&400000 of which many are broken or point to projects that either are incomplete or have not released code. - To unsubscribe from this list: send the line "unsubscribe linux-net" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html