Subject: Re: Sending network traffic to "self" externally - is it possible?
To: Greg Troxel <gdt@ir.bbn.com>
From: Bryan Phillippe <bryanp35@comcast.net>
List: tech-net
Date: 04/16/2007 21:07:10
On Apr 15, 2007, at 11:29 AM, Greg Troxel wrote:

> [moved to netbsd-help]
>
>>   I'm trying to test an ethernet switch.  I have a single workstation
>>   that already has multiple NICs in it, and I'd like to be able to  
>> use
>>   it for this purpose.  In addition to saving space & power, it will
>>   also be easier if I only have to manage a single system.   
>> Furthermore,
>>   I could run simultaneous captures (e.g. tcpdump) on both  
>> interfaces,
>>   which also simplifies timestamp comparison.
>
> You can likely do this by changing routes.  When you ifconfig an
> address, you'll get a cloning route for the subnet, which will lead to
> arp and "arp entries" which are really host routes with LLINFO and
> WASCLONED flags.
>
> You can delete the cloning route, or you can just add a host route.
> Beware that this will disrupt ARP functioning and if the switch is
> paying attention that may be trouble.  But if it's truly an Ethernet
> switch, it won't look at IP or ARP.

Hi Greg,

I tried your suggestion of adding host routes, but wasn't able to get it
working.  It also seems to reliably crash the kernel in the routing  
layer
when I attempt to ping with that configuration (this is 3.1/i386 from  
CD).

I tried first removing the cloning route, then adding two host  
routes, with
different combinations of -cloning; using host vs. net/32 + gateway  
of the
other interface IP.  I wasn't able to add these routes using -ifa/- 
ifp though;
I get "bad value" or "invalid argument".

Just FYI, here is some information on my setup:

% ifconfig tlp0 ; ifconfig tlp1
tlp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
         address: 00:00:e8:13:40:cd
         media: Ethernet autoselect (100baseTX full-duplex)
         status: active
         inet 192.168.0.1 netmask 0xfffffffc broadcast 192.168.0.3
         inet6 fe80::200:e8ff:fe13:40cd%tlp0 prefixlen 64 scopeid 0x2
tlp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
         address: 00:00:e8:13:89:d3
         media: Ethernet autoselect (100baseTX full-duplex)
         status: active
         inet 192.168.0.2 netmask 0xfffffffc broadcast 192.168.0.3
         inet6 fe80::200:e8ff:fe13:89d3%tlp1 prefixlen 64 scopeid 0x3
% netstat -rn -f inet
Routing tables

Internet:
Destination        Gateway            Flags     Refs     Use    Mtu   
Interface
127/8              127.0.0.1          UGRS        0        0  33192  lo0
127.0.0.1          127.0.0.1          UH          1        0  33192  lo0
192.168/30         link#2             UC          0        0      -   
tlp0

% route delete -net 192.168.0.0/30
delete net 192.168.0.0
% route add -host 192.168.0.1 -iface -ifp tlp1
writing to routing socket: Invalid argument
add host 192.168.0.1: Invalid argument

... so that doesn't work.  How about this:

% route add -host 192.168.0.1 192.168.0.2 -iface
add host 192.168.0.1: gateway 192.168.0.2
% route add -host 192.168.0.1 192.168.0.2 -iface
add host 192.168.0.1: gateway 192.168.0.2

(which doesn't report an error on the cli, but does print this in the  
logs:
Apr 16 15:07:31 randy /netbsd: arp_rtrequest: bad gateway value)

% netstat -rn -f inet
Routing tables

Internet:
Destination        Gateway            Flags     Refs     Use    Mtu   
Interface
127/8              127.0.0.1          UGRS        0        0  33192  lo0
127.0.0.1          127.0.0.1          UH          1        0  33192  lo0
192.168.0.1        192.168.0.2        UHS         0        0      -   
tlp1
192.168.0.2        192.168.0.1        UHS         0        0      -   
tlp0

Looks like it should work, but no-go on the ping and I get this in  
the logs:

Apr 16 15:10:18 randy /netbsd: arpresolve: can't allocate llinfo on  
tlp1 for 192.168.0.1

If there are any other ideas, I'm willing to give them a shot.