FBSD 7.0 dummynet bridge Probleme

handwerker

Well-Known Member
Hi !

Ich versuche mit FBSD 7.0, ipfw, dummynet eine Bridge zu bauen die als Trafficshaper dient.
Es gelingt mir nicht die Bridge beim Booten des Systems via rc.conf aufzubauen.

Hier meine Umgebung:
Kernel:
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT
options IPFIREWALL_DEFAULT_TO_ACCEPT
options DUMMYNET

/etc/sysctl.conf
net.inet.ip.fw.enable=1
net.inet.ip.fw.one_pass=1
net.inet.ip.fw.dyn_buckets=256
net.inet.ip.fw.curr_dyn_buckets=256
net.link.bridge.ipfw=1

/etc/rc.conf

cloned_interfaces="bridge0"
ifconfig_bridge0="addm em0 addm em3 up"
ifconfig_em0="up"
ifconfig_em3="up"
ifconfig_bridge0="inet 192.168.10.5 netmask 255.255.255.0"

Nach dem Boot hat aber die bridge0 keine Member interfaces

Manuelle Kommandos führen zum Erfolg:
ifconfig bridge0 addm em0 addm em3 up

rc_debug="YES" und
rc_info="YES" in /etc/rc.conf haben mir auch nicht weitergeholfen.


Was läuft da schief ?

mfg josef
 
Hi,

versuch mal die bestehende "sysctl.conf" mit folgenden Zeilen ...

> net.link.ether.bridge.config=em0:0,em3:0

und

> net.link.bridge.ipfw_arp=1

... zu ergaenzen,
 
Zuletzt bearbeitet von einem Moderator:
Code:
net.link.ether.bridge.config
Dies ist mit der aktuellen Implementierung von if_bridge obsolet und wird entsprechend nicht funktionieren.

Der Fehler liegt hier:
Code:
ifconfig_bridge0="addm em0 addm em3 up"
ifconfig_em0="up"
ifconfig_em3="up"
ifconfig_bridge0="inet 192.168.10.5 netmask 255.255.255.0"
Du rufst ifconfig zweimal auf, was grundsätzlich problematisch ist. Du musst einen Eintrag daraus machen und die Brücke erst nach dem Setzen der Adresse starten:
Code:
cloned_interfaces="bridge0"
ifconfig_bridge0="inet 192.168.10.5/24 addm em0 stp em0 addm em3 stp em3 up"
Den Spanning Tree brauchst du nicht zwingend, ich würde ihn aber nutzen...
 
Der Fehler liegt hier:
Code:
ifconfig_bridge0="addm em0 addm em3 up"
ifconfig_em0="up"
ifconfig_em3="up"
ifconfig_bridge0="inet 192.168.10.5 netmask 255.255.255.0"
Du rufst ifconfig zweimal auf, was grundsätzlich problematisch ist.
Noch viel schlimmer. Er ruft ifconfig nur einmal auf. Die Einstellung ifconfig_bridge0 ist bloß eine Variable, das heißt das addm ... wird einfach wieder überschrieben und passiert einfach nicht.
 
Ah ja... Mit den Interna des RC-Systems habe ich es nicht so ;) Das sollte allerdings nichts daran ändern, dass mein Vorschlag weiter oben funktionieren müsste, da es dort ja nur noch eine Variable gibt.
 
Ich habe mir irgendwann mal den kompletten Code durchgelesen als ich angefangen habe für mich selbst rc-Skripte zu schreiben. Ich weiß, Overkill, die Manpage hätte es auch getan. Dafür mangelt es mir bei dem ganzen Netzwerkkram an praktischer Erfahrung.
 
Hi !
Das mit den ifconfig_ ... ist klar, war ein Denkfehler.
Momentan schauts so aus:
Code:
cloned_interfaces="bridge0"
ifconfig_bridge0="inet 192.168.10.5/24 priority 36864 addm em0 stp em0 addm em3 stp em3 up"
(Die priority habe ich hoch gesetzt, damit mir nicht immer alle Switches bei uns im Netz um die Ohren fliegen wenn ich die Kiste starte ...)
Leider funktioniert das ganze immer noch nicht komplett.
Nach einem Reboot muss ich folgende Kommandos absetzen damit es klappt:
Code:
ifconfig bridge0 down
ifconfig em0 down
ifconfig em3 down
ifconfig em0 up
ifconfig em3 up
ifconfig bridge0 up
Dann klappt das ganze:

Code:
$ ifconfig bridge0
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether aa:12:5b:23:13:96
        inet 192.168.10.5 netmask 0xffffff00 broadcast 192.168.10.255
        id 00:04:23:a5:a0:54 priority 36864 hellotime 2 fwddelay 15
        maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
        root id 00:0d:56:3e:e1:3a priority 0 ifcost 2000000 port 1
        member: em3 flags=147<LEARNING,DISCOVER,STP,AUTOEDGE,AUTOPTP>
                port 4 priority 128 path cost 2000000 proto rstp
                role disabled state discarding
        member: em0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
                port 1 priority 128 path cost 2000000 proto rstp
                role root state forwarding

em0 ist im state forwarding !

(Anmerkung: der TestPC am em3 ist gerade down)

Direkt nach dem Booten schauts so aus:
Code:
$ ifconfig bridge0
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether aa:12:5b:23:13:96
        inet 192.168.10.5 netmask 0xffffff00 broadcast 192.168.10.255
        id 00:04:23:a5:a0:54 priority 36864 hellotime 2 fwddelay 15
        maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
        root id 00:0d:56:3e:e1:3a priority 0 ifcost 2000000 port 1
        member: em3 flags=147<LEARNING,DISCOVER,STP,AUTOEDGE,AUTOPTP>
                port 4 priority 128 path cost 2000000 proto rstp
                role disabled state discarding
        member: em0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
                port 1 priority 128 path cost 2000000 proto rstp
                role disabled state discarding
dann blockiert die bridge ...

Vorschläge ?
 
In OpenBSD sorgt das netstart-Script für Probleme bei bestimmten Bridgekonfigurationen, weil das Script die Interface in der falschen Reihenfolge startet und in die Bridge einbindet. Es ist halt für den standard-User geschrieben.

Von FBSD habe ich zwar keinen Plan, aber ich würde mir ein eigenes Startscript, mit der Befehlsreihenfolge bauen, welche für dich funktioniert und dieses Script über rc beim Start des Systems ausführen.
 
Jetzt klappts !

So funktionierts jetzt ohne "manuellen" Eingriff
rc.conf
ifconfig_bridge0="inet 192.168.10.5/24 priority 36864 addm em0 stp em0 addm em3 stp em3"
ifconfig_em0="up"
ifconfig_em3="up"
Was da genau in den /etc/rc.d/netif script jetzt anders abläuft muss ich mir nochmal anschauen.

Danke für die Hilfe :D
 
Zurück
Oben