]> git.entuzijast.net Git - imunes.git/commitdiff
Implementiran hub kao L2 bridge interface. Dobro radi za hostove,
authorKosta Pribić <kosta.pribic@gmail.com>
Wed, 9 Sep 2009 20:32:08 +0000 (22:32 +0200)
committerKosta Pribić <kosta.pribic@gmail.com>
Wed, 9 Sep 2009 20:32:08 +0000 (22:32 +0200)
konceptualni problemi se jave kad treba spojiti dva huba direktno.

linux/exec.tcl
linux/host.tcl
linux/hub.tcl
test1.imn

index 7a7c3b74dc9178a12bca79e38512e1e56accac6c..cdf1abfd8b352b93d0569ff756e0859cdec205c7 100755 (executable)
@@ -302,7 +302,7 @@ proc l3node.instantiate { eid node } {
 
                set peer [peerByIfc $node $ifc]
 
-               puts "  Node $node na lokalnom interfaceu (\$ifc) $ifc vidi (\$peer) $peer"
+               puts "  Interface $ifc at $node links to $peer"
 
                if { [nodeType $peer] == "rj45" } {
 # TODO: RJ-45 nodes zasad ne podrzavamo
@@ -641,7 +641,7 @@ proc deployCfg {} {
        }
     }
 
-## TODO: kreiranje linkova i podesavanje l2 parametara
+## TODO: Podesavanje l2 parametara
 
     for { set pending_links $link_list } { $pending_links != "" } {} {
        set link [lindex $pending_links 0]
@@ -691,25 +691,56 @@ proc deployCfg {} {
 #   puts ">>>>>>>>>>kreiranje linkova"
     
 
+    # OpenVZ kreiranje linkova
     
-    if { [[typemodel $lnode1].layer] == "LINK" || [[typemodel $lnode2].layer] == "LINK" } {
-        #slucaj kad se spaja na L2 uredjaj (hub)
+    #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 $lnode1
+            } else {
+                set port_if $ngpeer1
+                set bridge $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 { [[typemodel $lnode1].layer] == "LINK" } {
-            set port_if $ngpeer2
-            set bridge $lnode1
+        if { $result == "invalid command name \"$bridge\""} {
+            puts "\nBridge $bridge (L2 hub emulation) already exists."
         } else {
-            set port_if $ngpeer1
-            set bridge $lnode2
-        }    
-
-        puts "\nCreating bridge $bridge (L2 hub emulation)"    
-
-        nexec brctl addbr $bridge
+            puts "\nCreating bridge $bridge (L2 hub emulation)"    
+            nexec brctl addbr $bridge                
+        }
+        
+        #dodaje interface
         nexec brctl addif $bridge $port_if
-        nexec ifconfig $bridge up
+        #dize bridge, interesantno ne baca error ako je bridge vec dignut
+        nexec ifconfig $bridge up        
 
-        puts "  L2 device $bridge is up, connected interface port_if"
+        puts "  L2 device $bridge is up, added interface $port_if"
 
     } else {
         # Slucaj kad se radi link izmedju dva L3 uredjaja (standardno)
@@ -723,7 +754,7 @@ proc deployCfg {} {
         nexec brctl addif $bridge $host_if_a
         nexec brctl addif $bridge $host_if_b
         nexec ifconfig $bridge up
-        puts "  Bridge $bridge is up, connected interfaces $host_if_a and $host_if_b"
+        puts "  Bridge $bridge is up, added interface $host_if_a and $host_if_b"
     }
 
 # FreeBSD-specific
index b247469cebf746aa1d35006005b1c628ef1bcd3b..9401913c3a727febb78d55bac150390104e0ba31 100755 (executable)
@@ -99,11 +99,9 @@ proc $MODULE.cfggen { node } {
     
     foreach statrte [getStatIPv4routes $node] {
            lappend cfg "route -q add -inet $statrte"
-           puts "  >>>>>>>>>>>>>>>> dodana IPV4 ruta $statrte"
     }
     foreach statrte [getStatIPv6routes $node] {
            lappend cfg "route -q add -inet6 $statrte"
-           puts "  >>>>>>>>>>>>>>>> dodana IPV6 ruta $statrte"
     }
 
     # Temporary fix to enable multiple inetd and rpcbind processes 
@@ -169,15 +167,12 @@ proc $MODULE.shellcmd { node } {
     # duljina je uvijek 3
 
     if { [llength $ret] == 3 } {
-    puts " >>>>>> nasao sam [lindex $ret 1]"
        return [lindex $ret 1]
     } else {
        set ret [nexec whereis -b tcsh]
        if { [llength $ret] == 2 } {
-           puts " >>>>>> nasao sam [lindex $ret 1]"
            return [lindex $ret 1]
        } else {
-       puts " >>>>>> nasao sam /bin/sh"
            return "/bin/sh"
        }
     }
index 04eb5960971289a68908742270d483b0d6b2f25f..9bde62b4c5fcad3e2f7dcfe86ec41af1dfccfb8c 100755 (executable)
@@ -74,7 +74,10 @@ proc $MODULE.layer {} {
 
 proc $MODULE.instantiate { eid node } {
     upvar 0 ::cf::[set ::curcfg]::ngnodemap ngnodemap
-    puts "\nhub.INSTANTIATE"
+
+#    puts "\nhub.INSTANTIATE"
+#    puts "  Ne radi nista. Sve se rjesava prilikom dodavanja pojedinih linkova.
+
     #puts "  catch {exec vimage $eid ngctl mkpeer hub anchor anchor | tail -1} resp"
     #puts "  catch {exec vimage $eid ngctl l | fgrep \"  Name: <unnamed>\" | cut -c51-58 | xargs echo } nglist"
     #set id [lindex $nglist 0]
@@ -82,7 +85,7 @@ proc $MODULE.instantiate { eid node } {
     #puts "  >>> id = $id"
     #puts "  catch {exec vimage $eid ngctl name \[$id\]: $node}"
     set ngnodemap($eid\.$node) $node
-    puts "  >>>$eid\.$node $node"
+    
 }
 
 #****f* hub.tcl/hub.start
index a392200410e898b0c74fec4e55a90911c24ca24c..53ac29b292a22fe7e1db2b5cfe30590b988a2b62 100644 (file)
--- a/test1.imn
+++ b/test1.imn
@@ -12,7 +12,7 @@ node n0 {
     canvas c0
     iconcoords {168.0 192.0}
     labelcoords {168.0 224.0}
-    interface-peer {eth0 n1}
+    interface-peer {eth0 n2}
 }
 
 node n1 {
@@ -29,11 +29,29 @@ node n1 {
     canvas c0
     iconcoords {504.0 192.0}
     labelcoords {504.0 224.0}
-    interface-peer {eth0 n0}
+    interface-peer {eth0 n2}
+}
+
+node n2 {
+    type hub
+    network-config {
+       hostname n2
+       !
+    }
+    canvas c0
+    iconcoords {336.0 288.0}
+    labelcoords {336.0 312.0}
+    interface-peer {e0 n0}
+    interface-peer {e1 n1}
 }
 
 link l0 {
-    nodes {n0 n1}
+    nodes {n0 n2}
+    bandwidth 0
+}
+
+link l1 {
+    nodes {n2 n1}
     bandwidth 0
 }