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!

Reply via email to