]> git.entuzijast.net Git - imunes.git/commitdiff
bah, da bi radili brctl itd, moramo imati interfaceove dignute, tako da i u deployCfg...
authorJosip Rodin <joy@numa-ubuntu-vm.(none)>
Sun, 13 Sep 2009 16:38:00 +0000 (18:38 +0200)
committerJosip Rodin <joy@numa-ubuntu-vm.(none)>
Sun, 13 Sep 2009 16:38:00 +0000 (18:38 +0200)
linux/exec.tcl

index 4a9152e08d4a75cede469eb4c7fa77bdd7c11211..01a8ab57e54dd9998cabbcde6f82185d880e2b38 100755 (executable)
@@ -407,7 +407,7 @@ proc l3node.start { eid node } {
 #              puts "  nexec vimage $eid vimage -i $node $ifid $ifc    "
 # na Linux/OpenVZ ne moramo pokrenuti createIfc/vimage, samo izvaditi
 # ime interfacea iz ngnodemapa za vzctl --netif_add
-               set ifid ngnodemap($ifc@$node_id)
+               set ifid $ngnodemap($ifc@$node_id)
 
                set peer [peerByIfc $node $ifc]
 
@@ -702,178 +702,172 @@ proc deployCfg {} {
                }
     }
 
+    foreach node $node_list {
+               upvar 0 ::cf::[set ::curcfg]::[set node] $node
+               set type [nodeType $node]
+               if { $type == "pseudo" } {
+                   continue
+               }
+               statline "Starting node [getNodeName $node]"
+       [typemodel $node].start $eid $node
+    }
+
 ## TODO: Podesavanje l2 parametara
 
     for { set pending_links $link_list } { $pending_links != "" } {} {
-       set link [lindex $pending_links 0]
-       set i [lsearch -exact $pending_links $link]
-       set pending_links [lreplace $pending_links $i $i]
-
-       set lnode1 [lindex [linkPeers $link] 0]
-       set lnode2 [lindex [linkPeers $link] 1]
-       set ifname1 [ifcByPeer $lnode1 $lnode2]
-       set ifname2 [ifcByPeer $lnode2 $lnode1]
+               set link [lindex $pending_links 0]
+               set i [lsearch -exact $pending_links $link]
+               set pending_links [lreplace $pending_links $i $i]
 
-       if { [getLinkMirror $link] != "" } {
-           set mirror_link [getLinkMirror $link]
-           set i [lsearch -exact $pending_links $mirror_link]
-           set pending_links [lreplace $pending_links $i $i]
+               set lnode1 [lindex [linkPeers $link] 0]
+               set lnode2 [lindex [linkPeers $link] 1]
+               set ifname1 [ifcByPeer $lnode1 $lnode2]
+               set ifname2 [ifcByPeer $lnode2 $lnode1]
 
-           statline "Creating link $link/$mirror_link"
+               if { [getLinkMirror $link] != "" } {
+                   set mirror_link [getLinkMirror $link]
+                   set i [lsearch -exact $pending_links $mirror_link]
+                   set pending_links [lreplace $pending_links $i $i]
 
-           set p_lnode2 $lnode2
-           set lnode2 [lindex [linkPeers $mirror_link] 0]
-           set ifname2 [ifcByPeer $lnode2 [getNodeMirror $p_lnode2]]
-       } else {
-           statline "Creating link $link"
-       }
+                   statline "Creating link $link/$mirror_link"
 
-       set lname $lnode1-$lnode2
-       set bandwidth [expr [getLinkBandwidth $link] + 0]
-       set delay [expr [getLinkDelay $link] + 0]
-       set ber [expr [getLinkBER $link] + 0]
-       set dup [expr [getLinkDup $link] + 0]
-
-       set peer1 \
-           [lindex [[typemodel $lnode1].nghook $eid $lnode1 $ifname1] 0]
-       set peer2 \
-           [lindex [[typemodel $lnode2].nghook $eid $lnode2 $ifname2] 0]
-       set ngpeer1 $ngnodemap($peer1)
-       set ngpeer2 $ngnodemap($peer2)
-       set nghook1 \
-           [lindex [[typemodel $lnode1].nghook $eid $lnode1 $ifname1] 1]
-       set nghook2 \
-           [lindex [[typemodel $lnode2].nghook $eid $lnode2 $ifname2] 1]
-           
-#   puts ">>>>>>>>>>kreiranje linkova"
-#      puts "  nexec vimage $eid ngctl mkpeer $ngpeer1: pipe $nghook1 upper            "
-#      puts "  nexec vimage $eid ngctl name $ngpeer1:$nghook1 $lname                   "
-#      puts "  nexec vimage $eid ngctl connect $lname: $ngpeer2: lower $nghook2        "
-#   puts ">>>>>>>>>>kreiranje linkova"
-    
-
-    # OpenVZ kreiranje linkova
+                   set p_lnode2 $lnode2
+                   set lnode2 [lindex [linkPeers $mirror_link] 0]
+                   set ifname2 [ifcByPeer $lnode2 [getNodeMirror $p_lnode2]]
+               } else {
+                   statline "Creating link $link"
+               }
 
-       upvar 0 ::cf::[set ::curcfg]::bridges bridges
-    
-    #detekcija da li je link prema L3 node-u (host, pc) ili prema L2 nodeu (hub, switch)    
-    if { [[typemodel $lnode1].layer] == "LINK" || [[typemodel $lnode2].layer] == "LINK" } {        
-        #jedan od nodeova je sigurno L2, sad provjerava da li se radi o vezi izmedju
-        #dva L2 uredjaja
-        if { [[typemodel $lnode1].layer] == "LINK" && [[typemodel $lnode2].layer] == "LINK" } {
-            #TODO do something here!!!
-            #slucaj kad su spojena dva huba!!
-            puts "\n\n*********************************************************************"
-            puts "****      Panic! Panic! Spojena su dva huba, nemogu ja to!!       ***\n"   
-            puts "*********************************************************************\n\n"
-            puts "Klikni Eksperiment -> Terminate za uredan cleanup."
-        } else {
-            # za slucaj kad se L3 spaja na L2 treba detektirati koji je koji te dodati
-            # L3 host side interface u odgovarajuci bridge
-            if { [[typemodel $lnode1].layer] == "LINK" } {
-                set port_if $ngpeer2
-                set bridge "b$eid$lnode1"
-                set bridge_node $lnode1
-            } else {
-                set port_if $ngpeer1
-                set bridge "b$eid$lnode2"
-                set bridge_node $lnode2
-            }
-        }
+               set lname $lnode1-$lnode2
+               set bandwidth [expr [getLinkBandwidth $link] + 0]
+               set delay [expr [getLinkDelay $link] + 0]
+               set ber [expr [getLinkBER $link] + 0]
+               set dup [expr [getLinkDup $link] + 0]
+
+               set peer1 \
+                   [lindex [[typemodel $lnode1].nghook $eid $lnode1 $ifname1] 0]
+               set peer2 \
+                   [lindex [[typemodel $lnode2].nghook $eid $lnode2 $ifname2] 0]
+               set ngpeer1 $ngnodemap($peer1)
+               set ngpeer2 $ngnodemap($peer2)
+               set nghook1 \
+                   [lindex [[typemodel $lnode1].nghook $eid $lnode1 $ifname1] 1]
+               set nghook2 \
+                   [lindex [[typemodel $lnode2].nghook $eid $lnode2 $ifname2] 1]
 
-        
-        # TODO Ovo bi trebalo elegantnije rjesiti.
-        # Naredba pokusava utvrditi da li vec postoji bridge pod tim imenom,
-        # ako ima onda ga netreba ponovo stvarati nego samo doda interface.
-        # 
-        # Problem je u nacinu kako exec radi.
-        # Ovdje ustvari ispadne $result="child process exited abnormally" za
-        # slucaj kada ne nadje rezultat natrag.
-        # Kad nadje vrijednost, vraca u obliku:
-        #       invalid command name "ime_bridgea"
-
-        set status [catch { [exec brctl show | grep -v interfaces | awk {{ print $1 }} | grep $bridge] } result]
-        
-        if { $result == "invalid command name \"$bridge\""} {
-            puts "\nBridge $bridge (L2 hub emulation) already exists."
-        } else {
-            puts "\nCreating bridge $bridge (L2 hub emulation)"    
-            nexec brctl addbr $bridge                
-                       lappend bridges $bridge
-        }
-        
-        #TODO ovo bas ne radi, ne moze komunicirati sa fizickim interface-om, iako je
-        #uredno pridruzen bridge interface-u
-        #
-        #RJ45 se ponasa kao L2 device, tj. hub, samo u njega treba odmah joinati
-        #odgovarajuci fizicki interface koji je rucno upisan u gui
-
-        if { [nodeType $bridge_node] == "rj45" } {
-               set bridge_name [getNodeName $bridge_node]
-            nexec brctl addif $bridge $bridge_name
-            puts "  RJ45 emulacija, spojen na $bridge_name na hostu."
-        }
-        
-        #dodaje interface
-        nexec brctl addif $bridge $port_if
-        #dize bridge, interesantno ne baca error ako je bridge vec dignut
-        nexec ifconfig $bridge up        
+# FreeBSD-specific:
+#              puts "  nexec vimage $eid ngctl mkpeer $ngpeer1: pipe $nghook1 upper            "
+#              puts "  nexec vimage $eid ngctl name $ngpeer1:$nghook1 $lname                   "
+#              puts "  nexec vimage $eid ngctl connect $lname: $ngpeer2: lower $nghook2        "
+#              # Ethernet frame has a 14-byte header - this is a temp. hack!!!
+#              puts "  nexec vimage $eid ngctl msg $lname: setcfg { header_offset=14 } "
+#              # Link parameters
+#              puts "  nexec vimage $eid ngctl msg $lname: setcfg 
+#                  { bandwidth=$bandwidth delay=$delay 
+#                  upstream={ BER=$ber duplicate=$dup } 
+#                  downstream={ BER=$ber duplicate=$dup } }                                    "
+#              # Queues
+#              foreach node [list $lnode1 $lnode2] {
+#                  if { $node == $lnode1 } {
+#                              set ifc $ifname1
+#                  } else {
+#                              set ifc $ifname2
+#                  }
+#                  if { [nodeType $lnode1] != "rj45" && \
+#                               [nodeType $lnode2] != "rj45" } {
+#                              execSetIfcQDisc $eid $node $ifc [getIfcQDisc $node $ifc]
+#                              execSetIfcQDrop $eid $node $ifc [getIfcQDrop $node $ifc]
+#                              execSetIfcQLen $eid $node $ifc [getIfcQLen $node $ifc]
+#                  }
+#              }
 
-        puts "  L2 device $bridge is up, added interface $port_if"
+# Linux/OpenVZ kreiranje linkova
+
+               upvar 0 ::cf::[set ::curcfg]::bridges bridges
+
+               #detekcija da li je link prema L3 node-u (host, pc) ili prema L2 nodeu (hub, switch)
+               if { [[typemodel $lnode1].layer] == "LINK" || [[typemodel $lnode2].layer] == "LINK" } {
+                       #jedan od nodeova je sigurno L2, sad provjerava da li se radi o vezi izmedju
+                       #dva L2 uredjaja
+                       if { [[typemodel $lnode1].layer] == "LINK" && [[typemodel $lnode2].layer] == "LINK" } {
+                               #TODO do something here!!!
+                               #slucaj kad su spojena dva huba!!
+                               puts "\n\n*********************************************************************"
+                               puts "****        Panic! Panic! Spojena su dva huba, nemogu ja to!!        ***\n"   
+                               puts "*********************************************************************\n\n"
+                               puts "Klikni Eksperiment -> Terminate za uredan cleanup."
+                       } else {
+                               # za slucaj kad se L3 spaja na L2 treba detektirati koji je koji te dodati
+                               # L3 host side interface u odgovarajuci bridge
+                               if { [[typemodel $lnode1].layer] == "LINK" } {
+                                       set port_if $ngpeer2
+                                       set bridge "b$eid$lnode1"
+                                       set bridge_node $lnode1
+                               } else {
+                                       set port_if $ngpeer1
+                                       set bridge "b$eid$lnode2"
+                                       set bridge_node $lnode2
+                               }
+                       }
+
+               
+               # TODO Ovo bi trebalo elegantnije rjesiti.
+               # Naredba pokusava utvrditi da li vec postoji bridge pod tim imenom,
+               # ako ima onda ga netreba ponovo stvarati nego samo doda interface.
+               # 
+               # Problem je u nacinu kako exec radi.
+               # Ovdje ustvari ispadne $result="child process exited abnormally" za
+               # slucaj kada ne nadje rezultat natrag.
+               # Kad nadje vrijednost, vraca u obliku:
+               #          invalid command name "ime_bridgea"
+
+                       set status [catch { [exec brctl show | grep -v interfaces | awk {{ print $1 }} | grep $bridge] } result]
+                       
+                       if { $result == "invalid command name \"$bridge\""} {
+                               puts "\nBridge $bridge (L2 hub emulation) already exists."
+                       } else {
+                               puts "\nCreating bridge $bridge (L2 hub emulation)"     
+                               nexec brctl addbr $bridge                               
+                               lappend bridges $bridge
+                       }
+               
+               #TODO ovo bas ne radi, ne moze komunicirati sa fizickim interface-om, iako je
+               #uredno pridruzen bridge interface-u
+               #
+               #RJ45 se ponasa kao L2 device, tj. hub, samo u njega treba odmah joinati
+               #odgovarajuci fizicki interface koji je rucno upisan u gui
+
+                       if { [nodeType $bridge_node] == "rj45" } {
+                               set bridge_name [getNodeName $bridge_node]
+                               nexec brctl addif $bridge $bridge_name
+                               puts "  RJ45 emulacija, spojen na $bridge_name na hostu."
+                       }
+               
+               #dodaje interface
+                       nexec brctl addif $bridge $port_if
+               #dize bridge, interesantno ne baca error ako je bridge vec dignut
+                       nexec ifconfig $bridge up               
+
+                       puts "  L2 device $bridge is up, added interface $port_if"
 
-    } else {
-        # Slucaj kad se radi link izmedju dva L3 uredjaja (standardno)
-        set host_if_a $ngpeer1
-        set host_if_b $ngpeer2
-               set bridge "b$eid$lname"
-        set bridge_node $lname
-
-        puts "\nCreating bridge $bridge"    
-
-        nexec brctl addbr $bridge
-               lappend bridges $bridge
-        nexec brctl addif $bridge $host_if_a
-        nexec brctl addif $bridge $host_if_b
-        nexec ifconfig $bridge up
-        puts "  Bridge $bridge is up, added interface $host_if_a and $host_if_b"
-    }
+               } else {
+               # Slucaj kad se radi link izmedju dva L3 uredjaja (standardno)
+                       set host_if_a $ngpeer1
+                       set host_if_b $ngpeer2
+                       set bridge "b$eid$lname"
+                       set bridge_node $lname
 
-# FreeBSD-specific
-#      # Ethernet frame has a 14-byte header - this is a temp. hack!!!
-#      puts "  nexec vimage $eid ngctl msg $lname: setcfg { header_offset=14 } "
-
-#      # Link parameters
-#      puts "  nexec vimage $eid ngctl msg $lname: setcfg 
-#          { bandwidth=$bandwidth delay=$delay 
-#          upstream={ BER=$ber duplicate=$dup } 
-#          downstream={ BER=$ber duplicate=$dup } }                                    "
-
-#      # Queues
-#      foreach node [list $lnode1 $lnode2] {
-#          if { $node == $lnode1 } {
-#              set ifc $ifname1
-#          } else {
-#              set ifc $ifname2
-#          }
-
-#          if { [nodeType $lnode1] != "rj45" && \
-#              [nodeType $lnode2] != "rj45" } {
-#              execSetIfcQDisc $eid $node $ifc [getIfcQDisc $node $ifc]
-#              execSetIfcQDrop $eid $node $ifc [getIfcQDrop $node $ifc]
-#              execSetIfcQLen $eid $node $ifc [getIfcQLen $node $ifc]
-#          }
-#      }
-#    }
+                       puts "\nCreating bridge $bridge"        
 
-    foreach node $node_list {
-               upvar 0 ::cf::[set ::curcfg]::[set node] $node
-               set type [nodeType $node]
-               if { $type == "pseudo" } {
-                   continue
+                       nexec brctl addbr $bridge
+                       lappend bridges $bridge
+                       nexec brctl addif $bridge $host_if_a
+                       nexec brctl addif $bridge $host_if_b
+                       nexec ifconfig $bridge up
+                       puts "  Bridge $bridge is up, added interface $host_if_a and $host_if_b"
                }
-               statline "Configuring node [getNodeName $node]"
-       [typemodel $node].start $eid $node
-    }
+
+       }
 
     statline "Network topology instantiated in [expr [clock seconds] - $t_start] seconds ([llength $node_list] nodes and [llength $link_list] links)."