Simulating multiple physical machines using Netgraph?
Ragnar Lönn
ragnar at ghn.se
Fri Apr 22 08:12:37 PDT 2005
Hi all,
I have a problem that I would like to know if Netgraph can help me solve or
not. Any help will be greatly appreciated :-)
I'm trying to emulate many (hundreds) of physical machines using a
single PC,
for purposes of testing Internet access hardware. I have set up a
(Linux-based)
system where I set up virtual VLAN-enabled network interfaces on the PC,
give
these interfaces individual MAC- and IP-addresses, then connect the "real",
physical interface on the machine to a VLAN switch. By using source routing
on the Linux PC I'm able to make all traffic from an application that
binds to
a certain interface to be sent through the appropriate VLAN interaface
and thus get VLAN-tagged and also the right source MAC-address.
To the hardware on the other side of the VLAN switch it looks as if there
are many physical machines connecting to it because it sees traffic from
different MAC- and IP-addresses coming in on different physical ports.
VLAN101 at ethernet0@PC ---+ +--- port 1 ---
Access unit port 1
VLAN102 at ethernet0@PC ---+---VLAN SWITCH +--- port 2 --- Access unit port 2
VLAN103 at ethernet0@PC ---+ +--- port 3 ---
Access unit port 3
I'm using Linux to do this, because it allows me to assign individual
MAC addresses to
virtual interfaces. Something I had problems doing under FreeBSD (I
think it was the
kernel dropping ethernet packets that arrived on virtual interface X,
with destination
MAC address for interface X, and not the destination MAC address for the
underlying physical interface. Something I've seen mentioned here on the
list too
and which seems to have changed between FreeBSD 4.10 and 5.x).
Anyway, the problem with Linux is that apart from some troubles with
e.g. IGMP/
Multicast I've also run into a limit of roughly 250 virtual interfaces
that I'm able to create.
The Linux kernel uses a single byte as index value for its routing
tables, meaning you can
only have 256 of them on the system, and each of my virtual interfaces
need its own
routing table (albeit with only a single entry in it) so I can't emulate
more than roughly
250 physical machines with this setup.
What I would like to do would be to have a special virtual network
interface that
when an application binds to it, causes all the packets from that
application to
get the right source MAC address and IP address (of the virtual
interface) as well as
bypass the normal routing table and get sent directly to e.g. a gateway
host that can
forward packets for that particular source IP address. Packets coming in
to the raw
physical interface similarly needs to get directed to the virtual
interface so that the
application can read them. Ideally, the application should think that
it's using
a standard ethernet interface and notice nothing different about it.
Is it possible to do something like that with Netgraph on FreeBSD?
Regards,
/Ragnar
More information about the freebsd-net
mailing list