From 26a7a28f129d72feaa08ef589e9a49aafd16d984 Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Tue, 4 Mar 1997 03:43:54 +0000 Subject: [PATCH] sifdefaultroute now gets both local and remote addresses --- pppd/sys-aix4.c | 16 +++++++------- pppd/sys-bsd.c | 15 +++++++------- pppd/sys-osf.c | 16 +++++++------- pppd/sys-sunos4.c | 16 +++++++------- pppd/sys-svr4.c | 53 ++++++++++++++++++++++++++++++++++++++--------- pppd/sys-ultrix.c | 16 ++++++++------ 6 files changed, 85 insertions(+), 47 deletions(-) diff --git a/pppd/sys-aix4.c b/pppd/sys-aix4.c index 1f7fefc..ac608cd 100644 --- a/pppd/sys-aix4.c +++ b/pppd/sys-aix4.c @@ -21,7 +21,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: sys-aix4.c,v 1.10 1996/05/26 23:59:16 paulus Exp $"; +static char rcsid[] = "$Id: sys-aix4.c,v 1.11 1997/03/04 03:43:52 paulus Exp $"; #endif /* @@ -119,7 +119,7 @@ sys_cleanup() if (ifaddrs[0]) cifaddr(0, ifaddrs[0], ifaddrs[1]); if (default_route_gateway) - cifdefaultroute(0, default_route_gateway); + cifdefaultroute(0, 0, default_route_gateway); if (proxy_arp_addr) cifproxyarp(0, proxy_arp_addr); } @@ -934,9 +934,9 @@ cifaddr(u, o, h) * sifdefaultroute - assign a default route through the address given. */ int -sifdefaultroute(u, g) +sifdefaultroute(u, l, g) int u; - u_int32_t g; + u_int32_t l, g; { struct ortentry rt; @@ -957,9 +957,9 @@ sifdefaultroute(u, g) * cifdefaultroute - delete a default route through the address given. */ int -cifdefaultroute(u, g) +cifdefaultroute(u, l, g) int u; - u_int32_t g; + u_int32_t l, g; { struct ortentry rt; @@ -1256,9 +1256,9 @@ GetMask(addr) #define WTMPFILE "/var/adm/wtmp" -int +void logwtmp(line, name, host) - char *line, *name, *host; + const char *line, *name, *host; { int fd; struct stat buf; diff --git a/pppd/sys-bsd.c b/pppd/sys-bsd.c index f0e49bc..5f0d66d 100644 --- a/pppd/sys-bsd.c +++ b/pppd/sys-bsd.c @@ -21,7 +21,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: sys-bsd.c,v 1.26 1996/07/01 05:32:37 paulus Exp $"; +static char rcsid[] = "$Id: sys-bsd.c,v 1.27 1997/03/04 03:43:53 paulus Exp $"; #endif /* @@ -119,7 +119,7 @@ sys_cleanup() if (ifaddrs[0] != 0) cifaddr(0, ifaddrs[0], ifaddrs[1]); if (default_route_gateway) - cifdefaultroute(0, default_route_gateway); + cifdefaultroute(0, 0, default_route_gateway); if (proxy_arp_addr) cifproxyarp(0, proxy_arp_addr); } @@ -929,7 +929,8 @@ sifaddr(u, o, h, m) return 0; } syslog(LOG_WARNING, - "Couldn't set interface address: Address already exists"); + "Couldn't set interface address: Address %s already exists", + ip_ntoa(o)); } ifaddrs[0] = o; ifaddrs[1] = h; @@ -966,9 +967,9 @@ cifaddr(u, o, h) * sifdefaultroute - assign a default route through the address given. */ int -sifdefaultroute(u, g) +sifdefaultroute(u, l, g) int u; - u_int32_t g; + u_int32_t l, g; { return dodefaultroute(g, 's'); } @@ -977,9 +978,9 @@ sifdefaultroute(u, g) * cifdefaultroute - delete a default route through the address given. */ int -cifdefaultroute(u, g) +cifdefaultroute(u, l, g) int u; - u_int32_t g; + u_int32_t l, g; { return dodefaultroute(g, 'c'); } diff --git a/pppd/sys-osf.c b/pppd/sys-osf.c index c25c516..b328ebb 100644 --- a/pppd/sys-osf.c +++ b/pppd/sys-osf.c @@ -26,7 +26,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: sys-osf.c,v 1.10 1996/07/01 01:20:17 paulus Exp $"; +static char rcsid[] = "$Id: sys-osf.c,v 1.11 1997/03/04 03:43:53 paulus Exp $"; #endif #include @@ -182,7 +182,7 @@ sys_cleanup() if (ifaddrs[0]) cifaddr(0, ifaddrs[0], ifaddrs[1]); if (default_route_gateway) - cifdefaultroute(0, default_route_gateway); + cifdefaultroute(0, 0, default_route_gateway); if (proxy_arp_addr) cifproxyarp(0, proxy_arp_addr); } @@ -1220,9 +1220,9 @@ cifaddr(u, o, h) * sifdefaultroute - assign a default route through the address given. */ int -sifdefaultroute(u, g) +sifdefaultroute(u, l, g) int u; - u_int32_t g; + u_int32_t l, g; { struct ortentry rt; @@ -1244,9 +1244,9 @@ sifdefaultroute(u, g) * cifdefaultroute - delete a default route through the address given. */ int -cifdefaultroute(u, g) +cifdefaultroute(u, l, g) int u; - u_int32_t g; + u_int32_t l, g; { struct ortentry rt; @@ -1398,9 +1398,9 @@ get_ether_addr(ipaddr, hwaddr) #define WTMPFILE "/usr/adm/wtmp" -int +void logwtmp(line, name, host) - char *line, *name, *host; + const char *line, *name, *host; { int fd; struct stat buf; diff --git a/pppd/sys-sunos4.c b/pppd/sys-sunos4.c index 32fe8d5..8724de5 100644 --- a/pppd/sys-sunos4.c +++ b/pppd/sys-sunos4.c @@ -26,7 +26,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: sys-sunos4.c,v 1.6 1996/09/26 06:23:34 paulus Exp $"; +static char rcsid[] = "$Id: sys-sunos4.c,v 1.7 1997/03/04 03:43:54 paulus Exp $"; #endif #include @@ -187,7 +187,7 @@ sys_cleanup() if (ifaddrs[0]) cifaddr(0, ifaddrs[0], ifaddrs[1]); if (default_route_gateway) - cifdefaultroute(0, default_route_gateway); + cifdefaultroute(0, 0, default_route_gateway); if (proxy_arp_addr) cifproxyarp(0, proxy_arp_addr); } @@ -1024,9 +1024,9 @@ cifaddr(u, o, h) * sifdefaultroute - assign a default route through the address given. */ int -sifdefaultroute(u, g) +sifdefaultroute(u, l, g) int u; - u_int32_t g; + u_int32_t l, g; { struct rtentry rt; @@ -1050,9 +1050,9 @@ sifdefaultroute(u, g) * cifdefaultroute - delete a default route through the address given. */ int -cifdefaultroute(u, g) +cifdefaultroute(u, l, g) int u; - u_int32_t g; + u_int32_t l, g; { struct rtentry rt; @@ -1208,9 +1208,9 @@ get_ether_addr(ipaddr, hwaddr) #define WTMPFILE "/usr/adm/wtmp" -int +void logwtmp(line, name, host) - char *line, *name, *host; + const char *line, *name, *host; { int fd; struct stat buf; diff --git a/pppd/sys-svr4.c b/pppd/sys-svr4.c index aa17639..f82a216 100644 --- a/pppd/sys-svr4.c +++ b/pppd/sys-svr4.c @@ -26,7 +26,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: sys-svr4.c,v 1.14 1996/09/26 06:23:50 paulus Exp $"; +static char rcsid[] = "$Id: sys-svr4.c,v 1.15 1997/03/04 03:43:54 paulus Exp $"; #endif #include @@ -204,7 +204,7 @@ sys_cleanup() if (if_is_up) sifdown(0); if (default_route_gateway) - cifdefaultroute(0, default_route_gateway); + cifdefaultroute(0, default_route_gateway, default_route_gateway); if (proxy_arp_addr) cifproxyarp(0, proxy_arp_addr); } @@ -1098,8 +1098,10 @@ cifaddr(u, o, h) int u; u_int32_t o, h; { -#if 0 +#if defined(__USLC__) /* was: #if 0 */ + cifroute(unit, ouraddr, hisaddr); if (ipmuxid >= 0) { + syslog(LOG_NOTICE, "Removing ppp interface unit"); if (ioctl(ipfd, I_UNLINK, ipmuxid) < 0) { syslog(LOG_ERR, "Can't remove ppp interface unit: %m"); return 0; @@ -1114,12 +1116,15 @@ cifaddr(u, o, h) * sifdefaultroute - assign a default route through the address given. */ int -sifdefaultroute(u, g) +sifdefaultroute(u, l, g) int u; - u_int32_t g; + u_int32_t l, g; { struct rtentry rt; +#if defined(__USLC__) + g = l; /* use the local address as gateway */ +#endif memset(&rt, 0, sizeof(rt)); rt.rt_dst.sa_family = AF_INET; INET_ADDR(rt.rt_dst) = 0; @@ -1140,12 +1145,15 @@ sifdefaultroute(u, g) * cifdefaultroute - delete a default route through the address given. */ int -cifdefaultroute(u, g) +cifdefaultroute(u, l, g) int u; - u_int32_t g; + u_int32_t l, g; { struct rtentry rt; +#if defined(__USLC__) + g = l; /* use the local address as gateway */ +#endif memset(&rt, 0, sizeof(rt)); rt.rt_dst.sa_family = AF_INET; INET_ADDR(rt.rt_dst) = 0; @@ -1492,9 +1500,9 @@ GetMask(addr) /* * logwtmp - write an accounting record to the /var/adm/wtmp file. */ -int +void logwtmp(line, name, host) - char *line, *name, *host; + const char *line, *name, *host; { static struct utmpx utmpx; @@ -1510,7 +1518,6 @@ logwtmp(line, name, host) } gettimeofday(&utmpx.ut_tv, NULL); updwtmpx("/var/adm/wtmpx", &utmpx); - return 0; } /* @@ -1623,3 +1630,29 @@ unlock() lock_file[0] = 0; } } + + +/* + * cifroute - delete a route through the addresses given. + */ +int +cifroute(u, our, his) + int u; + u_int32_t our, his; +{ + struct rtentry rt; + + memset(&rt, 0, sizeof(rt)); + rt.rt_dst.sa_family = AF_INET; + INET_ADDR(rt.rt_dst) = his; + rt.rt_gateway.sa_family = AF_INET; + INET_ADDR(rt.rt_gateway) = our; + rt.rt_flags = RTF_HOST; + + if (ioctl(ipfd, SIOCDELRT, &rt) < 0) { + syslog(LOG_ERR, "Can't delete route: %m"); + return 0; + } + + return 1; +} diff --git a/pppd/sys-ultrix.c b/pppd/sys-ultrix.c index 92ba6c7..95bb7dd 100644 --- a/pppd/sys-ultrix.c +++ b/pppd/sys-ultrix.c @@ -21,7 +21,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: sys-ultrix.c,v 1.19 1996/08/28 06:42:54 paulus Exp $"; +static char rcsid[] = "$Id: sys-ultrix.c,v 1.20 1997/03/04 03:43:54 paulus Exp $"; #endif /* @@ -116,7 +116,7 @@ sys_cleanup() if (ifaddrs[0]) cifaddr(0, ifaddrs[0], ifaddrs[1]); if (default_route_gateway) - cifdefaultroute(0, default_route_gateway); + cifdefaultroute(0, 0, default_route_gateway); if (proxy_arp_addr) cifproxyarp(0, proxy_arp_addr); } @@ -979,7 +979,9 @@ cifaddr(u, o, h) * sifdefaultroute - assign a default route through the address given. */ int -sifdefaultroute(u, g) +sifdefaultroute(u, l, g) + int unit; + u_int32_t l, g; { struct rtentry rt; @@ -1000,7 +1002,9 @@ sifdefaultroute(u, g) * cifdefaultroute - delete a default route through the address given. */ int -cifdefaultroute(u, g) +cifdefaultroute(u, l, g) + int unit; + u_int32_t l, g; { struct rtentry rt; @@ -1249,9 +1253,9 @@ char *strdup( in ) char *in; #define WTMPFILE "/usr/adm/wtmp" -int +void logwtmp(line, name, host) - char *line, *name, *host; + const char *line, *name, *host; { int fd; struct stat buf; -- 2.39.2