Someone else reported this same problem back in 2005 but never got a
response, so I'll try again.
I've been running FreeBSD (userland ppp) on my old i486 firewall machine
for several years and decided to try OpenBSD 4.3 on the same machine.
I have it working well now (pppoe/DSL) except when ppp needs to change
the default route e.g. when reestablishing a dropped connection.
Here is ppp's log when that occurs:
Jun 4 06:23:21 cyr ppp[469]: TCP/IP: route_UpdateMTU: Netif: 7 (tun0), dst
0.0.0.0/0, mtu 1492
Jun 4 06:23:21 cyr ppp[469]: ID0: 1 = socket(17, 3, 0)
Jun 4 06:23:21 cyr ppp[469]: ID0: -1 = write(1, data, 120)
Jun 4 06:23:21 cyr ppp[469]: TCP/IP: rt_Update failure:
Jun 4 06:23:21 cyr ppp[469]: TCP/IP: rt_Update: Dst = 0.0.0.0/0
Jun 4 06:23:21 cyr ppp[469]: Warning: 0.0.0.0/0: Change route failed: errno:
No such process
This happens when my ISP gives me a different IP address when reconnecting.
The new connection doesn't work until I use pppctl to "add! default HISADDR"
manually.
The ppp code responsible for changing the route is found in
/usr/src/usr.sbin/ppp/ppp/route.c:
s = ID0socket(PF_ROUTE, SOCK_RAW, 0);
wb = ID0write(s, &rtmes, rtmes.m_rtm.rtm_msglen);
if (wb < 0) {
ncprange_setsa(&ncpdst, dst, mask);
log_Printf(LogTCPIP, "rt_Update failure:\n");
log_Printf(LogTCPIP, "rt_Update: Dst = %s\n", ncprange_ntoa(&ncpdst));
if (rtmes.m_rtm.rtm_errno == 0)
log_Printf(LogWARN, "%s: Change route failed: errno: %s\n",
ncprange_ntoa(&ncpdst), strerror(errno));
So ppp writes to a socket when trying to change routes, but I don't
know who is supposed to be listening at the other end, or why he is
missing in action.
Any ideas?
Thanks!