Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 22 May 2007 18:22:12 +0400
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        net@FreeBSD.org
Subject:   walking (and cleaning) the routing table on mask change?
Message-ID:  <20070522142212.GZ89017@FreeBSD.org>

next in thread | raw e-mail | index | archive | help
  Hello, colleagues,

  what do you think about cleaning the routing table on mask change?
I think it should be done. Currently we are cleaning the routing
table only on SIOCDIFADDR operation, because it removes prefix from
an interface. However, SIOCAIFADDR also may delete (actually replace)
a prefix on interface, in the case of mask change.

For example:

root@behemoth:~:|>ifconfig em0 10.0.0.195/24
root@behemoth:~:|>route add 10.0.1.0/24 10.0.0.1
add net 10.0.1.0: gateway 10.0.0.1
root@behemoth:~:|>netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
10.0.0.0/24        link#2             UC          0        0    em0
10.0.0.1           link#2             UHLW        2        0    em0
10.0.1.0/24        10.0.0.1           UGS         0        0    em0
127.0.0.1          127.0.0.1          UH          0       26    lo0
root@behemoth:~:|>ifconfig em0 netmask 255.255.255.128
root@behemoth:~:|>netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
10.0.0.128/25      link#2             UC          0        0    em0
10.0.1.0/24        10.0.0.1           UGS         0        0    em0
^^^^^^^^^^^^^^^^^^ --- shouldn't it be deleted?
127.0.0.1          127.0.0.1          UH          0       26    lo0
root@behemoth:~:|>

10.0.0.1 isn't reachable now.

Currently, we have a workaroung in rt_check() (rev. 1.117) that prevents us
from panicing. However, the invalid route still remains in the table.

I suggest to make the following on the mask change path:

rt_tables[AF_INET]->rnh_walktree(xxx_maskchange), where the
xxx_maskchange() deletes all routes, which used to be reachable via the old
mask and are no longer reachable.

-- 
Totus tuus, Glebius.
GLEBIUS-RIPN GLEB-RIPE



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070522142212.GZ89017>