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


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Eugene Grosbein                      2:5006/1       23 Dec 2007  05:04:45
 To : Eugene Grosbein
 Subject : Re: if_bridge(4) и EtherIP
 -------------------------------------------------------------------------------- 
 
 23 дек 2007, воскресенье, в 00:27 KRAT, Eugene Grosbein написал(а):
 
  EG> Спасибо, проблема судя по всему в gif(4), одну уже точно вижу - 
  EG> arp-request'ы идут с ether dst = ff:ff:ff:ff:ff:ff, не маркируются
  EG> как M_BCAST перед передачей в bridge_input и выкидываются. С юникастами
  EG> тоже фигня.
 
 Короче говоря, это EtherIP поломанное с рождения.
 В gif_input (sys/net/if_gif.c) принятый пакет типа AF_LINK
 (как раз случай EtherIP) передаётся бриджу, который его обрабатывает
 по-своему, форвардит куда надо и возвращает обратно для передачи
 на верхние уровни стека. А gif ему вместо этого делает m_freem(m);
 Кроме того, принятые из туннеля бродкасты-мультикасты лишаются
 флагов M_BCAST и M_MCAST соответственно перед передачей бриджу,
 что плохо влияет на его работу.
 
 Вот самый первый и черновой вариант патча, при котором хотя бы
 заработал ping между роутерами FreeBSD через EtherIP. Совершенно
 не уверен, что он корректный, можно ли вызывать ether_demux()
 напрямую из gif_input() и как положено чистить память в таком случе.
 Буду рад, если кто-нибудь из знакомых с этим местом ядра посмотрит.
 
 - --- if_gif.c.orig   2007-12-23 00:18:16.000000000 +0700
 +++ if_gif.c  2007-12-23 03:30:54.000000000 +0700
 @@ -534,14 +534,19 @@
       }
       m_adj(m, sizeof(struct etherip_header));
  
 -     m->m_flags &= ~(M_BCAST|M_MCAST);
       m->m_pkthdr.rcvif = ifp;
  
 -     if (ifp->if_bridge)
 +     if (ifp->if_bridge) {
        BRIDGE_INPUT(ifp, m);
 -     
 -     if (m != NULL)
 -      m_freem(m);
 +      if (m == NULL) {
 +         return;
 +      }
 +     }
 +     else
 +       m->m_flags &= ~(M_BCAST|M_MCAST);
 +
 +     ether_demux(ifp, m);
 +     /* m_freem(m); ??? */
       return;
  
    default:
 
 Eugene
 --- slrn/0.9.8.1 (FreeBSD)
  * Origin: Svyaz Service JSC (2:5006/1@fidonet)
 
 

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

 Тема:    Автор:    Дата:  
 if_bridge(4) и EtherIP   Eugene Grosbein   22 Dec 2007 16:29:00 
 Re: if_bridge(4) и EtherIP   Eugene Grosbein   22 Dec 2007 16:32:24 
 if_bridge(4) и EtherIP   Vladimir Kurtukov   22 Dec 2007 17:21:26 
 Re: if_bridge(4) и EtherIP   Eugene Grosbein   22 Dec 2007 17:49:34 
 Re: if_bridge(4) и EtherIP   Eugene Grosbein   22 Dec 2007 17:57:50 
 Re: if_bridge(4) и EtherIP   Eugene Grosbein   22 Dec 2007 21:48:03 
 Re: if_bridge(4) и EtherIP   Alexey Kouznetsov   22 Dec 2007 19:24:26 
 if_bridge(4) и EtherIP   Slawa Olhovchenkov   22 Dec 2007 18:00:38 
 Re: if_bridge(4) и EtherIP   Eugene Grosbein   23 Dec 2007 01:27:46 
 Re: if_bridge(4) и EtherIP   Eugene Grosbein   23 Dec 2007 05:04:45 
 if_bridge(4) и EtherIP   Vladimir Kurtukov   24 Dec 2007 09:55:19 
 Re: if_bridge(4) и EtherIP   Eugene Grosbein   24 Dec 2007 10:03:02 
 if_bridge(4) и EtherIP   Vladimir Kurtukov   24 Dec 2007 10:48:56 
 Re: if_bridge(4) и EtherIP   Eugene Grosbein   24 Dec 2007 11:02:20 
Архивное /ru.unix.bsd/260934219a11d.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional