Официальный форум СВД Встраиваемые Системы
03 Декабря, 2016, 05:25:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Berkeley Packet Filter (BPF) QNX 6.5.0  (Прочитано 3915 раз)
estrinov
Интересующийся

Сообщений: 8


« : 30 Сентября, 2014, 09:06:58 »

Здравствуйте!
Решился открыть тему, вроде бы по BPF никто не писал. Если ошибаюсь, простите пожалуйста.

В документации: "The device /dev/bpf is a cloning device, meaning you can open it multiple times. It is in principle similar to a cloning interface, except BPF provides no network interface, only a method to open the same device multiple times."
Вопросы по BPF следующие:
1. Можно ли многократно присоединять одно и то же bpf-устройство (прим. bpf0) к одному интерфейсу (прим. en0) с целью применения разных фильтров для разных процессов?
2. Можно ли многократно присоединять одно и то же bpf-устройство (прим. bpf0) к разным интерфейсам (прим. en0, en1)?
Тесты работают, но видел примеры из  Linux, где присоединению предварялся поиск свободного bpf-устройства. Если "...you can open it multiple times."
3. По умолчанию в системе bpf и bpf0. Если "you can open it multiple times", то зачем более одного? Существует ли возможность увеличения?
Спасибо.
Записан

С уважением,
Юрий Эстринов
Алексей Ермолинский
Сотрудник СВД Встраиваемые Системы
Сотрудник СВД ВС
Пользователь

Сообщений: 44



WWW
« Ответ #1 : 01 Октября, 2014, 17:30:25 »

Здравствуйте! Для более точного понимания нами сути проблемы опишите, пожалуйста, как и с помощью чего Вы планируете использовать устройства /dev/bpf*.
Записан
estrinov
Интересующийся

Сообщений: 8


« Ответ #2 : 02 Октября, 2014, 06:47:32 »

Спасибо за отклик.
Возможно проблемы-то и нет.
В ходе настройки bpf-фильтра необходимо присоединить сетевой интерфейс (например, en0) к открытому устройству bpf (например, bpf0). Т.е. сперва, к примеру,
if (0 > (fd = open("/dev/bpf0", O_RDWR)))
        err(1, "open");
а затем происходит присоединение
if (ioctl_socket(fd, BIOCSETIF, &bound_if) > 0)
        err(1, "SETIF");
где структура bound_if в поле bound_if.ifr_name содержит имя того самого en0.

Задача состоит в том, чтобы разные процессы (либо потоки) могли при помощи bpf фильтров получать только СВОЙ, определяемый фильтром, трафик из ОДНОГО физического интерфейса.
Тесты работают нормально, но возникли сомнения в правильности использования одного и того же устройства bpf для каждого из указанных процессов(потоков) с одним физическим интерфейсом. Сомнения возникли из-за того, что под Линуксом есть примеры поиска свободного bpf устройства перед его использованием для фильтрации. Отсюда и мои вопросы по использованию bpf-устройств и возможности увеличения их количества в системе.
Спасибо.
Записан

С уважением,
Юрий Эстринов
estrinov
Интересующийся

Сообщений: 8


« Ответ #3 : 02 Октября, 2014, 11:06:54 »

Еще точнее - подобный код в Линуксе кочует и по QNX:
 // get a bpf device for reading - /dev/bpf is a cloning device
  for ( ii = 0; ii < 100; ii++ )
  {
    sprintf( bbuf, "/dev/bpf%d", ii );
    bpffd = open( bbuf, O_RDWR );
    if ( bpffd != -1 )
      break;
  }
при поиске первого открывающегося устройства.
Кстати, будет открыт всегда только bpf0.
Вот и возникли мои вопросы...
Спасибо.

Записан

С уважением,
Юрий Эстринов
Алексей Ермолинский
Сотрудник СВД Встраиваемые Системы
Сотрудник СВД ВС
Пользователь

Сообщений: 44



WWW
« Ответ #4 : 03 Октября, 2014, 10:21:47 »

Судя по информации, представленной в описании утилиты tcpdump, при наличии клонирующего устройства требуется доступ к /dev/bpf, при отсутствии - к одному из существующих /dev/bpf*. По поводу корректности использования несколькими процессами одного устройства BPF для получения траффика из одного и того же физического интерфейса - в коде мы этого не проверяли, но несколько копий tcpdump, запущенных с указанием одного и того же интерфейса en*, вполне работают и фильтруют согласно заданным параметрам. Так же корректно tcpdump отрабатывает при подключении к нескольким интерфейсам. 
Записан
estrinov
Интересующийся

Сообщений: 8


« Ответ #5 : 03 Октября, 2014, 11:30:27 »

Алексей, спасибо!
Буду придерживаться правила поиска /dev/bpf, при отсутствии - к одному из существующих /dev/bpf* (что, по-видимому, не отрицает совместного использования).

Записан

С уважением,
Юрий Эстринов
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2016 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 01 Декабря, 2016, 06:24:05