Hi !
when trying out a -current from 20161127 (7.99.42) I see issues with routed.
On configuration of an interface address A.B.C.D/m the local network address
A.B.C.D is correctly entered with a loopback host route for the local
address
in the routing table.
Also the network route via the interface is correctly entered in the table.
As soon as routed detects the new interface it seems to miss the loopback
host route for the local address and consequently decides to remove the
loopback host route from the kernel routing table,
route monitor output:
got message of size 160 on Mon Dec 5 15:10:49 2016
RTM_CHANGE: Change Metrics, Flags or Gateway: len 160, pid 25290, seq 1,
errno 0, flags: <GATEWAY,DONE>
locks: none inits: <hopcount>
sockaddrs: <DST,GATEWAY,NETMASK>
default 10.200.1.1 0.0.0.0
got message of size 96 on Mon Dec 5 15:10:52 2016
RTM_ONEWADDR: address being added to iface: len 96, pid 2, seq 0, errno 528,
flags: <CONNECTED>
locks: <sendpipe,mtu> inits: none
got message of size 104 on Mon Dec 5 15:10:52 2016
RTM_NEWADDR: address being added to iface: len 104, metric 0, flags:
<CONNECTED>
sockaddrs: <NETMASK,IFP,IFA,BRD>
255.255.255.248 00:1b:21:aa:9b:7c A.B.C.38 default
### new address (tentative)
got message of size 160 on Mon Dec 5 15:10:52 2016
RTM_ADD: Add Route: len 160, pid 4878, seq 0, errno 0, flags:
<UP,HOST,LLINFO,LOCAL>
locks: none inits: none
sockaddrs: <DST,GATEWAY>
A.B.C.38 link#2
### local address loopback link
got message of size 208 on Mon Dec 5 15:10:52 2016
RTM_ADD: Add Route: len 208, pid 4878, seq 0, errno 0, flags:
<UP,DONE,CONNECTED>
locks: none inits: none
sockaddrs: <DST,GATEWAY,NETMASK,IFP,IFA>
A.B.C.32 link#2 255.255.255.248 00:1b:21:aa:9b:7c A.B.C.38
### net route via interface
got message of size 160 on Mon Dec 5 15:10:52 2016
RTM_DELETE: Delete Route: len 160, pid 25290, seq 2, errno 0, flags:
<HOST,DONE,LLINFO,LOCAL>
locks: none inits: none
sockaddrs: <DST,GATEWAY>
A.B.C.38 link#2
### routed deletes local address loopback link
got message of size 88 on Mon Dec 5 15:10:57 2016
RTM_ONEWADDR: address being added to iface: len 88, pid 2, seq 0, errno 520,
flags: <UP,CONNECTED>
locks: <pksent,rtt,ssthresh,sendpipe,expire,hopcount,mtu> inits:
<sendpipe,mtu>
got message of size 96 on Mon Dec 5 15:10:57 2016
RTM_NEWADDR: address being added to iface: len 96, metric 0, flags:
<UP,CONNECTED>
sockaddrs: <NETMASK,IFP,IFA,BRD>
255.255.255.248 00:1b:21:aa:9b:7c A.B.C.38 A.B.C.39
### address finally valid
[BTW: routed/table.c contains an out of date RTM_* number to string table -
fixed in output below]
Trace from routed:
Tracing actions started
Tracing packets started
Tracing packet contents started
Tracing kernel changes started
Add interface lo0 127.0.0.1 -->127.0.0.1/32 <LOOPBACK> <PASSIVE>
RCVBUF=61440
Add interface wm1 10.200.1.2 -->10.200.1.0/24 <RIPV2>
turn on RIP
Add 10.200.1.0/24 -->10.200.1.2 metric=0 wm1 <IF>
Add 127.0.0.1/32 -->127.0.0.1 metric=0 lo0 <IF>
### initial interface state
Send mcast RIPv2 REQUEST to 224.0.0.9.520 via wm1
QUERY
-- 15:10:46 --
Recv RIPv2 REQUEST from 10.200.1.2.520 via wm1
QUERY
discard our own RIP request
-- 15:10:46 --
Recv RIPv2 RESPONSE from 10.200.1.1.520 via wm1
0.0.0.0 metric=9
10.0.0.0 metric=1
10.0.0.128/32 metric=2
...
Add 0.0.0.0 -->10.200.1.1 metric=9 wm1 15:10:46
Add 10.0.0.0 -->10.200.1.1 metric=1 wm1 15:10:46
Add 10.0.0.128/32 -->10.200.1.1 metric=2 wm1 15:10:46
...
### received routing information
-- 15:10:47 --
Send multicast Router Solic. from 10.200.1.2 to 224.0.0.2 via wm1 value=0
-- 15:10:48 --
write kernel RTM_CHANGE 0.0.0.0 -->10.200.1.1 metric=9
flags=0x2
-- 15:10:50 --
Send multicast Router Solic. from 10.200.1.2 to 224.0.0.2 via wm1 value=0
-- 15:10:50 --
ignore RTM_ONEWADDR without dst
### old routing messages are not properly skipped?
Add interface wm0 A.B.C.38 -->A.B.C.32/29 <PASSIVE>
Add A.B.C.32/29 -->A.B.C.38 metric=0 wm0 <IF>
### new interface due to ifconfig wm0 A.B.C.D/29
note RTM_NEWADDR with flags 0x100 for unknown interface index #180
### RTM_NEWADDR not properly handled/skipped
RTM_ADD from pid 4878: A.B.C.38/32 --> A.B.C.38
RTM_ADD from pid 4878: A.B.C.32/29 --> A.B.C.38
-- 15:10:51 --
write kernel RTM_DELETE A.B.C.38/32 -->A.B.C.38 metric=0 flags=0
### routed does not seem to consider the A.B.C.38/32 -->A.B.C.38 (if=lo0,
gw=link#2) as being valid
-- 15:10:53 --
Send multicast Router Solic. from 10.200.1.2 to 224.0.0.2 via wm1 value=0
-- 15:10:53 --
ignore RTM_ONEWADDR without dst
note RTM_NEWADDR with flags 0x101 for unknown interface index #180
netstat -nrf inet shows directly after setting the local address:
Routing tables
Internet:
Destination Gateway Flags Refs Use Mtu
Interface
default 10.200.1.1 UG - - - wm1
10.200.1/24 link#3 UC - - - wm1
A.B.C.32/29 link#2 UC - - - wm0
A.B.C.38 link#2 UHl - - - lo0
127/8 127.0.0.1 UGRS - - 33624 lo0
127.0.0.1 lo0 UHl - - 33624 lo0
#####
Seems that routed currently misinterprets the kernel routing state and needs
some care.
Any ideas?