• Tom Herbert's avatar
    ipv4: Allow configuring subnets as local addresses · 4465b469
    Tom Herbert authored
    This patch allows a host to be configured to respond to any address in
    a specified range as if it were local, without actually needing to
    configure the address on an interface.  This is done through routing
    table configuration.  For instance, to configure a host to respond
    to any address in 10.1/16 received on eth0 as a local address we can do:
    
    ip rule add from all iif eth0 lookup 200
    ip route add local 10.1/16 dev lo proto kernel scope host src 127.0.0.1 table 200
    
    This host is now reachable by any 10.1/16 address (route lookup on
    input for packets received on eth0 can find the route).  On output, the
    rule will not be matched so that this host can still send packets to
    10.1/16 (not sent on loopback).  Presumably, external routing can be
    configured to make sense out of this.
    
    To make this work, we needed to modify the logic in finding the
    interface which is assigned a given source address for output
    (dev_ip_find).  We perform a normal fib_lookup instead of just a
    lookup on the local table, and in the lookup we ignore the input
    interface for matching.
    
    This patch is useful to implement IP-anycast for subnets of virtual
    addresses.
    Signed-off-by: default avatarTom Herbert <therbert@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    4465b469
fib_frontend.c 24.6 KB