The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Работа с регистрами GPIO платы видеозахвата"
Отправлено PavelR, 03-Ноя-10 08:13 
>> Должен отметить, что директория /lib/modules/2.6.26-2-686/build у меня отсутсвовала.
>> Я ее создал ради пробы вручную
> PavelR, тяжело тебе будет довести эту затею с помощью до конца --
> но за попытку конечто честные +100500
> если не секрет, с чего начал изучать kernel-programming? я вот с модификации
> ipt_recent.

Мне было надо маркировать realm-ами трафик, который проходил через bridge.

Убойный патч, который делал это выглядел примерно так:

nswhost:/usr/src/modules/bridge# diff -u br_netfilter.c.orig br_netfilter.c
--- br_netfilter.c.orig 2009-12-03 09:51:21.000000000 +0600
+++ br_netfilter.c      2010-07-04 16:13:04.000000000 +0700
@@ -55,6 +55,7 @@

#ifdef CONFIG_SYSCTL
static struct ctl_table_header *brnf_sysctl_header;
+static int brnf_call_iproute  __read_mostly = 0;
static int brnf_call_iptables __read_mostly = 1;
static int brnf_call_ip6tables __read_mostly = 1;
static int brnf_call_arptables __read_mostly = 1;
@@ -411,6 +412,11 @@
                        kfree_skb(skb);
                        return 0;
                }
+               if (brnf_call_iproute) {
+                       if (!(err = ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, dev))) {
+                               rt->u.dst.tclassid = skb_dst(skb)->tclassid;
+                       }
+               }
                dst_hold(&rt->u.dst);
                skb_dst_set(skb, &rt->u.dst);
        }
@@ -979,6 +985,13 @@

static ctl_table brnf_table[] = {
        {
+               .procname       = "bridge-nf-call-iproute",
+               .data           = &brnf_call_iproute,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = brnf_sysctl_call_tables,
+       },
+       {
                .procname       = "bridge-nf-call-arptables",
                .data           = &brnf_call_arptables,
                .maxlen         = sizeof(int),

Всё это делалось на удаленном рабочем сервере :-) (что поделать, оборудования чтобы создать тестовую среду - фактически нет, всё "на интерес")
И было очень интересно, ставишь в кроне ребут через 5 минут "на всякий случай", загружаешь модуль, заставляешь трафик идти через него (скриптом полностью перестраивается настройка сети).
Затем врубаешь флажок bridge-nf-call-iproute и смотришь, поперло или нет :-)
Это поработало несколько месяцев, но потом отказался из-за низкой стабильности - раз в месяц штормом в сети (плоская сетка провайдера на >1000 адресов в одном огромном физическом сегменте) или чем-то еще всё это дело стабильно "перекрывало" и сеть терялась. Серв удаленный, и подиагностировать это сложновато, поэтому в результате переделано на proxyarp - он лишние пакеты не слушает, маршрутизирует пакеты "честно"  и делает требуемую раскраску.

Попутно была разрисована схема прохождения пакетов через вызовы, ну и т д )

Собственно, написание модуля для задачи топика - это уже не первая попытка работы с saa713х, первые попытки были когда очень хотелось заставить его цифровать звук не на 32кГц, а на 44 :-) Был найден SDK :-) Но это уж больно сложно оказалось, в результате звук цифровался внешней звуковой картой (всё это было для вещания в интернет эфирной радиостанции, мы же не сразу идем простым путем, зато интересно :).  

ну а эта реализация модуля писалась практически копипастом из других модулей ядра, по образу и подобию. Параллельно руководствовался LKMPG и сайтами с LXR. Когда не понятно, как работает некий вызов - смотришь её исходник, и мал-мальски проясняются моменты, где будет выделяться память и т п )

Очень интересная вещь - это работа container_of() ...

В общем, изучение было достаточно большой частью написания и этого модуля :-)
Я вообще на С не программирую ..... ))))

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру