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

radius: use NAS-Port-Id in Access-Accept for interface renaming

上级 d0fa7ad6
......@@ -230,3 +230,28 @@ void __export ap_session_ifdown(struct ap_session *ses)
}
}
void __export ap_session_rename(struct ap_session *ses, const char *ifname, int len)
{
struct ifreq ifr;
if (len == -1)
len = strlen(ifname);
if (len >= IFNAMSIZ - 1) {
log_ppp_warn("cannot rename interface (name it too long)\n");
return;
}
ifr.ifr_ifindex = ses->ifindex;
strcpy(ifr.ifr_name, ses->ifname);
memcpy(ifr.ifr_newname, ifname, len);
ifr.ifr_newname[len] = 0;
if (ioctl(sock_fd, SIOCSIFNAME, &ifr))
log_ppp_warn("interface rename failed: %s\n", strerror(errno));
else {
memcpy(ses->ifname, ifname, len);
ses->ifname[len] = 0;
}
}
......@@ -128,6 +128,7 @@ int ap_session_check_single(const char *username);
void ap_session_ifup(struct ap_session *ses);
void ap_session_ifdown(struct ap_session *ses);
void ap_session_rename(struct ap_session *ses, const char *ifname, int len);
int ap_session_read_stats(struct ap_session *ses, struct rtnl_link_stats *stats);
......
......@@ -142,11 +142,15 @@ int rad_proc_attrs(struct rad_req_t *req)
a->addr = attr->val.ipv6prefix.prefix;
list_add_tail(&a->entry, &req->rpd->ipv6_dp.prefix_list);
break;
case NAS_Port_Id:
ap_session_rename(req->rpd->ses, attr->val.string, attr->len);
break;
}
}
if (dns.ses)
triton_event_fire(EV_DNS, &dns);
if (wins.ses)
triton_event_fire(EV_WINS, &wins);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册