LINUX.ORG.RU
ФорумAdmin

pptpd - переполнение на 4Гб ?


0

0

Протестировал сегодня pptpd (штатный в Debian 4.0), у него происходит переполнение счётчика, явно используется 32-битныое целое без знака....
Интересно, эта проблема решена или надо в исходники лезть?

Ответ на: комментарий от Eugeneus

>В смысле если я качаю 4.3 Гига, то по завершению соединеня буде показано 0.3 Гб

А где это будет показано?

mky ★★★★★
()
Ответ на: комментарий от Eugeneus

А, дак это пишет pppd, причем он просто получает информацию об интерфейсе из ядра, а там счетчики 32-х разрядные (в случае 32-х разрядной арихитектуры).

Так что не знаю даже, следует ли ради этого патчить ядро. ИМХО, проще поправить /etc/ppp/ip-up /etc/ppp/ip-down скрипты, чтобы они создавали/удаляли правило в iptables и записывали в syslog счетчик этого правила.

mky ★★★★★
()
Ответ на: комментарий от mky

ulog-acctd в фоне висит и в принципе всё считает правильно, просто хотелосьбы большших удобств при меньших затратах - потому как ulog-овский полсчёт трафа сделан через postgresql.

Насчёт ядра - ядро тут наверное не причём, потому как переполнение идёт на одно соединение, в том смысле, что за это время у ядра счётчик уже пару раз бы переполнился.....

Eugeneus
() автор топика
Ответ на: комментарий от Eugeneus

Dec 20 17:05:45 kea pppd[22084]: Sent 536911168.0 bytes, received 112622288.0 bytes.

Eugeneus
() автор топика
Ответ на: комментарий от Eugeneus

>Поменял на float - щаз жду

Жгете, счетчик на float :)
32-x разрядный float имеет примерно 7 десятичных цифр и на 1 Гиге точность счета становится неприемлемой:

$ cat tst.c
main() {
    float f=1e9;
    int i=10,j=100;
    printf("%f\n", f);
    f+=i; 
    printf("%f\n", f);
    f+=j; 
    printf("%f\n", f);
    return;
}

$ gcc tst.c ; ./a.out
1000000000.000000
1000000000.000000
1000000128.000000

Используйте 64-разрядный int, в gcc это будет тип "long long int"

>Насчёт ядра - ядро тут наверное не причём

перед разрывом соединения выполните команду:
# ip -s link show
или
# ifconfig

и посмотрите значения TX bytes, RX bytes для разных интерфейсов.

mky ★★★★★
()
Ответ на: комментарий от mky

Да, похоже использование 64-битного ядра единственный _простой_ выход, ковырял ppp - он действительно тупо берёт значения у ядра.

Ща тестирую 64-х битный дебиан :)

Eugeneus
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.