![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: нет Всего: 47 |
Нужно программно включать/выключать сетевые устройства, и настраивать ip-адреса.
Как реализовать и в какую сторону копать? ![]() |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: нет Всего: 121 |
Да, интересно глянуть как у вас в никсах это реализуется. В винде есть универсальные функция для вкл/выкл любого девайса
![]() -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
все очень просто
взаимодействие с сетевым интерфейсом идет через ioctl() в качестве первого параметра в ioctl() передается дескриптор сокета (любого домена, типа и протокола) второй параметр ioctl() - одна из констант, определенных в sockios.h третий параметр - адрес структуры ifreq включение и выключение сетевого интерфейса осуществляется установкой/сбросом флага IFF_UP в дескрипторе сетевого интерфейса (структура net_device) командами SIOCSIFFLAGS/SIOCGIFFLAGS любой сетевой интерфейс в Linux идентифицируется символьным и целочисленным идентификаторами при вызове ioctl() в ifreq.ifr_name указывается символьный идентификатор отображение символьный идентификатор <-> целочисленный идентификатор осуществляется через команды SIOCGIFINDEX/SIOCGIFNAME вот простой пример включения сетевого интерфейса
принцип работы IFF_UP заключается в том, что код ядра осуществляет вызов функции open() драйвера сетевого контроллера, адрес которой расположен в дескрипторе сетевого интерфейса (net_device) (тут) Добавлено через 4 минуты и 43 секунды а мне вот интересно, как у вас в окнах QoS для сетевой подсистемы реализован? (если там вообще это есть) ![]() Это сообщение отредактировал(а) MAKCim - 20.6.2008, 13:22 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
если нет желания создавать сокет и использовать ioctl(), можно поиграться с sysfs
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: нет Всего: 121 |
Удобно ;)
Существует два варианта: Traffic Control API (на данный момент считается устаревшими) и QOS2 API (полностью поддерживаются только на Server 2008 и Vista). -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
это сказано с иронией? ![]()
ОК существует возможность определять свои стратегии работы с исходящими пакетами? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: нет Всего: 121 |
Не, серьёзно. Подумываю перебраться.
В общем не совсем ясно, что такое стратегия работы с исходящими пакетами. Насколько я понимаю можно, иначе какой смысл ![]() -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
смотри есть сетевой интерфейс, представленный структурой net_device для него может быть реализован QoS с помощью структуры Qdisc Qdisc инкапсулирует структуру Qdisc_ops, которая содержит адреса функций enqueue()/dequeue()/requeue() функцией ядра, которая реализует взаимодействие с драйвером сетевого контроллера является функция dev_queue_xmit() она в качестве параметра получает пакет (структура sk_buff) если в net_device определен Qdisc, то вместо вызова функции драйвера через dev_hard_start_xmit() осуществляется вызов функции enqueue() из Qdisc_ops в Qdisc и далее run_qdisc() run_qdisc() осуществляет вызов (пока возможно) dequeue() из Qdisc_ops для получения пакета и передает его драйверу через dev_hard_start_xmit() так вот, функции enqueue() и dequeue() как раз и реализуют стратегию работы с пакетами к примеру, если Qdisc реализует стратегию FIFO, то enqueue() осуществляет добавление пакета в конец очереди, а dequeue() - выбор первого пакета из начала очереди я могу реализовать свою стратегию работы, реализовав Qdisc (написав модуль) в окнах такое возможно? Это сообщение отредактировал(а) MAKCim - 20.6.2008, 16:44 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: нет Всего: 121 |
MAKCim, твоя идея понятна. В окнах QoS это некоторая подсистема общей сетевой архитектуры, которая в юзермоде представлена набором API в дополнение к winsock2. Стратегия определяется на низком уровне планировщиком пакетов QoS(который является одним из драйверов NDIS), в юзермоде ты вправе регулировать некоторый набор параметров, который будет влиять на характер планирования пакетов, набор параметров достаточно обширен и, видимо, предусмотрена не одна стратегия. Ты создаёшь некий flow(это сущность подсистемы QoS), определяешь параметры планирования и далее "привязываешь" к этому flow сокеты, служба QoS будет уведомлена о том, что в системе появились соединения требующие обработки.
Мэйби на уровне NDIS есть возможность определять свою стратегию, я таких подробностей не знаю. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
ushakofff |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 29.4.2007 Репутация: нет Всего: нет |
А при отключении просто ifFlags &= ~IFF_UP; да? У меня просто что то не работает :(
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
ushakofff,
IFF_DOWN -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |