summaryrefslogtreecommitdiff
path: root/accel-pppd/ctrl
diff options
context:
space:
mode:
Diffstat (limited to 'accel-pppd/ctrl')
-rw-r--r--accel-pppd/ctrl/l2tp/dict.c3
-rw-r--r--accel-pppd/ctrl/l2tp/l2tp.c17
-rw-r--r--accel-pppd/ctrl/l2tp/netlink.c3
-rw-r--r--accel-pppd/ctrl/l2tp/packet.c3
-rw-r--r--accel-pppd/ctrl/pppoe/cli.c3
-rw-r--r--accel-pppd/ctrl/pppoe/mac_filter.c3
-rw-r--r--accel-pppd/ctrl/pppoe/pppoe.c93
-rw-r--r--accel-pppd/ctrl/pptp/pptp.c14
8 files changed, 102 insertions, 37 deletions
diff --git a/accel-pppd/ctrl/l2tp/dict.c b/accel-pppd/ctrl/l2tp/dict.c
index c93ccd4..aaa7da4 100644
--- a/accel-pppd/ctrl/l2tp/dict.c
+++ b/accel-pppd/ctrl/l2tp/dict.c
@@ -257,7 +257,7 @@ static int l2tp_dict_load(const char *fname)
return r;
}
-static void __init dict_init(void)
+static void dict_init(void)
{
char *opt;
@@ -269,3 +269,4 @@ static void __init dict_init(void)
_exit(EXIT_FAILURE);
}
+DEFINE_INIT(20, dict_init);
diff --git a/accel-pppd/ctrl/l2tp/l2tp.c b/accel-pppd/ctrl/l2tp/l2tp.c
index ca56051..c9ed08e 100644
--- a/accel-pppd/ctrl/l2tp/l2tp.c
+++ b/accel-pppd/ctrl/l2tp/l2tp.c
@@ -48,6 +48,7 @@ int conf_timeout = 60;
int conf_rtimeout = 5;
int conf_retransmit = 5;
int conf_hello_interval = 60;
+int conf_dir300_quirk = 0;
char *conf_host_name = NULL;
static unsigned int stat_active;
@@ -300,6 +301,7 @@ static int l2tp_tunnel_alloc(struct l2tp_serv_t *serv, struct l2tp_packet_t *pac
conn->hello_timer.expire = l2tp_send_HELLO;
conn->hello_timer.period = conf_hello_interval * 1000;
conn->ctrl.ctx = &conn->ctx;
+ conn->ctrl.type = CTRL_TYPE_L2TP;
conn->ctrl.name = "l2tp";
conn->ctrl.started = l2tp_ppp_started;
conn->ctrl.finished = l2tp_ppp_finished;
@@ -838,7 +840,7 @@ static int l2tp_conn_read(struct triton_md_handler_t *h)
if (!pack)
continue;
- if (ntohs(pack->hdr.tid) != conn->tid) {
+ if (ntohs(pack->hdr.tid) != conn->tid && (pack->hdr.tid || !conf_dir300_quirk)) {
if (conf_verbose)
log_warn("l2tp: incorrect tid %i in tunnel %i\n", ntohs(pack->hdr.tid), conn->tid);
l2tp_packet_free(pack);
@@ -1090,6 +1092,12 @@ static int show_stat_exec(const char *cmd, char * const *fields, int fields_cnt,
return CLI_CMD_OK;
}
+void __export l2tp_get_stat(unsigned int **starting, unsigned int **active)
+{
+ *starting = &stat_starting;
+ *active = &stat_active;
+}
+
static void load_config(void)
{
char *opt;
@@ -1121,9 +1129,13 @@ static void load_config(void)
conf_host_name = _strdup(opt);
else
conf_host_name = NULL;
+
+ opt = conf_get_opt("l2tp", "dir300_quirk");
+ if (opt)
+ conf_dir300_quirk = atoi(opt);
}
-static void __init l2tp_init(void)
+static void l2tp_init(void)
{
l2tp_conn = malloc(L2TP_MAX_TID * sizeof(void *));
memset(l2tp_conn, 0, L2TP_MAX_TID * sizeof(void *));
@@ -1139,3 +1151,4 @@ static void __init l2tp_init(void)
triton_event_register_handler(EV_CONFIG_RELOAD, (triton_event_func)load_config);
}
+DEFINE_INIT(22, l2tp_init);
diff --git a/accel-pppd/ctrl/l2tp/netlink.c b/accel-pppd/ctrl/l2tp/netlink.c
index 7c8c79a..c8dce89 100644
--- a/accel-pppd/ctrl/l2tp/netlink.c
+++ b/accel-pppd/ctrl/l2tp/netlink.c
@@ -80,7 +80,7 @@ void l2tp_nl_create_session(int tid, int sid, int peer_sid)
nl_socket_free(nl_sock);
}
-static void __init init(void)
+static void init(void)
{
struct nl_sock *nl_sock = nl_socket_alloc();
@@ -92,3 +92,4 @@ static void __init init(void)
nl_socket_free(nl_sock);
}
+DEFINE_INIT(21, init);
diff --git a/accel-pppd/ctrl/l2tp/packet.c b/accel-pppd/ctrl/l2tp/packet.c
index e3f6896..d312118 100644
--- a/accel-pppd/ctrl/l2tp/packet.c
+++ b/accel-pppd/ctrl/l2tp/packet.c
@@ -485,10 +485,11 @@ int l2tp_packet_add_octets(struct l2tp_packet_t *pack, int id, const uint8_t *va
return 0;
}
-static void __init init(void)
+static void init(void)
{
attr_pool = mempool_create(sizeof(struct l2tp_attr_t));
pack_pool = mempool_create(sizeof(struct l2tp_packet_t));
buf_pool = mempool_create(L2TP_MAX_PACKET_SIZE);
}
+DEFINE_INIT(21, init);
diff --git a/accel-pppd/ctrl/pppoe/cli.c b/accel-pppd/ctrl/pppoe/cli.c
index 9929f66..37aec3a 100644
--- a/accel-pppd/ctrl/pppoe/cli.c
+++ b/accel-pppd/ctrl/pppoe/cli.c
@@ -189,7 +189,7 @@ static int set_ac_name_exec(const char *cmd, char * const *f, int f_cnt, void *c
//===================================
-static void __init init(void)
+static void init(void)
{
cli_register_simple_cmd2(show_stat_exec, NULL, 2, "show", "stat");
cli_register_simple_cmd2(intf_exec, intf_help, 2, "pppoe", "interface");
@@ -203,3 +203,4 @@ static void __init init(void)
cli_register_simple_cmd2(show_ac_name_exec, NULL, 3, "pppoe", "show", "AC-Name");
}
+DEFINE_INIT(22, init);
diff --git a/accel-pppd/ctrl/pppoe/mac_filter.c b/accel-pppd/ctrl/pppoe/mac_filter.c
index 9b101c6..8d72c31 100644
--- a/accel-pppd/ctrl/pppoe/mac_filter.c
+++ b/accel-pppd/ctrl/pppoe/mac_filter.c
@@ -244,7 +244,7 @@ static void cmd_help(char * const *fields, int fields_cnt, void *client)
cli_send(client, "pppoe mac-filter show - show current mac-filter list\r\n");
}
-static void __init init(void)
+static void init(void)
{
const char *opt = conf_get_opt("pppoe", "mac-filter");
if (!opt || mac_filter_load(opt))
@@ -253,3 +253,4 @@ static void __init init(void)
cli_register_simple_cmd2(cmd_exec, cmd_help, 2, "pppoe", "mac-filter");
}
+DEFINE_INIT(20, init);
diff --git a/accel-pppd/ctrl/pppoe/pppoe.c b/accel-pppd/ctrl/pppoe/pppoe.c
index c7612e2..031766b 100644
--- a/accel-pppd/ctrl/pppoe/pppoe.c
+++ b/accel-pppd/ctrl/pppoe/pppoe.c
@@ -69,10 +69,12 @@ char *conf_service_name;
char *conf_ac_name;
int conf_ifname_in_sid;
char *conf_pado_delay;
+int conf_tr101 = 1;
static mempool_t conn_pool;
static mempool_t pado_pool;
+unsigned int stat_starting;
unsigned int stat_active;
unsigned int stat_delayed_pado;
unsigned long stat_PADI_recv;
@@ -246,6 +248,7 @@ static struct pppoe_conn_t *allocate_channel(struct pppoe_serv_t *serv, const ui
conn->ctrl.started = ppp_started;
conn->ctrl.finished = ppp_finished;
conn->ctrl.max_mtu = MAX_PPPOE_MTU;
+ conn->ctrl.type = CTRL_TYPE_PPPOE;
conn->ctrl.name = "pppoe";
conn->ctrl.calling_station_id = _malloc(IFNAMSIZ + 19);
@@ -857,7 +860,8 @@ static void pppoe_recv_PADR(struct pppoe_serv_t *serv, uint8_t *pack, int size)
continue;
vendor_id = ntohl(*(uint32_t *)tag->tag_data);
if (vendor_id == VENDOR_ADSL_FORUM)
- tr101_tag = tag;
+ if (conf_tr101)
+ tr101_tag = tag;
break;
}
}
@@ -1215,6 +1219,12 @@ void pppoe_server_stop(const char *ifname)
pthread_rwlock_unlock(&serv_lock);
}
+void __export pppoe_get_stat(unsigned int **starting, unsigned int **active)
+{
+ *starting = &stat_starting;
+ *active = &stat_active;
+}
+
static int init_secret(struct pppoe_serv_t *serv)
{
int fd;
@@ -1241,7 +1251,57 @@ static int init_secret(struct pppoe_serv_t *serv)
return 0;
}
-static void __init pppoe_init(void)
+static void load_config(void)
+{
+ char *opt;
+
+ opt = conf_get_opt("pppoe", "verbose");
+ if (opt)
+ conf_verbose = atoi(opt);
+
+ opt = conf_get_opt("pppoe", "ac-name");
+ if (!opt)
+ opt = conf_get_opt("pppoe", "AC-Name");
+ if (opt) {
+ if (conf_ac_name)
+ _free(conf_ac_name);
+ conf_ac_name = _strdup(opt);
+ } else
+ conf_ac_name = _strdup("accel-ppp");
+
+ opt = conf_get_opt("pppoe", "service-name");
+ if (!opt)
+ opt = conf_get_opt("pppoe", "Service-Name");
+ if (opt) {
+ if (conf_service_name)
+ _free(conf_service_name);
+ conf_service_name = _strdup(opt);
+ }
+
+ opt = conf_get_opt("pppoe", "ifname-in-sid");
+ if (opt) {
+ if (!strcmp(opt, "called-sid"))
+ conf_ifname_in_sid = 1;
+ else if (!strcmp(opt, "calling-sid"))
+ conf_ifname_in_sid = 2;
+ else if (!strcmp(opt, "both"))
+ conf_ifname_in_sid = 3;
+ else if (atoi(opt) >= 0)
+ conf_ifname_in_sid = atoi(opt);
+ }
+
+ opt = conf_get_opt("pppoe", "pado-delay");
+ if (!opt)
+ opt = conf_get_opt("pppoe", "PADO-Delay");
+ if (opt)
+ dpado_parse(opt);
+
+ opt = conf_get_opt("pppoe", "tr101");
+ if (opt)
+ conf_tr101 = atoi(opt);
+}
+
+static void pppoe_init(void)
{
struct conf_sect_t *s = conf_get_section("pppoe");
struct conf_option_t *opt;
@@ -1258,33 +1318,12 @@ static void __init pppoe_init(void)
if (!strcmp(opt->name, "interface")) {
if (opt->val)
pppoe_server_start(opt->val, NULL);
- } else if (!strcmp(opt->name, "verbose")) {
- if (atoi(opt->val) > 0)
- conf_verbose = 1;
- } else if (!strcmp(opt->name, "ac-name") || !strcmp(opt->name, "AC-Name")) {
- if (opt->val && strlen(opt->val))
- conf_ac_name = _strdup(opt->val);
- } else if (!strcmp(opt->name, "service-name") || !strcmp(opt->name, "Service-Name")) {
- if (opt->val && strlen(opt->val))
- conf_service_name = _strdup(opt->val);
- } else if (!strcmp(opt->name, "pado-delay") || !strcmp(opt->name, "PADO-delay")) {
- if (dpado_parse(opt->val))
- _exit(EXIT_FAILURE);
- } else if (!strcmp(opt->name, "ifname-in-sid")) {
- if (!opt->val)
- continue;
- if (!strcmp(opt->val, "called-sid"))
- conf_ifname_in_sid = 1;
- else if (!strcmp(opt->val, "calling-sid"))
- conf_ifname_in_sid = 2;
- else if (!strcmp(opt->val, "both"))
- conf_ifname_in_sid = 3;
- else if (atoi(opt->val) >= 0)
- conf_ifname_in_sid = atoi(opt->val);
}
}
- if (!conf_ac_name)
- conf_ac_name = _strdup("accel-ppp");
+ load_config();
+
+ triton_event_register_handler(EV_CONFIG_RELOAD, (triton_event_func)load_config);
}
+DEFINE_INIT(21, pppoe_init);
diff --git a/accel-pppd/ctrl/pptp/pptp.c b/accel-pppd/ctrl/pptp/pptp.c
index 17087fa..715a77b 100644
--- a/accel-pppd/ctrl/pptp/pptp.c
+++ b/accel-pppd/ctrl/pptp/pptp.c
@@ -402,10 +402,10 @@ static int pptp_echo_rply(struct pptp_conn_t *conn)
if (conf_verbose)
log_ppp_debug("recv [PPTP Echo-Reply <Identifier %x>]\n", msg->identifier);
- if (msg->identifier != conn->echo_sent) {
+ /*if (msg->identifier != conn->echo_sent) {
log_ppp_warn("pptp:echo: identifier mismatch\n");
//return -1;
- }
+ }*/
conn->echo_sent = 0;
return 0;
}
@@ -656,6 +656,7 @@ static int pptp_connect(struct triton_md_handler_t *h)
conn->ctrl.started = ppp_started;
conn->ctrl.finished = ppp_finished;
conn->ctrl.max_mtu = PPTP_MAX_MTU;
+ conn->ctrl.type = CTRL_TYPE_PPTP;
conn->ctrl.name = "pptp";
conn->ctrl.calling_station_id = _malloc(17);
@@ -703,6 +704,12 @@ static int show_stat_exec(const char *cmd, char * const *fields, int fields_cnt,
return CLI_CMD_OK;
}
+void __export pptp_get_stat(unsigned int **starting, unsigned int **active)
+{
+ *starting = &stat_starting;
+ *active = &stat_active;
+}
+
static void load_config(void)
{
char *opt;
@@ -724,7 +731,7 @@ static void load_config(void)
conf_verbose = 1;
}
-static void __init pptp_init(void)
+static void pptp_init(void)
{
struct sockaddr_in addr;
char *opt;
@@ -776,3 +783,4 @@ static void __init pptp_init(void)
triton_event_register_handler(EV_CONFIG_RELOAD, (triton_event_func)load_config);
}
+DEFINE_INIT(20, pptp_init);