Jump to content
Калькуляторы

Доработка pppd + rp pppoe, вопрос к программерам

Очень-очень требуется получать в биллинге интерфейс с которого пришёл клиент на NAS (у нас это влан на кампусный узел), тот самый что виден как nic-Х при запуске pppd,

перерыл инет, нет патча реализующего это.

 

Если кто-то имеет наработки по данному вопросу прошу отозваться в личку.

Share this post


Link to post
Share on other sites
Очень-очень требуется получать в биллинге интерфейс с которого пришёл клиент на NAS (у нас это влан на кампусный узел), тот самый что виден как nic-Х при запуске pppd,

перерыл инет, нет патча реализующего это.

 

Если кто-то имеет наработки по данному вопросу прошу отозваться в личку.

патч, который в МАС-адрес клиента добавляет имя интерфейса

затем этот адрес передается в качестве remotenumber и ipparam pppd.

 

--- rp-pppoe-3.10/src/pppoe-server.c    2008-06-30 20:00:43.000000000 +0600
+++ rp-pppoe-3.10-my/src/pppoe-server.c 2009-05-02 16:16:55.000000000 +0600
@@ -1746,6 +1746,16 @@
     argv[c++] = "novj";
     argv[c++] = "novjccomp";
     argv[c++] = "default-asyncmap";
+
+    snprintf(buffer, SMALLBUF, "%s:%02x:%02x:%02x:%02x:%02x:%02x",
+             session->ethif->name,
+             session->eth[0], session->eth[1], session->eth[2],
+             session->eth[3], session->eth[4], session->eth[5]);
+    argv[c++] = "ipparam";
+    argv[c++] = strdup(buffer);
+    argv[c++] = "remotenumber";
+    argv[c++] = strdup(buffer);
+
     if (Synchronous) {
        argv[c++] = "sync";
     }
@@ -1832,6 +1842,16 @@
     argv[c++] = "novj";
     argv[c++] = "novjccomp";
     argv[c++] = "default-asyncmap";
+
+    snprintf(buffer, SMALLBUF, "%s:%02x:%02x:%02x:%02x:%02x:%02x",
+             session->ethif->name,
+             session->eth[0], session->eth[1], session->eth[2],
+             session->eth[3], session->eth[4], session->eth[5]);
+    argv[c++] = "ipparam";
+    argv[c++] = strdup(buffer);
+    argv[c++] = "remotenumber";
+    argv[c++] = strdup(buffer);
+
     if (PassUnitOptionToPPPD) {
        argv[c++] = "unit";
        sprintf(buffer, "%u", (unsigned int) (ntohs(session->sess) - 1 - SessOffset));

 

 

Share this post


Link to post
Share on other sites

Спасибо, но каким образом мне передать эти данные на радиус биллинга?

 

radius.c

if (*remote_number) {
        rc_avpair_add(&send, PW_CALLING_STATION_ID, remote_number, 0,
                       VENDOR_NONE);
    } else if (ipparam)
        rc_avpair_add(&send, PW_CALLING_STATION_ID, ipparam, 0, VENDOR_NONE);

 

PW_CALLING_STATION_ID у меня уходит, с ipparam не могу разобраться.

Edited by disappointed

Share this post


Link to post
Share on other sites

  rc_avpair_add(&send, PW_CALLING_STATION_ID, remote_number, 0,
                       VENDOR_NONE);

вот, как раз этим передается в атрибуте Calling-Station-Id то, что изначально из командной строки попадает из параметра remotenumber.

 

а ipparam обычно используется в скриптах ip-up, ip-down, куда он передается 6-ым параметром.

 

так что ловите радиусом Calling-Station-Id.

 

 

Share this post


Link to post
Share on other sites
так что ловите радиусом Calling-Station-Id.

Не получаю в этом аттрибуте, там обычный мак, ищу косяк и не вижу его.

Share this post


Link to post
Share on other sites
так что ловите радиусом Calling-Station-Id.
Не получаю в этом аттрибуте, там обычный мак, ищу косяк и не вижу его.

ну не разберёшься, пиши в аську.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this