Патчи к pppd

При работе в связке pppd+radius выполз небольшой глюк — если по каким либо причинам не прошел пакет start аккаунтинга, то больше никакой информации в билинг по радиусу не будет пересылаться.

Также бывает необходимость узнать на какой интерфейс прицепился pppd (например, в связке с pppoe и vlan). Передается в Called-Station-Id

Проблемы, в простом варианте, устраняются следующим патчем:

 

--- ppp-2.4.5/pppd/plugins/radius/radius.c.orig	2009-11-17 00:26:07.000000000 +0200
+++ ppp-2.4.5/pppd/plugins/radius/radius.c	2013-07-01 15:45:58.821550625 +0300
@@ -281,6 +281,8 @@

     rc_avpair_add(&send, PW_USER_NAME, rstate.user , 0, VENDOR_NONE);
     rc_avpair_add(&send, PW_USER_PASSWORD, passwd, 0, VENDOR_NONE);
+    rc_avpair_add(&send, PW_CALLED_STATION_ID, ppp_devnam, 0,
+			VENDOR_NONE);
     if (*remote_number) {
 	rc_avpair_add(&send, PW_CALLING_STATION_ID, remote_number, 0,
 		       VENDOR_NONE);
@@ -448,6 +450,8 @@
 #endif
     }

+    rc_avpair_add(&send, PW_CALLED_STATION_ID, ppp_devnam, 0,
+                      VENDOR_NONE);
     if (*remote_number) {
 	rc_avpair_add(&send, PW_CALLING_STATION_ID, remote_number, 0,
 		       VENDOR_NONE);
@@ -874,6 +878,8 @@
     av_type = PW_PPP;
     rc_avpair_add(&send, PW_FRAMED_PROTOCOL, &av_type, 0, VENDOR_NONE);

+    rc_avpair_add(&send, PW_CALLED_STATION_ID, ppp_devnam, 0,
+                      VENDOR_NONE);
     if (*remote_number) {
 	rc_avpair_add(&send, PW_CALLING_STATION_ID,
 		       remote_number, 0, VENDOR_NONE);
@@ -904,12 +910,16 @@

     rc_avpair_free(send);

+    rstate.accounting_started = 1;
     if (result != OK_RC) {
 	/* RADIUS server could be down so make this a warning */
 	syslog(LOG_WARNING,
 		"Accounting START failed for %s", rstate.user);
+	/* Kick off periodic accounting reports */
+	if (rstate.acct_interim_interval) {
+	    TIMEOUT(radius_acct_interim, NULL, 30);
+	}
     } else {
-	rstate.accounting_started = 1;
 	/* Kick off periodic accounting reports */
 	if (rstate.acct_interim_interval) {
 	    TIMEOUT(radius_acct_interim, NULL, rstate.acct_interim_interval);
@@ -982,6 +992,8 @@
 	rc_avpair_add(&send, PW_ACCT_INPUT_PACKETS, &av_type, 0, VENDOR_NONE);
     }

+    rc_avpair_add(&send, PW_CALLED_STATION_ID, ppp_devnam, 0,
+                      VENDOR_NONE);
     if (*remote_number) {
 	rc_avpair_add(&send, PW_CALLING_STATION_ID,
 		       remote_number, 0, VENDOR_NONE);
@@ -1130,6 +1142,8 @@
 	rc_avpair_add(&send, PW_ACCT_INPUT_PACKETS, &av_type, 0, VENDOR_NONE);
     }

+    rc_avpair_add(&send, PW_CALLED_STATION_ID, ppp_devnam, 0,
+                      VENDOR_NONE);
     if (*remote_number) {
 	rc_avpair_add(&send, PW_CALLING_STATION_ID,
 		       remote_number, 0, VENDOR_NONE);

 

 

Скачать  патч в архиве

Ваш отзыв