From 6359851d3261d104a75c098c40c173b4bf2e9372 Mon Sep 17 00:00:00 2001 From: brian Date: Thu, 5 Apr 2001 02:23:48 +0000 Subject: When we change the interface MTU, run through the routing table and tweak all route MTUs too. --- usr.sbin/ppp/bundle.c | 126 ++------------------------------------------------ 1 file changed, 4 insertions(+), 122 deletions(-) (limited to 'usr.sbin/ppp/bundle.c') diff --git a/usr.sbin/ppp/bundle.c b/usr.sbin/ppp/bundle.c index 325f37b..f8d8ad6 100644 --- a/usr.sbin/ppp/bundle.c +++ b/usr.sbin/ppp/bundle.c @@ -31,7 +31,6 @@ #include #include #include /* For TUNS* ioctls */ -#include #include #include #include @@ -97,7 +96,9 @@ #include "ip.h" #include "iface.h" #include "server.h" +#ifdef HAVE_DES #include "mppe.h" +#endif #define SCATTER_SEGMENTS 7 /* version, datalink, name, physical, throughput, throughput, device */ @@ -928,127 +929,6 @@ bundle_Destroy(struct bundle *bundle) bundle->iface = NULL; } -struct rtmsg { - struct rt_msghdr m_rtm; - char m_space[64]; -}; - -int -bundle_SetRoute(struct bundle *bundle, int cmd, struct in_addr dst, - struct in_addr gateway, struct in_addr mask, int bang, int ssh) -{ - struct rtmsg rtmes; - int s, nb, wb; - char *cp; - const char *cmdstr; - struct sockaddr_in rtdata; - int result = 1; - - if (bang) - cmdstr = (cmd == RTM_ADD ? "Add!" : "Delete!"); - else - cmdstr = (cmd == RTM_ADD ? "Add" : "Delete"); - s = ID0socket(PF_ROUTE, SOCK_RAW, 0); - if (s < 0) { - log_Printf(LogERROR, "bundle_SetRoute: socket(): %s\n", strerror(errno)); - return result; - } - memset(&rtmes, '\0', sizeof rtmes); - rtmes.m_rtm.rtm_version = RTM_VERSION; - rtmes.m_rtm.rtm_type = cmd; - rtmes.m_rtm.rtm_addrs = RTA_DST; - rtmes.m_rtm.rtm_seq = ++bundle->routing_seq; - rtmes.m_rtm.rtm_pid = getpid(); - rtmes.m_rtm.rtm_flags = RTF_UP | RTF_GATEWAY | RTF_STATIC; - - if (cmd == RTM_ADD || cmd == RTM_CHANGE) { - if (bundle->ncp.ipcp.cfg.sendpipe > 0) { - rtmes.m_rtm.rtm_rmx.rmx_sendpipe = bundle->ncp.ipcp.cfg.sendpipe; - rtmes.m_rtm.rtm_inits |= RTV_SPIPE; - } - if (bundle->ncp.ipcp.cfg.recvpipe > 0) { - rtmes.m_rtm.rtm_rmx.rmx_recvpipe = bundle->ncp.ipcp.cfg.recvpipe; - rtmes.m_rtm.rtm_inits |= RTV_RPIPE; - } - } - - memset(&rtdata, '\0', sizeof rtdata); - rtdata.sin_len = sizeof rtdata; - rtdata.sin_family = AF_INET; - rtdata.sin_port = 0; - rtdata.sin_addr = dst; - - cp = rtmes.m_space; - memcpy(cp, &rtdata, rtdata.sin_len); - cp += rtdata.sin_len; - if (cmd == RTM_ADD) { - if (gateway.s_addr == INADDR_ANY) { - if (!ssh) - log_Printf(LogERROR, "bundle_SetRoute: Cannot add a route with" - " destination 0.0.0.0\n"); - close(s); - return result; - } else { - rtdata.sin_addr = gateway; - memcpy(cp, &rtdata, rtdata.sin_len); - cp += rtdata.sin_len; - rtmes.m_rtm.rtm_addrs |= RTA_GATEWAY; - } - } - - if (dst.s_addr == INADDR_ANY) - mask.s_addr = INADDR_ANY; - - if (cmd == RTM_ADD || dst.s_addr == INADDR_ANY) { - rtdata.sin_addr = mask; - memcpy(cp, &rtdata, rtdata.sin_len); - cp += rtdata.sin_len; - rtmes.m_rtm.rtm_addrs |= RTA_NETMASK; - } - - nb = cp - (char *) &rtmes; - rtmes.m_rtm.rtm_msglen = nb; - wb = ID0write(s, &rtmes, nb); - if (wb < 0) { - log_Printf(LogTCPIP, "bundle_SetRoute failure:\n"); - log_Printf(LogTCPIP, "bundle_SetRoute: Cmd = %s\n", cmdstr); - log_Printf(LogTCPIP, "bundle_SetRoute: Dst = %s\n", inet_ntoa(dst)); - log_Printf(LogTCPIP, "bundle_SetRoute: Gateway = %s\n", - inet_ntoa(gateway)); - log_Printf(LogTCPIP, "bundle_SetRoute: Mask = %s\n", inet_ntoa(mask)); -failed: - if (cmd == RTM_ADD && (rtmes.m_rtm.rtm_errno == EEXIST || - (rtmes.m_rtm.rtm_errno == 0 && errno == EEXIST))) { - if (!bang) { - log_Printf(LogWARN, "Add route failed: %s already exists\n", - dst.s_addr == 0 ? "default" : inet_ntoa(dst)); - result = 0; /* Don't add to our dynamic list */ - } else { - rtmes.m_rtm.rtm_type = cmd = RTM_CHANGE; - if ((wb = ID0write(s, &rtmes, nb)) < 0) - goto failed; - } - } else if (cmd == RTM_DELETE && - (rtmes.m_rtm.rtm_errno == ESRCH || - (rtmes.m_rtm.rtm_errno == 0 && errno == ESRCH))) { - if (!bang) - log_Printf(LogWARN, "Del route failed: %s: Non-existent\n", - inet_ntoa(dst)); - } else if (rtmes.m_rtm.rtm_errno == 0) { - if (!ssh || errno != ENETUNREACH) - log_Printf(LogWARN, "%s route failed: %s: errno: %s\n", cmdstr, - inet_ntoa(dst), strerror(errno)); - } else - log_Printf(LogWARN, "%s route failed: %s: %s\n", - cmdstr, inet_ntoa(dst), strerror(rtmes.m_rtm.rtm_errno)); - } - log_Printf(LogDEBUG, "wrote %d: cmd = %s, dst = %x, gateway = %x\n", - wb, cmdstr, (unsigned)dst.s_addr, (unsigned)gateway.s_addr); - close(s); - - return result; -} - void bundle_LinkClosed(struct bundle *bundle, struct datalink *dl) { @@ -1979,6 +1859,8 @@ bundle_CalculateBandwidth(struct bundle *bundle) #endif tun_configure(bundle); + + route_UpdateMTU(bundle); } void -- cgit v1.1