Как установить сетевой интерфейс в беспорядочный режим в модуле ядра? - PullRequest
3 голосов
/ 29 марта 2012

Я разработал модуль ядра, чтобы получить все пакеты, которые обходят и интерфейс Ethernet.

Теперь я хочу в своем модуле установить этот интерфейс в беспорядочный режим. Как я могу это сделать?

Я получаю интерфейс, используя dev_get_by_name (& init_net, "eth0") для struct net_device * dev.

С наилучшими пожеланиями

Ответы [ 3 ]

2 голосов
/ 06 октября 2014

Вы можете использовать следующую функцию (которая находится в net / core / dev.c):

int dev_set_promiscuity(struct net_device *dev, int inc)

Если вы хотите установить устройство в смешанном режиме, inc должно быть 1. Чтобы сбросить смешанный режим, установите inc в -1. Чтобы функция работала, вам нужно иметь блокировку rtnl. Чтобы получить его, вам необходимо вызвать следующие функции до и после вызова dev_set_promiscuity() (функции находятся в net / core / rtnetlink.c):

void rtnl_lock(void);
void rtnl_unlock(void);
1 голос
/ 29 марта 2012

Используйте dev_set_promiscuity().Используйте шаг 1, чтобы установить устройство на случайный режим, -1, чтобы установить его на случайный режим.

0 голосов
/ 30 марта 2012

Когда я использую dev_set_promiscuity (dev_eth0,1), он появляется в команде dmesg следующим образом:

[550.411935] RTNL: сбой подтверждения в net / core / dev.c (4059)

[550.411940] Pid: 5164, комм .: insmod Tainted: P 2.6.35101

[550.411943] Трассировка вызова:

[550.411951] []?printk + 0x25 / 0x29

[550.411956] [] __dev_set_promiscuity + 0x37 / 0x127

[550.411960] [] dev_set_promiscuity + 0x18 / 0x37

[550.411965] [?hook_init + 0x0 / 0x88 [nethook]

[550.411969] [] hook_init + 0x3a / 0x88 [nethook]

[550.411973] [] do_one_initcall + 0x4f / 0x139

550.411978] []?blocking_notifier_call_chain + 0x11 / 0x13

[550.411982] [] sys_init_module + 0x7f / 0x19b

[550.411986] [] sysenter_do_call + 0x12 / 0x28

104 * 109 *1098* 109 *1098* 1098 *1098* 1098 *1098* 1098 *1098* 1098 *1098* 1098 * 1098mode

RTNL: подтверждение сбоя в net / core / dev.c (4059) происходит, и через некоторое время появляются сообщения об ошибках и сбои ядра.

Кто-то знает, как решитьэтот?С наилучшими пожеланиями

...