Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Gleb Smirnoff                        2:5020/400     19 Oct 2005  01:32:23
 To : "Alexey Sopov"
 Subject : Re: setifindex не догоняю
 -------------------------------------------------------------------------------- 
 
 Alexey Sopov <adler@aknet.ru> wrote:
 
 AS> Есть роутер, отданный под mpd4(pptp)
 
 И кстати как mpd4? 
 
 AS> Вопрос: Могу ли я не указывать индекс интерфейса, и если не могу, то как мне
 AS> его получить?
 
 В NetFlow version 5 есть такое поле как input interface index. То
 есть номер интерфейса, в который пакет вошел. ng_netfkiw заполняет
 это поле.
 
 В FreeBSD сетевые пакеты в ядре передаются между подсистемами в
 виде структуры mbuf, которая описана в mbuf(9). У mbuf есть
 опциональный указатель на структуру интерфейса, в который этот mbuf
 пришёл. В структуре интерфейса есть его индекс. Так как указатель
 опциональный, то в некоторых случаях он может быть и не заполнен.
 
 Hапример, когда Ethernet сетевая карта получает пакет, то Ethernet
 код сначала проставляет указатель на интерфейс, затем передаёт
 пакет в ng_ether(4). В этом случае ng_netflow легко сама
 определяет индекс.
 
 Когда же пакет сначала принимается скажем E1 картой Cronyx,
 затем обрабатывается ng_netflow, а только затем ng_iface(4), то
 в ng_netflow(4) пакет приезжает без указателя. В этом случае
 администратор должен помочь ноде, и указать индекс интерфейса
 связанного с этим хуком.
 
 В случае PPTP ещё хитрее. Пакет принимается в Ethernet (в большинстве
 случаев), проставляется указатель на Ethernet интерфейс. Потом пакет
 детуннелируется, проходит обработку ng_ppp и едёт себе в ng_iface(4),
 где на нём сменят указатель на входящий интерфейс. Hо по пути он
 попадает в ng_netflow, с фактически неправильным указателем. То
 есть с указателем на тот интерфейс, который уровнем выше туннеля.
 Тут и помогает жёсткое проставление индекса через setifindex.
 
 Чем чревато непроставление. Тем, что в экспортах будет нуль вместо
 индекса (например E1) или же правильный индекс (ng_ether) или же
 неправильный индекс (PPTP или PPPoE или еще что-то туннельное).
 Аналогично будет и в выводе flowctl. Может показывать не тот интерфейс.
 
 AS> В мануале по if_nametoindex(3) ничего не нашел.
 
 Это программный интерфейс. К сожалению шелльного нет в системе.
 Вот можешь пользоваться вот этим:
 
 if_nametoindex.c:
 
 #include <sys/types.h>
 #include <sys/socket.h>
 
 #include <net/if.h>
 
 int
 main(int argc, char **argv)
 {
         int i;
 
         for (i = 1; i < argc; i++)
                 printf("%s -> %d\n", argv[i], if_nametoindex(argv[i]));
 }
 
 Пользоваться вот так:
 
 make if_nametoindex
 ./if_nametoindex `ifconfig -l`
 
 -- 
 Totus tuus, Glebius.
 GLEBIUS-RIPN GLEB-RIPE
 --- ifmail v.2.15dev5.3
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 setifindex не догоняю   Alexey Sopov   18 Oct 2005 22:32:01 
 Re: setifindex не догоняю   Gleb Smirnoff   19 Oct 2005 01:32:23 
 Re: setifindex не догоняю   Alexey Sopov   19 Oct 2005 15:31:13 
 Re: setifindex не догоняю   Gleb Smirnoff   19 Oct 2005 15:52:24 
 Re: setifindex не догоняю   Alexey Sopov   19 Oct 2005 17:38:49 
Архивное /ru.unix.bsd/6577d9322003.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional