diff options
Diffstat (limited to 'accel-pppd/ctrl')
-rw-r--r-- | accel-pppd/ctrl/l2tp/dict.c | 3 | ||||
-rw-r--r-- | accel-pppd/ctrl/l2tp/l2tp.c | 17 | ||||
-rw-r--r-- | accel-pppd/ctrl/l2tp/netlink.c | 3 | ||||
-rw-r--r-- | accel-pppd/ctrl/l2tp/packet.c | 3 | ||||
-rw-r--r-- | accel-pppd/ctrl/pppoe/cli.c | 3 | ||||
-rw-r--r-- | accel-pppd/ctrl/pppoe/mac_filter.c | 3 | ||||
-rw-r--r-- | accel-pppd/ctrl/pppoe/pppoe.c | 93 | ||||
-rw-r--r-- | accel-pppd/ctrl/pptp/pptp.c | 14 |
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); |