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
}
}
-## 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]
# 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)
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
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
# 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"
}
}
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]
#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