Как мне внутри BindAdapterHandler получить инфу о карте, т.е адрес, шлюз и т.п? NdisReadConfiguration может прочитать "UpperBindings", через который, в принципе, можно получить нужную инфу. Это так и надо делать, или это решение через задницу?
И ещё в догонку: NdisAcquireReadWriteLock блочит все данные? Можно ли использовать для выборочной блокировки другие средства синхронизации?
Здравствуйте, Аноним, Вы писали:
А>Как мне внутри BindAdapterHandler получить инфу о карте, т.е адрес, шлюз и т.п? NdisReadConfiguration может прочитать "UpperBindings", через который, в принципе, можно получить нужную инфу. Это так и надо делать, или это решение через задницу?
Это нормальный путь. Есть еще вариант — узнать информацию динамически, через драйвер tcpip. Например, так можно узнать действующую таблицу маршоутизации:
тут не хватает некоторых объявлений, но идея прослеживается...
А>И ещё в догонку: NdisAcquireReadWriteLock блочит все данные? Можно ли использовать для выборочной блокировки другие средства синхронизации?
NdisAcquireReadWriteLock позволяет реализовать алгоритм "один писатель — много читателей". Такая схема эффективна, когда несколько потоков часто обращаются для чтения некоторых защищаемых данных, а один поток изредка их меняет. Упомянутый объект синхронизации позволяет одновременно нескольким потокм осуществлять чтение — в отличии от обычного спинлока ( схема "экслюзивный доступ" ).
Если Вам нужен эксклюзивный доступ к ресурсу — используйте спинлок.
Да пребудет с тобою сила
Re[2]: NDIS IM + BindAdapterHandler
От:
Аноним
Дата:
22.12.05 17:17
Оценка:
Большое спасибо за инфу. Возник ещё вопрос — как лучше в ядре реализовать механизм плагинов для подключения разных модулей обработки пакетов(ipv4<->ipv6, шифрацию, nat и т.п? В юзермоде легко — цепляешь нужные длльки и вперёд. Могут ли в роли длл выступать отдельные драйверы? Идея со здоровым свичем меня совсем не прельщает.
Аноним wrote: > > Большое спасибо за инфу. Возник ещё вопрос — как лучше в ядре > реализовать механизм плагинов для подключения разных модулей обработки > пакетов(ipv4<->ipv6, шифрацию, nat и т.п? В юзермоде легко — цепляешь > нужные длльки и вперёд. Могут ли в роли длл выступать отдельные > драйверы? Идея со здоровым свичем меня совсем не прельщает.
Я бы предложил для начала переосмыслить дизайн в том плане, чтобы в ядре
делалось только то, что совершенно необходимо делать именно в ядре.
Например, попакетная обработка траффика. Все остальное надо выносить в
user space. Тогда не будет возникать вопросов, откуда Intermediate
driver'у узнать IP address минипорта — ему (IM) это знать совершенно не
обязательно.
Что касается плагинов в ядре — да, можно представить их в виде отдельных
драйверов, которые каким-то образом взаимодействуют между собой. Сборку
всей этой конструкции воедино можно поручить user space сервису.
Собственно, сам NDIS так и устроен.
Здравствуйте, Аноним, Вы писали:
А>Большое спасибо за инфу. Возник ещё вопрос — как лучше в ядре реализовать механизм плагинов для подключения разных модулей обработки пакетов(ipv4<->ipv6, шифрацию, nat и т.п? В юзермоде легко — цепляешь нужные длльки и вперёд. Могут ли в роли длл выступать отдельные драйверы? Идея со здоровым свичем меня совсем не прельщает.
Драйвера — это такие же PE файлы, как и dll. И они могут экспортировать функции ( что и делает тот же ndis.sys ). Делается все также, как с dll ( def файл, библиотека экспорта ). С динамической загрузкой потруднее будет ( аналог LoadLibrary ), но тоже можно. Но я бы крайне не рекомендовал делать систему безопасности с плагинами в режиме ядра — очень легко подменив файл плагина исполнить код в режиме ядра.
Здравствуйте, Pzz, Вы писали:
Pzz>Я бы предложил для начала переосмыслить дизайн в том плане, чтобы в ядре Pzz>делалось только то, что совершенно необходимо делать именно в ядре. Pzz>Например, попакетная обработка траффика. Все остальное надо выносить в Pzz>user space.
А не будет ли накладно дергать юзермоду? Я так понимаю, что такой переход довольно ощутимый для системы.
linkup wrote: > > Pzz>Я бы предложил для начала переосмыслить дизайн в том плане, чтобы в ядре > Pzz>делалось только то, что совершенно необходимо делать именно в ядре. > Pzz>Например, попакетная обработка траффика. Все остальное надо выносить в > Pzz>user space. > > А не будет ли накладно дергать юзермоду? Я так понимаю, что такой > переход довольно ощутимый для системы.
На каждый пакет, наверное, будет. А чтобы конфигурацию поменять, такую
нагрузку даже и заметить будеть нельзя. Даже если конфигурация меняется
несколько десятков раз в секунду...