LINUX.ORG.RU

Сообщения nk_lg

 

Не получается отдать файл через nginx

Добрый день, уважаемый All. Вроде всё просто, скрипт генерирует ссылки вида: «/download/1.pdf», «/download/2.pdf», «/download/etc.pdf» Реально они лежат по пути: /tmp/1.pdf, /tmp/2.pdf, /tmp/etc.pdf Нужно «отдать» готовую статику, сначала пытался так:

location ~ ^/download/.*\.pdf$ {
   root /domain.name/tmp/;
   add_header Content-Disposition "attachment";
   add_header Content-Type application/octet-stream;
}
Не получается, при запросе domain.name/download/1.pdf почему-то открывается главная. Попробовал вместо root написать alias:
location ~ ^/download/.*\.pdf$ {
   alias /domain.name/tmp/;
   add_header Content-Disposition "attachment";
   add_header Content-Type application/octet-stream;
}
- С тем же результатом.

Попробовал тупо в лоб:

location /download {
   root /domain.name/tmp/;
   add_header Content-Disposition "attachment";
   add_header Content-Type application/octet-stream;
}
- Тоже не отдаёт файл...

Как правильно составить конфиг-то?! ))

 

nk_lg
()

Передача параметров командной строки при fork() возможна?

Добрый вечер. Sorry за глупый вопрос, вычитал что прототип для fork() выглядит так:

pid_t fork(void);
А void, если я правильно понимаю, чаще означает «необязательно» чем «отсутствует». Значит ли это, что через fork() можно передать параметр для «потомка»? Пробовал так:
fork("1");
и так:
fork(1);
В обоих случаях потомок создается, но в выводе ps -ax |grep MyProgram значилось просто 2 экземпляра моей наколенки, без параметра.

Собственно вопрос: можно ли выполняя fork() явным образом указать параметры ком.строки, что бы было видно потом их в списке процессов?

 ,

nk_lg
()

ip для sta (wlan0) интерфейса под openwrt

Добрый день, уважаемый All. Есть 2 точки wi-fi с одинаковыми ssid и работающими на одном канале. Есть клиент на openwrt, который должен «курсировать» от точки к точке. Для простоты настраиваю клиенту proto 'static' (dhcp тоже пробовал - результат такой же). При загрузке клиента он корректно цепляется к «нужной» (указанной в wireless.@wifi-iface[0].bssid) точке и работает. При «прыжке»: uci set wireless.@wifi-iface[0].bssid=.... wifi он (клиент) цепляется к указанному bssid (по крайней мере вывод iwinfo sta ass свидетельствует об этом) но sta «теряет» ip, и не желает устанавливать его обратно ни через /etc/init.d/network restart, ни через /etc/init.d/network reload, не через ipconfig sta 192.168.0.1 ...

Откуда родился вопрос: как корректно переключаться между точками средствами openwrt?

 

nk_lg
()

Задержка при воспроизведении звука через /dev/dsp

Добрый день, уважаемый All. Есть 2 простенькие программы, одна из которых берет звук с микрофона (/dev/dsp) и отправляет его в открытый порт. Вторая получает этот поток и перенаправляет на динамик (всё тот же /dev/dsp). Проблема со второй программой: сразу после запуска всё отрабатывает корректно, но уже через 1-1.5 минуты(сугубо субъективное восприятие + добежать до устройства, на котором реально запущена вторая функция) воспроизведение начинает отставать от микрофона на 2-3 секунды... со временем эта задержка может дорости до 5ти секунд. Вырезки из програмы «приемника»:

#define CAPTURE_DEV     "/dev/dsp"
#define BUF_SIZE        1024
...
unsigned char buff[BUF_SIZE];
...
out_fd = open(CAPTURE_DEV, O_WRONLY, 0);
channels = 1;
format = AFMT_S16_LE;
rate = 22050;
ioctl(out_fd, SNDCTL_DSP_SETFMT, &format);
ioctl(out_fd, SNDCTL_DSP_CHANNELS, &channels);
ioctl(out_fd, SNDCTL_DSP_SPEED, &rate);
...
while 1
{
	recv(sock, buff, BUF_SIZE, 0);
	write(out_fd, buff, BUF_SIZE);
}
...

ioctl(out_fd, SNDCTL_DSP_GETBLKSIZE, &bytes) возвращает значение 4096, тупое увеличение BUF_SIZE до этого значения ситуацию не исправило. Гугление дало направление в сторону использования фреймов, но каюсь - не силен в англицком, а абсолютно вся документация, найденная мной, была именно на английском(( Просьба к уважаемому сообществу, ежели кто-то может «на пальцах» объяснить что куда нужно вставить и как корректно «переписать» алгоритм воспроизведения - буду шибко признателен! Если ткнёте носом в ссылку с уже готовым описанием этой же проблемы - мы люди не гордые, будем не менее благодарны, абы на родном наречии без басурманских премудростей! ))

 

nk_lg
()

Правила из /etc/firewall.user не отрабатываются автоматически при загрузке роутера

Добрый день многоуважаемый All. Есть такая проблема, накидал минимальный /etc/firewall.user а он не стартует... заходишь на роутер, запускаешь его же из консоли (cmod 777 /etc/firewall.user enter, /etc/firewall.user enter) - все отрабатывает корректно и без ошибок, а само - не отрабатывает...

Правила:

# Flush
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t filter -F
iptables -t filter -X
iptables -P FORWARD ACCEPT

# NAT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0.1 -j MASQUERADE

#IPv4 Forwarding
sysctl -w net.ipv4.ip_forward=1

В чем может быть проблема и что(где) нужно прописать/дописать/переписать/удалить к чертям, что бы роутер начал вести себя как роутер? Заранее спасибо.

 ,

nk_lg
()

Азы работа с потоками (си, линукс) и «Ошибка сегментирования (сделан дамп памяти)»

Есть такой код:

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <string.h>

void * thread_func( char arg[])
{
	printf("%s", arg);
}

int main()
{
	int id;
	pthread_t thread1;
	printf("\n--- start first thread--\n");
	pthread_create(&thread1, NULL, thread_func("1"), &id);
	printf("\n--- end of start first thread--\n");
	printf("\n--- start second thread--\n");
	pthread_create(&thread1, NULL, thread_func("2"), &id);
	printf("\n--- end of start second thread--\n");
printf("Done\n");
}
Компилирую его с опцией "-pthread" При запуске бинарника 1 раз из 10ти программа отрабатывает от начала и до конца, а в 9ти - вываливается в РАЗНЫХ местах с ошибкой:
Ошибка сегментирования (сделан дамп памяти)
Подозреваю, что где-то либо пропустил какую-то мелочь, либо типы где-то не соответствуют шаблонам, но не могу найти где и чего напутал... Пример был взят где-то в инете и переделан (много чего было выкинуто)...

Конкретно в приведеном коде где(какая) ошибка?

 , ,

nk_lg
()

Настройка wi-fi в видоизмененной openwrt

Парни, есть устройство с измененной (немного переписанной не мной) openwrt на борту. На нем нет этого конфига:

/etc/config/wireless
При этом устройство вполне себе работает, wi-fi в том числе. Задача - необходимо посмотреть/изменить TXPower передатчика. Что пробовал:
# iwconfig ra0 txpower off
Error for wireless request "Set Tx Power" (8B26) :
    SET failed on device ra0 ; Operation not supported.

# wl
-ash: wl: not found

# wlanconfig
-ash: wlanconfig: not found

# iw
-ash: iw: not found

# iwinfo
-ash: iwinfo: not found

... все, на этом мысли кончились: гугление по просторам дает на все про все 2 пути решения, это править конфиг (/etc/config/wireless) самому или через iwconfig...

подскажите, что еще можно попробовать?

 ,

nk_lg
()

OpenWRT (Ralink RT5350F) и работа с драйвером wireless

Доброго ночера уважаемый All. Есть желание ввести в работу роутера понятие минимально-допустимого для клиента(!) уровня сигнала... Из чего исходим: Подключаемся ноутом к роутеру, лежащему на ноуте, в консоли делаем:

watch -n 1 'iwconfig wlan0 | grep Qual'
Видим магические числа:70/70 -20 Уже по этим цифрам появляются вопросы: Первое упоминание 70 - та самая мощность/уровень сигнала? Предположил, что «да» и дальше от этого отталкивался. Второе упоминание /70 - это что? -20 это уровень шума?

Гуляя с ноутом в пределах помещения экспериментальным способом получаем, что 32/70 -60 соответствуют самой дальней точке внутри помещения.

И наконец предположение, взятое за основу для дальнейших действий: первая цифирь это и есть тот самый уровень сигнала, который в различных осях рисуется палочками/черточками. Исходя из наших реалий, за мин.допустимый уровень можно принять значение 30 (попугаев?).

Маленькое отступление: нужно «мониторить» уровень сигнала существующих «клиентов» + не давать подключаться новым, у кого меньше. Выворачивать задачу, изначально уменьшая мощность передатчика, не предлогайе пож. Эта возможность была изучена и отброшена.

Далее, долго копаясь в различных источниках полуслучайно удалось набрести на: ./src/rt2860v2/ap/ap.c в котором нашлась функция: MacTableMaintenance. Далее совсем уж на интуитивном уровне были произведены след.действия: В самом начале кода из ap.c была добавлена переменная:

#include "rt_config.h" 
int LowLevelSignal_ap = 55; /*55 а не 30 было поставлено для облегчения тестирования - меньше бегать с ноутом от роутера*/

Далее, в теле упомянутой функции, была добавлена проверка:

if (pEntry->RssiSample.LastRssi0 < LowLevelSignal_ap)
bDisconnectSta = TRUE;

Выполнив make clean; make получил прошивку, которую не постеснялся залить на роутер. Далее снова тесты: Подключаюсь к роутеру по wi-fi, открываю в одной консоли вотч качества, во второй ping в мир и бреду в даль. После того как качество падает до 54/70 -48 пинги начинают теряться чаще, чем проходить, но - проходят. Смотрим с другой стороны (telnet'ом в логи роутера) и видим, что наш ноут, по выходу в «< 55» зону начинает постоянно дисконектиться, и снова конектиться! От 3х до 6ти таких записей в секунду!

Получается, что для окончательного выполнения задачи мне необходимо найти место, в котором происходит «подключение» клиента и вставить такую же проверку еще и туда...

Или нет? Собственно, тут я пока что и замер. Ибо недостаточные знания английского не позволяют бегло искать по просторам нерунета необходимую документацию, а слабые познания в Си (все еще преобретаемые благодаря творению Кернигана и Ритчи в 3тьем издании) не служат достаточным подспорьем для самостоятельного аализа исходников драйверов...

Вопрос у меня к тебе, многоуважаемый All: похож ли вышеизложенный поток сознания на правду? Если да, то где мне дальше искать точку входа клиента? В каком файле описывается инициализация именно клиента, а не передатчика например? А то я уже разок промахнулся, благо по шнурку смог зайти и перепрошиться/откатиться. А если все это чуш и притянутые за уши совпадения, то в какую сторону мне изначально смотреть нужно было?

И на последок, встретилась мне такая вот штука:

BOOLEAN bAutoRoaming;	/* 0:disable auto roaming by RSSI, 1:enable auto roaming by RSSI */
А в ./src/rt2860v2/include/mlme.h
#define RSSI_THRESHOLD_FOR_ROAMING 25
Правка значения до 69ти результата не принесла. Во множестве исходников встречается #ifdef перед проверкой if (bAutoRoaming)... Я выдумываю велосипед, вместо того чтоб просто подключить готовый функционал, либо это какой-то другой роуминг, не относящийся к моей задаче???

Sorry за сумбур в описании, готов ответить на уточняющие вопросы...

 , , ,

nk_lg
()

RSS подписка на новые темы