#****
proc createIfc { eid type hook } {
puts "usli u createIfc $eid $type $hook"
-
-# FreeBSD-specific:
-# puts " izvrsili bismo exec printf mkpeer $type $hook $hook \n show .$hook | vimage $eid ngctl -f -"
-# puts " izvadili bi drugi element iz toga"
-# return fake_if_id
-# catch { exec printf "mkpeer $type $hook $hook \n show .$hook" | vimage $eid ngctl -f - } nglist
-# return [lindex $nglist 1]
}
# puts " nexec vimage $node_id hostname [getNodeName $node] "
nexec vzctl set $node_id --hostname [getNodeName $node] --save
-# feature FreeBSD-a only (expandanje @ u symlinkovima kao node id)
-# puts " nexec vimage $node_id sysctl vfs.morphing_symlinks=1 "
# TODO: OpenVZ CPU tuning
# set cpuconf [getNodeCPUConf $node]
# puts " nexec vimage -m $node_id cpuweight $cpuweight "
# }
-# FreeBSD-only
-# puts "
-# nexec vimage $node_id sysctl net.inet.icmp.bmcastecho=1
-# nexec vimage $node_id sysctl net.inet.icmp.icmplim=0
-# nexec vimage $node_id ifconfig lo0 inet localhost
-# nexec vimage $node_id route add 224.0.0.0/4 localhost
-# "
}
foreach ifc [ifcList $node] {
switch -exact [string range $ifc 0 2] {
eth {
-# FreeBSD-specific:
-# puts " nexec vimage $eid vimage -i $node $ifid $ifc "
-# na Linux/OpenVZ ne moramo napraviti nista slicno createIfc/vimage
-# nego sami postavljamo ifid
- set ifid "e${node_id}_${ifc}"
+ #OpenVZ - jednostavno postavimo ifid
+ set ifid "e${node_id}_${ifc}"
set peer [peerByIfc $node $ifc]
}
}
-# na FreeBSD-u vimagei imaju shared filesystem
-# set node_dir "/tmp/$eid/$node"
-# puts " would recreate node_dir (/tmp/$eid/$node)"
-# nexec rm -fr $node_dir
-# nexec mkdir $node_dir
-# nexec chmod 1777 $node_dir
-
-# na Linuxu VEovi imaju svaki svoj dir
+ # na Linuxu VEovi imaju svaki svoj dir
set node_dir $ve_dir
# TODO: konfiguriranje MTU-a zasad ne podrzavamo (kao ni ostale L2 parametre)
set ipsecCfg ""
if { [getIpsecEnabled $node] == true } {
# TODO: ipsec zasad ne podrzavamo
- puts " would do the ipsecenabled stuff"
+ puts " Should do the ipsecenabled stuff... but does nothing."
#
# set setkeycfg [ipsecCfggen $node]
# set setkeyFileId [open $node_dir/setkey.conf w+]
}
}
} else {
-# quagga i drugi mogu imati svoje custom skripte za bootanje koja se prepoznaje po
-# bootcmdu (interpreteru) koji nije obican shell
+ # quagga i drugi mogu imati svoje custom skripte za bootanje koja se prepoznaje po
+ # bootcmdu (interpreteru) koji nije obican shell
puts " placing $bootcmd in $node_dir"
set bootfile [file tail $bootcmd]
file copy $bootcmd "$node_dir/$bootfile"
#****
proc l3node.shutdown { eid node } {
upvar 0 ::cf::[set ::curcfg]::[set node]::node_id node_id
-
-# puts "nexec vimage $node_id kill -9 -1 2> /dev/null"
-# foreach ifc [ifcList $node] {
-# foreach ipv4 [getIfcIPv4addr $node $ifc] {
-# puts "nexec vimage $node_id ifconfig $ifc $ipv4 -alias"
-# }
-# foreach ipv6 [getIfcIPv6addr $node $ifc] {
-# puts "nexec vimage $node_id ifconfig $ifc inet6 $ipv6 -alias"
-# }
-# }
-
+
puts " Stopping VE $node ($node_id)"
statline "Stopping VE $node ($node_id)"
nexec vzctl stop $node_id
# }
# }
-# puts "nexec vimage -d $node_id"
- puts " Destroying VE $node ($node_id)"
- statline "Destroying VE $node ($node_id)"
+ set msg "Destroying VE $node ($node_id)"
+ puts "\n$msg"
+ statline $msg
nexec vzctl destroy $node_id
-
-# FreeBSD-only:
-# set node_dir "/tmp/$eid/$node"
-# nexec rm -fr $node_dir
}
# network peeringe izmedju nodeova
# na Linuxu to necemo napraviti jer ne mozemo dirati network linkove
# jednog VEa iz drugog, pa ce to sve biti na parent hostu
-# puts " nexec vimage -c $eid "
-# puts " nexec rm -fr /tmp/$eid "
-# puts " nexec mkdir /tmp/$eid "
-
-# puts { nexec kldload ng_ether }
-# puts { nexec kldload ng_iface }
-# puts { nexec kldload ng_eiface }
-# puts { nexec kldload ng_cisco }
-# puts { nexec kldload ng_pipe }
-# puts { nexec kldload ng_hub }
-# puts { nexec kldload ng_bridge }
-# puts { nexec kldload ng_socket }
foreach node $node_list {
namespace eval ::cf::[set ::curcfg]::[set node] {}
set ngpeer2 $ngnodemap($peer2)
# FreeBSD-specific:
-# set nghook1 \
-# [lindex [[typemodel $lnode1].nghook $eid $lnode1 $ifname1] 1]
-# set nghook2 \
-# [lindex [[typemodel $lnode2].nghook $eid $lnode2 $ifname2] 1]
-# 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
#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"
if { $l == 1 || [string length $bridge_line] == 0 } {
continue
}
- # puts "$l: $bridge_line"
set nasli [string range $bridge_line 0 [expr [string length $bridge]-1] ]
if { $bridge == $nasli } {
set bridgefound true
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
-
+ #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
+ #dodaje interface
nexec brctl addif $bridge $port_if
- #dize bridge, interesantno ne baca error ako je bridge vec dignut
+ #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)
+ # 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"
}
}
-
- statline "Network topology instantiated in [expr [clock seconds] - $t_start] seconds ([llength $node_list] nodes and [llength $link_list] links)."
+ set msg "Network topology instantiated in [expr [clock seconds] - $t_start] seconds ([llength $node_list] nodes and [llength $link_list] links)."
+ statline $msg
+ puts "\n$msg"
puts "\n= deployCfg end ="
}
set t_start [clock seconds]
-## FreeBSD-only bug workaround:
-# # Wait for TIME_WAIT timeout in all vimages
-
-# FreeBSD vimage only
-# # Kill all processes in all vimages
-# foreach vimage $vimages {
-# set stattxt "Terminating processes in vimage $vimage"
-# statline $stattxt
-# puts "nexec vimage $eid.$vimage kill -9 -1 2> /dev/null"
-# }
-
-
-# FreeBSD netgraph only
-# # Detach / destroy / reassign interfaces pipe, eiface, iface, bridge
-# puts "running vimage $eid ngctl l | tail -n +3"
-# set ngnodes [split [nexec vimage $eid ngctl l | tail -n +3] "
-#"]
-# foreach ngline $ngnodes {
-# set node [lindex [eval list $ngline] 1]
-# statline "Shutting down netgraph node $node"
-# puts "nexec vimage $eid ngctl msg $node: shutdown"
-# }
-
puts "\nBridge cleanup in main host"
upvar 0 ::cf::[set ::curcfg]::bridges bridges
if { [ info exists bridges ] && [ llength $bridges ] } {
nexec brctl delbr $bridge
}
}
- puts " Done.\n"
-
+ puts " Done.\n"
- # Shut down all vimages
-# FreeBSD metoda:
-# foreach vimage $vimages {
-# set stattxt "Shutting down vimage $vimage"
-# statline $stattxt
-# puts "nexec vimage $eid.$vimage kill -9 -1 2> /dev/null"
-# while { [catch {nexec vimage -d $eid.$vimage}] } {
-# set stattxt $stattxt.
-# statline $stattxt
-# puts "nexec vimage $eid.$vimage kill -9 -1 2> /dev/null"
-# }
-# }
-# puts " nexec vimage -d $eid "
-
# OpenVZ - samo nam treba popis nodeova za pogasiti
upvar 0 ::cf::[set ::curcfg]::node_list node_list
} else {
# L2 uredjaji kao hub i switch se u OpenVZ varijanti emuliraju
# bridge suceljem a ne VEom iako su u $node_list, stoga nema se sto gasiti
-
- # puts " Node $node is a L2 device emulated with a bridge. Stopping pending bridge cleanup."
}
}
puts " Done.\n"
# puts " nexec rm -f /usr/local/etc/quagga/Quagga.conf "
-# FreeBSD-only ciscenje eid tmp dira
-# nexec rm -fr "/tmp/$eid"
-
puts "Destroying VE private enviroments..."
foreach node $node_list {
if { [[typemodel $node].layer] != "LINK" } {
} else {
# L2 uredjaji kao hub i switch se u OpenVZ varijanti emuliraju
# bridge suceljem a ne VEom iako su u $node_list, stoga nema se sto gasiti
-
- #puts " Node $node is a L2 device emulated with a bridge. Stopping pending bridge cleanup."
}
}
puts " Done.\n"
- statline "Cleanup completed in [expr [clock seconds] - $t_start] seconds."
+ set msg "Cleanup completed in [expr [clock seconds] - $t_start] seconds."
+ statline $msg
+ puts " $msg"
puts "\n= vimageCleanup $eid end ="
}
#****
proc $MODULE.cfggen { node } {
- upvar 0 ::cf::[set ::curcfg]::$node $node
+ upvar 0 ::cf::[set ::curcfg]::$node $node
set cfg {}
foreach ifc [ifcList $node] {
- lappend cfg "interface $ifc"
- set addr [getIfcIPv4addr $node $ifc]
- if { $addr != "" } {
- lappend cfg " ip address $addr"
- }
-# TODO: IPv6 Quagga support
-# set addr [getIfcIPv6addr $node $ifc]
-# if { $addr != "" } {
-# lappend cfg " ipv6 address $addr"
-# }
- if { [getIfcOperState $node $ifc] == "down" } {
- lappend cfg " shutdown"
- }
- lappend cfg "!"
- }
-
- foreach proto { rip ripng ospf ospf6 bgp } {
- set protocfg [netconfFetchSection $node "router $proto"]
- if { $protocfg != "" } {
- lappend cfg "router $proto"
- foreach line $protocfg {
- lappend cfg "$line"
+ lappend cfg "interface $ifc"
+ set addr [getIfcIPv4addr $node $ifc]
+ if { $addr != "" } {
+ lappend cfg " ip address $addr"
}
- lappend cfg "!"
- }
- }
-
- foreach statrte [getStatIPv4routes $node] {
- lappend cfg "ip route $statrte"
+ # TODO: IPv6 Quagga support
+ # set addr [getIfcIPv6addr $node $ifc]
+ # if { $addr != "" } {
+ # lappend cfg " ipv6 address $addr"
+ # }
+ if { [getIfcOperState $node $ifc] == "down" } {
+ lappend cfg " shutdown"
+ }
+ lappend cfg "!"
+ }
+
+ foreach proto { rip ripng ospf ospf6 bgp } {
+ set protocfg [netconfFetchSection $node "router $proto"]
+ if { $protocfg != "" } {
+ lappend cfg "router $proto"
+ foreach line $protocfg {
+ lappend cfg "$line"
+ }
+ lappend cfg "!"
+ }
+ }
+
+ foreach statrte [getStatIPv4routes $node] {
+ lappend cfg "ip route $statrte"
}
-# TODO: IPv6 Quagga support
-# foreach statrte [getStatIPv6routes $node] {
-# lappend cfg "ipv6 route $statrte"
-# }
+ # TODO: IPv6 Quagga support
+ # foreach statrte [getStatIPv6routes $node] {
+ # lappend cfg "ipv6 route $statrte"
+ # }
return $cfg
}
#kao destination preda "/boot.conf" sto kasnije ispadne VE root
nexec ln -s /boot.conf $ve_dir/etc/quagga/Quagga.conf
-## Probably useless
-# foreach file { bgpd ospfd ospf6d ripd ripngd vtysh zebra } {
-# puts "maybe nexec cp /dev/null $ve_dir/etc/quagga/$file.conf"
-# }
+ ## Probably useless
+ # foreach file bgpd ospfd ospf6d ripd ripngd vtysh zebra
+ # puts "maybe nexec cp /dev/null $ve_dir/etc/quagga/$file.conf"
+ #
}
#****
proc $MODULE.start { eid node } {
-# OpenVZ catch: prije startanja bootcmda moramo upaliti capabilities
-# jer bez toga quagga uopće ne radi
+ # OpenVZ catch: prije startanja bootcmda moramo upaliti capabilities
+ # jer bez toga quagga uopće ne radi
upvar 0 ::cf::[set ::curcfg]::[set node]::node_id node_id
-## Pokusali sa ovim, ali nije pomoglo
-# foreach capability { chown dac_override dac_read_search fowner
-# fsetid kill setgid setuid linux_immutable net_bind_service net_broadcast
-# net_admin net_raw ipc_lock ipc_owner sys_module sys_rawio sys_chroot sys_ptrace
-# sys_pacct sys_admin sys_boot sys_nice sys_resource sys_time sys_tty_config mknod
-# lease setveid ve_admin } {
+ ## Pokusali sa ovim, ali nije pomoglo
+ # foreach capability { chown dac_override dac_read_search fowner
+ # fsetid kill setgid setuid linux_immutable net_bind_service net_broadcast
+ # net_admin net_raw ipc_lock ipc_owner sys_module sys_rawio sys_chroot sys_ptrace
+ # sys_pacct sys_admin sys_boot sys_nice sys_resource sys_time sys_tty_config mknod
+ # lease setveid ve_admin }
foreach capability {net_admin net_raw sys_admin} {
nexec vzctl set $node_id --capability $capability:on --save
upvar 0 ::cf::[set ::curcfg]::[set node]::node_id node_id
nexec vzctl exec $node_id sysctl -w net/ipv4/ip_forward=1
-# TODO: IPv6 Quagga support
-# nexec vzctl exec $node_id sysctl -w net/ipv6/conf/all/forwarding=1
+ # TODO: IPv6 Quagga support
+ # nexec vzctl exec $node_id sysctl -w net/ipv6/conf/all/forwarding=1
puts " $eid $node ima aktivan IPv4 forwarding"