提交 292439d2 编写于 作者: D Dmitry Kozlov

Merge branch 'master' of ssh://git.code.sf.net/p/accel-ppp/code

......@@ -117,6 +117,7 @@ start=dhcpv4
#attr-dhcp-router-ip=DHCP-Router-IP-Address
#attr-dhcp-mask=DHCP-Mask
#attr-dhcp-lease-time=DHCP-Lease-Time
#attr-dhcp-opt82=DHCP-Option82
#attr-l4-redirect=L4-Redirect
#local-net=192.168.0.0/16
#lua-file=/etc/accel-ppp.lua
......
......@@ -33,9 +33,6 @@
#include "ipset.h"
#include "connlimit.h"
#ifdef RADIUS
#include "radius.h"
#endif
#include "ipoe.h"
......@@ -119,6 +116,7 @@ static int conf_attr_dhcp_router_ip;
static int conf_attr_dhcp_mask;
static int conf_attr_dhcp_lease_time;
static int conf_attr_l4_redirect;
static const char *conf_attr_dhcp_opt82;
#endif
static int conf_l4_redirect_table;
static int conf_l4_redirect_on_reject;
......@@ -155,6 +153,7 @@ static mempool_t disc_item_pool;
static mempool_t req_item_pool;
static int connlimit_loaded;
static int radius_loaded;
static LIST_HEAD(serv_list);
static pthread_mutex_t serv_lock = PTHREAD_MUTEX_INITIALIZER;
......@@ -179,6 +178,7 @@ static void ipoe_session_keepalive(struct dhcpv4_packet *pack);
static void add_interface(const char *ifname, int ifindex, const char *opt, int parent_ifindex, int vid);
static int get_offer_delay();
static void __ipoe_session_start(struct ipoe_session *ses);
static int ipoe_rad_send_request(struct rad_plugin_t *rad, struct rad_packet_t *pack);
static struct ipoe_session *ipoe_session_lookup(struct ipoe_serv *serv, struct dhcpv4_packet *pack, struct ipoe_session **opt82_ses)
{
......@@ -528,6 +528,14 @@ static void ipoe_session_start(struct ipoe_session *ses)
if (ses->serv->opt_shared && ipoe_create_interface(ses))
return;
#ifdef RADIUS
if (conf_attr_dhcp_opt82 && ses->relay_agent && radius_loaded) {
ses->radius.send_access_request = ipoe_rad_send_request;
ses->radius.send_accounting_request = ipoe_rad_send_request;
rad_register_plugin(&ses->ses, &ses->radius);
}
#endif
r = pwdb_check(&ses->ses, username, PPP_PAP, conf_password ? conf_password : username);
if (r == PWDB_NO_IMPL) {
passwd = pwdb_get_passwd(&ses->ses, ses->ses.username);
......@@ -1743,6 +1751,17 @@ static void ev_radius_coa(struct ev_radius_t *ev)
if (l4_redirect != ses->l4_redirect && ev->ses->state == AP_STATE_ACTIVE)
ipoe_change_l4_redirect(ses, l4_redirect);
}
static int ipoe_rad_send_request(struct rad_plugin_t *rad, struct rad_packet_t *pack)
{
struct ipoe_session *ses = container_of(rad, typeof(*ses), radius);
if (!ses->relay_agent)
return 0;
return rad_packet_add_octets(pack, NULL, conf_attr_dhcp_opt82, ses->relay_agent->data, ses->relay_agent->len);
}
#endif
static void ipoe_serv_release(struct ipoe_serv *serv)
......@@ -2541,6 +2560,7 @@ static void load_radius_attrs(void)
parse_conf_rad_attr("attr-dhcp-mask", &conf_attr_dhcp_mask);
parse_conf_rad_attr("attr-dhcp-lease-time", &conf_attr_dhcp_lease_time);
parse_conf_rad_attr("attr-l4-redirect", &conf_attr_l4_redirect);
conf_attr_dhcp_opt82 = conf_get_opt("ipoe", "attr-dhcp-opt82");
}
#endif
......@@ -3061,6 +3081,7 @@ static void ipoe_init(void)
#endif
connlimit_loaded = triton_module_loaded("connlimit");
radius_loaded = triton_module_loaded("radius");
}
DEFINE_INIT(52, ipoe_init);
......@@ -9,6 +9,10 @@
#include "ipdb.h"
#include "dhcpv4.h"
#ifdef RADIUS
#include "radius.h"
#endif
#ifndef ETH_ALEN
#define ETH_ALEN 6
#endif
......@@ -77,6 +81,9 @@ struct ipoe_session {
int relay_retransmit;
int ifindex;
struct ipv4db_item_t ipv4;
#ifdef RADIUS
struct rad_plugin_t radius;
#endif
int ifcfg:1;
int started:1;
int terminating:1;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册