* 3. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by Paul Mackerras
- * <paulus@samba.org>".
+ * <paulus@ozlabs.org>".
*
* THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO
* THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
static void forget_child(int pid, int status);
static int reap_kids(void);
static void childwait_end(void *);
+static void run_net_script(char* script, int wait);
#ifdef PPP_WITH_TDB
static void update_db_entry(void);
void ppp_set_ifname(const char *name)
{
- if (ifname) {
+ if (name) {
strlcpy(ifname, name, sizeof(ifname));
}
}
struct protent *protp;
char numbuf[16];
- PPP_crypto_init();
+ strlcpy(path_upapfile, PPP_PATH_UPAPFILE, MAXPATHLEN);
+ strlcpy(path_chapfile, PPP_PATH_CHAPFILE, MAXPATHLEN);
+
+ strlcpy(path_net_init, PPP_PATH_NET_INIT, MAXPATHLEN);
+ strlcpy(path_net_preup, PPP_PATH_NET_PREUP, MAXPATHLEN);
+ strlcpy(path_net_down, PPP_PATH_NET_DOWN, MAXPATHLEN);
strlcpy(path_ipup, PPP_PATH_IPUP, MAXPATHLEN);
strlcpy(path_ipdown, PPP_PATH_IPDOWN, MAXPATHLEN);
+ strlcpy(path_ippreup, PPP_PATH_IPPREUP, MAXPATHLEN);
#ifdef PPP_WITH_IPV6CP
strlcpy(path_ipv6up, PPP_PATH_IPV6UP, MAXPATHLEN);
/* Initialize syslog facilities */
reopen_log();
+ /* Initialize crypto libraries */
+ if (!PPP_crypto_init()) {
+ exit(1);
+ }
+
if (gethostname(hostname, sizeof(hostname)) < 0 ) {
ppp_option_error("Couldn't get hostname: %m");
exit(1);
signal(SIGPIPE, SIG_IGN);
}
+/*
+ * net-* scripts to be run come through here.
+ */
+void run_net_script(char* script, int wait)
+{
+ char strspeed[32];
+ char *argv[6];
+
+ slprintf(strspeed, sizeof(strspeed), "%d", baud_rate);
+
+ argv[0] = script;
+ argv[1] = ifname;
+ argv[2] = devnam;
+ argv[3] = strspeed;
+ argv[4] = ipparam;
+ argv[5] = NULL;
+
+ run_program(script, argv, 0, NULL, NULL, wait);
+}
+
/*
* set_ifunit - do things we need to do once we know which ppp
* unit we are using.
create_pidfile(getpid()); /* write pid to file */
create_linkpidfile(getpid());
}
+ run_net_script(path_net_init, 1);
}
/*
{
FILE *pidfile;
- slprintf(pidfilename, sizeof(pidfilename), "%s%s.pid",
+ slprintf(pidfilename, sizeof(pidfilename), "%s/%s.pid",
PPP_PATH_VARRUN, ifname);
if ((pidfile = fopen(pidfilename, "w")) != NULL) {
fprintf(pidfile, "%d\n", pid);
if (linkname[0] == 0)
return;
ppp_script_setenv("LINKNAME", linkname, 1);
- slprintf(linkpidfile, sizeof(linkpidfile), "%sppp-%s.pid",
+ slprintf(linkpidfile, sizeof(linkpidfile), "%s/ppp-%s.pid",
PPP_PATH_VARRUN, linkname);
if ((pidfile = fopen(linkpidfile, "w")) != NULL) {
fprintf(pidfile, "%d\n", pid);
void
new_phase(ppp_phase_t p)
{
+ switch (p) {
+ case PHASE_NETWORK:
+ if (phase <= PHASE_NETWORK) {
+ char iftmpname[IFNAMSIZ];
+ int ifindex = if_nametoindex(ifname);
+ run_net_script(path_net_preup, 1);
+ if (if_indextoname(ifindex, iftmpname) && strcmp(iftmpname, ifname)) {
+ info("Detected interface name change from %s to %s.", ifname, iftmpname);
+ strcpy(ifname, iftmpname);
+ }
+ }
+ break;
+ case PHASE_DISCONNECT:
+ run_net_script(path_net_down, 0);
+ break;
+ }
+
phase = p;
if (new_phase_hook)
(*new_phase_hook)(p);
void
reset_link_stats(int u)
{
- if (!get_ppp_stats(u, &old_link_stats))
- return;
+ get_ppp_stats(u, &old_link_stats);
ppp_get_time(&start_time);
+ link_stats_print = 1;
}
/*
[NF_SIGNALED ] = &sigreceived,
[NF_IP_UP ] = &ip_up_notifier,
[NF_IP_DOWN ] = &ip_down_notifier,
+#ifdef PPP_WITH_IPV6CP
[NF_IPV6_UP ] = &ipv6_up_notifier,
[NF_IPV6_DOWN ] = &ipv6_down_notifier,
+#endif
[NF_AUTH_UP ] = &auth_up_notifier,
[NF_LINK_DOWN ] = &link_down_notifier,
[NF_FORK ] = &fork_notifier,
* novm - log an error message saying we ran out of memory, and die.
*/
void
-novm(char *msg)
+novm(const char *msg)
{
fatal("Virtual memory exhausted allocating %s\n", msg);
}