CONFIG("ppp_restart_time", ppp_restart_time, INT),
CONFIG("ppp_max_configure", ppp_max_configure, INT),
CONFIG("ppp_max_failure", ppp_max_failure, INT),
+ CONFIG("ppp_keepalive", ppp_keepalive, BOOL),
CONFIG("primary_dns", default_dns1, IPv4),
CONFIG("secondary_dns", default_dns2, IPv4),
CONFIG("primary_radius", radiusserver[0], IPv4),
CONFIG("icmp_rate", icmp_rate, INT),
CONFIG("packet_limit", max_packets, INT),
CONFIG("cluster_address", cluster_address, IPv4),
+ CONFIG("cluster_port", cluster_port, INT),
CONFIG("cluster_interface", cluster_interface, STRING),
CONFIG("cluster_mcast_ttl", cluster_mcast_ttl, INT),
CONFIG("cluster_hb_interval", cluster_hb_interval, INT),
result = 2; // general error
error = 3; // reserved field non-zero
msg = 0;
- continue; // next
+ if (n == 0)
+ {
+ // if continue a infinity loop is created.
+ LOG(1, s, t, "It's infinite loop protection %02X\n", *b);
+ return;
+ }
+ else
+ continue; // next
}
b += 2;
if (*(uint16_t *) (b))
result = 2; // general error
error = 6; // generic vendor-specific error
msg = "unsupported vendor-specific";
- continue; // next
+ if (n == 0)
+ {
+ // if continue a infinity loop is created.
+ LOG(1, s, t, "It's infinite loop protection %02X\n", *b);
+ return;
+ }
+ else
+ continue; // next
}
b += 2;
mtype = ntohs(*(uint16_t *) (b));
}
// No data in ECHO_TIMEOUT seconds, send LCP ECHO
- if (session[s].ppp.phase >= Establish && (time_now - session[s].last_packet >= config->echo_timeout) &&
- (time_now - sess_local[s].last_echo >= ECHO_TIMEOUT))
+ if (session[s].ppp.phase >= Establish &&
+ ((!config->ppp_keepalive) ||
+ (time_now - session[s].last_packet >= config->echo_timeout)) &&
+ (time_now - sess_local[s].last_echo >= ECHO_TIMEOUT))
{
uint8_t b[MAXETHER];
// Set default value echo_timeout and idle_echo_timeout
config->echo_timeout = ECHO_TIMEOUT;
config->idle_echo_timeout = IDLE_ECHO_TIMEOUT;
+ config->ppp_keepalive = 1;
// Set default RDNSS lifetime
config->dns6_lifetime = 1200;
memcpy(config->old_plugins, config->plugins, sizeof(config->plugins));
if (!config->multi_read_count) config->multi_read_count = 10;
if (!config->cluster_address) config->cluster_address = inet_addr(DEFAULT_MCAST_ADDR);
+ if (!config->cluster_port) config->cluster_port = CLUSTERPORT;
if (!*config->cluster_interface)
strncpy(config->cluster_interface, DEFAULT_MCAST_INTERFACE, sizeof(config->cluster_interface) - 1);