Bug 20044

Summary: bridge + dhcp - не хватает setfd 0
Product: Sisyphus Reporter: Mike Lykov <combr>
Component: etcnetAssignee: Mikhail Efremov <sem>
Status: CLOSED NOTABUG QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: erthad, ldv, rider, sem, shaba, vseleznv
Version: unstable   
Hardware: all   
OS: Linux   

Description Mike Lykov 2009-05-15 09:50:50 MSD
в версии до 0.9.9 dhcp пытался запуститься еще до конфигурации bridge.
в этой версии поправили:
23 апреля 2009 Denis Ovsienko <pilot at altlinux.ru> 0.9.9-alt1
      + rearrange bridge processing code to resolve DHCP and STP issues

но проблема осталась в том, что интерфейс не сразу входит в режим передачи пакетов forwarding, поэтому это изменение не помогает, dhcpcd все равно успевает показать timeout.

пример:
в нынешней конфигурации по умолчанию для 0.9.9

May 15 10:34:15 combr kernel: [ 6543.519867] br0: port 2(tap0) entering listening state
May 15 10:34:15 combr kernel: [ 6543.519878] br0: port 1(eth0) entering listening state
May 15 10:34:15 combr dhcpcd[25095]: br0: dhcpcd 3.0.17 starting
May 15 10:34:15 combr dhcpcd[25095]: br0: hardware address = 00:a0:d1:8e:b3:09
May 15 10:34:15 combr dhcpcd[25095]: br0: broadcasting for a lease
May 15 10:34:30 combr kernel: [ 6558.516039] br0: port 2(tap0) entering learning state
May 15 10:34:30 combr kernel: [ 6558.516053] br0: port 1(eth0) entering learning state
May 15 10:34:45 combr kernel: [ 6573.517045] br0: topology change detected, propagating
May 15 10:34:45 combr kernel: [ 6573.517067] br0: port 2(tap0) entering forwarding state
May 15 10:34:45 combr kernel: [ 6573.517073] br0: topology change detected, propagating
May 15 10:34:45 combr kernel: [ 6573.517080] br0: port 1(eth0) entering forwarding state
May 15 10:34:45 combr dhcpcd[25095]: br0: timed out

dhcpd запускается теперь после запуска br0, это верно. но сам br0 требует 30 секунд для перехода по состояниям.

если же в файле brctl добавить
setfd AUTO 0

то выходит такое:
May 15 10:37:38 combr kernel: [ 6747.061404] device eth0 entered promiscuous mode
May 15 10:37:38 combr kernel: [ 6747.062635] device tap0 entered promiscuous mode
May 15 10:37:38 combr kernel: [ 6747.081013] br0: topology change detected, propagating
May 15 10:37:38 combr kernel: [ 6747.081026] br0: port 2(tap0) entering forwarding state
May 15 10:37:38 combr kernel: [ 6747.081029] br0: topology change detected, propagating
May 15 10:37:38 combr kernel: [ 6747.081031] br0: port 1(eth0) entering forwarding state
May 15 10:37:38 combr dhcpcd[25695]: br0: dhcpcd 3.0.17 starting
May 15 10:37:38 combr dhcpcd[25695]: br0: hardware address = 00:a0:d1:8e:b3:09
May 15 10:37:38 combr dhcpcd[25695]: br0: broadcasting for a lease
May 15 10:37:38 combr dhcpcd[25695]: br0: offered 10.1.1.14 from 10.1.10.240
May 15 10:37:38 combr dhcpcd[25695]: br0: leased 10.1.1.14 for 43200 seconds
May 15 10:37:38 combr dhcpcd[25695]: br0: adding IP address 10.1.1.14/16
May 15 10:37:38 combr dhcpcd[25695]: br0: adding route to 10.1.0.0 (255.255.0.0) via 0.0.0.0 metric 1
May 15 10:37:38 combr dhcpcd[25695]: br0: removing route to 10.1.0.0 (255.255.0.0) via 0.0.0.0 metric 0
May 15 10:37:38 combr dhcpcd[25695]: br0: adding default route via 10.1.5.155 metric 1
May 15 10:37:39 combr dhcpcd.sh: interface br0 has been configured with new IP=10.1.1.14

т.е. все происходит за одну секунду и успешно.

но при этом такая конфигурация с временем 0 подходит не всем и всегда, это проблема. с другой стороны, ждать и потом вручную запускать dhcpcd для получения адреса - тоже проблема.

надо что-то придумать ;)
Comment 1 Denis Ovsienko 2009-05-24 20:38:21 MSD
Я поясню. Вы настраиваете 2-портовый мост между двумя сетйми: локальной и удалённой. Если вы наверняка знаете, что этот мост навсегда останется единственноым средством сообщения между этими двумя сетями на 2-м сетевом уровне, то от использования STP можно отказаться:
echo "stp AUTO off" >> /etc/net/ifaces/br0/brctl

Если же петли коммутации возможны, то так делать нельзя. В Linux вашим единственным выбором является STP, с которым честно добиться низкого Forward delay вы не сможете (впрочем, работоспособность RSTP на TAP-интерфейсах я вообще поставлю под сомнение). В этом случае единственный надёжный способ --- увеличить таймаут:
echo "DHCP_TIMEOUT=90" >> /etc/net/ifaces/br0/options

Закрываю.