Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2021, 17:50   #1
GrimHex
Пользователь
 
Аватар для GrimHex
 
Регистрация: 14.08.2019
Сообщений: 64
По умолчанию Принимать буфер только с одного устройства - не разобрался с функциями. Linux

Собираюсь использовать трассировку ядра чтобы перенаправлять буфер между сетевыми устройствами на передачу и на прием. Нужно чтобы драйвер принял буфер только с одного устройства из нескольких. Смотрел справку по функциям: e1000_xmit_frame - которая должна работать на отправку, и netif_receive_skb - которая должна работать на прием.

Отправка - определен аргумент функции для указания устройства.
Код:
static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev);
Прием - не определен аргумент функции для указания устройства.
Код:
int netif_receive_skb(struct sk_buff *skb);
Как принять только с одного устройства? Может быть, я не нашел нужную функцию?

Вот скриншот, где буду делать трассировку. И ссылка на карту ядра https://makelinux.github.io/kernel/map/
Изображения
Тип файла: jpg Снимок.JPG (46.6 Кб, 37 просмотров)
GrimHex вне форума Ответить с цитированием
Старый 13.12.2021, 23:57   #2
GrimHex
Пользователь
 
Аватар для GrimHex
 
Регистрация: 14.08.2019
Сообщений: 64
По умолчанию

Неужели никто не прояснит мне ситуацию по вопросу? Видимо, ядро и драйверы, - это отрасль не для народа а для корпораций. Оно же принимает со всех устройств сразу - как так...
GrimHex вне форума Ответить с цитированием
Старый 14.12.2021, 07:13   #3
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 761
По умолчанию

Цитата:
Сообщение от GrimHex Посмотреть сообщение
Оно же принимает со всех устройств сразу
Цитата:
Сообщение от GrimHex Посмотреть сообщение
Как принять только с одного устройства
не вникая в детали (я и не смогу вникнуть ) - как насчёт варианта по некоторому идентификатору узнавать пакеты конкретного устройства и сохранять только их, остальные игнорировать?
Алексей1153 вне форума Ответить с цитированием
Старый 14.12.2021, 16:02   #4
GrimHex
Пользователь
 
Аватар для GrimHex
 
Регистрация: 14.08.2019
Сообщений: 64
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
как насчёт варианта по некоторому идентификатору узнавать пакеты конкретного устройства и сохранять только их, остальные игнорировать?
По такому идентификатору как MAC-адрес? Не совсем понял, - идентификатор может быть либо в содержимом пакета - как MAC-адрес, либо он встроен в ядре Линукса.

Если по MAC-адресу, то следует сказать, что у устройств он может совпадать. По IP-адресу тоже не получится, так как это должно работать без DHCP.
GrimHex вне форума Ответить с цитированием
Старый 15.12.2021, 06:44   #5
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 761
По умолчанию

GrimHex, значит, по контенту пакета нужно как-то определять источник
Алексей1153 вне форума Ответить с цитированием
Старый 15.12.2021, 18:30   #6
GrimHex
Пользователь
 
Аватар для GrimHex
 
Регистрация: 14.08.2019
Сообщений: 64
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
GrimHex, значит, по контенту пакета нужно как-то определять источник
Не существует конкретной сетевой службы, для которой можно определить по контенту, - должны работать абсолютно все соединения на сетевом устройстве. Принцип наподобие "ethernet повторителя" или "ethernet свитча". Фабричные образцы которых, к слову, часто работают под управлением Линукс, - это значит что решение есть, но я его просто не знаю. Может быть, - патчат ядро, может быть, - используют недокументированные функции.

Последний раз редактировалось GrimHex; 15.12.2021 в 18:41.
GrimHex вне форума Ответить с цитированием
Старый 10.08.2022, 23:43   #7
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 223
По умолчанию

Ну что в итоге? Я раньше с таким кодом дело не имел, ядро линукс, мало кто с ним напрямую так работает. Думаю, если есть функции приема и передачи, значит должен быть параметр, отвечающий за то откуда(если на прием) и куда(если для передачи). Соответственно можно управлять потоком данных как угодно. Ванга
формошлеп.рф
witech.su
maks1331 вне форума Ответить с цитированием
Старый 11.08.2022, 13:05   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,433
По умолчанию

https://devarea.com/introduction-to-...filters-linux/
waleri вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в Linux работать с драйвером сетевого устройства? GrimHex Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 1 10.02.2021 17:11
вызов generic_make_request из обработчика запросов блочного устройства - Linux Kerne - Низкоуровневое программирование ZenBooster Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 2 02.10.2019 10:53
Насколько хороша мысль принимать только rvalue аргументы? New man Общие вопросы C/C++ 1 03.02.2019 09:54
Загрузка файла большого размера с одного устройства monolitsk PHP 9 20.02.2014 11:23
Как скопировать текст в буфер обмена с одного edit-a и вставить в другой SeRhy Общие вопросы Delphi 2 26.07.2008 23:02