提交 d0fa7ad6 编写于 作者: D Dmitry Kozlov

radius: add support for Nas-Port-Id attribute (interface name)

上级 48e3ff7f
...@@ -401,7 +401,7 @@ struct radius_pd_t *find_pd(struct ap_session *ses) ...@@ -401,7 +401,7 @@ struct radius_pd_t *find_pd(struct ap_session *ses)
} }
struct radius_pd_t *rad_find_session(const char *sessionid, const char *username, int port_id, in_addr_t ipaddr, const char *csid) struct radius_pd_t *rad_find_session(const char *sessionid, const char *username, const char *port_id, int port, in_addr_t ipaddr, const char *csid)
{ {
struct radius_pd_t *rpd; struct radius_pd_t *rpd;
...@@ -413,7 +413,9 @@ struct radius_pd_t *rad_find_session(const char *sessionid, const char *username ...@@ -413,7 +413,9 @@ struct radius_pd_t *rad_find_session(const char *sessionid, const char *username
continue; continue;
if (username && strcmp(username, rpd->ses->username)) if (username && strcmp(username, rpd->ses->username))
continue; continue;
if (port_id >= 0 && port_id != rpd->ses->unit_idx) if (port >= 0 && port != rpd->ses->unit_idx)
continue;
if (port_id && strcmp(port_id, rpd->ses->ifname))
continue; continue;
if (ipaddr && rpd->ses->ipv4 && ipaddr != rpd->ses->ipv4->peer_addr) if (ipaddr && rpd->ses->ipv4 && ipaddr != rpd->ses->ipv4->peer_addr)
continue; continue;
...@@ -433,7 +435,8 @@ struct radius_pd_t *rad_find_session_pack(struct rad_packet_t *pack) ...@@ -433,7 +435,8 @@ struct radius_pd_t *rad_find_session_pack(struct rad_packet_t *pack)
const char *sessionid = NULL; const char *sessionid = NULL;
const char *username = NULL; const char *username = NULL;
const char *csid = NULL; const char *csid = NULL;
int port_id = -1; int port = -1;
const char *port_id = NULL;
in_addr_t ipaddr = 0; in_addr_t ipaddr = 0;
list_for_each_entry(attr, &pack->attrs, entry) { list_for_each_entry(attr, &pack->attrs, entry) {
...@@ -447,7 +450,10 @@ struct radius_pd_t *rad_find_session_pack(struct rad_packet_t *pack) ...@@ -447,7 +450,10 @@ struct radius_pd_t *rad_find_session_pack(struct rad_packet_t *pack)
username = attr->val.string; username = attr->val.string;
break; break;
case NAS_Port: case NAS_Port:
port_id = attr->val.integer; port = attr->val.integer;
break;
case NAS_Port_Id:
port_id = attr->val.string;
break; break;
case Framed_IP_Address: case Framed_IP_Address:
ipaddr = attr->val.ipaddr; ipaddr = attr->val.ipaddr;
...@@ -458,13 +464,13 @@ struct radius_pd_t *rad_find_session_pack(struct rad_packet_t *pack) ...@@ -458,13 +464,13 @@ struct radius_pd_t *rad_find_session_pack(struct rad_packet_t *pack)
} }
} }
if (!sessionid && !username && port_id == -1 && ipaddr == 0 && !csid) if (!sessionid && !username && !port_id && port == -1 && ipaddr == 0 && !csid)
return NULL; return NULL;
if (username && !sessionid && port_id == -1 && ipaddr == 0) if (username && !sessionid && port == -1 && ipaddr == 0 && !port_id)
return NULL; return NULL;
return rad_find_session(sessionid, username, port_id, ipaddr, csid); return rad_find_session(sessionid, username, port_id, port, ipaddr, csid);
} }
int rad_check_nas_pack(struct rad_packet_t *pack) int rad_check_nas_pack(struct rad_packet_t *pack)
......
...@@ -138,7 +138,7 @@ extern int conf_fail_time; ...@@ -138,7 +138,7 @@ extern int conf_fail_time;
extern int conf_req_limit; extern int conf_req_limit;
int rad_check_nas_pack(struct rad_packet_t *pack); int rad_check_nas_pack(struct rad_packet_t *pack);
struct radius_pd_t *rad_find_session(const char *sessionid, const char *username, int port_id, in_addr_t ipaddr, const char *csid); struct radius_pd_t *rad_find_session(const char *sessionid, const char *username, const char *port_id, int port, in_addr_t ipaddr, const char *csid);
struct radius_pd_t *rad_find_session_pack(struct rad_packet_t *pack); struct radius_pd_t *rad_find_session_pack(struct rad_packet_t *pack);
int rad_dict_load(const char *fname); int rad_dict_load(const char *fname);
......
...@@ -81,6 +81,9 @@ static struct rad_req_t *__rad_req_alloc(struct radius_pd_t *rpd, int code, cons ...@@ -81,6 +81,9 @@ static struct rad_req_t *__rad_req_alloc(struct radius_pd_t *rpd, int code, cons
if (rad_packet_add_int(req->pack, NULL, "NAS-Port", rpd->ses->unit_idx)) if (rad_packet_add_int(req->pack, NULL, "NAS-Port", rpd->ses->unit_idx))
goto out_err; goto out_err;
if (rad_packet_add_str(req->pack, NULL, "NAS-Port-Id", rpd->ses->ifname))
goto out_err;
if (req->rpd->ses->ctrl->type == CTRL_TYPE_IPOE) { if (req->rpd->ses->ctrl->type == CTRL_TYPE_IPOE) {
if (rad_packet_add_val(req->pack, NULL, "NAS-Port-Type", "Ethernet")) if (rad_packet_add_val(req->pack, NULL, "NAS-Port-Type", "Ethernet"))
goto out_err; goto out_err;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册