initial import (Boeing r1752, NRL r878)

This commit is contained in:
ahrenholz 2013-08-29 14:21:13 +00:00
commit f8f46d28be
394 changed files with 99738 additions and 0 deletions

70
gui/Makefile.am Executable file
View file

@ -0,0 +1,70 @@
# CORE
# (c)2010-2013 the Boeing Company.
# See the LICENSE file included in this distribution.
#
# author: Jeff Ahrenholz <jeffrey.m.ahrenholz@boeing.com>
#
# Makefile for installing the CORE GUI. Since it is a Tcl/Tk script, we do not
# build anything here.
#
SUBDIRS = icons
TCL_FILES = annotations.tcl api.tcl canvas.tcl cfgparse.tcl \
core.tcl debug.tcl editor.tcl exec.tcl \
filemgmt.tcl gpgui.tcl \
graph_partitioning.tcl help.tcl \
initgui.tcl ipv4.tcl ipv6.tcl \
linkcfg.tcl mobility.tcl nodecfg.tcl \
nodes.tcl services.tcl ns2imunes.tcl plugins.tcl \
tooltips.tcl topogen.tcl traffic.tcl util.tcl \
version.tcl widget.tcl wlan.tcl wlanscript.tcl \
exceptions.tcl
ADDONS_FILES = addons/ipsecservice.tcl
CONFIG_FILES = configs/sample1.imn configs/sample1.scen \
configs/sample1-bg.gif configs/sample2-ssh.imn \
configs/sample3-bgp.imn configs/sample4-nrlsmf.imn \
configs/sample4.scen configs/sample4-bg.jpg \
configs/sample5-mgen.imn configs/sample6-emane-rfpipe.imn \
configs/sample7-emane-ieee80211abg.imn \
configs/sample8-ipsec-service.imn \
configs/sample9-vpn.imn \
configs/sample10-kitchen-sink.imn
OTHER_FILES = core-bsd-cleanup.sh
#
# CORE GUI script (/usr/local/bin/core-gui)
#
dist_bin_SCRIPTS = core-gui
#
# Tcl/Tk scripts (/usr/local/lib/core)
#
coredir = $(CORE_LIB_DIR)
dist_core_DATA = $(TCL_FILES)
dist_core_SCRIPTS = $(OTHER_FILES)
#
# Addon files
#
coreaddonsdir = $(coredir)/addons
dist_coreaddons_DATA = $(ADDONS_FILES)
#
# Sample configs (/usr/local/share/core/examples/configs)
#
coreconfigsdir = $(datadir)/core/examples/configs
dist_coreconfigs_DATA = $(CONFIG_FILES)
dist-hook:
rm -rf $(distdir)/addons/.svn
# extra cruft to remove
DISTCLEANFILES = Makefile.in
# files to include in source tarball not included elsewhere
EXTRA_DIST = addons

334
gui/addons/ipsecservice.tcl Normal file
View file

@ -0,0 +1,334 @@
#
# Copyright 2012 the Boeing Company.
# See the LICENSE file included in this distribution.
#
# author: Jeff Ahrenholz <jeffrey.m.ahrenholz@boeing.com>
#
# This is a separate "addons" file because it is closely tied to Python
# service definition for the IPsec service.
#
#
# Helper dialog for configuring the IPsec service
#
proc popupServiceConfig_IPsec { parent w node service btn } {
global plugin_img_add plugin_img_del plugin_img_edit
set f $w.note.ipsec
ttk::frame $f
set h "This IPsec service helper will assist with building an ipsec.sh file"
set h "$h (located on the Files tab).\nThe IPsec service builds ESP"
set h "$h tunnels between the specified peers using the racoon IKEv2"
set h "$h\nkeying daemon. You need to provide keys and the addresses of"
set h "$h peers, along with the\nsubnets to tunnel."
ttk::label $f.help -text $h
pack $f.help -side top -anchor w -padx 4 -pady 4
$w.note add $f -text "IPsec" -underline 0
global g_ipsec_key_dir g_ipsec_key_name
set g_ipsec_key_dir "/etc/core/keys"
set g_ipsec_key_name "ipsec1"
ttk::labelframe $f.keys -text "Keys"
ttk::frame $f.keys.dir
ttk::label $f.keys.dir.lab -text "Key directory:"
ttk::entry $f.keys.dir.ent -width 40 -textvariable g_ipsec_key_dir
ttk::button $f.keys.dir.btn -width 5 -text "..." -command {
set f .popupServicesCustomize.note.ipsec
set d [$f.keys.dir.ent get]
set d [tk_chooseDirectory -initialdir $d -title "Key directory"]
if { $d != "" } {
$f.keys.dir.ent delete 0 end
$f.keys.dir.ent insert 0 $d
}
}
pack $f.keys.dir.lab $f.keys.dir.ent $f.keys.dir.btn \
-side left -padx 4 -pady 4
pack $f.keys.dir -side top -anchor w
ttk::frame $f.keys.name
ttk::label $f.keys.name.lab -text "Key base name:"
ttk::entry $f.keys.name.ent -width 10 -textvariable g_ipsec_key_name
pack $f.keys.name.lab $f.keys.name.ent -side left -padx 4 -pady 4
pack $f.keys.name -side top -anchor w
set h "The (name).pem x509 certificate and (name).key RSA private key need"
set h "$h to exist in the\nspecified directory. These can be generated"
set h "$h using the openssl tool. Also, a ca-cert.pem\nfile should exist"
set h "$h in the key directory for the CA that issued the certs."
ttk::label $f.keys.help -text $h
pack $f.keys.help -side top -anchor w -padx 4 -pady 4
pack $f.keys -side top -pady 4 -pady 4 -expand true -fill x
ttk::labelframe $f.t -text "IPsec Tunnel Endpoints"
set h "(1) Define tunnel endpoints (select peer node using the button"
set h "$h, then select address from the list)"
ttk::label $f.t.lab1 -text $h
pack $f.t.lab1 -side top -anchor w -padx 4 -pady 4
ttk::frame $f.t.ep
ttk::label $f.t.ep.lab1 -text "Local:"
ttk::combobox $f.t.ep.combo1 -width 12
pack $f.t.ep.lab1 $f.t.ep.combo1 -side left -padx 4 -pady 4
populateComboWithIPs $f.t.ep.combo1 $node
global g_twoNodeSelect g_twoNodeSelectCallback
set g_twoNodeSelect ""
set g_twoNodeSelectCallback selectTwoNodeIPsecCallback
set h "Choose a node by clicking it on the canvas"
set h "$h or\nby selecting it from the list below."
ttk::label $f.t.ep.lab2 -text "Peer node:"
ttk::checkbutton $f.t.ep.node -text " (none) " -variable g_twoNodeSelect \
-onvalue "$f.t.ep.node" -style Toolbutton \
-command "popupSelectNodes {$h} {} selectNodesIPsecCallback"
ttk::label $f.t.ep.lab3 -text "Peer:"
ttk::combobox $f.t.ep.combo2 -width 12
ttk::button $f.t.ep.add -text "Add Endpoint" -image $plugin_img_add \
-compound left -command "ipsecTreeHelper $f ep"
pack $f.t.ep.lab2 $f.t.ep.node $f.t.ep.lab3 $f.t.ep.combo2 \
$f.t.ep.add -side left -padx 4 -pady 4
pack $f.t.ep -side top -anchor w
set h "(2) Select endpoints below and add the subnets to be encrypted"
ttk::label $f.t.lab2 -text $h
pack $f.t.lab2 -side top -anchor w -padx 4 -pady 4
ttk::frame $f.t.sub
ttk::label $f.t.sub.lab1 -text "Local subnet:"
ttk::combobox $f.t.sub.combo1 -width 12
ttk::label $f.t.sub.lab2 -text "Remote subnet:"
ttk::combobox $f.t.sub.combo2 -width 12
ttk::button $f.t.sub.add -text "Add Subnet" -image $plugin_img_add \
-compound left -command "ipsecTreeHelper $f sub"
pack $f.t.sub.lab1 $f.t.sub.combo1 $f.t.sub.lab2 $f.t.sub.combo2 \
$f.t.sub.add -side left -padx 5 -pady 4
pack $f.t.sub -side top -anchor w
global node_list
set net_list [ipv4SubnetList $node_list]
$f.t.sub.combo1 configure -values $net_list
$f.t.sub.combo2 configure -values $net_list
ttk::treeview $f.t.tree -height 5 -selectmode browse -show tree
pack $f.t.tree -side top -padx 4 -pady 4 -fill both
pack $f.t -side top -expand true -fill both
ttk::frame $f.bottom
ttk::button $f.bottom.del -image $plugin_img_del \
-command "ipsecTreeHelper $f del"
ttk::button $f.bottom.gen -text "Generate ipsec.sh" \
-image $plugin_img_edit -compound left -command "generateIPsecScript $w"
pack $f.bottom.del $f.bottom.gen -side left -padx 4 -pady 4
pack $f.bottom -side top
}
#
# Callback invoked when receiving configuration values
# from a Configuration Message; this service helper depends on the ipsec.sh
# file, not the other configuration values.
#
#proc popupServiceConfig_IPsec_vals { node values services w } {
#}
#
# Callback invoked when receiving service file data from a File Message
proc popupServiceConfig_IPsec_file { node name data w } {
if { $name == "ipsec.sh" } {
readIPsecScript $w
}
}
# helper to insert all of a node's IP addresses into a combo
proc populateComboWithIPs { combo node } {
set ip_list [ipv4List $node 0]
$combo configure -values $ip_list
$combo delete 0 end
$combo insert 0 [lindex $ip_list 0]
}
# called from editor.tcl:button1 when user clicks on a node
# search for IP address and populate
proc selectTwoNodeIPsecCallback {} {
set w .popupServicesCustomize
set f $w.note.ipsec
if { ![winfo exists $w] } { return }; # user has closed window
catch {destroy .nodeselect}
set node [string trim [$f.t.ep.node cget -text]]
if { [set node] == "(none)" } { set node "" }
# populate peer interface combo with list of IPs
populateComboWithIPs $f.t.ep.combo2 $node
}
# called from popupSelectNodes dialog when a node selection has been made
proc selectNodesIPsecCallback { nodes } {
global g_twoNodeSelect
set w .popupServicesCustomize
set f $w.note.ipsec
set g_twoNodeSelect ""
set node [lindex $nodes 0]
if { $node == "" } {
$f.t.ep.node configure -text "(none)"
return
}
$f.t.ep.node configure -text " $node "
# populate peer interface combo with list of IPs
populateComboWithIPs $f.t.ep.combo2 $node
}
# helper to manipulate tree; cmd is "del", "ep" or "sub"
proc ipsecTreeHelper { f cmd } {
if { $cmd == "del" } {
set sel [$f.t.tree selection]
$f.t.tree delete $sel
return
}
# add endpoint (ep) or subnet (sub)
set l [string trim [$f.t.$cmd.combo1 get]]
set p [string trim [$f.t.$cmd.combo2 get]]
if { $l == "" || $p == "" } {
if { $cmd == "ep" } {
set h "tunnel interface addresses"
} else {
set h "subnet addresses"
}
tk_messageBox -type ok -icon warning -message \
"You need to select local and peer $h."
return
}
if { $cmd == "ep" } {
set item [$f.t.tree insert {} end -text "$l <--> $p" -open true]
$f.t.tree selection set $item
} elseif { $cmd == "sub" } {
set parent [$f.t.tree selection]
if { $parent == "" } {
tk_messageBox -type ok -icon warning -message \
"You need to first select endpoints, then configure their subnets."
return
}
if { [$f.t.tree parent $parent] != {} } {
set parent [$f.t.tree parent $parent]
}
$f.t.tree insert $parent end -text "$l <===> $p"
}
}
# update an ipsec.sh file that was generated by the IPsec service
proc generateIPsecScript { w } {
#puts "generateIPsecScript $w..."
set cfg [$w.note.files.txt get 0.0 end-1c]
set newcfg ""
#
# Gather data for a new config
#
set f $w.note.ipsec
set keydir [$f.keys.dir.ent get]
set keyname [$f.keys.name.ent get]
set tunnelhosts ""
set subnet_list ""
set ti 0
set th_items [$f.t.tree children {}]
foreach th $th_items {
set ep [$f.t.tree item $th -text]
set i [string first " " $ep]
# replace " <--> " with "AND"
set ep [string replace $ep $i $i+5 "AND"]
# build a list e.g.:
# tunnelhosts="172.16.0.1AND172.16.0.2 172.16.0.1AND172.16.2.1"
lappend tunnelhosts $ep
set subnets ""
foreach subnet_item [$f.t.tree children $th] {
set sn [$f.t.tree item $subnet_item -text]
set i [string first " " $sn]
# replace " <===> " with "AND"
set sn [string replace $sn $i $i+6 "AND"]
lappend subnets $sn
}
incr ti
set subnetstxt [join $subnets " "]
# build a list e.g.:
# T2="172.16.4.0/24AND172.16.5.0/24 172.16.4.0/24AND172.16.6.0/24"
set subnets "T$ti=\"$subnetstxt\""
lappend subnet_list $subnets
}
#
# Perform replacements in existing ipsec.sh file.
#
set have_subnets 0
foreach line [split $cfg "\n"] {
if { [string range $line 0 6] == "keydir=" } {
set line "keydir=$keydir"
} elseif { [string range $line 0 8] == "certname=" } {
set line "certname=$keyname"
} elseif { [string range $line 0 11] == "tunnelhosts=" } {
set tunnelhosts [join $tunnelhosts " "]
set line "tunnelhosts=\"$tunnelhosts\""
} elseif { [string range $line 0 0] == "T" && \
[string is digit [string range $line 1 1]] } {
if { $have_subnets } {
continue ;# skip this line
} else {
set line [join $subnet_list "\n"]
set have_subnets 1
}
}
lappend newcfg $line
}
$w.note.files.txt delete 0.0 end
$w.note.files.txt insert 0.0 [join $newcfg "\n"]
$w.note select $w.note.files
$w.btn.apply configure -state normal
}
proc readIPsecScript { w } {
set cfg [$w.note.files.txt get 0.0 end-1c]
set f $w.note.ipsec
$f.keys.dir.ent delete 0 end
$f.keys.name.ent delete 0 end
$f.t.tree delete [$f.t.tree children {}]
set ti 1
foreach line [split $cfg "\n"] {
if { [string range $line 0 6] == "keydir=" } {
$f.keys.dir.ent insert 0 [string range $line 7 end]
} elseif { [string range $line 0 8] == "certname=" } {
$f.keys.name.ent insert 0 [string range $line 9 end]
} elseif { [string range $line 0 11] == "tunnelhosts=" } {
set tunnelhosts [string range $line 13 end-1]
set ti 0
foreach ep [split $tunnelhosts " "] {
incr ti
set i [string first "AND" $ep]
set ep [string replace $ep $i $i+2 " <--> "]
$f.t.tree insert {} end -id "T$ti" -text "$ep" -open true
}
} elseif { [string range $line 0 0] == "T" && \
[string is digit [string range $line 1 1]] } {
set i [string first "=" $line]
set ti [string range $line 0 $i-1]
set subnets [split [string range $line $i+2 end-1] " "]
foreach sn $subnets {
set i [string first "AND" $sn]
set sn [string replace $sn $i $i+2 " <===> "]
if { [catch {$f.t.tree insert $ti end -text "$sn"} e] } {
puts "IPsec service ignoring line '$ti='"
}
}
}
}
}

842
gui/annotations.tcl Normal file
View file

@ -0,0 +1,842 @@
#
# Copyright 2007-2013 the Boeing Company.
# See the LICENSE file included in this distribution.
#
#
# Copyright 2007-2008 University of Zagreb, Croatia.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
#****h* imunes/annotations.tcl
# NAME
# annotations.tcl -- oval, rectangle, text, background, ...
# FUNCTION
# This module is used for configuration/image annotations, such as oval,
# rectangle, text, background or some other.
#****
#****f* annotations.tcl/annotationConfig
# NAME
# annotationConfig --
# SYNOPSIS
# annotationConfig $canvas $target
# FUNCTION
# . . .
# INPUTS
# * canvas --
# * target -- oval or rectangle object
#****
proc annotationConfig { c target } {
switch -exact -- [nodeType $target] {
oval {
popupAnnotationDialog $c $target "true"
}
rectangle {
popupAnnotationDialog $c $target "true"
}
text {
popupAnnotationDialog $c $target "true"
}
default {
puts "Unknown type [nodeType $target] for target $target"
}
}
redrawAll
}
#****f* annotations.tcl/popupOvalDialog
# NAME
# popupOvalDialog -- creates a new oval or modifies existing oval
# SYNOPSIS
# popupOvalDialog $canvas $modify $color $label $lcolor
# FUNCTION
# Called from:
# - editor.tcl/button1-release when new oval is drawn
# - annotationConfig which is called from popupConfigDialog bound to
# Double-1 on various objects
# - configureOval called from button3annotation procedure which creates
# a menu for configuration and deletion (bound to 3 on oval,
# rectangle and text)
# INPUTS
# * canvas --
# * modify -- create new oval "newoval" if modify=false or
# modify an existing oval "newoval" if modify=true
# * color -- oval color
# * label -- label text
# * lcolor -- label (text) color
#****
#****f* annotations.tcl/destroyNewoval
# NAME
# destroyNewoval -- helper for popupOvalDialog and popupOvalApply
# SYNOPSIS
# destroyNewoval $canvas
# FUNCTION
# . . .
# INPUTS
# * canvas --
#****
proc destroyNewoval { c } {
global newoval
$c delete -withtags newoval
set newoval ""
}
# oval/rectangle/text right-click menu
proc button3annotation { type c x y } {
if { $type == "oval" } {
set procname "Oval"
set item [lindex [$c gettags {oval && current}] 1]
} elseif { $type == "rectangle" } {
set procname "Rectangle"
set item [lindex [$c gettags {rectangle && current}] 1]
} elseif { $type == "label" } {
set procname "Label"
set item [lindex [$c gettags {label && current}] 1]
} elseif { $type == "text" } {
set procname "Text"
set item [lindex [$c gettags {text && current}] 1]
} elseif { $type == "marker" } {
# erase markings
$c delete -withtags {marker && current}
return
} else {
# ???
return
}
if { $item == "" } {
return
}
set menutext "$type $item"
.button3menu delete 0 end
.button3menu add command -label "Configure $menutext" \
-command "annotationConfig $c $item"
.button3menu add command -label "Delete $menutext" \
-command "deleteAnnotation $c $type $item"
set x [winfo pointerx .]
set y [winfo pointery .]
tk_popup .button3menu $x $y
}
proc deleteAnnotation { c type target } {
global changed annotation_list
$c delete -withtags "$type && $target"
$c delete -withtags "new$type"
set i [lsearch -exact $annotation_list $target]
set annotation_list [lreplace $annotation_list $i $i]
set changed 1
updateUndoLog
}
proc drawOval {oval} {
global $oval defOvalColor zoom curcanvas
global defTextFontFamily defTextFontSize
set coords [getNodeCoords $oval]
if { [llength $coords] < 4 } {
puts "Bad coordinates for oval $oval"
return
}
set x1 [expr {[lindex $coords 0] * $zoom}]
set y1 [expr {[lindex $coords 1] * $zoom}]
set x2 [expr {[lindex $coords 2] * $zoom}]
set y2 [expr {[lindex $coords 3] * $zoom}]
set color [lindex [lsearch -inline [set $oval] "color *"] 1]
set label [lindex [lsearch -inline [set $oval] "label *"] 1]
set lcolor [lindex [lsearch -inline [set $oval] "labelcolor *"] 1]
set bordercolor [lindex [lsearch -inline [set $oval] "border *"] 1]
set width [lindex [lsearch -inline [set $oval] "width *"] 1]
set lx [expr $x1 + (($x2 - $x1) / 2)]
set ly [expr ($y1 + 20)]
if { $color == "" } { set color $defOvalColor }
if { $lcolor == "" } { set lcolor black }
if { $width == "" } { set width 0 }
if { $bordercolor == "" } { set bordercolor black }
# -outline red -stipple gray50
set newoval [.c create oval $x1 $y1 $x2 $y2 \
-fill $color -width $width -outline $bordercolor \
-tags "oval $oval annotation"]
.c raise $newoval background
set fontfamily [lindex [lsearch -inline [set $oval] "fontfamily *"] 1]
set fontsize [lindex [lsearch -inline [set $oval] "fontsize *"] 1]
if { $fontfamily == "" } {
set fontfamily $defTextFontFamily
}
if { $fontsize == "" } {
set fontsize $defTextFontSize
}
set newfontsize $fontsize
set font [list "$fontfamily" $fontsize]
set effects [lindex [lsearch -inline [set $oval] "effects *"] 1]
.c create text $lx $ly -tags "oval $oval annotation" -text $label \
-justify center -font "$font $effects" -fill $lcolor
setNodeCanvas $oval $curcanvas
setType $oval "oval"
}
# Color helper for popupOvalDialog and popupLabelDialog
proc popupColor { type l settext } {
# popup color selection dialog with current color
if { $type == "fg" } {
set initcolor [$l cget -fg]
} else {
set initcolor [$l cget -bg]
}
set newcolor [tk_chooseColor -initialcolor $initcolor]
# set fg or bg of the "l" label control
if { $newcolor == "" } {
return
}
if { $settext == "true" } {
$l configure -text $newcolor -$type $newcolor
} else {
$l configure -$type $newcolor
}
}
#****f* annotations.tcl/roundRect
# NAME
# roundRect -- Draw a rounded rectangle in the canvas.
# Called from drawRect procedure
# SYNOPSIS
# roundRect $w $x0 $y0 $x3 $y3 $radius $args
# FUNCTION
# Creates a rounded rectangle as a smooth polygon in the canvas
# and returns the canvas item number of the rounded rectangle.
# INPUTS
# * w -- Path name of the canvas
# * x0, y0 -- Coordinates of the upper left corner, in pixels
# * x3, y3 -- Coordinates of the lower right corner, in pixels
# * radius -- Radius of the bend at the corners, in any form
# acceptable to Tk_GetPixels
# * args -- Other args suitable to a 'polygon' item on the canvas
# Example:
# roundRect .c 100 50 500 250 $rad -fill white -outline black -tags rectangle
#****
proc roundRect { w x0 y0 x3 y3 radius args } {
set r [winfo pixels $w $radius]
set d [expr { 2 * $r }]
# Make sure that the radius of the curve is less than 3/8 size of the box
set maxr 0.75
if { $d > $maxr * ( $x3 - $x0 ) } {
set d [expr { $maxr * ( $x3 - $x0 ) }]
}
if { $d > $maxr * ( $y3 - $y0 ) } {
set d [expr { $maxr * ( $y3 - $y0 ) }]
}
set x1 [expr { $x0 + $d }]
set x2 [expr { $x3 - $d }]
set y1 [expr { $y0 + $d }]
set y2 [expr { $y3 - $d }]
set cmd [list $w create polygon]
lappend cmd $x0 $y0 $x1 $y0 $x2 $y0 $x3 $y0 $x3 $y1 $x3 $y2
lappend cmd $x3 $y3 $x2 $y3 $x1 $y3 $x0 $y3 $x0 $y2 $x0 $y1
lappend cmd -smooth 1
return [eval $cmd $args]
}
proc drawRect {rectangle} {
global $rectangle defRectColor zoom curcanvas
global defTextFontFamily defTextFontSize
set coords [getNodeCoords $rectangle]
if {$coords == "" || [llength $coords] != 4 } {
puts "Bad coordinates for rectangle $rectangle"
return
}
set x1 [expr {[lindex $coords 0] * $zoom}]
set y1 [expr {[lindex $coords 1] * $zoom}]
set x2 [expr {[lindex $coords 2] * $zoom}]
set y2 [expr {[lindex $coords 3] * $zoom}]
set color [lindex [lsearch -inline [set $rectangle] "color *"] 1]
set label [lindex [lsearch -inline [set $rectangle] "label *"] 1]
set lcolor [lindex [lsearch -inline [set $rectangle] "labelcolor *"] 1]
set bordercolor [lindex [lsearch -inline [set $rectangle] "border *"] 1]
set width [lindex [lsearch -inline [set $rectangle] "width *"] 1]
set rad [lindex [lsearch -inline [set $rectangle] "rad *"] 1]
set lx [expr $x1 + (($x2 - $x1) / 2)]
set ly [expr ($y1 + 20)]
if { $color == "" } { set color $defRectColor }
if { $lcolor == "" } { set lcolor black }
if { $bordercolor == "" } { set bordercolor black }
if { $width == "" } { set width 0 }
# rounded-rectangle radius
if { $rad == "" } { set rad 25 }
# Boeing: allow borderless rectangles
if { $width == 0 } {
set newrect [roundRect .c $x1 $y1 $x2 $y2 $rad \
-fill $color -tags "rectangle $rectangle annotation"]
} else {
# end Boeing
set newrect [roundRect .c $x1 $y1 $x2 $y2 $rad \
-fill $color -outline $bordercolor -width $width \
-tags "rectangle $rectangle annotation"]
.c raise $newrect background
# Boeing
}
# end Boeing
set fontfamily [lindex [lsearch -inline [set $rectangle] "fontfamily *"] 1]
set fontsize [lindex [lsearch -inline [set $rectangle] "fontsize *"] 1]
if { $fontfamily == "" } {
set fontfamily $defTextFontFamily
}
if { $fontsize == "" } {
set fontsize $defTextFontSize
}
set newfontsize $fontsize
set font [list "$fontfamily" $fontsize]
set effects [lindex [lsearch -inline [set $rectangle] "effects *"] 1]
.c create text $lx $ly -tags "rectangle $rectangle annotation" \
-text $label -justify center -font "$font $effects" -fill $lcolor
setNodeCanvas $rectangle $curcanvas
setType $rectangle "rectangle"
}
proc popupAnnotationDialog { c target modify } {
global $target newrect newoval
global width rad fontfamily fontsize
global defFillColor defTextColor defTextFontFamily defTextFontSize
# do nothing, return, if coords are empty
if { $target == 0 \
&& [$c coords "$newrect"] == "" \
&& [$c coords "$newoval"] == "" } {
return
}
if { $target == 0 } {
set width 0
set rad 25
set coords [$c bbox "$newrect"]
if { [$c coords "$newrect"] == "" } {
set coords [$c bbox "$newoval"]
set annotationType "oval"
} else {
set annotationType "rectangle"
}
set fontfamily ""
set fontsize ""
set effects ""
set color ""
set label ""
set lcolor ""
set bordercolor ""
} else {
set width [lindex [lsearch -inline [set $target] "width *"] 1]
set rad [lindex [lsearch -inline [set $target] "rad *"] 1]
set coords [$c bbox "$target"]
set color [lindex [lsearch -inline [set $target] "color *"] 1]
set fontfamily [lindex [lsearch -inline [set $target] "fontfamily *"] 1]
set fontsize [lindex [lsearch -inline [set $target] "fontsize *"] 1]
set effects [lindex [lsearch -inline [set $target] "effects *"] 1]
set label [lindex [lsearch -inline [set $target] "label *"] 1]
set lcolor [lindex [lsearch -inline [set $target] "labelcolor *"] 1]
set bordercolor [lindex [lsearch -inline [set $target] "border *"] 1]
set annotationType [nodeType $target]
}
if { $color == "" } {
# Boeing: use default shape colors
if { $annotationType == "oval" } {
global defOvalColor
set color $defOvalColor
} elseif { $annotationType == "rectangle" } {
global defRectColor
set color $defRectColor
} else {
set color $defFillColor
}
}
if { $lcolor == "" } { set lcolor black }
if { $bordercolor == "" } { set bordercolor black }
if { $width == "" } { set width 0 }
if { $rad == "" } { set rad 25 }
if { $fontfamily == "" } { set fontfamily $defTextFontFamily }
if { $fontsize == "" } { set fontsize $defTextFontSize }
set textBold 0
set textItalic 0
set textUnderline 0
if { [lsearch $effects bold ] != -1} {set textBold 1}
if { [lsearch $effects italic ] != -1} {set textItalic 1}
if { [lsearch $effects underline ] != -1} {set textUnderline 1}
set x1 [lindex $coords 0]
set y1 [lindex $coords 1]
set x2 [lindex $coords 2]
set y2 [lindex $coords 3]
set xx [expr {abs($x2 - $x1)}]
set yy [expr {abs($y2 - $y1)}]
if { $xx > $yy } {
set maxrad [expr $yy * 3.0 / 8.0]
} else {
set maxrad [expr $xx * 3.0 / 8.0]
}
set wi .popup
catch {destroy $wi}
toplevel $wi
wm transient $wi .
wm resizable $wi 0 0
if { $modify == "true" } {
set windowtitle "Configure $annotationType $target"
} else {
set windowtitle "Add a new $annotationType"
}
wm title $wi $windowtitle
frame $wi.text -relief groove -bd 2
frame $wi.text.lab
label $wi.text.lab.name_label -text "Text for top of $annotationType:"
entry $wi.text.lab.name -bg white -fg $lcolor -width 32 \
-validate focus -invcmd "focusAndFlash %W"
$wi.text.lab.name insert 0 $label
pack $wi.text.lab.name_label $wi.text.lab.name -side left -anchor w \
-padx 2 -pady 2 -fill x
pack $wi.text.lab -side top -fill x
frame $wi.text.format
set fontmenu [tk_optionMenu $wi.text.format.fontmenu fontfamily "$fontfamily"]
set sizemenu [tk_optionMenu $wi.text.format.fontsize fontsize "$fontsize"]
# color selection
if { $color == "" } {
set color $defTextColor
}
button $wi.text.format.fg -text "Text color" -command \
"popupColor fg $wi.text.lab.name false"
checkbutton $wi.text.format.bold -text "Bold" -variable textBold \
-command [list fontupdate $wi.text.lab.name bold]
checkbutton $wi.text.format.italic -text "Italic" -variable textItalic \
-command [list fontupdate $wi.text.lab.name italic]
checkbutton $wi.text.format.underline -text "Underline" \
-variable textUnderline \
-command [list fontupdate $wi.text.lab.name underline]
if {$textBold == 1} { $wi.text.format.bold select
} else { $wi.text.format.bold deselect }
if {$textItalic == 1} { $wi.text.format.italic select
} else { $wi.text.format.italic deselect }
if {$textUnderline == 1} { $wi.text.format.underline select
} else { $wi.text.format.underline deselect }
pack $wi.text.format.fontmenu \
$wi.text.format.fontsize \
$wi.text.format.fg \
$wi.text.format.bold \
$wi.text.format.italic \
$wi.text.format.underline \
-side left -pady 2
pack $wi.text.format -side top -fill x
pack $wi.text -side top -fill x
fontupdate $wi.text.lab.name fontfamily $fontfamily
fontupdate $wi.text.lab.name fontsize $fontsize
$fontmenu delete 0
foreach f [lsort -dictionary [font families]] {
$fontmenu add radiobutton -value "$f" -label $f \
-variable fontfamily \
-command [list fontupdate $wi.text.lab.name fontfamily $f]
}
$sizemenu delete 0
foreach f {8 9 10 11 12 14 16 18 20 22 24 26 28 36 48 72} {
$sizemenu add radiobutton -value "$f" -label $f \
-variable fontsize \
-command [list fontupdate $wi.text.lab.name fontsize $f]
}
if { "$annotationType" == "rectangle" || "$annotationType" == "oval" } {
# fill color, border color
frame $wi.colors -relief groove -bd 2
# color selection controls
label $wi.colors.label -text "Fill color:"
label $wi.colors.color -text $color -width 8 \
-bg $color -fg $lcolor
button $wi.colors.bg -text "Color" -command \
"popupColor bg $wi.colors.color true"
pack $wi.colors.label $wi.colors.color $wi.colors.bg \
-side left -padx 2 -pady 2 -anchor w -fill x
pack $wi.colors -side top -fill x
# border selection controls
frame $wi.border -relief groove -bd 2
label $wi.border.label -text "Border color:"
label $wi.border.color -text $bordercolor -width 8 \
-bg $color -fg $bordercolor
label $wi.border.width_label -text "Border width:"
set widthMenu [tk_optionMenu $wi.border.width width "$width"]
$widthMenu delete 0
foreach f {0 1 2 3 4 5 6 7 8 9 10} {
$widthMenu add radiobutton -value $f -label $f \
-variable width
}
button $wi.border.fg -text "Color" -command \
"popupColor fg $wi.border.color true"
pack $wi.border.label $wi.border.color $wi.border.fg \
$wi.border.width_label $wi.border.width \
$wi.border.fg $wi.border.color $wi.border.label \
-side left -padx 2 -pady 2 -anchor w -fill x
pack $wi.border -side top -fill x
}
if { $annotationType == "rectangle" } {
frame $wi.radius -relief groove -bd 2
scale $wi.radius.rad -from 0 -to [expr int($maxrad)] \
-length 400 -variable rad \
-orient horizontal -label "Radius of the bend at the corners: " \
-tickinterval [expr int($maxrad / 15) + 1] -showvalue true
pack $wi.radius.rad -side left -padx 2 -pady 2 -anchor w -fill x
pack $wi.radius -side top -fill x
}
# Add new oval or modify old one?
if { $modify == "true" } {
set cancelcmd "destroy $wi"
set applytext "Modify $annotationType"
} else {
set cancelcmd "destroy $wi; destroyNewRect $c"
set applytext "Add $annotationType"
}
frame $wi.butt -borderwidth 6
button $wi.butt.apply -text $applytext -command "popupAnnotationApply $c $wi $target $annotationType"
button $wi.butt.cancel -text "Cancel" -command $cancelcmd
bind $wi <Key-Escape> "$cancelcmd"
bind $wi <Key-Return> "popupAnnotationApply $c $wi $target $annotationType"
pack $wi.butt.cancel $wi.butt.apply -side right
pack $wi.butt -side bottom
after 100 {
grab .popup
}
return
}
# helper for popupOvalDialog and popupOvalApply
proc destroyNewRect { c } {
global newrect
$c delete -withtags newrect
set newrect ""
}
proc popupAnnotationApply { c wi target type } {
global newrect newoval annotation_list
global $target
global changed
global width rad
global fontfamily fontsize textBold textItalic textUnderline
# attributes
set caption [string trim [$wi.text.lab.name get]]
set labelcolor [$wi.text.lab.name cget -fg]
set coords [$c coords "$target"]
set iconcoords "iconcoords"
if {"$type" == "rectangle" || "$type" == "oval" } {
set color [$wi.colors.color cget -text]
set bordercolor [$wi.border.color cget -text]
}
if { $target == 0 } {
# Create a new annotation object
set target [newObjectId annotation]
global $target
lappend annotation_list $target
if {"$type" == "rectangle" } {
set coords [$c coords $newrect]
} elseif { "$type" == "oval" } {
set coords [$c coords $newoval]
}
} else {
set coords [getNodeCoords $target]
}
set $target {}
lappend $iconcoords $coords
lappend $target $iconcoords "label {$caption}" "labelcolor $labelcolor" \
"fontfamily {$fontfamily}" "fontsize $fontsize"
if {"$type" == "rectangle" || "$type" == "oval" } {
lappend $target "color $color" "width $width" "border $bordercolor"
}
if {"$type" == "rectangle" } {
lappend $target "rad $rad"
}
set ef {}
if {"$textBold" == 1} { lappend ef bold}
if {"$textItalic" == 1} { lappend ef italic}
if {"$textUnderline" == 1} { lappend ef underline}
if {"$ef" != ""} { lappend $target "effects {$ef}"}
# draw it
if { $type == "rectangle" } {
drawRect $target
destroyNewRect $c
} elseif { $type == "oval" } {
drawOval $target
destroyNewoval $c
} elseif { $type == "text" } {
drawText $target
}
set changed 1
updateUndoLog
redrawAll
destroy $wi
}
proc selectmarkEnter {c x y} {
set isThruplot false
if {$c == ".c"} {
set obj [lindex [$c gettags current] 1]
set type [nodeType $obj]
if {$type != "oval" && $type != "rectangle"} { return }
} else {
set obj $c
set c .c
set isThruplot true
}
set bbox [$c bbox $obj]
set x1 [lindex $bbox 0]
set y1 [lindex $bbox 1]
set x2 [lindex $bbox 2]
set y2 [lindex $bbox 3]
if {$isThruplot == true} {
set x [expr $x+$x1]
set y [expr $y+$y1]
}
set l 0 ;# left
set r 0 ;# right
set u 0 ;# up
set d 0 ;# down
set x [$c canvasx $x]
set y [$c canvasy $y]
if { $x < [expr $x1+($x2-$x1)/8.0]} { set l 1 }
if { $x > [expr $x2-($x2-$x1)/8.0]} { set r 1 }
if { $y < [expr $y1+($y2-$y1)/8.0]} { set u 1 }
if { $y > [expr $y2-($y2-$y1)/8.0]} { set d 1 }
if {$l==1} {
if {$u==1} {
$c config -cursor top_left_corner
} elseif {$d==1} {
$c config -cursor bottom_left_corner
} else {
$c config -cursor left_side
}
} elseif {$r==1} {
if {$u==1} {
$c config -cursor top_right_corner
} elseif {$d==1} {
$c config -cursor bottom_right_corner
} else {
$c config -cursor right_side
}
} elseif {$u==1} {
$c config -cursor top_side
} elseif {$d==1} {
$c config -cursor bottom_side
} else {
$c config -cursor left_ptr
}
}
proc selectmarkLeave {c x y} {
global thruplotResize
.bottom.textbox config -text {}
# cursor options for thruplot resize
if {$thruplotResize == true} {
} else {
# no resize update cursor
$c config -cursor left_ptr
}
}
proc textEnter { c x y } {
global annotation_list
global curcanvas
set object [newObjectId annotation]
set newtext [$c create text $x $y -text "" \
-anchor w -justify left -tags "text $object annotation"]
set coords [$c coords "text && $object"]
set iconcoords "iconcoords"
global $object
set $object {}
setType $object "text"
lappend $iconcoords $coords
lappend $object $iconcoords
lappend $object "label {}"
setNodeCanvas $object $curcanvas
lappend annotation_list $object
popupAnnotationDialog $c $object "false"
}
proc drawText {text} {
global $text defTextColor defTextFont defTextFontFamily defTextFontSize
global zoom curcanvas newfontsize
set coords [getNodeCoords $text]
if { [llength $coords] < 2 } {
puts "Bad coordinates for text $text"
return
}
set x [expr {[lindex $coords 0] * $zoom}]
set y [expr {[lindex $coords 1] * $zoom}]
set color [lindex [lsearch -inline [set $text] "labelcolor *"] 1]
if { $color == "" } {
set color $defTextColor
}
set label [lindex [lsearch -inline [set $text] "label *"] 1]
set fontfamily [lindex [lsearch -inline [set $text] "fontfamily *"] 1]
set fontsize [lindex [lsearch -inline [set $text] "fontsize *"] 1]
if { $fontfamily == "" } {
set fontfamily $defTextFontFamily
}
if { $fontsize == "" } {
set fontsize $defTextFontSize
}
set newfontsize $fontsize
set font [list "$fontfamily" $fontsize]
set effects [lindex [lsearch -inline [set $text] "effects *"] 1]
set newtext [.c create text $x $y -text $label -anchor w \
-font "$font $effects" -justify left -fill $color \
-tags "text $text annotation"]
.c addtag text withtag $newtext
.c raise $text background
setNodeCanvas $text $curcanvas
setType $text "text"
}
proc fontupdate { label type args} {
global fontfamily fontsize
global textBold textItalic textUnderline
if {"$textBold" == 1} {set bold "bold"} else {set bold {} }
if {"$textItalic"} {set italic "italic"} else {set italic {} }
if {"$textUnderline"} {set underline "underline"} else {set underline {} }
switch $type {
fontsize {
set fontsize $args
}
fontfamily {
set fontfamily "$args"
}
}
set f [list "$fontfamily" $fontsize]
lappend f "$bold $italic $underline"
$label configure -font "$f"
}
proc drawAnnotation { obj } {
switch -exact -- [nodeType $obj] {
oval {
drawOval $obj
}
rectangle {
drawRect $obj
}
text {
drawText $obj
}
}
}
# shift annotation coordinates by dx, dy; does not redraw the annotation
proc moveAnnotation { obj dx dy } {
set coords [getNodeCoords $obj]
lassign $coords x1 y1 x2 y2
set pt1 "[expr {$x1 + $dx}] [expr {$y1 + $dy}]"
if { [nodeType $obj] == "text" } {
# shift one point
setNodeCoords $obj $pt1
} else { ;# oval/rectangle
# shift two points
set pt2 "[expr {$x2 + $dx}] [expr {$y2 + $dy}]"
setNodeCoords $obj "$pt1 $pt2"
}
}

3178
gui/api.tcl Executable file

File diff suppressed because it is too large Load diff

411
gui/canvas.tcl Executable file
View file

@ -0,0 +1,411 @@
#
# Copyright 2005-2013 the Boeing Company.
# See the LICENSE file included in this distribution.
#
#
# Copyright 2005-2008 University of Zagreb, Croatia.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
#
#****h* imunes/canvas.tcl
# NAME
# canvas.tcl -- file used for manipultaion with canvases in IMUNES
# FUNCTION
# This module is used to define all the actions used for configuring
# canvases in IMUNES. On each canvas a part of the simulation is presented
# If there is no additional canvas defined, simulation is presented on the
# defalut canvas.
#
#****
#****f* canvas.tcl/removeCanvas
# NAME
# removeCanvas -- remove canvas
# SYNOPSIS
# removeCanvas $canvas_id
# FUNCTION
# Removes the canvas from simulation. This function does not change the
# configuration of the nodes, i.e. nodes attached to the removed canvas
# remain attached to the same non existing canvas.
# INPUTS
# * canvas_id -- canvas id
#****
proc removeCanvas { canvas } {
global canvas_list $canvas
set i [lsearch $canvas_list $canvas]
set canvas_list [lreplace $canvas_list $i $i]
set $canvas {}
}
#****f* canvas.tcl/newCanvas
# NAME
# newCanvas -- craete new canvas
# SYNOPSIS
# set canvas_id [newCanvas $canvas_name]
# FUNCTION
# Creates new canvas. Returns the canvas_id of the new canvas.
# If the canvas_name parameter is empty, the name of the new canvas
# is set to CanvasN, where N represents the canvas_id of the new canvas.
# INPUTS
# * canvas_name -- canvas name
# RESULT
# * canvas_id -- canvas id
#****
proc newCanvas { name } {
global canvas_list
set canvas [newObjectId canvas]
global $canvas
lappend canvas_list $canvas
set $canvas {}
if { $name != "" } {
setCanvasName $canvas $name
} else {
setCanvasName $canvas Canvas[string range $canvas 1 end]
}
return $canvas
}
proc setCanvasSize { canvas x y } {
global $canvas
set i [lsearch [set $canvas] "size *"]
if { $i >= 0 } {
set $canvas [lreplace [set $canvas] $i $i "size {$x $y}"]
} else {
set $canvas [linsert [set $canvas] 1 "size {$x $y}"]
}
}
proc getCanvasSize { canvas } {
global $canvas g_prefs
set entry [lrange [lsearch -inline [set $canvas] "size *"] 1 end]
set size [string trim $entry \{\}]
if { $size == "" } {
return "$g_prefs(gui_canvas_x) $g_prefs(gui_canvas_y)"
} else {
return $size
}
}
#****f* canvas.tcl/getCanvasName
# NAME
# getCanvasName -- get canvas name
# SYNOPSIS
# set canvas_name [getCanvasName $canvas_id]
# FUNCTION
# Returns the name of the canvas.
# INPUTS
# * canvas_id -- canvas id
# RESULT
# * canvas_name -- canvas name
#****
proc getCanvasName { canvas } {
global $canvas
set entry [lrange [lsearch -inline [set $canvas] "name *"] 1 end]
return [string trim $entry \{\}]
}
#****f* canvas.tcl/setCanvasName
# NAME
# setCanvasName -- set canvas name
# SYNOPSIS
# setCanvasName $canvas_id $canvas_name
# FUNCTION
# Sets the name of the canvas.
# INPUTS
# * canvas_id -- canvas id
# * canvas_name -- canvas name
#****
proc setCanvasName { canvas name } {
global $canvas
set i [lsearch [set $canvas] "name *"]
if { $i >= 0 } {
set $canvas [lreplace [set $canvas] $i $i "name {$name}"]
} else {
set $canvas [linsert [set $canvas] 1 "name {$name}"]
}
}
# Boeing: canvas wallpaper support
proc getCanvasWallpaper { canvas } {
global $canvas
set entry [lrange [lsearch -inline [set $canvas] "wallpaper *"] 1 end]
set entry2 [lrange [lsearch -inline \
[set $canvas] "wallpaper-style *"] 1 end]
return [list [string trim $entry \{\}] [string trim $entry2 \{\}]]
}
proc setCanvasWallpaper { canvas file style} {
global $canvas
set i [lsearch [set $canvas] "wallpaper *"]
if { $i >= 0 } {
set $canvas [lreplace [set $canvas] $i $i "wallpaper {$file}"]
} else {
set $canvas [linsert [set $canvas] 1 "wallpaper {$file}"]
}
set i [lsearch [set $canvas] "wallpaper-style *"]
if { $i >= 0 } {
set $canvas [lreplace [set $canvas] $i $i "wallpaper-style {$style}"]
} else {
set $canvas [linsert [set $canvas] 1 "wallpaper-style {$style}"]
}
}
# Boeing: manage canvases
proc manageCanvasPopup { x y } {
global curcanvas CORE_DATA_DIR
set w .entry1
catch {destroy $w}
toplevel $w -takefocus 1
if { $x == 0 && $y == 0 } {
set screen [wm maxsize .]
set x [expr {[lindex $screen 0] / 4}]
set y [expr {[lindex $screen 1] / 4}]
} else {
set x [expr {$x + 10}]
set y [expr {$y - 250}]
}
wm geometry $w +$x+$y
wm title $w "Manage Canvases"
wm iconname $w "Manage Canvases"
ttk::frame $w.name
ttk::label $w.name.lab -text "Canvas name:"
ttk::entry $w.name.ent
$w.name.ent insert 0 [getCanvasName $curcanvas]
pack $w.name.lab $w.name.ent -side left -fill x
pack $w.name -side top -padx 4 -pady 4
global canvas_list
ttk::frame $w.canv
listbox $w.canv.cl -bg white -yscrollcommand "$w.canv.scroll set"
ttk::scrollbar $w.canv.scroll -orient vertical -command "$w.canv.cl yview"
foreach canvas $canvas_list {
$w.canv.cl insert end [getCanvasName $canvas]
if { $canvas == $curcanvas } {
set curindex [expr {[$w.canv.cl size] - 1}]
}
}
pack $w.canv.cl -side left -pady 4 -fill both -expand true
pack $w.canv.scroll -side left -fill y
pack $w.canv -side top -fill both -expand true -padx 4 -pady 4
$w.canv.cl selection set $curindex
$w.canv.cl see $curindex
bind $w.canv.cl <Double-1> "manageCanvasSwitch $w"
ttk::frame $w.buttons2
foreach b {up down} {
set fn "$CORE_DATA_DIR/icons/tiny/arrow.${b}.gif"
set img$b [image create photo -file $fn]
ttk::button $w.buttons2.$b -image [set img${b}] \
-command "manageCanvasUpDown $w $b"
}
pack $w.buttons2.up $w.buttons2.down -side left -expand 1
pack $w.buttons2 -side top -fill x -pady 2
# hidden list of canvas numbers
ttk::label $w.list -text $canvas_list
ttk::frame $w.buttons
ttk::button $w.buttons.apply -text "Apply" -command "manageCanvasApply $w"
ttk::button $w.buttons.cancel -text "Cancel" -command "destroy $w"
pack $w.buttons.apply $w.buttons.cancel -side left -expand 1
pack $w.buttons -side bottom -fill x -pady 2m
bind $w <Key-Escape> "destroy $w"
bind $w <Key-Return> "manageCanvasApply $w"
}
# Boeing: manage canvases helper
# called when a canvas in the list is double-clicked
proc manageCanvasSwitch { w } {
global canvas_list curcanvas
set i [$w.canv.cl curselection]
if {$i == ""} { return}
set i [lindex $i 0]
set item [$w.canv.cl get $i]
foreach canvas $canvas_list {
if {[getCanvasName $canvas] == $item} {
$w.name.ent delete 0 end
$w.name.ent insert 0 $item
set curcanvas $canvas
switchCanvas none
return
}
}
}
# manage canvases helper
# handle the move up/down buttons for the canvas selection window
proc manageCanvasUpDown { w dir } {
global canvas_list
# get the currently selected item
set i [$w.canv.cl curselection]
if {$i == ""} { return}
set i [lindex $i 0]
set item [$w.canv.cl get $i]
if {$dir == "down" } {
set max [expr {[llength $canvas_list] - 1}]
if {$i >= $max } { return }
set newi [expr {$i + 1}]
} else {
if {$i <= 0} { return }
set newi [expr {$i - 1}]
}
# change the position
$w.canv.cl delete $i
$w.canv.cl insert $newi $item
$w.canv.cl selection set $newi
$w.canv.cl see $newi
# update hidden list of canvas numbers
set new_canvas_list [$w.list cget -text]
set item [lindex $new_canvas_list $i]
set new_canvas_list [lreplace $new_canvas_list $i $i]
set new_canvas_list [linsert $new_canvas_list $newi $item]
$w.list configure -text $new_canvas_list
}
# manage canvases helper
# called when apply button is pressed - changes the order of the canvases
proc manageCanvasApply { w } {
global canvas_list curcanvas changed
# we calculated this list earlier, making life easier here
set new_canvas_list [$w.list cget -text]
if {$canvas_list != $new_canvas_list} {
set canvas_list $new_canvas_list
}
set newname [$w.name.ent get]
destroy $w
if { $newname != [getCanvasName $curcanvas] } {
set changed 1
}
setCanvasName $curcanvas $newname
switchCanvas none
updateUndoLog
}
proc setCanvasScale { canvas scale } {
global $canvas
set i [lsearch [set $canvas] "scale *"]
if { $i >= 0 } {
set $canvas [lreplace [set $canvas] $i $i "scale $scale"]
} else {
set $canvas [linsert [set $canvas] 1 "scale $scale"]
}
}
proc getCanvasScale { canvas } {
global $canvas g_prefs
set entry [lrange [lsearch -inline [set $canvas] "scale *"] 1 end]
set scale [string trim $entry \{\}]
if { $scale == "" } {
if { ![info exists g_prefs(gui_canvas_scale)] } { return 150.0 }
return "$g_prefs(gui_canvas_scale)"
} else {
return $scale
}
}
proc setCanvasRefPoint { canvas refpt } {
global $canvas
set i [lsearch [set $canvas] "refpt *"]
if { $i >= 0 } {
set $canvas [lreplace [set $canvas] $i $i "refpt {$refpt}"]
} else {
set $canvas [linsert [set $canvas] 1 "refpt {$refpt}"]
}
}
proc getCanvasRefPoint { canvas } {
global $canvas g_prefs DEFAULT_REFPT
set entry [lrange [lsearch -inline [set $canvas] "refpt *"] 1 end]
set altitude [string trim $entry \{\}]
if { $altitude == "" } {
if { ![info exists g_prefs(gui_canvas_refpt)] } {
return $DEFAULT_REFPT
}
return "$g_prefs(gui_canvas_refpt)"
} else {
return $altitude
}
}
# from http://wiki.tcl.tk/1415 (MAK)
proc canvasSee { hWnd items } {
set box [eval $hWnd bbox $items]
if {$box == ""} { return }
if {[string match {} [$hWnd cget -scrollregion]] } {
# People really should set -scrollregion you know...
foreach {x y x1 y1} $box break
set x [expr round(2.5 * ($x1+$x) / [winfo width $hWnd])]
set y [expr round(2.5 * ($y1+$y) / [winfo height $hWnd])]
$hWnd xview moveto 0
$hWnd yview moveto 0
$hWnd xview scroll $x units
$hWnd yview scroll $y units
} else {
# If -scrollregion is set properly, use this
foreach { x y x1 y1 } $box break
foreach { top btm } [$hWnd yview] break
foreach { left right } [$hWnd xview] break
foreach { p q xmax ymax } [$hWnd cget -scrollregion] break
set xpos [expr (($x1+$x) / 2.0) / $xmax - ($right-$left) / 2.0]
set ypos [expr (($y1+$y) / 2.0) / $ymax - ($btm-$top) / 2.0]
$hWnd xview moveto $xpos
$hWnd yview moveto $ypos
}
}

1152
gui/cfgparse.tcl Executable file

File diff suppressed because it is too large Load diff

BIN
gui/configs/sample1-bg.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

510
gui/configs/sample1.imn Normal file
View file

@ -0,0 +1,510 @@
node n1 {
type router
model router
network-config {
hostname n1
!
interface eth1
ip address 10.0.5.1/24
ipv6 address a:5::1/64
!
interface eth0
ip address 10.0.3.2/24
ipv6 address a:3::2/64
!
}
canvas c1
iconcoords {384.0 456.0}
labelcoords {384.0 484.0}
interface-peer {eth0 n2}
interface-peer {eth1 n15}
}
node n2 {
type router
model router
network-config {
hostname n2
!
interface eth2
ip address 10.0.4.1/24
ipv6 address a:4::1/64
!
interface eth1
ip address 10.0.3.1/24
ipv6 address a:3::1/64
!
interface eth0
ip address 10.0.2.2/24
ipv6 address a:2::2/64
!
}
canvas c1
iconcoords {264.0 432.0}
labelcoords {264.0 460.0}
interface-peer {eth0 n3}
interface-peer {eth1 n1}
interface-peer {eth2 n15}
}
node n3 {
type router
model router
network-config {
hostname n3
!
interface eth1
ip address 10.0.2.1/24
ipv6 address a:2::1/64
!
interface eth0
ip address 10.0.1.1/24
ipv6 address a:1::1/64
!
}
canvas c1
iconcoords {120.0 360.0}
labelcoords {120.0 388.0}
interface-peer {eth0 n4}
interface-peer {eth1 n2}
}
node n4 {
type lanswitch
network-config {
hostname n4
!
}
canvas c1
iconcoords {192.0 252.0}
labelcoords {192.0 280.0}
interface-peer {e0 n3}
interface-peer {e1 n11}
interface-peer {e2 n12}
interface-peer {e3 n13}
interface-peer {e4 n14}
}
node n5 {
type router
model mdr
network-config {
hostname n5
!
interface eth0
ipv6 address a:0::3/128
ip address 10.0.0.5/32
!
interface eth1
ip address 10.0.6.2/24
ipv6 address a:6::2/64
!
}
canvas c1
iconcoords {540.0 348.0}
labelcoords {540.0 376.0}
interface-peer {eth0 n10}
interface-peer {eth1 n15}
services {zebra OSPFv2 OSPFv3MDR vtysh IPForward}
custom-config {
custom-config-id service:zebra
custom-command zebra
config {
files=('/usr/local/etc/quagga/Quagga.conf', 'quaggaboot.sh', )
}
}
custom-config {
custom-config-id service:zebra:/usr/local/etc/quagga/Quagga.conf
custom-command /usr/local/etc/quagga/Quagga.conf
config {
interface eth0
ip address 10.0.0.5/32
ipv6 address a::3/128
ipv6 ospf6 instance-id 65
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 6
ipv6 ospf6 retransmit-interval 5
ipv6 ospf6 network manet-designated-router
ipv6 ospf6 diffhellos
ipv6 ospf6 adjacencyconnectivity uniconnected
ipv6 ospf6 lsafullness mincostlsa
!
interface eth1
ip address 10.0.6.2/24
!ip ospf hello-interval 2
!ip ospf dead-interval 6
!ip ospf retransmit-interval 5
!ip ospf network point-to-point
ipv6 address a:6::2/64
!
router ospf
router-id 10.0.0.5
network 10.0.0.5/32 area 0
network 10.0.6.0/24 area 0
redistribute connected metric-type 1
redistribute ospf6 metric-type 1
!
router ospf6
router-id 10.0.0.5
interface eth0 area 0.0.0.0
redistribute connected
redistribute ospf
!
}
}
}
node n6 {
type router
model mdr
network-config {
hostname n6
!
interface eth0
ip address 10.0.0.6/32
ipv6 address a:0::6/128
!
}
canvas c1
iconcoords {780.0 228.0}
labelcoords {780.0 252.0}
interface-peer {eth0 n10}
}
node n7 {
type router
model mdr
network-config {
hostname n7
!
interface eth0
ip address 10.0.0.7/32
ipv6 address a:0::7/128
!
}
canvas c1
iconcoords {816.0 348.0}
labelcoords {816.0 372.0}
interface-peer {eth0 n10}
}
node n8 {
type router
model mdr
network-config {
hostname n8
!
interface eth0
ip address 10.0.0.8/32
ipv6 address a:0::8/128
!
}
canvas c1
iconcoords {672.0 420.0}
labelcoords {672.0 444.0}
interface-peer {eth0 n10}
}
node n9 {
type router
model mdr
network-config {
hostname n9
!
interface eth0
ip address 10.0.0.9/32
ipv6 address a:0::9/128
!
}
canvas c1
iconcoords {672.0 96.0}
labelcoords {672.0 120.0}
interface-peer {eth0 n10}
}
node n10 {
type wlan
network-config {
hostname wlan10
!
interface wireless
ip address 10.0.0.0/32
ipv6 address a:0::0/128
!
mobmodel
coreapi
basic_range
ns2script
!
}
canvas c1
iconcoords {852.0 564.0}
labelcoords {852.0 596.0}
interface-peer {e0 n8}
interface-peer {e1 n7}
interface-peer {e2 n5}
interface-peer {e3 n6}
interface-peer {e4 n9}
custom-config {
custom-config-id basic_range
custom-command {3 3 9 9 9}
config {
range=240
bandwidth=54000000
jitter=0
delay=50000
error=0
}
}
custom-config {
custom-config-id ns2script
custom-command {10 3 11 10 10}
config {
file=sample1.scen
refresh_ms=50
loop=1
autostart=5
map=
}
}
}
node n11 {
type router
model PC
network-config {
hostname n11
!
interface eth0
ip address 10.0.1.20/24
ipv6 address a:1::20/64
!
}
canvas c1
iconcoords {192.0 156.0}
labelcoords {192.0 188.0}
interface-peer {eth0 n4}
}
node n12 {
type router
model PC
network-config {
hostname n12
!
interface eth0
ip address 10.0.1.21/24
ipv6 address a:1::21/64
!
}
canvas c1
iconcoords {264.0 156.0}
labelcoords {264.0 188.0}
interface-peer {eth0 n4}
}
node n13 {
type router
model PC
network-config {
hostname n13
!
interface eth0
ip address 10.0.1.22/24
ipv6 address a:1::22/64
!
}
canvas c1
iconcoords {336.0 156.0}
labelcoords {336.0 188.0}
interface-peer {eth0 n4}
}
node n14 {
type router
model host
network-config {
hostname n14
!
interface eth0
ip address 10.0.1.10/24
ipv6 address a:1::10/64
!
}
canvas c1
iconcoords {348.0 228.0}
labelcoords {348.0 260.0}
interface-peer {eth0 n4}
}
node n15 {
type router
model router
network-config {
hostname n15
!
interface eth2
ip address 10.0.6.1/24
ipv6 address a:6::1/64
!
interface eth1
ip address 10.0.5.2/24
ipv6 address a:5::2/64
!
interface eth0
ip address 10.0.4.2/24
ipv6 address a:4::2/64
!
}
canvas c1
iconcoords {384.0 312.0}
labelcoords {384.0 340.0}
interface-peer {eth0 n2}
interface-peer {eth1 n1}
interface-peer {eth2 n5}
}
link l1 {
nodes {n10 n8}
bandwidth 11000000
delay 25000
}
link l0 {
nodes {n10 n7}
bandwidth 11000000
delay 25000
}
link l2 {
nodes {n10 n5}
bandwidth 11000000
delay 25000
}
link l3 {
nodes {n10 n6}
bandwidth 11000000
delay 25000
}
link l4 {
nodes {n10 n9}
bandwidth 11000000
delay 25000
}
link l5 {
nodes {n3 n4}
bandwidth 100000000
}
link l6 {
delay 25000
nodes {n3 n2}
bandwidth 100000000
}
link l7 {
nodes {n2 n1}
bandwidth 100000000
}
link l8 {
delay 50000
nodes {n2 n15}
bandwidth 100000000
}
link l9 {
nodes {n1 n15}
bandwidth 100000000
}
link l10 {
nodes {n15 n5}
bandwidth 100000000
}
link l11 {
nodes {n4 n11}
bandwidth 100000000
}
link l12 {
nodes {n4 n12}
bandwidth 100000000
}
link l13 {
nodes {n4 n13}
bandwidth 100000000
}
link l14 {
nodes {n4 n14}
bandwidth 100000000
}
annotation a0 {
iconcoords {612.0 492.0}
type text
label {wireless network}
labelcolor black
fontfamily {Arial}
fontsize {12}
effects {bold}
canvas c1
}
annotation a1 {
iconcoords {142.0 112.0 393.0 291.0}
type rectangle
label {}
labelcolor black
fontfamily {Arial}
fontsize {12}
color #ebebde
width 1
border #ffffff
rad 25
canvas c1
}
annotation a2 {
iconcoords {492.0 384.0}
type text
label {gateway}
labelcolor black
fontfamily {Arial}
fontsize {12}
effects {bold}
canvas c1
}
canvas c1 {
name {Canvas1}
wallpaper-style {upperleft}
wallpaper {sample1-bg.gif}
}
option global {
interface_names no
ip_addresses yes
ipv6_addresses no
node_labels yes
link_labels yes
ipsec_configs yes
exec_errors no
show_api no
background_images no
annotations yes
grid no
traffic_start 0
}
option session {
}

28
gui/configs/sample1.scen Normal file
View file

@ -0,0 +1,28 @@
#
# nodes: 4, max time: 27.000000, max x: 600.00, max y: 600.00
# nominal range: 300.00 link bw: 54000000.00
# pause: 30.00, min speed 1.50 max speed: 4.50
$node_(6) set X_ 780.0
$node_(6) set Y_ 228.0
$node_(6) set Z_ 0.00
$node_(7) set X_ 816.0
$node_(7) set Y_ 348.0
$node_(7) set Z_ 0.00
$node_(8) set X_ 672.0
$node_(8) set Y_ 420.0
$node_(8) set Z_ 0.00
$node_(9) set X_ 672.0
$node_(9) set Y_ 96.0
$node_(9) set Z_ 0.00
$ns_ at 1.00 "$node_(6) setdest 500.0 178.0 25.0"
$ns_ at 2.00 "$node_(7) setdest 400.0 288.0 15.0"
$ns_ at 1.00 "$node_(8) setdest 590.0 520.0 17.0"
$ns_ at 3.00 "$node_(9) setdest 720.0 300.0 20.0"
$ns_ at 8.00 "$node_(7) setdest 600.0 350.0 10.0"
$ns_ at 9.00 "$node_(8) setdest 730.0 300.0 15.0"
$ns_ at 10.00 "$node_(6) setdest 600.0 108.0 10.0"
$ns_ at 16.00 "$node_(9) setdest 672.0 96.0 20.0"
$ns_ at 17.00 "$node_(7) setdest 816.0 348.0 20.0"
$ns_ at 18.00 "$node_(6) setdest 780.0 228.0 25.0"
$ns_ at 22.00 "$node_(8) setdest 672.0 420.0 20.0"

View file

@ -0,0 +1,848 @@
comments {
Kitchen Sink
============
Contains every type of node available in CORE, except for the Xen and physical (prouter)
machine types, and nodes distributed on other emulation servers.
To get the RJ45 node to work, a test0 interface should first be created like this:
sudo ip link add name test0 type veth peer name test0.1
wlan15 uses the basic range model, while wlan24 uses EMANE 802.11
gateway nodes n11 and n20 are customized to redistribute routing between OSPFv2 and
OSPFv3 MDR (the MANET networks)
}
node n1 {
type router
model router
network-config {
hostname n1
!
interface eth2
ip address 10.0.11.2/24
ipv6 address 2001:11::2/64
!
interface eth1
ip address 10.0.3.1/24
ipv6 address 2001:3::1/64
!
interface eth0
ip address 10.0.2.1/24
ipv6 address 2001:2::1/64
!
}
canvas c1
iconcoords {288.0 264.0}
labelcoords {288.0 292.0}
interface-peer {eth0 n3}
interface-peer {eth1 n2}
interface-peer {eth2 n20}
custom-image $CORE_DATA_DIR/icons/normal/router_red.gif
}
node n2 {
type router
model router
network-config {
hostname n2
!
interface eth2
ip address 10.0.5.2/24
ipv6 address 2001:5::2/64
!
interface eth1
ip address 10.0.3.2/24
ipv6 address 2001:3::2/64
!
interface eth0
ip address 10.0.0.1/24
ipv6 address 2001:0::1/64
!
}
canvas c1
iconcoords {576.0 264.0}
labelcoords {576.0 292.0}
interface-peer {eth0 n5}
interface-peer {eth1 n1}
interface-peer {eth2 n19}
}
node n3 {
type router
model router
network-config {
hostname n3
!
interface eth3
ip address 10.0.9.1/24
ipv6 address 2001:9::1/64
!
interface eth2
ip address 10.0.4.1/24
ipv6 address 2001:4::1/64
!
interface eth1
ip address 10.0.2.2/24
ipv6 address 2001:2::2/64
!
interface eth0
ip address 10.0.1.1/24
ipv6 address 2001:1::1/64
!
}
canvas c1
iconcoords {288.0 408.0}
labelcoords {288.0 436.0}
interface-peer {eth0 n4}
interface-peer {eth1 n1}
interface-peer {eth2 n19}
interface-peer {eth3 n11}
custom-image $CORE_DATA_DIR/icons/normal/router_red.gif
}
node n4 {
type hub
network-config {
hostname n4
!
}
canvas c1
iconcoords {216.0 528.0}
labelcoords {216.0 552.0}
interface-peer {e0 n3}
interface-peer {e1 n16}
interface-peer {e2 n17}
interface-peer {e3 n18}
}
node n5 {
type lanswitch
network-config {
hostname n5
!
}
canvas c1
iconcoords {672.0 264.0}
labelcoords {672.0 288.0}
interface-peer {e0 n2}
interface-peer {e1 n6}
interface-peer {e2 n7}
interface-peer {e3 n8}
interface-peer {e4 n25}
}
node n6 {
type router
model host
network-config {
hostname n6
!
interface eth0
ip address 10.0.0.10/24
ipv6 address 2001:0::10/64
!
}
canvas c1
iconcoords {792.0 216.0}
labelcoords {792.0 248.0}
interface-peer {eth0 n5}
}
node n7 {
type router
model host
network-config {
hostname n7
!
interface eth0
ip address 10.0.0.11/24
ipv6 address 2001:0::11/64
!
}
canvas c1
iconcoords {792.0 288.0}
labelcoords {792.0 320.0}
interface-peer {eth0 n5}
}
node n8 {
type router
model host
network-config {
hostname n8
!
interface eth0
ip address 10.0.0.12/24
ipv6 address 2001:0::12/64
!
}
canvas c1
iconcoords {792.0 360.0}
labelcoords {792.0 392.0}
interface-peer {eth0 n5}
}
node n9 {
type rj45
network-config {
hostname test0
!
}
canvas c1
iconcoords {576.0 528.0}
labelcoords {576.0 556.0}
interface-peer {0 n19}
}
node n10 {
type tunnel
network-config {
hostname 10.250.0.91
!
interface e0
ip address 10.250.0.91/24
!
tunnel-type
UDP
!
tunnel-tap
off
!
tunnel-key
1
!
}
canvas c1
iconcoords {672.0 504.0}
labelcoords {672.0 536.0}
interface-peer {e0 n19}
}
node n11 {
type router
model mdr
network-config {
hostname n11
!
interface eth1
ip address 10.0.9.2/24
ipv6 address 2001:9::2/64
!
interface eth0
ip address 10.0.8.1/32
ipv6 address 2001:8::1/128
!
}
canvas c1
iconcoords {288.0 624.0}
labelcoords {288.0 656.0}
interface-peer {eth0 n15}
interface-peer {eth1 n3}
custom-config {
custom-config-id service:zebra
custom-command zebra
config {
files=('/usr/local/etc/quagga/Quagga.conf', 'quaggaboot.sh', '/usr/local/etc/quagga/vtysh.conf', )
}
}
custom-config {
custom-config-id service:zebra:/usr/local/etc/quagga/Quagga.conf
custom-command /usr/local/etc/quagga/Quagga.conf
config {
interface eth0
ip address 10.0.8.1/32
ipv6 address 2001:8::1/128
ipv6 ospf6 instance-id 65
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 6
ipv6 ospf6 retransmit-interval 5
ipv6 ospf6 network manet-designated-router
ipv6 ospf6 diffhellos
ipv6 ospf6 adjacencyconnectivity uniconnected
ipv6 ospf6 lsafullness mincostlsa
!
interface eth1
ip address 10.0.9.2/24
ipv6 address 2001:9::2/64
!
router ospf
router-id 10.0.8.1
network 10.0.8.1/32 area 0
network 10.0.9.0/24 area 0
redistribute connected metric-type 1
redistribute ospf6 metric-type 1
!
router ospf6
router-id 10.0.8.1
interface eth0 area 0.0.0.0
redistribute connected
redistribute ospf
!
}
}
services {zebra OSPFv2 OSPFv3MDR vtysh IPForward}
}
node n12 {
type router
model mdr
network-config {
hostname n12
!
interface eth0
ip address 10.0.8.2/32
ipv6 address 2001:8::2/128
!
}
canvas c1
iconcoords {504.0 792.0}
labelcoords {504.0 824.0}
interface-peer {eth0 n15}
}
node n13 {
type router
model mdr
network-config {
hostname n13
!
interface eth0
ip address 10.0.8.3/32
ipv6 address 2001:8::3/128
!
}
canvas c1
iconcoords {552.0 672.0}
labelcoords {552.0 704.0}
interface-peer {eth0 n15}
}
node n14 {
type router
model mdr
network-config {
hostname n14
!
interface eth0
ip address 10.0.8.4/32
ipv6 address 2001:8::4/128
!
}
canvas c1
iconcoords {720.0 792.0}
labelcoords {720.0 824.0}
interface-peer {eth0 n15}
}
node n15 {
type wlan
network-config {
hostname wlan15
!
interface wireless
ip address 10.0.8.0/32
ipv6 address 2001:8::0/128
!
mobmodel
coreapi
basic_range
!
}
custom-config {
custom-config-id basic_range
custom-command {3 3 9 9 9}
config {
range=275
bandwidth=54000000
jitter=0
delay=20000
error=0
}
}
canvas c1
iconcoords {120.0 768.0}
labelcoords {120.0 800.0}
interface-peer {e0 n11}
interface-peer {e1 n12}
interface-peer {e2 n13}
interface-peer {e3 n14}
}
node n16 {
type router
model PC
network-config {
hostname n16
!
interface eth0
ip address 10.0.1.20/24
ipv6 address 2001:1::20/64
!
}
canvas c1
iconcoords {96.0 456.0}
labelcoords {96.0 488.0}
interface-peer {eth0 n4}
}
node n17 {
type router
model PC
network-config {
hostname n17
!
interface eth0
ip address 10.0.1.21/24
ipv6 address 2001:1::21/64
!
}
canvas c1
iconcoords {96.0 600.0}
labelcoords {96.0 632.0}
interface-peer {eth0 n4}
}
node n18 {
type router
model PC
network-config {
hostname n18
!
interface eth0
ip address 10.0.1.22/24
ipv6 address 2001:1::22/64
!
}
canvas c1
iconcoords {96.0 528.0}
labelcoords {96.0 560.0}
interface-peer {eth0 n4}
}
node n19 {
type router
model router
network-config {
hostname n19
!
interface eth3
ip address 10.0.7.1/24
ipv6 address 2001:7::1/64
!
interface eth2
ip address 10.0.6.1/24
ipv6 address 2001:6::1/64
!
interface eth1
ip address 10.0.5.1/24
ipv6 address 2001:5::1/64
!
interface eth0
ip address 10.0.4.2/24
ipv6 address 2001:4::2/64
!
}
canvas c1
iconcoords {576.0 408.0}
labelcoords {576.0 436.0}
interface-peer {eth0 n3}
interface-peer {eth1 n2}
interface-peer {eth2 n9}
interface-peer {eth3 n10}
}
node n20 {
type router
model mdr
network-config {
hostname n20
!
interface eth1
ip address 10.0.11.1/24
ipv6 address 2001:11::1/64
!
interface eth0
ip address 10.0.10.1/32
ipv6 address 2001:10::1/128
!
}
canvas c1
iconcoords {288.0 168.0}
labelcoords {288.0 200.0}
interface-peer {eth0 n24}
interface-peer {eth1 n1}
custom-config {
custom-config-id service:zebra
custom-command zebra
config {
files=('/usr/local/etc/quagga/Quagga.conf', 'quaggaboot.sh', '/usr/local/etc/quagga/vtysh.conf', )
}
}
custom-config {
custom-config-id service:zebra:/usr/local/etc/quagga/Quagga.conf
custom-command /usr/local/etc/quagga/Quagga.conf
config {
interface eth0
ip address 10.0.10.1/32
ipv6 address 2001:10::1/128
ipv6 ospf6 instance-id 65
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 6
ipv6 ospf6 retransmit-interval 5
ipv6 ospf6 network manet-designated-router
ipv6 ospf6 diffhellos
ipv6 ospf6 adjacencyconnectivity uniconnected
ipv6 ospf6 lsafullness mincostlsa
!
interface eth1
ip address 10.0.11.1/24
ipv6 address 2001:11::1/64
!
router ospf
router-id 10.0.10.1
network 10.0.10.1/32 area 0
network 10.0.11.0/24 area 0
redistribute connected metric-type 1
redistribute ospf6 metric-type 1
!
router ospf6
router-id 10.0.10.1
interface eth0 area 0.0.0.0
redistribute connected
redistribute ospf
!
}
}
services {zebra OSPFv2 OSPFv3MDR vtysh IPForward}
}
node n21 {
type router
model mdr
network-config {
hostname n21
!
interface eth0
ip address 10.0.10.2/32
ipv6 address 2001:10::2/128
!
}
canvas c1
iconcoords {240.0 48.0}
labelcoords {240.0 80.0}
interface-peer {eth0 n24}
}
node n22 {
type router
model mdr
network-config {
hostname n22
!
interface eth0
ip address 10.0.10.3/32
ipv6 address 2001:10::3/128
!
}
canvas c1
iconcoords {504.0 48.0}
labelcoords {504.0 80.0}
interface-peer {eth0 n24}
}
node n23 {
type router
model mdr
network-config {
hostname n23
!
interface eth0
ip address 10.0.10.4/32
ipv6 address 2001:10::4/128
!
}
canvas c1
iconcoords {144.0 168.0}
labelcoords {144.0 200.0}
interface-peer {eth0 n24}
}
node n24 {
type wlan
network-config {
hostname wlan24
!
interface wireless
ip address 10.0.10.0/32
ipv6 address 2001:10::0/128
!
mobmodel
coreapi
emane_ieee80211abg
!
}
custom-config {
custom-config-id basic_range
custom-command {3 3 9 9 9}
config {
range=275
bandwidth=54000000
jitter=0
delay=20000
error=0
}
}
canvas c1
iconcoords {48.0 72.0}
labelcoords {48.0 104.0}
interface-peer {e0 n20}
interface-peer {e1 n21}
interface-peer {e2 n22}
interface-peer {e3 n23}
}
node n25 {
type lanswitch
network-config {
hostname n25
!
}
canvas c1
iconcoords {624.0 192.0}
labelcoords {624.0 216.0}
interface-peer {e0 n5}
interface-peer {e1 n26}
}
node n26 {
type router
model PC
network-config {
hostname n26
!
interface eth0
ip address 10.0.0.20/24
ipv6 address 2001:0::20/64
!
}
canvas c1
iconcoords {720.0 144.0}
labelcoords {720.0 176.0}
interface-peer {eth0 n25}
}
link l1 {
nodes {n2 n5}
bandwidth 0
}
link l2 {
delay 8000
nodes {n3 n4}
bandwidth 1024000
}
link l3 {
nodes {n1 n3}
bandwidth 0
}
link l4 {
nodes {n1 n2}
bandwidth 0
}
link l5 {
nodes {n5 n6}
bandwidth 0
}
link l6 {
nodes {n5 n7}
bandwidth 0
}
link l7 {
nodes {n5 n8}
bandwidth 0
}
link l8 {
nodes {n3 n19}
bandwidth 0
}
link l9 {
nodes {n19 n2}
bandwidth 0
}
link l10 {
nodes {n4 n16}
bandwidth 0
}
link l11 {
nodes {n4 n17}
bandwidth 0
}
link l12 {
nodes {n4 n18}
bandwidth 0
}
link l13 {
nodes {n19 n9}
}
link l14 {
nodes {n19 n10}
}
link l15 {
nodes {n15 n11}
}
link l16 {
nodes {n15 n12}
}
link l17 {
nodes {n15 n13}
}
link l18 {
nodes {n15 n14}
}
link l19 {
nodes {n3 n11}
bandwidth 0
}
link l20 {
nodes {n24 n20}
}
link l21 {
nodes {n24 n21}
}
link l22 {
nodes {n24 n22}
}
link l23 {
nodes {n24 n23}
}
link l24 {
nodes {n20 n1}
bandwidth 0
}
link l25 {
delay 5000
nodes {n25 n5}
bandwidth 0
}
link l26 {
nodes {n25 n26}
bandwidth 0
}
annotation a1 {
iconcoords {45.0 431.0 220.0 642.0}
type rectangle
label {}
labelcolor black
fontfamily {Arial}
fontsize {12}
color #e6f4f4
width 0
border black
rad 0
canvas c1
}
annotation a2 {
iconcoords {642 189 821 404}
type rectangle
label {}
labelcolor black
fontfamily {Arial}
fontsize {12}
color #e6f4f4
width 0
border black
rad 0
canvas c1
}
annotation a3 {
iconcoords {200 218 655 463}
type rectangle
label {}
labelcolor black
fontfamily {Arial}
fontsize {12}
color #f4f1f0
width 0
border black
rad 0
canvas c1
}
annotation a4 {
iconcoords {600.0 48.0}
type text
label {Kitchen Sink Scenario}
labelcolor black
fontfamily {FreeSans}
fontsize {16}
effects {bold}
canvas c1
}
annotation a5 {
iconcoords {648.0 72.0}
type text
label {see scenario comments}
labelcolor black
fontfamily {FreeSans}
fontsize {12}
canvas c1
}
canvas c1 {
name {Canvas1}
refpt {0 0 47.5791667 -122.132322 150}
scale {150.0}
size {1000 1000}
}
option global {
interface_names no
ip_addresses yes
ipv6_addresses yes
node_labels yes
link_labels yes
ipsec_configs yes
exec_errors yes
show_api no
background_images no
annotations yes
grid yes
traffic_start 0
}
option session {
enablesdt=1
}

248
gui/configs/sample2-ssh.imn Normal file
View file

@ -0,0 +1,248 @@
node n8 {
type router
model router
network-config {
hostname n8
!
interface eth3
ip address 10.0.6.2/24
ipv6 address a:6::2/64
!
interface eth2
ip address 10.0.3.1/24
ipv6 address a:3::1/64
!
interface eth1
ip address 10.0.1.1/24
ipv6 address a:1::1/64
!
interface eth0
ip address 10.0.0.1/24
ipv6 address a:0::1/64
!
}
canvas c1
iconcoords {264.0 168.0}
labelcoords {264.0 196.0}
interface-peer {eth0 n1}
interface-peer {eth1 n4}
interface-peer {eth2 n7}
interface-peer {eth3 n6}
}
node n1 {
type router
model router
network-config {
hostname n1
!
interface eth3
ip address 10.0.5.1/24
ipv6 address a:5::1/64
!
interface eth2
ip address 10.0.4.2/24
ipv6 address a:4::2/64
!
interface eth1
ip address 10.0.2.1/24
ipv6 address a:2::1/64
!
interface eth0
ip address 10.0.0.2/24
ipv6 address a:0::2/64
!
}
canvas c1
iconcoords {528.0 312.0}
labelcoords {528.0 340.0}
interface-peer {eth0 n8}
interface-peer {eth1 n5}
interface-peer {eth2 n7}
interface-peer {eth3 n6}
}
node n2 {
type router
model host
cpu {{min 0} {max 100} {weight 1}}
network-config {
hostname sshserver
!
interface eth0
ip address 10.0.2.10/24
ipv6 address a:2::10/64
!
}
canvas c1
iconcoords {732.0 84.0}
labelcoords {671.0 95.0}
interface-peer {eth0 n5}
}
node n3 {
type router
model PC
cpu {{min 0} {max 100} {weight 1}}
network-config {
hostname sshclient
!
interface eth0
ip address 10.0.1.20/24
ipv6 address a:1::20/64
!
}
canvas c1
iconcoords {72.0 252.0}
labelcoords {86.0 295.0}
interface-peer {eth0 n4}
}
node n4 {
type lanswitch
network-config {
hostname n4
!
}
canvas c1
iconcoords {120.0 120.0}
labelcoords {120.0 148.0}
interface-peer {e0 n3}
interface-peer {e1 n8}
}
node n5 {
type lanswitch
network-config {
hostname n5
!
}
canvas c1
iconcoords {708.0 204.0}
labelcoords {708.0 232.0}
interface-peer {e0 n1}
interface-peer {e1 n2}
}
node n6 {
type router
model router
network-config {
hostname n6
!
interface eth1
ip address 10.0.6.1/24
ipv6 address a:6::1/64
!
interface eth0
ip address 10.0.5.2/24
ipv6 address a:5::2/64
!
}
canvas c1
iconcoords {480.0 132.0}
labelcoords {480.0 160.0}
interface-peer {eth0 n1}
interface-peer {eth1 n8}
}
node n7 {
type router
model router
network-config {
hostname n7
!
interface eth1
ip address 10.0.4.1/24
ipv6 address a:4::1/64
!
interface eth0
ip address 10.0.3.2/24
ipv6 address a:3::2/64
!
}
canvas c1
iconcoords {312.0 348.0}
labelcoords {312.0 376.0}
interface-peer {eth0 n8}
interface-peer {eth1 n1}
}
link l0 {
nodes {n8 n1}
bandwidth 0
}
link l1 {
nodes {n4 n3}
bandwidth 0
}
link l2 {
nodes {n4 n8}
bandwidth 0
}
link l3 {
nodes {n1 n5}
bandwidth 0
}
link l4 {
nodes {n5 n2}
bandwidth 0
}
link l5 {
nodes {n8 n7}
bandwidth 0
}
link l6 {
nodes {n7 n1}
bandwidth 0
}
link l7 {
nodes {n1 n6}
bandwidth 0
}
link l8 {
nodes {n6 n8}
bandwidth 0
}
annotation a0 {
iconcoords {202 75 612 405}
type rectangle
label {provider network}
labelcolor black
fontfamily {Arial}
fontsize 10
color #f8f8d6
width 0
border black
rad 25
canvas c1
}
canvas c1 {
name {Canvas1}
}
option global {
interface_names no
ip_addresses yes
ipv6_addresses yes
node_labels yes
link_labels yes
ipsec_configs yes
remote_exec no
exec_errors yes
show_api no
background_images no
annotations yes
grid yes
}

754
gui/configs/sample3-bgp.imn Normal file
View file

@ -0,0 +1,754 @@
node n1 {
type router
model router
network-config {
hostname router1
!
interface eth2
ip address 10.0.8.2/24
!
interface eth1
ip address 10.0.6.1/24
!
interface eth0
ip address 10.0.5.2/24
!
}
iconcoords {168.0 264.0}
labelcoords {168.0 288.0}
interface-peer {eth0 n16}
interface-peer {eth1 n2}
interface-peer {eth2 n3}
canvas c1
services {zebra BGP vtysh IPForward}
custom-config {
custom-config-id service:zebra:/usr/local/etc/quagga/Quagga.conf
custom-command /usr/local/etc/quagga/Quagga.conf
config {
interface eth2
ip address 10.0.8.2/24
!
interface eth1
ip address 10.0.6.1/24
!
interface eth0
ip address 10.0.5.2/24
!
router bgp 105
bgp router-id 10.0.8.2
redistribute connected
neighbor 10.0.6.2 remote-as 105
neighbor 10.0.6.2 next-hop-self
neighbor 10.0.5.1 remote-as 105
neighbor 10.0.5.1 next-hop-self
neighbor 10.0.8.1 remote-as 2901
neighbor 10.0.8.1 next-hop-self
!
}
}
custom-config {
custom-config-id service:zebra
custom-command zebra
config {
('/usr/local/etc/quagga', '/var/run/quagga')
('/usr/local/etc/quagga/Quagga.conf', 'quaggaboot.sh')
35
('sh quaggaboot.sh zebra',)
('killall zebra',)
}
}
}
node n2 {
type router
model router
network-config {
hostname router2
!
interface eth2
ip address 10.0.9.1/24
!
interface eth1
ip address 10.0.7.1/24
!
interface eth0
ip address 10.0.6.2/24
!
}
iconcoords {312.0 168.0}
labelcoords {312.0 192.0}
interface-peer {eth0 n1}
interface-peer {eth1 n16}
interface-peer {eth2 n6}
canvas c1
services {zebra BGP vtysh IPForward}
custom-config {
custom-config-id service:zebra:/usr/local/etc/quagga/Quagga.conf
custom-command /usr/local/etc/quagga/Quagga.conf
config {
interface eth2
ip address 10.0.9.1/24
!
interface eth1
ip address 10.0.7.1/24
!
interface eth0
ip address 10.0.6.2/24
!
router bgp 105
bgp router-id 10.0.8.2
redistribute connected
neighbor 10.0.7.2 remote-as 105
neighbor 10.0.7.2 next-hop-self
neighbor 10.0.6.1 remote-as 105
neighbor 10.0.6.1 next-hop-self
neighbor 10.0.9.2 remote-as 2902
neighbor 10.0.9.2 next-hop-self
!
}
}
custom-config {
custom-config-id service:zebra
custom-command zebra
config {
('/usr/local/etc/quagga', '/var/run/quagga')
('/usr/local/etc/quagga/Quagga.conf', 'quaggaboot.sh')
35
('sh quaggaboot.sh zebra',)
('killall zebra',)
}
}
}
node n3 {
type router
model router
network-config {
hostname router3
!
interface eth1
ip address 10.0.8.1/24
!
interface eth0
ip address 10.0.2.1/24
!
}
iconcoords {96.0 408.0}
labelcoords {96.0 432.0}
interface-peer {eth0 n4}
interface-peer {eth1 n1}
canvas c1
services {zebra BGP vtysh IPForward}
custom-config {
custom-config-id service:zebra:/usr/local/etc/quagga/Quagga.conf
custom-command /usr/local/etc/quagga/Quagga.conf
config {
interface eth1
ip address 10.0.8.1/24
!
interface eth0
ip address 10.0.2.1/24
!
router bgp 2901
bgp router-id 10.0.2.1
redistribute connected
neighbor 10.0.2.2 remote-as 2901
neighbor 10.0.2.2 next-hop-self
neighbor 10.0.8.2 remote-as 105
neighbor 10.0.8.2 next-hop-self
!
}
}
custom-config {
custom-config-id service:zebra
custom-command zebra
config {
('/usr/local/etc/quagga', '/var/run/quagga')
('/usr/local/etc/quagga/Quagga.conf', 'quaggaboot.sh')
35
('sh quaggaboot.sh zebra',)
('killall zebra',)
}
}
}
node n4 {
type router
model router
network-config {
hostname router4
!
interface eth0
ip address 10.0.2.2/24
!
interface eth1
ip address 10.0.10.1/24
!
interface eth2
ip address 10.0.0.1/24
!
}
iconcoords {240.0 432.0}
labelcoords {240.0 456.0}
interface-peer {eth2 n9}
interface-peer {eth0 n3}
interface-peer {eth1 n7}
canvas c1
services {zebra BGP vtysh IPForward}
custom-config {
custom-config-id service:zebra:/usr/local/etc/quagga/Quagga.conf
custom-command /usr/local/etc/quagga/Quagga.conf
config {
interface eth0
ip address 10.0.2.2/24
!
interface eth1
ip address 10.0.10.1/24
!
interface eth2
ip address 10.0.0.1/24
!
router bgp 2901
bgp router-id 10.0.10.1
redistribute connected
neighbor 10.0.2.1 remote-as 2901
neighbor 10.0.2.1 next-hop-self
neighbor 10.0.10.2 remote-as 2902
neighbor 10.0.10.2 next-hop-self
network 10.0.0.0 mask 255.255.255.0
!
}
}
custom-config {
custom-config-id service:zebra
custom-command zebra
config {
('/usr/local/etc/quagga', '/var/run/quagga')
('/usr/local/etc/quagga/Quagga.conf', 'quaggaboot.sh')
35
('sh quaggaboot.sh zebra',)
('killall zebra',)
}
}
}
node n5 {
type router
model router
network-config {
hostname router5
!
interface eth1
ip address 10.0.4.1/24
!
interface eth0
ip address 10.0.3.2/24
!
interface eth2
ip address 10.0.1.1/24
!
}
iconcoords {528.0 336.0}
labelcoords {528.0 360.0}
interface-peer {eth2 n8}
interface-peer {eth0 n7}
interface-peer {eth1 n6}
canvas c1
services {zebra BGP vtysh IPForward}
custom-config {
custom-config-id service:zebra:/usr/local/etc/quagga/Quagga.conf
custom-command /usr/local/etc/quagga/Quagga.conf
config {
interface eth1
ip address 10.0.4.1/24
!
interface eth0
ip address 10.0.3.2/24
!
interface eth2
ip address 10.0.1.1/24
!
router bgp 2902
bgp router-id 10.0.4.1
redistribute connected
neighbor 10.0.4.2 remote-as 2902
neighbor 10.0.4.2 next-hop-self
neighbor 10.0.3.1 remote-as 2902
neighbor 10.0.3.1 next-hop-self
network 10.0.1.0 mask 255.255.255.0
!
}
}
custom-config {
custom-config-id service:zebra
custom-command zebra
config {
('/usr/local/etc/quagga', '/var/run/quagga')
('/usr/local/etc/quagga/Quagga.conf', 'quaggaboot.sh')
35
('sh quaggaboot.sh zebra',)
('killall zebra',)
}
}
}
node n6 {
type router
model router
network-config {
hostname router6
!
interface eth1
ip address 10.0.9.2/24
!
interface eth0
ip address 10.0.4.2/24
!
router bgp 2902
bgp router-id 10.0.9.2
redistribute connected
neighbor 10.0.4.1 remote-as 2902
neighbor 10.0.4.1 next-hop-self
neighbor 10.0.9.1 remote-as 105
neighbor 10.0.9.1 next-hop-self
!
}
iconcoords {624.0 240.0}
labelcoords {624.0 264.0}
interface-peer {eth0 n5}
interface-peer {eth1 n2}
canvas c1
services {zebra BGP vtysh IPForward}
custom-config {
custom-config-id service:zebra:/usr/local/etc/quagga/Quagga.conf
custom-command /usr/local/etc/quagga/Quagga.conf
config {
interface eth1
ip address 10.0.9.2/24
!
interface eth0
ip address 10.0.4.2/24
!
router bgp 2902
bgp router-id 10.0.9.2
redistribute connected
neighbor 10.0.4.1 remote-as 2902
neighbor 10.0.4.1 next-hop-self
neighbor 10.0.9.1 remote-as 105
neighbor 10.0.9.1 next-hop-self
!
}
}
custom-config {
custom-config-id service:zebra
custom-command zebra
config {
('/usr/local/etc/quagga', '/var/run/quagga')
('/usr/local/etc/quagga/Quagga.conf', 'quaggaboot.sh')
35
('sh quaggaboot.sh zebra',)
('killall zebra',)
}
}
}
node n7 {
type router
model router
network-config {
hostname router7
!
interface eth1
ip address 10.0.10.2/24
!
interface eth0
ip address 10.0.3.1/24
!
}
iconcoords {528.0 456.0}
labelcoords {528.0 480.0}
interface-peer {eth0 n5}
interface-peer {eth1 n4}
canvas c1
services {zebra BGP vtysh IPForward}
custom-config {
custom-config-id service:zebra:/usr/local/etc/quagga/Quagga.conf
custom-command /usr/local/etc/quagga/Quagga.conf
config {
interface eth1
ip address 10.0.10.2/24
!
interface eth0
ip address 10.0.3.1/24
!
router bgp 2902
bgp router-id 10.0.3.1
redistribute connected
neighbor 10.0.3.2 remote-as 2902
neighbor 10.0.3.2 next-hop-self
neighbor 10.0.10.1 remote-as 2901
neighbor 10.0.10.1 next-hop-self
!
}
}
custom-config {
custom-config-id service:zebra
custom-command zebra
config {
('/usr/local/etc/quagga', '/var/run/quagga')
('/usr/local/etc/quagga/Quagga.conf', 'quaggaboot.sh')
35
('sh quaggaboot.sh zebra',)
('killall zebra',)
}
}
}
node n8 {
type lanswitch
network-config {
hostname lanswitch8
!
}
iconcoords {672.0 432.0}
labelcoords {672.0 456.0}
interface-peer {e0 n5}
interface-peer {e1 n10}
interface-peer {e2 n11}
canvas c1
}
node n9 {
type hub
network-config {
hostname hub9
!
}
iconcoords {120.0 504.0}
labelcoords {120.0 528.0}
interface-peer {e0 n4}
interface-peer {e1 n15}
interface-peer {e2 n14}
interface-peer {e3 n13}
interface-peer {e4 n12}
canvas c1
}
node n10 {
type router
model host
network-config {
hostname host10
!
interface eth0
ip address 10.0.1.10/24
!
}
iconcoords {576.0 552.0}
labelcoords {576.0 584.0}
interface-peer {eth0 n8}
canvas c1
}
node n11 {
type router
model host
network-config {
hostname host11
!
interface eth0
ip address 10.0.1.11/24
!
}
iconcoords {696.0 552.0}
labelcoords {696.0 584.0}
interface-peer {eth0 n8}
canvas c1
}
node n12 {
type router
model PC
network-config {
hostname pc12
!
interface eth0
ip address 10.0.0.23/24
!
}
iconcoords {288.0 576.0}
labelcoords {288.0 608.0}
interface-peer {eth0 n9}
canvas c1
}
node n13 {
type router
model PC
network-config {
hostname pc13
!
interface eth0
ip address 10.0.0.22/24
!
}
iconcoords {216.0 600.0}
labelcoords {216.0 632.0}
interface-peer {eth0 n9}
canvas c1
}
node n14 {
type router
model PC
network-config {
hostname pc14
!
interface eth0
ip address 10.0.0.21/24
!
}
iconcoords {120.0 624.0}
labelcoords {120.0 656.0}
interface-peer {eth0 n9}
canvas c1
}
node n15 {
type router
model PC
network-config {
hostname pc15
!
interface eth0
ip address 10.0.0.20/24
!
}
iconcoords {24.0 576.0}
labelcoords {24.0 608.0}
interface-peer {eth0 n9}
canvas c1
}
node n16 {
type router
model router
network-config {
hostname router0
!
interface eth0
ip address 10.0.5.1/24
!
interface eth1
ip address 10.0.7.2/24
!
}
iconcoords {120.0 120.0}
labelcoords {120.0 144.0}
interface-peer {eth0 n1}
interface-peer {eth1 n2}
canvas c1
services {zebra BGP vtysh IPForward}
custom-config {
custom-config-id service:zebra:/usr/local/etc/quagga/Quagga.conf
custom-command /usr/local/etc/quagga/Quagga.conf
config {
interface eth0
ip address 10.0.5.1/24
!
interface eth1
ip address 10.0.7.2/24
!
router bgp 105
bgp router-id 10.0.5.1
redistribute connected
neighbor 10.0.7.1 remote-as 105
neighbor 10.0.7.1 next-hop-self
neighbor 10.0.5.2 remote-as 105
neighbor 10.0.5.2 next-hop-self
!
}
}
custom-config {
custom-config-id service:zebra
custom-command zebra
config {
('/usr/local/etc/quagga', '/var/run/quagga')
('/usr/local/etc/quagga/Quagga.conf', 'quaggaboot.sh')
35
('sh quaggaboot.sh zebra',)
('killall zebra',)
}
}
}
link l0 {
nodes {n9 n4}
bandwidth 100000000
}
link l1 {
nodes {n8 n5}
bandwidth 100000000
}
link l2 {
nodes {n15 n9}
bandwidth 100000000
}
link l3 {
nodes {n14 n9}
bandwidth 100000000
}
link l4 {
nodes {n13 n9}
bandwidth 100000000
}
link l5 {
nodes {n12 n9}
bandwidth 100000000
}
link l6 {
nodes {n10 n8}
bandwidth 100000000
}
link l7 {
nodes {n11 n8}
bandwidth 100000000
}
link l8 {
nodes {n3 n4}
bandwidth 2048000
delay 2500
}
link l9 {
nodes {n7 n5}
bandwidth 2048000
delay 2500
}
link l10 {
nodes {n5 n6}
bandwidth 2048000
delay 2500
}
link l11 {
nodes {n16 n1}
bandwidth 2048000
delay 2500
}
link l12 {
nodes {n1 n2}
bandwidth 2048000
delay 2500
}
link l13 {
nodes {n2 n16}
bandwidth 2048000
delay 2500
}
link l14 {
nodes {n3 n1}
bandwidth 10000000
delay 650000
}
link l15 {
nodes {n2 n6}
bandwidth 10000000
delay 650000
}
link l16 {
nodes {n4 n7}
bandwidth 5000000
delay 7500
}
annotation a0 {
iconcoords { 70 55 345 330 }
type oval
label {AS 105}
labelcolor #CFCFAC
fontfamily {Arial}
fontsize {12}
color #FFFFCC
width 0
border black
canvas c1
}
annotation a1 {
iconcoords { 470 170 740 630 }
type oval
label {AS 2902}
labelcolor #C0C0CF
fontfamily {Arial}
fontsize {12}
color #F0F0FF
width 0
border black
canvas c1
}
annotation a2 {
iconcoords { 0 355 320 660 }
type oval
label {AS 2901}
labelcolor #C0C0CF
fontfamily {Arial}
fontsize {12}
color #F0F0FF
width 0
border black
canvas c1
}
annotation a10 {
type text
canvas c1
iconcoords { 450 55 }
color #FFCCCC
fontsize {20}
label {Sample Topology 1}
}
canvas c1 {
name {Canvas1}
size {900 706.0}
}
option global {
interface_names yes
ip_addresses yes
ipv6_addresses yes
node_labels yes
link_labels yes
ipsec_configs yes
remote_exec no
exec_errors yes
show_api no
background_images no
annotations yes
grid yes
}

BIN
gui/configs/sample4-bg.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

View file

@ -0,0 +1,537 @@
comments {
Joe Macker NRL
Last updated: Sept 2010
Nov 2010 Jeff Ahrenholz - updated for new services model and renamed
(was 2groups_10nodes_smf.imn)
This scenario is a simple SMF example for testing multicast within CORE.
There are several dependencies for these scenarios to work;
nrlsmf must be installed and the binary must be within the path when executing.
This should also be built along with protolib from the NRL pf.itd.nrl.navy.mil
repository or from nightly snapshots by using the Makefile.core build file.
This avoids some of the potential problems that arise with protolib call and
proper netns support in various kernel releases. For now the Makefile.core
approach patches around the problem.
This scenario will launch 10 quagga manet-ospf and smf classical flooding
router nodes. A mobility pattern can be used to cause periodic fragmentation
and coalescing among 5 groups that move together as a somewhat randomized
cluster.
Within netns and core the following must be used as nrlsmf params. hash mode
and instance ids.
This script uses nodenames as instance ids and MD5 as the hash mode.
Distributed optimized relay selection is not provided in this example but works
in nrlsmf with both quagga manetospf-mdr and with nrlolsr or newer nhdp code
being developed. Relays can also be manually configured if that is of some use
in a scneario. Classical flodding still provides duplication detection in this
mode but of course has additional overhead.
-----
Traffic testing etc. You can try sending your own multicast apps or use a
testtool.
mgen is recommended as a test tool, but ping -t 5 224.225.226.227 type testing
can also be used.
an example mgen script to source multicast from a terminal window is as follows:
mgen event "on 1 udp dst 224.225.226.227/5000 periodic [1 500]"
this sends 500 bytes packets every second. See mgen users guide for the myriad
of choices/options.
on a receive node terminal the follow can work.
mgen event "join 224.225.226.227" event "listen udp 5000" output <file>
without output it will stream to stdout.
}
node n1 {
type router
model mdr
network-config {
hostname n1
!
interface eth0
ip address 10.0.0.1/32
ipv6 address a:0::1/128
!
}
iconcoords {186.2364578872143 137.89039496012572}
labelcoords {186.2364578872143 161.89039496012572}
canvas c1
interface-peer {eth0 n11}
custom-image $CORE_DATA_DIR/icons/normal/router_green.gif
services {zebra OSPFv3MDR vtysh SMF IPForward UserDefined}
custom-config {
custom-config-id service:UserDefined:custom-post-config-commands.sh
custom-command custom-post-config-commands.sh
config {
route add default dev eth0
route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
}
}
custom-config {
custom-config-id service:UserDefined
custom-command UserDefined
config {
files=('custom-post-config-commands.sh', )
startidx=35
cmdup=('sh custom-post-config-commands.sh', )
}
}
}
node n2 {
type router
model mdr
network-config {
hostname n2
!
interface eth0
ip address 10.0.0.2/32
ipv6 address a:0::2/128
!
}
iconcoords {49.97421009111123 297.31725181124926}
labelcoords {49.97421009111123 321.31725181124926}
canvas c1
interface-peer {eth0 n11}
custom-image $CORE_DATA_DIR/icons/normal/router_green.gif
services {zebra OSPFv3MDR vtysh SMF IPForward UserDefined}
custom-config {
custom-config-id service:UserDefined:custom-post-config-commands.sh
custom-command custom-post-config-commands.sh
config {
route add default dev eth0
route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
}
}
custom-config {
custom-config-id service:UserDefined
custom-command UserDefined
config {
files=('custom-post-config-commands.sh', )
startidx=35
cmdup=('sh custom-post-config-commands.sh', )
}
}
}
node n3 {
type router
model mdr
network-config {
hostname n3
!
interface eth0
ip address 10.0.0.3/32
ipv6 address a:0::3/128
!
}
iconcoords {176.46110847174833 328.14864514530865}
labelcoords {176.46110847174833 352.14864514530865}
canvas c1
interface-peer {eth0 n11}
custom-image $CORE_DATA_DIR/icons/normal/router_green.gif
services {zebra OSPFv3MDR vtysh SMF IPForward UserDefined}
custom-config {
custom-config-id service:UserDefined:custom-post-config-commands.sh
custom-command custom-post-config-commands.sh
config {
route add default dev eth0
route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
}
}
custom-config {
custom-config-id service:UserDefined
custom-command UserDefined
config {
files=('custom-post-config-commands.sh', )
startidx=35
cmdup=('sh custom-post-config-commands.sh', )
}
}
}
node n4 {
type router
model mdr
network-config {
hostname n4
!
interface eth0
ip address 10.0.0.4/32
ipv6 address a:0::4/128
!
}
iconcoords {145.04062040794378 195.27962082775758}
labelcoords {145.04062040794378 219.27962082775758}
canvas c1
interface-peer {eth0 n11}
custom-image $CORE_DATA_DIR/icons/normal/router_green.gif
services {zebra OSPFv3MDR vtysh SMF IPForward UserDefined}
custom-config {
custom-config-id service:UserDefined:custom-post-config-commands.sh
custom-command custom-post-config-commands.sh
config {
route add default dev eth0
route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
}
}
custom-config {
custom-config-id service:UserDefined
custom-command UserDefined
config {
files=('custom-post-config-commands.sh', )
startidx=35
cmdup=('sh custom-post-config-commands.sh', )
}
}
}
node n5 {
type router
model mdr
network-config {
hostname n5
!
interface eth0
ip address 10.0.0.5/32
ipv6 address a:0::5/128
!
}
iconcoords {137.9101266949479 257.51849231830334}
labelcoords {137.9101266949479 281.51849231830334}
canvas c1
interface-peer {eth0 n11}
custom-image $CORE_DATA_DIR/icons/normal/router_green.gif
services {zebra OSPFv3MDR vtysh SMF IPForward UserDefined}
custom-config {
custom-config-id service:UserDefined:custom-post-config-commands.sh
custom-command custom-post-config-commands.sh
config {
route add default dev eth0
route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
}
}
custom-config {
custom-config-id service:UserDefined
custom-command UserDefined
config {
files=('custom-post-config-commands.sh', )
startidx=35
cmdup=('sh custom-post-config-commands.sh', )
}
}
}
node n6 {
type router
model mdr
network-config {
hostname n6
!
interface eth0
ip address 10.0.0.6/32
ipv6 address a:0::6/128
!
}
iconcoords {119.15850324229558 93.2505296351548}
labelcoords {119.15850324229558 117.2505296351548}
canvas c1
interface-peer {eth0 n11}
custom-image $CORE_DATA_DIR/icons/normal/router_red.gif
services {zebra OSPFv3MDR vtysh SMF IPForward UserDefined}
custom-config {
custom-config-id service:UserDefined:custom-post-config-commands.sh
custom-command custom-post-config-commands.sh
config {
route add default dev eth0
route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
}
}
custom-config {
custom-config-id service:UserDefined
custom-command UserDefined
config {
files=('custom-post-config-commands.sh', )
startidx=35
cmdup=('sh custom-post-config-commands.sh', )
}
}
}
node n7 {
type router
model mdr
network-config {
hostname n7
!
interface eth0
ip address 10.0.0.7/32
ipv6 address a:0::7/128
!
}
iconcoords {79.1102256826161 50.123535235375556}
labelcoords {79.1102256826161 74.12353523537556}
canvas c1
interface-peer {eth0 n11}
custom-image $CORE_DATA_DIR/icons/normal/router_red.gif
services {zebra OSPFv3MDR vtysh SMF IPForward UserDefined}
custom-config {
custom-config-id service:UserDefined:custom-post-config-commands.sh
custom-command custom-post-config-commands.sh
config {
route add default dev eth0
route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
}
}
custom-config {
custom-config-id service:UserDefined
custom-command UserDefined
config {
files=('custom-post-config-commands.sh', )
startidx=35
cmdup=('sh custom-post-config-commands.sh', )
}
}
}
node n8 {
type router
model mdr
network-config {
hostname n8
!
interface eth0
ip address 10.0.0.8/32
ipv6 address a:0::8/128
!
}
iconcoords {159.90259315202974 8.220638318379141}
labelcoords {159.90259315202974 32.220638318379144}
canvas c1
interface-peer {eth0 n11}
custom-image $CORE_DATA_DIR/icons/normal/router_red.gif
services {zebra OSPFv3MDR vtysh SMF IPForward UserDefined}
custom-config {
custom-config-id service:UserDefined:custom-post-config-commands.sh
custom-command custom-post-config-commands.sh
config {
route add default dev eth0
route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
}
}
custom-config {
custom-config-id service:UserDefined
custom-command UserDefined
config {
files=('custom-post-config-commands.sh', )
startidx=35
cmdup=('sh custom-post-config-commands.sh', )
}
}
}
node n9 {
type router
model mdr
network-config {
hostname n9
!
interface eth0
ip address 10.0.0.9/32
ipv6 address a:0::9/128
!
}
iconcoords {150.43010603614704 165.70781621981482}
labelcoords {150.43010603614704 189.70781621981482}
canvas c1
interface-peer {eth0 n11}
custom-image $CORE_DATA_DIR/icons/normal/router_red.gif
services {zebra OSPFv3MDR vtysh SMF IPForward UserDefined}
custom-config {
custom-config-id service:UserDefined:custom-post-config-commands.sh
custom-command custom-post-config-commands.sh
config {
route add default dev eth0
route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
}
}
custom-config {
custom-config-id service:UserDefined
custom-command UserDefined
config {
files=('custom-post-config-commands.sh', )
startidx=35
cmdup=('sh custom-post-config-commands.sh', )
}
}
}
node n10 {
type router
model mdr
network-config {
hostname n10
!
interface eth0
ip address 10.0.0.10/32
ipv6 address a:0::10/128
!
}
iconcoords {64.19289632467826 42.49909518554088}
labelcoords {64.19289632467826 66.49909518554088}
canvas c1
interface-peer {eth0 n11}
custom-image $CORE_DATA_DIR/icons/normal/router_red.gif
services {zebra OSPFv3MDR vtysh SMF IPForward UserDefined}
custom-config {
custom-config-id service:UserDefined:custom-post-config-commands.sh
custom-command custom-post-config-commands.sh
config {
route add default dev eth0
route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
}
}
custom-config {
custom-config-id service:UserDefined
custom-command UserDefined
config {
files=('custom-post-config-commands.sh', )
startidx=35
cmdup=('sh custom-post-config-commands.sh', )
}
}
}
node n11 {
type wlan
network-config {
hostname wlan11
!
interface wireless
ip address 10.0.0.0/32
ipv6 address a:0::0/128
!
scriptfile
sample4.scen
!
mobmodel
coreapi
basic_range
!
}
iconcoords {0 0}
labelcoords {0 0}
canvas c1
interface-peer {e0 n1}
interface-peer {e1 n2}
interface-peer {e2 n3}
interface-peer {e3 n4}
interface-peer {e4 n5}
interface-peer {e5 n6}
interface-peer {e6 n7}
interface-peer {e7 n8}
interface-peer {e8 n9}
interface-peer {e9 n10}
custom-config {
custom-config-id basic_range
custom-command {3 3 9 9 9}
config {
range=200
bandwidth=54000000
jitter=0
delay=50000
error=0
}
}
}
link l1 {
nodes {n11 n1}
bandwidth 54000000
delay 50000
}
link l2 {
nodes {n11 n2}
bandwidth 54000000
delay 50000
}
link l3 {
nodes {n11 n3}
bandwidth 54000000
delay 50000
}
link l4 {
nodes {n11 n4}
bandwidth 54000000
delay 50000
}
link l5 {
nodes {n11 n5}
bandwidth 54000000
delay 50000
}
link l6 {
nodes {n11 n6}
bandwidth 54000000
delay 50000
}
link l7 {
nodes {n11 n7}
bandwidth 54000000
delay 50000
}
link l8 {
nodes {n11 n8}
bandwidth 54000000
delay 50000
}
link l9 {
nodes {n11 n9}
bandwidth 54000000
delay 50000
}
link l10 {
nodes {n11 n10}
bandwidth 54000000
delay 50000
}
canvas c1 {
name {Canvas1}
wallpaper-style {upperleft}
wallpaper {sample4-bg.jpg}
size {1000 750}
}
option global {
interface_names no
ip_addresses yes
ipv6_addresses yes
node_labels yes
link_labels yes
show_api no
background_images no
annotations yes
grid no
traffic_start 0
}
option session {
}

2791
gui/configs/sample4.scen Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,131 @@
node n1 {
type router
model router
network-config {
hostname n1
!
interface eth0
ip address 10.0.0.2/24
ipv6 address a:0::2/64
!
router ospf
router-id 10.0.0.2
network 10.0.0.0/24 area 0
!
router ospf6
router-id 10.0.0.2
interface eth0 area 0.0.0.0
!
}
canvas c1
iconcoords {312.0 120.0}
labelcoords {312.0 148.0}
interface-peer {eth0 n2}
custom-config {
custom-config-id service:UserDefined:mgen.sh
custom-command mgen.sh
config {
#!/bin/sh
SCRIPTDIR=$SESSION_DIR
LOGDIR=/var/log
if [ `uname` = "Linux" ]; then
cd $SCRIPTDIR
else
cd /tmp/e0_`hostname`
fi
(
cat << 'EOF'
# mgen receiver script
15.0 LISTEN UDP 5001
EOF
) > recv.mgn
mgen input recv.mgn output $LOGDIR/mgen.log > /dev/null 2> /dev/null < /dev/null &
}
}
custom-config {
custom-config-id service:UserDefined
custom-command UserDefined
config {
files=('mgen.sh', )
startidx=35
cmdup=('sh mgen.sh', )
}
}
services {zebra OSPFv2 OSPFv3 vtysh IPForward UserDefined}
}
node n2 {
type router
model router
network-config {
hostname n2
!
interface eth0
ip address 10.0.0.1/24
ipv6 address a:0::1/64
!
}
canvas c1
iconcoords {72.0 48.0}
labelcoords {72.0 76.0}
interface-peer {eth0 n1}
custom-config {
custom-config-id service:UserDefined
custom-command UserDefined
config {
files=('mgen.sh', )
startidx=35
cmdup=('sh mgen.sh', )
}
}
custom-config {
custom-config-id service:UserDefined:mgen.sh
custom-command mgen.sh
config {
#!/bin/sh
HN=`hostname`
SCRIPTDIR=$SESSION_DIR
LOGDIR=/var/log
if [ `uname` = "FreeBSD" ]; then
SCRIPTDIR=/tmp/e0_$HN
LOGDIR=$SCRIPTDIR
fi
cd $SCRIPTDIR
(
cat << 'EOF'
# mgen sender script: send UDP traffic to UDP port 5001 after 15 seconds
15.0 ON 1 UDP SRC 5000 DST 10.0.0.2/5001 PERIODIC [1 4096]
EOF
) > send_$HN.mgn
mgen input send_$HN.mgn output $LOGDIR/mgen_$HN.log > /dev/null 2> /dev/null < /dev/null &
}
}
services {zebra OSPFv2 OSPFv3 vtysh IPForward UserDefined}
}
link l1 {
nodes {n2 n1}
bandwidth 0
}
canvas c1 {
name {Canvas1}
}
option global {
interface_names no
ip_addresses yes
ipv6_addresses yes
node_labels yes
link_labels yes
show_api no
background_images no
annotations yes
grid yes
traffic_start 0
}
option session {
}

View file

@ -0,0 +1,271 @@
node n1 {
type router
model mdr
network-config {
hostname n1
!
interface eth0
ip address 10.0.0.1/32
ipv6 address a:0::1/128
!
}
iconcoords {263.148836492 76.94184084899999}
labelcoords {263.148836492 100.94184084899999}
canvas c1
interface-peer {eth0 n11}
}
node n2 {
type router
model mdr
network-config {
hostname n2
!
interface eth0
ip address 10.0.0.2/32
ipv6 address a:0::2/128
!
}
iconcoords {184.35166313500002 532.524009667}
labelcoords {184.35166313500002 556.524009667}
canvas c1
interface-peer {eth0 n11}
}
node n3 {
type router
model mdr
network-config {
hostname n3
!
interface eth0
ip address 10.0.0.3/32
ipv6 address a:0::3/128
!
}
iconcoords {121.17243156500001 313.104176223}
labelcoords {121.17243156500001 337.104176223}
canvas c1
interface-peer {eth0 n11}
}
node n4 {
type router
model mdr
network-config {
hostname n4
!
interface eth0
ip address 10.0.0.4/32
ipv6 address a:0::4/128
!
}
iconcoords {443.031505695 586.805480735}
labelcoords {443.031505695 610.805480735}
canvas c1
interface-peer {eth0 n11}
}
node n5 {
type router
model mdr
network-config {
hostname n5
!
interface eth0
ip address 10.0.0.5/32
ipv6 address a:0::5/128
!
}
iconcoords {548.817758443 209.207353139}
labelcoords {548.817758443 233.207353139}
canvas c1
interface-peer {eth0 n11}
}
node n6 {
type router
model mdr
network-config {
hostname n6
!
interface eth0
ip address 10.0.0.6/32
ipv6 address a:0::6/128
!
}
iconcoords {757.062318769 61.533941783}
labelcoords {757.062318769 85.533941783}
canvas c1
interface-peer {eth0 n11}
}
node n7 {
type router
model mdr
network-config {
hostname n7
!
interface eth0
ip address 10.0.0.7/32
ipv6 address a:0::7/128
!
}
iconcoords {778.142667152 489.227596061}
labelcoords {778.142667152 513.227596061}
canvas c1
interface-peer {eth0 n11}
}
node n8 {
type router
model mdr
network-config {
hostname n8
!
interface eth0
ip address 10.0.0.8/32
ipv6 address a:0::8/128
!
}
iconcoords {93.895107521 135.228007484}
labelcoords {93.895107521 159.228007484}
canvas c1
interface-peer {eth0 n11}
}
node n9 {
type router
model mdr
network-config {
hostname n9
!
interface eth0
ip address 10.0.0.9/32
ipv6 address a:0::9/128
!
}
iconcoords {528.693178831 84.9814304098}
labelcoords {528.693178831 108.9814304098}
canvas c1
interface-peer {eth0 n11}
}
node n10 {
type router
model mdr
network-config {
hostname n10
!
interface eth0
ip address 10.0.0.10/32
ipv6 address a:0::10/128
!
}
iconcoords {569.534639911 475.46828902}
labelcoords {569.534639911 499.46828902}
canvas c1
interface-peer {eth0 n11}
}
node n11 {
bandwidth 54000000
type wlan
range 275
network-config {
hostname wlan11
!
interface wireless
ip address 10.0.0.0/32
ipv6 address a:0::0/128
!
mobmodel
coreapi
emane_rfpipe
!
}
canvas c1
iconcoords {65.0 558.0}
labelcoords {65.0 582.0}
interface-peer {e0 n1}
interface-peer {e1 n2}
interface-peer {e2 n3}
interface-peer {e3 n4}
interface-peer {e4 n5}
interface-peer {e5 n6}
interface-peer {e6 n7}
interface-peer {e7 n8}
interface-peer {e8 n9}
interface-peer {e9 n10}
}
link l1 {
nodes {n11 n1}
bandwidth 54000000
}
link l2 {
nodes {n11 n2}
bandwidth 54000000
}
link l3 {
nodes {n11 n3}
bandwidth 54000000
}
link l4 {
nodes {n11 n4}
bandwidth 54000000
}
link l5 {
nodes {n11 n5}
bandwidth 54000000
}
link l6 {
nodes {n11 n6}
bandwidth 54000000
}
link l7 {
nodes {n11 n7}
bandwidth 54000000
}
link l8 {
nodes {n11 n8}
bandwidth 54000000
}
link l9 {
nodes {n11 n9}
bandwidth 54000000
}
link l10 {
nodes {n11 n10}
bandwidth 54000000
}
canvas c1 {
name {Canvas1}
}
option global {
interface_names no
ip_addresses yes
ipv6_addresses yes
node_labels yes
link_labels yes
ipsec_configs yes
remote_exec no
exec_errors yes
show_api no
background_images no
annotations yes
grid yes
traffic_start 0
}

View file

@ -0,0 +1,274 @@
node n1 {
type router
model mdr
network-config {
hostname n1
!
interface eth0
ip address 10.0.0.1/32
ipv6 address a:0::1/128
!
}
iconcoords {115.14883649199999 139.941840849}
labelcoords {115.14883649199999 167.941840849}
canvas c1
interface-peer {eth0 n11}
}
node n2 {
type router
model mdr
network-config {
hostname n2
!
interface eth0
ip address 10.0.0.2/32
ipv6 address a:0::2/128
!
}
iconcoords {190.35166313500002 519.524009667}
labelcoords {190.35166313500002 547.524009667}
canvas c1
interface-peer {eth0 n11}
}
node n3 {
type router
model mdr
network-config {
hostname n3
!
interface eth0
ip address 10.0.0.3/32
ipv6 address a:0::3/128
!
}
iconcoords {142.172431565 307.104176223}
labelcoords {142.172431565 335.104176223}
canvas c1
interface-peer {eth0 n11}
}
node n4 {
type router
model mdr
network-config {
hostname n4
!
interface eth0
ip address 10.0.0.4/32
ipv6 address a:0::4/128
!
}
iconcoords {395.031505695 589.805480735}
labelcoords {395.031505695 617.805480735}
canvas c1
interface-peer {eth0 n11}
}
node n5 {
type router
model mdr
network-config {
hostname n5
!
interface eth0
ip address 10.0.0.5/32
ipv6 address a:0::5/128
!
}
iconcoords {250.817758443 27.20735313899999}
labelcoords {250.817758443 55.20735313899999}
canvas c1
interface-peer {eth0 n11}
}
node n6 {
type router
model mdr
network-config {
hostname n6
!
interface eth0
ip address 10.0.0.6/32
ipv6 address a:0::6/128
!
}
iconcoords {757.062318769 61.533941783}
labelcoords {757.062318769 89.533941783}
canvas c1
interface-peer {eth0 n11}
}
node n7 {
type router
model mdr
network-config {
hostname n7
!
interface eth0
ip address 10.0.0.7/32
ipv6 address a:0::7/128
!
}
iconcoords {909.142667152 593.227596061}
labelcoords {909.142667152 621.227596061}
canvas c1
interface-peer {eth0 n11}
}
node n8 {
type router
model mdr
network-config {
hostname n8
!
interface eth0
ip address 10.0.0.8/32
ipv6 address a:0::8/128
!
}
iconcoords {351.895107521 337.228007484}
labelcoords {351.895107521 365.228007484}
canvas c1
interface-peer {eth0 n11}
}
node n9 {
type router
model mdr
network-config {
hostname n9
!
interface eth0
ip address 10.0.0.9/32
ipv6 address a:0::9/128
!
}
iconcoords {528.693178831 84.9814304098}
labelcoords {528.693178831 112.98143041}
canvas c1
interface-peer {eth0 n11}
}
node n10 {
type router
model mdr
network-config {
hostname n10
!
interface eth0
ip address 10.0.0.10/32
ipv6 address a:0::10/128
!
}
iconcoords {568.534639911 526.4682890199999}
labelcoords {568.534639911 554.4682890199999}
canvas c1
interface-peer {eth0 n11}
}
node n11 {
bandwidth 54000000
type wlan
range 275
network-config {
hostname wlan11
!
interface wireless
ip address 10.0.0.0/32
ipv6 address a:0::0/128
!
mobmodel
coreapi
emane_ieee80211abg
!
}
canvas c1
iconcoords {65.0 558.0}
labelcoords {65.0 590.0}
interface-peer {e0 n1}
interface-peer {e1 n2}
interface-peer {e2 n3}
interface-peer {e3 n4}
interface-peer {e4 n5}
interface-peer {e5 n6}
interface-peer {e6 n7}
interface-peer {e7 n8}
interface-peer {e8 n9}
interface-peer {e9 n10}
}
link l1 {
nodes {n11 n1}
bandwidth 54000000
}
link l2 {
nodes {n11 n2}
bandwidth 54000000
}
link l3 {
nodes {n11 n3}
bandwidth 54000000
}
link l4 {
nodes {n11 n4}
bandwidth 54000000
}
link l5 {
nodes {n11 n5}
bandwidth 54000000
}
link l6 {
nodes {n11 n6}
bandwidth 54000000
}
link l7 {
nodes {n11 n7}
bandwidth 54000000
}
link l8 {
nodes {n11 n8}
bandwidth 54000000
}
link l9 {
nodes {n11 n9}
bandwidth 54000000
}
link l10 {
nodes {n11 n10}
bandwidth 54000000
}
canvas c1 {
name {Canvas1}
refpt {0 0 47.5791667 -122.132322 2.0}
scale 350.0
size {1000 750}
}
option global {
interface_names no
ip_addresses yes
ipv6_addresses yes
node_labels yes
link_labels yes
ipsec_configs yes
remote_exec no
exec_errors yes
show_api no
background_images no
annotations yes
grid yes
traffic_start 0
}

View file

@ -0,0 +1,967 @@
comments {
Sample scenario showing IPsec service configuration.
There are three red routers having the IPsec service enabled. The IPsec service
must be customized with the tunnel hosts (peers) and their keys, and the subnet
addresses that should be tunneled.
For simplicity, the same keys and certificates are used in each of the three
IPsec gateways. These are written to node n1's configuration directory. Keys
can be generated using the openssl utility.
Note that this scenario may require at patched kernel in order to work; see the
kernels subdirectory of the CORE source for kernel patches.
The racoon keying daemon and setkey from the ipsec-tools package should also be
installed.
}
node n1 {
type router
model router
network-config {
hostname n1
!
interface eth3
ip address 192.168.6.1/24
ipv6 address 2001:6::1/64
!
interface eth2
ip address 192.168.5.1/24
ipv6 address 2001:5::1/64
!
interface eth1
ip address 192.168.1.1/24
ipv6 address 2001:1::1/64
!
interface eth0
ip address 192.168.0.1/24
ipv6 address 2001:0::1/64
!
}
canvas c1
iconcoords {210.0 172.0}
labelcoords {210.0 200.0}
interface-peer {eth0 n2}
interface-peer {eth1 n3}
interface-peer {eth2 n7}
interface-peer {eth3 n8}
custom-config {
custom-config-id service:IPsec:copycerts.sh
custom-command copycerts.sh
config {
#!/bin/sh
FILES="test1.pem test1.key ca-cert.pem"
mkdir -p /tmp/certs
for f in $FILES; do
cp $f /tmp/certs
done
}
}
custom-config {
custom-config-id service:IPsec:ca-cert.pem
custom-command ca-cert.pem
config {
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
df:69:1f:ef:e5:af:bf:0f
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, ST=WA, O=core-dev, CN=CORE CA/emailAddress=root@localhost
Validity
Not Before: Mar 20 16:16:08 2012 GMT
Not After : Mar 20 16:16:08 2015 GMT
Subject: C=US, ST=WA, O=core-dev, CN=CORE CA/emailAddress=root@localhost
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (1024 bit)
Modulus:
00:c4:d7:fc:c3:bc:a0:ee:76:7b:58:5c:96:6d:1f:
74:26:c2:93:c1:a4:94:95:13:5e:4f:8b:3f:00:27:
e5:1b:b1:3b:70:3e:72:71:4d:c9:67:54:33:29:49:
1e:de:a6:91:d9:00:ec:84:b8:64:f8:06:51:82:f4:
84:9b:a2:fe:16:34:5c:e1:2f:3d:ad:34:b9:8e:ad:
8e:ea:8a:e9:40:56:5b:f5:09:2c:bf:a0:08:db:81:
7f:fb:d8:b9:6c:a6:be:4c:1f:b1:4e:b3:b0:8d:8d:
e4:04:8e:f8:8e:e9:c7:aa:e7:4a:b4:87:89:a7:25:
72:38:74:bb:e5:b6:7f:86:7b
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
98:0E:C7:0A:74:5D:FB:56:5B:B7:91:80:2A:3A:D4:89:AD:6C:B9:51
X509v3 Authority Key Identifier:
keyid:98:0E:C7:0A:74:5D:FB:56:5B:B7:91:80:2A:3A:D4:89:AD:6C:B9:51
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha1WithRSAEncryption
39:7e:99:fd:40:44:0a:20:4c:3c:9a:bf:01:aa:94:c8:76:bb:
80:53:4f:cd:28:2f:5b:7f:0b:52:09:14:cb:ac:ee:74:7f:17:
4b:79:21:db:e1:a3:9b:e5:b1:72:83:f7:88:02:20:d6:23:33:
e4:ff:50:58:c6:88:e0:22:d7:2b:96:b3:dd:31:1a:80:52:0d:
61:4f:47:72:63:39:1e:7f:a1:ad:f0:2b:82:53:05:ca:3d:0a:
8f:3c:72:58:74:57:ae:8b:66:16:d9:a4:50:99:bc:d3:a7:c5:
54:63:f0:87:cd:06:1a:d4:61:ed:d3:b8:33:5d:5a:d6:a4:f0:
a4:96
-----BEGIN CERTIFICATE-----
MIICijCCAfOgAwIBAgIJAN9pH+/lr78PMA0GCSqGSIb3DQEBBQUAMF4xCzAJBgNV
BAYTAlVTMQswCQYDVQQIDAJXQTERMA8GA1UECgwIY29yZS1kZXYxEDAOBgNVBAMM
B0NPUkUgQ0ExHTAbBgkqhkiG9w0BCQEWDnJvb3RAbG9jYWxob3N0MB4XDTEyMDMy
MDE2MTYwOFoXDTE1MDMyMDE2MTYwOFowXjELMAkGA1UEBhMCVVMxCzAJBgNVBAgM
AldBMREwDwYDVQQKDAhjb3JlLWRldjEQMA4GA1UEAwwHQ09SRSBDQTEdMBsGCSqG
SIb3DQEJARYOcm9vdEBsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
AoGBAMTX/MO8oO52e1hclm0fdCbCk8GklJUTXk+LPwAn5RuxO3A+cnFNyWdUMylJ
Ht6mkdkA7IS4ZPgGUYL0hJui/hY0XOEvPa00uY6tjuqK6UBWW/UJLL+gCNuBf/vY
uWymvkwfsU6zsI2N5ASO+I7px6rnSrSHiaclcjh0u+W2f4Z7AgMBAAGjUDBOMB0G
A1UdDgQWBBSYDscKdF37Vlu3kYAqOtSJrWy5UTAfBgNVHSMEGDAWgBSYDscKdF37
Vlu3kYAqOtSJrWy5UTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBADl+
mf1ARAogTDyavwGqlMh2u4BTT80oL1t/C1IJFMus7nR/F0t5Idvho5vlsXKD94gC
INYjM+T/UFjGiOAi1yuWs90xGoBSDWFPR3JjOR5/oa3wK4JTBco9Co88clh0V66L
ZhbZpFCZvNOnxVRj8IfNBhrUYe3TuDNdWtak8KSW
-----END CERTIFICATE-----
}
}
custom-config {
custom-config-id service:IPsec:test1.pem
custom-command test1.pem
config {
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
df:69:1f:ef:e5:af:bf:10
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, ST=WA, O=core-dev, CN=CORE CA/emailAddress=root@localhost
Validity
Not Before: Mar 20 16:18:45 2012 GMT
Not After : Mar 20 16:18:45 2013 GMT
Subject: C=US, ST=WA, L=Bellevue, O=core-dev, CN=test1
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (1024 bit)
Modulus:
00:ab:08:f3:3e:47:ce:95:9f:a2:ec:75:14:6e:7d:
bc:33:a5:4c:60:f0:bb:1f:a1:17:17:70:84:43:3c:
43:f7:37:9e:b1:ed:ff:0f:e3:70:e6:22:21:18:ec:
9c:af:30:a8:cb:70:83:e7:7e:f5:85:77:15:69:2a:
db:d1:13:e9:8b:fb:5e:85:a8:a3:fa:95:f2:37:c8:
91:5a:e5:c9:a8:56:a6:56:6a:14:34:ce:61:ad:90:
63:d7:45:e2:4a:b8:7a:2c:38:17:ad:bd:6d:1d:80:
16:4b:2f:2d:25:6a:2c:c9:d6:d4:7a:66:6f:57:c8:
07:fd:7d:ac:41:f0:11:05:33
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
71:90:B8:F7:1C:CA:93:7A:F4:11:E5:70:E2:F5:A0:2C:A6:71:E8:36
X509v3 Authority Key Identifier:
keyid:98:0E:C7:0A:74:5D:FB:56:5B:B7:91:80:2A:3A:D4:89:AD:6C:B9:51
Signature Algorithm: sha1WithRSAEncryption
06:67:4a:ed:5a:e9:a6:c7:16:32:3d:e8:2a:22:fb:06:4b:c9:
a3:8b:c5:2d:13:4d:d7:80:d3:df:3f:27:5b:cc:93:43:96:48:
2a:64:19:7b:ce:c4:ec:f1:88:ee:47:3c:9e:85:40:2f:5a:19:
ea:e6:75:cc:8d:0b:70:41:5e:e8:76:98:49:27:fe:19:21:f1:
64:70:f6:b0:26:91:94:fe:dc:2c:56:86:8a:ac:d0:52:d5:1e:
30:42:68:aa:43:37:17:3b:a0:97:e4:7d:68:05:09:b2:fd:b3:
2c:a0:f1:6f:07:0b:e2:5f:e8:a1:a3:39:6b:ba:83:ca:fa:ca:
30:1e
-----BEGIN CERTIFICATE-----
MIICpzCCAhCgAwIBAgIJAN9pH+/lr78QMA0GCSqGSIb3DQEBBQUAMF4xCzAJBgNV
BAYTAlVTMQswCQYDVQQIDAJXQTERMA8GA1UECgwIY29yZS1kZXYxEDAOBgNVBAMM
B0NPUkUgQ0ExHTAbBgkqhkiG9w0BCQEWDnJvb3RAbG9jYWxob3N0MB4XDTEyMDMy
MDE2MTg0NVoXDTEzMDMyMDE2MTg0NVowUDELMAkGA1UEBhMCVVMxCzAJBgNVBAgM
AldBMREwDwYDVQQHDAhCZWxsZXZ1ZTERMA8GA1UECgwIY29yZS1kZXYxDjAMBgNV
BAMMBXRlc3QxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrCPM+R86Vn6Ls
dRRufbwzpUxg8LsfoRcXcIRDPEP3N56x7f8P43DmIiEY7JyvMKjLcIPnfvWFdxVp
KtvRE+mL+16FqKP6lfI3yJFa5cmoVqZWahQ0zmGtkGPXReJKuHosOBetvW0dgBZL
Ly0laizJ1tR6Zm9XyAf9faxB8BEFMwIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCG
SAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4E
FgQUcZC49xzKk3r0EeVw4vWgLKZx6DYwHwYDVR0jBBgwFoAUmA7HCnRd+1Zbt5GA
KjrUia1suVEwDQYJKoZIhvcNAQEFBQADgYEABmdK7VrppscWMj3oKiL7BkvJo4vF
LRNN14DT3z8nW8yTQ5ZIKmQZe87E7PGI7kc8noVAL1oZ6uZ1zI0LcEFe6HaYSSf+
GSHxZHD2sCaRlP7cLFaGiqzQUtUeMEJoqkM3Fzugl+R9aAUJsv2zLKDxbwcL4l/o
oaM5a7qDyvrKMB4=
-----END CERTIFICATE-----
}
}
custom-config {
custom-config-id service:IPsec:test1.key
custom-command test1.key
config {
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKsI8z5HzpWfoux1
FG59vDOlTGDwux+hFxdwhEM8Q/c3nrHt/w/jcOYiIRjsnK8wqMtwg+d+9YV3FWkq
29ET6Yv7XoWoo/qV8jfIkVrlyahWplZqFDTOYa2QY9dF4kq4eiw4F629bR2AFksv
LSVqLMnW1Hpmb1fIB/19rEHwEQUzAgMBAAECgYEAnGREt5BFcD9WZMzx7859BuSB
IKs/D77nNIGoDyrOIwHy1FQBRG/+ThCrHvVMmEzwK4Yotsc6jd3D8DRGZ7nDdMMJ
bvDiyOsyFhnNYnpGQbMJnVuFiYCqyp97lkKkhKw8ZoU2o2ATss1MBPuKXfDk0qH5
TFHopVOJRtSl23EAHUECQQDdnVkhckDK+OwBKwLGKwuMpwKknHVJviQbtgGnrqdB
7lOwZMdq7G0c8rVM9xh8zAcOOauLC7ZVPSpH2HGF+ArxAkEAxZKM1U/gvpS2R1rg
jbIXtEXy/XXhlOez9dpZXz0VGhR1hn07rlg/QxzyGXnFfI+6gn53faIW8WSNp6m6
BG1qYwJATuCYPr1JrnSWm3vRivL7M16mJCzD2jFg7LQFNseFJIRNKTVVfQsVcv43
5WL1RkXgJQIFuoG6rfANQnEZRtOYIQJACPQdQcV+7+QZZp5tsr4xaNAKtQXUlUTy
2N9uUWyZOjdXJCMkwz/ojggPyKvGEWEKGMPWcnEYDRR7fu+oKG809QJAA8QbP3Vl
crpixSGR5nkRlOcM84igHasqOYIKz4V8m/HCaHTMcpfdBjEHk4v9grSoTESw7xZW
JIssE0c6pf/S6A==
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE REQUEST-----
MIIBjzCB+QIBADBQMQswCQYDVQQGEwJVUzELMAkGA1UECAwCV0ExETAPBgNVBAcM
CEJlbGxldnVlMREwDwYDVQQKDAhjb3JlLWRldjEOMAwGA1UEAwwFdGVzdDEwgZ8w
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKsI8z5HzpWfoux1FG59vDOlTGDwux+h
FxdwhEM8Q/c3nrHt/w/jcOYiIRjsnK8wqMtwg+d+9YV3FWkq29ET6Yv7XoWoo/qV
8jfIkVrlyahWplZqFDTOYa2QY9dF4kq4eiw4F629bR2AFksvLSVqLMnW1Hpmb1fI
B/19rEHwEQUzAgMBAAGgADANBgkqhkiG9w0BAQUFAAOBgQAkIofXRWqtHX7XAa6E
6p7X67MRC+Qg0ZX5orITdHhSNNIKgg8BEBxpEiUKIwDrexXp/zOccdbTkbYCKeNm
s8mpVRuHfKsp1Q6+6sKtcfEHWJSalckvPQO96SPhVD03b+jg1rW3ecwxXFKuM9nC
z5NxVmroFYDvhaRsaToLfEkXPw==
-----END CERTIFICATE REQUEST-----
}
}
custom-config {
custom-config-id service:IPsec:ipsec.sh
custom-command ipsec.sh
config {
#!/bin/sh
# set up static tunnel mode security assocation for service (security.py)
# -------- CUSTOMIZATION REQUIRED --------
#
# The IPsec service builds ESP tunnels between the specified peers using the
# racoon IKEv2 keying daemon. You need to provide keys and the addresses of
# peers, along with subnets to tunnel.
# directory containing the certificate and key described below
keydir=/tmp/certs
# the name used for the "$certname.pem" x509 certificate and
# "$certname.key" RSA private key, which can be generated using openssl
certname=test1
# list the public-facing IP addresses, starting with the localhost and followed
# by each tunnel peer, separated with a single space
tunnelhosts="192.168.0.1AND192.168.0.2 192.168.1.1AND192.168.1.2"
# Define T<i> where i is the index for each tunnel peer host from
# the tunnel_hosts list above (0 is localhost).
# T<i> is a list of IPsec tunnels with peer i, with a local subnet address
# followed by the remote subnet address:
# T<i>="<local>AND<remote> <local>AND<remote>"
# For example, 192.168.0.0/24 is a local network (behind this node) to be
# tunneled and 192.168.2.0/24 is a remote network (behind peer 1)
T1="192.168.5.0/24AND192.168.8.0/24"
T2="192.168.5.0/24AND192.168.4.0/24 192.168.6.0/24AND192.168.4.0/24"
# -------- END CUSTOMIZATION --------
echo "building config $PWD/ipsec.conf..."
echo "building config $PWD/ipsec.conf..." > $PWD/ipsec.log
checkip=0
if [ "$(dpkg -l | grep " sipcalc ")" = "" ]; then
echo "WARNING: ip validation disabled because package sipcalc not installed
" >> $PWD/ipsec.log
checkip=1
fi
echo "#!/usr/sbin/setkey -f
# Flush the SAD and SPD
flush;
spdflush;
# Security policies \
" > $PWD/ipsec.conf
i=0
for hostpair in $tunnelhosts; do
i=`expr $i + 1`
# parse tunnel host IP
thishost=${hostpair%%AND*}
peerhost=${hostpair##*AND}
if [ $checkip = "0" ] &&
[ "$(sipcalc "$thishost" "$peerhost" | grep ERR)" != "" ]; then
echo "ERROR: invalid host address $thishost or $peerhost \
" >> $PWD/ipsec.log
fi
# parse each tunnel addresses
tunnel_list_var_name=T$i
eval tunnels="$"$tunnel_list_var_name""
for ttunnel in $tunnels; do
lclnet=${ttunnel%%AND*}
rmtnet=${ttunnel##*AND}
if [ $checkip = "0" ] &&
[ "$(sipcalc "$lclnet" "$rmtnet"| grep ERR)" != "" ]; then
echo "ERROR: invalid tunnel address $lclnet and $rmtnet \
" >> $PWD/ipsec.log
fi
# add tunnel policies
echo "
spdadd $lclnet $rmtnet any -P out ipsec
esp/tunnel/$thishost-$peerhost/require;
spdadd $rmtnet $lclnet any -P in ipsec
esp/tunnel/$peerhost-$thishost/require; \
" >> $PWD/ipsec.conf
done
done
echo "building config $PWD/racoon.conf..."
if [ ! -e $keydir\/$certname.key ] || [ ! -e $keydir\/$certname.pem ]; then
echo "ERROR: missing certification files under $keydir \
$certname.key or $certname.pem " >> $PWD/ipsec.log
fi
echo "
path certificate \"$keydir\";
listen {
adminsock disabled;
}
remote anonymous
{
exchange_mode main;
certificate_type x509 \"$certname.pem\" \"$certname.key\";
ca_type x509 \"ca-cert.pem\";
my_identifier asn1dn;
peers_identifier asn1dn;
proposal {
encryption_algorithm 3des ;
hash_algorithm sha1;
authentication_method rsasig ;
dh_group modp768;
}
}
sainfo anonymous
{
pfs_group modp768;
lifetime time 1 hour ;
encryption_algorithm 3des, blowfish 448, rijndael ;
authentication_algorithm hmac_sha1, hmac_md5 ;
compression_algorithm deflate ;
}
" > $PWD/racoon.conf
# the setkey program is required from the ipsec-tools package
echo "running setkey -f $PWD/ipsec.conf..."
setkey -f $PWD/ipsec.conf
echo "running racoon -d -f $PWD/racoon.conf..."
racoon -d -f $PWD/racoon.conf -l racoon.log
}
}
custom-config {
custom-config-id service:IPsec
custom-command IPsec
config {
('ipsec.sh', 'test1.key', 'test1.pem', 'ca-cert.pem', 'copycerts.sh', )
60
('sh copycerts.sh', 'sh ipsec.sh', )
('killall racoon', )
}
}
services {zebra OSPFv2 OSPFv3 vtysh IPForward IPsec}
custom-image $CORE_DATA_DIR/icons/normal/router_red.gif
}
node n2 {
type router
model router
network-config {
hostname n2
!
interface eth3
ip address 192.168.8.1/24
ipv6 address 2001:8::1/64
!
interface eth2
ip address 192.168.7.1/24
ipv6 address 2001:7::1/64
!
interface eth1
ip address 192.168.2.1/24
ipv6 address 2001:2::1/64
!
interface eth0
ip address 192.168.0.2/24
ipv6 address 2001:0::2/64
!
}
canvas c1
iconcoords {455.0 173.0}
labelcoords {455.0 201.0}
interface-peer {eth0 n1}
interface-peer {eth1 n4}
interface-peer {eth2 n9}
interface-peer {eth3 n10}
custom-config {
custom-config-id service:IPsec:ipsec.sh
custom-command ipsec.sh
config {
#!/bin/sh
# set up static tunnel mode security assocation for service (security.py)
# -------- CUSTOMIZATION REQUIRED --------
#
# The IPsec service builds ESP tunnels between the specified peers using the
# racoon IKEv2 keying daemon. You need to provide keys and the addresses of
# peers, along with subnets to tunnel.
# directory containing the certificate and key described below
keydir=/tmp/certs
# the name used for the "$certname.pem" x509 certificate and
# "$certname.key" RSA private key, which can be generated using openssl
certname=test1
# list the public-facing IP addresses, starting with the localhost and followed
# by each tunnel peer, separated with a single space
tunnelhosts="192.168.0.2AND192.168.0.1"
# Define T<i> where i is the index for each tunnel peer host from
# the tunnel_hosts list above (0 is localhost).
# T<i> is a list of IPsec tunnels with peer i, with a local subnet address
# followed by the remote subnet address:
# T<i>="<local>AND<remote> <local>AND<remote>"
# For example, 192.168.0.0/24 is a local network (behind this node) to be
# tunneled and 192.168.2.0/24 is a remote network (behind peer 1)
T1="192.168.8.0/24AND192.168.5.0/24"
# -------- END CUSTOMIZATION --------
echo "building config $PWD/ipsec.conf..."
echo "building config $PWD/ipsec.conf..." > $PWD/ipsec.log
checkip=0
if [ "$(dpkg -l | grep " sipcalc ")" = "" ]; then
echo "WARNING: ip validation disabled because package sipcalc not installed
" >> $PWD/ipsec.log
checkip=1
fi
echo "#!/usr/sbin/setkey -f
# Flush the SAD and SPD
flush;
spdflush;
# Security policies \
" > $PWD/ipsec.conf
i=0
for hostpair in $tunnelhosts; do
i=`expr $i + 1`
# parse tunnel host IP
thishost=${hostpair%%AND*}
peerhost=${hostpair##*AND}
if [ $checkip = "0" ] &&
[ "$(sipcalc "$thishost" "$peerhost" | grep ERR)" != "" ]; then
echo "ERROR: invalid host address $thishost or $peerhost \
" >> $PWD/ipsec.log
fi
# parse each tunnel addresses
tunnel_list_var_name=T$i
eval tunnels="$"$tunnel_list_var_name""
for ttunnel in $tunnels; do
lclnet=${ttunnel%%AND*}
rmtnet=${ttunnel##*AND}
if [ $checkip = "0" ] &&
[ "$(sipcalc "$lclnet" "$rmtnet"| grep ERR)" != "" ]; then
echo "ERROR: invalid tunnel address $lclnet and $rmtnet \
" >> $PWD/ipsec.log
fi
# add tunnel policies
echo "
spdadd $lclnet $rmtnet any -P out ipsec
esp/tunnel/$thishost-$peerhost/require;
spdadd $rmtnet $lclnet any -P in ipsec
esp/tunnel/$peerhost-$thishost/require; \
" >> $PWD/ipsec.conf
done
done
echo "building config $PWD/racoon.conf..."
if [ ! -e $keydir\/$certname.key ] || [ ! -e $keydir\/$certname.pem ]; then
echo "ERROR: missing certification files under $keydir \
$certname.key or $certname.pem " >> $PWD/ipsec.log
fi
echo "
path certificate \"$keydir\";
listen {
adminsock disabled;
}
remote anonymous
{
exchange_mode main;
certificate_type x509 \"$certname.pem\" \"$certname.key\";
ca_type x509 \"ca-cert.pem\";
my_identifier asn1dn;
peers_identifier asn1dn;
proposal {
encryption_algorithm 3des ;
hash_algorithm sha1;
authentication_method rsasig ;
dh_group modp768;
}
}
sainfo anonymous
{
pfs_group modp768;
lifetime time 1 hour ;
encryption_algorithm 3des, blowfish 448, rijndael ;
authentication_algorithm hmac_sha1, hmac_md5 ;
compression_algorithm deflate ;
}
" > $PWD/racoon.conf
# the setkey program is required from the ipsec-tools package
echo "running setkey -f $PWD/ipsec.conf..."
setkey -f $PWD/ipsec.conf
echo "running racoon -d -f $PWD/racoon.conf..."
racoon -d -f $PWD/racoon.conf -l racoon.log
}
}
custom-config {
custom-config-id service:IPsec
custom-command IPsec
config {
('ipsec.sh', )
60
('sh ipsec.sh', )
('killall racoon', )
}
}
services {zebra OSPFv2 OSPFv3 vtysh IPForward IPsec}
custom-image $CORE_DATA_DIR/icons/normal/router_red.gif
}
node n3 {
type router
model router
network-config {
hostname n3
!
interface eth2
ip address 192.168.4.1/24
ipv6 address 2001:4::1/64
!
interface eth1
ip address 192.168.3.1/24
ipv6 address 2001:3::1/64
!
interface eth0
ip address 192.168.1.2/24
ipv6 address 2001:1::2/64
!
}
canvas c1
iconcoords {211.0 375.0}
labelcoords {211.0 403.0}
interface-peer {eth0 n1}
interface-peer {eth1 n5}
interface-peer {eth2 n6}
custom-config {
custom-config-id service:IPsec:ipsec.sh
custom-command ipsec.sh
config {
#!/bin/sh
# set up static tunnel mode security assocation for service (security.py)
# -------- CUSTOMIZATION REQUIRED --------
#
# The IPsec service builds ESP tunnels between the specified peers using the
# racoon IKEv2 keying daemon. You need to provide keys and the addresses of
# peers, along with subnets to tunnel.
# directory containing the certificate and key described below
keydir=/tmp/certs
# the name used for the "$certname.pem" x509 certificate and
# "$certname.key" RSA private key, which can be generated using openssl
certname=test1
# list the public-facing IP addresses, starting with the localhost and followed
# by each tunnel peer, separated with a single space
tunnelhosts="192.168.1.2AND192.168.1.1"
# Define T<i> where i is the index for each tunnel peer host from
# the tunnel_hosts list above (0 is localhost).
# T<i> is a list of IPsec tunnels with peer i, with a local subnet address
# followed by the remote subnet address:
# T<i>="<local>AND<remote> <local>AND<remote>"
# For example, 192.168.0.0/24 is a local network (behind this node) to be
# tunneled and 192.168.2.0/24 is a remote network (behind peer 1)
T1="192.168.4.0/24AND192.168.5.0/24 192.168.4.0/24AND192.168.6.0/24"
# -------- END CUSTOMIZATION --------
echo "building config $PWD/ipsec.conf..."
echo "building config $PWD/ipsec.conf..." > $PWD/ipsec.log
checkip=0
if [ "$(dpkg -l | grep " sipcalc ")" = "" ]; then
echo "WARNING: ip validation disabled because package sipcalc not installed
" >> $PWD/ipsec.log
checkip=1
fi
echo "#!/usr/sbin/setkey -f
# Flush the SAD and SPD
flush;
spdflush;
# Security policies \
" > $PWD/ipsec.conf
i=0
for hostpair in $tunnelhosts; do
i=`expr $i + 1`
# parse tunnel host IP
thishost=${hostpair%%AND*}
peerhost=${hostpair##*AND}
if [ $checkip = "0" ] &&
[ "$(sipcalc "$thishost" "$peerhost" | grep ERR)" != "" ]; then
echo "ERROR: invalid host address $thishost or $peerhost \
" >> $PWD/ipsec.log
fi
# parse each tunnel addresses
tunnel_list_var_name=T$i
eval tunnels="$"$tunnel_list_var_name""
for ttunnel in $tunnels; do
lclnet=${ttunnel%%AND*}
rmtnet=${ttunnel##*AND}
if [ $checkip = "0" ] &&
[ "$(sipcalc "$lclnet" "$rmtnet"| grep ERR)" != "" ]; then
echo "ERROR: invalid tunnel address $lclnet and $rmtnet \
" >> $PWD/ipsec.log
fi
# add tunnel policies
echo "
spdadd $lclnet $rmtnet any -P out ipsec
esp/tunnel/$thishost-$peerhost/require;
spdadd $rmtnet $lclnet any -P in ipsec
esp/tunnel/$peerhost-$thishost/require; \
" >> $PWD/ipsec.conf
done
done
echo "building config $PWD/racoon.conf..."
if [ ! -e $keydir\/$certname.key ] || [ ! -e $keydir\/$certname.pem ]; then
echo "ERROR: missing certification files under $keydir \
$certname.key or $certname.pem " >> $PWD/ipsec.log
fi
echo "
path certificate \"$keydir\";
listen {
adminsock disabled;
}
remote anonymous
{
exchange_mode main;
certificate_type x509 \"$certname.pem\" \"$certname.key\";
ca_type x509 \"ca-cert.pem\";
my_identifier asn1dn;
peers_identifier asn1dn;
proposal {
encryption_algorithm 3des ;
hash_algorithm sha1;
authentication_method rsasig ;
dh_group modp768;
}
}
sainfo anonymous
{
pfs_group modp768;
lifetime time 1 hour ;
encryption_algorithm 3des, blowfish 448, rijndael ;
authentication_algorithm hmac_sha1, hmac_md5 ;
compression_algorithm deflate ;
}
" > $PWD/racoon.conf
# the setkey program is required from the ipsec-tools package
echo "running setkey -f $PWD/ipsec.conf..."
setkey -f $PWD/ipsec.conf
echo "running racoon -d -f $PWD/racoon.conf..."
racoon -d -f $PWD/racoon.conf -l racoon.log
}
}
custom-config {
custom-config-id service:IPsec
custom-command IPsec
config {
('ipsec.sh', )
60
('sh ipsec.sh', )
('killall racoon', )
}
}
services {zebra OSPFv2 OSPFv3 vtysh IPForward IPsec}
custom-image $CORE_DATA_DIR/icons/normal/router_red.gif
}
node n4 {
type router
model router
network-config {
hostname n4
!
interface eth1
ip address 192.168.9.1/24
ipv6 address 2001:9::1/64
!
interface eth0
ip address 192.168.2.2/24
ipv6 address 2001:2::2/64
!
}
canvas c1
iconcoords {456.0 376.0}
labelcoords {456.0 404.0}
interface-peer {eth0 n2}
interface-peer {eth1 n11}
}
node n5 {
type router
model host
network-config {
hostname n5
!
interface eth0
ip address 192.168.3.10/24
ipv6 address 2001:3::10/64
!
}
canvas c1
iconcoords {50.0 472.0}
labelcoords {50.0 504.0}
interface-peer {eth0 n3}
}
node n6 {
type router
model host
network-config {
hostname n6
!
interface eth0
ip address 192.168.4.10/24
ipv6 address 2001:4::10/64
!
}
canvas c1
iconcoords {44.0 292.0}
labelcoords {44.0 324.0}
interface-peer {eth0 n3}
}
node n7 {
type router
model host
network-config {
hostname n7
!
interface eth0
ip address 192.168.5.10/24
ipv6 address 2001:5::10/64
!
}
canvas c1
iconcoords {41.0 62.0}
labelcoords {41.0 94.0}
interface-peer {eth0 n1}
}
node n8 {
type router
model host
network-config {
hostname n8
!
interface eth0
ip address 192.168.6.10/24
ipv6 address 2001:6::10/64
!
}
canvas c1
iconcoords {39.0 121.0}
labelcoords {39.0 153.0}
interface-peer {eth0 n1}
}
node n9 {
type router
model host
network-config {
hostname n9
!
interface eth0
ip address 192.168.7.10/24
ipv6 address 2001:7::10/64
!
}
canvas c1
iconcoords {653.0 69.0}
labelcoords {653.0 101.0}
interface-peer {eth0 n2}
}
node n10 {
type router
model host
network-config {
hostname n10
!
interface eth0
ip address 192.168.8.10/24
ipv6 address 2001:8::10/64
!
}
canvas c1
iconcoords {454.0 48.0}
labelcoords {484.0 59.0}
interface-peer {eth0 n2}
}
node n11 {
type router
model host
network-config {
hostname n11
!
interface eth0
ip address 192.168.9.10/24
ipv6 address 2001:9::10/64
!
}
canvas c1
iconcoords {654.0 460.0}
labelcoords {654.0 492.0}
interface-peer {eth0 n4}
}
link l1 {
nodes {n1 n2}
bandwidth 0
}
link l2 {
nodes {n1 n3}
bandwidth 0
}
link l3 {
nodes {n2 n4}
bandwidth 0
}
link l4 {
nodes {n3 n5}
bandwidth 0
}
link l5 {
nodes {n3 n6}
bandwidth 0
}
link l6 {
nodes {n1 n7}
bandwidth 0
}
link l7 {
nodes {n1 n8}
bandwidth 0
}
link l8 {
nodes {n2 n9}
bandwidth 0
}
link l9 {
nodes {n2 n10}
bandwidth 0
}
link l10 {
nodes {n4 n11}
bandwidth 0
}
annotation a1 {
iconcoords {8.0 6.0 514.0 99.0}
type rectangle
label {Tunnel 1}
labelcolor black
fontfamily {Arial}
fontsize {12}
color #ffd0d0
width 0
border #00ff00
rad 22
canvas c1
}
annotation a2 {
iconcoords {8.0 6.0 137.0 334.0}
type rectangle
label {Tunnel 2}
labelcolor black
fontfamily {Arial}
fontsize {12}
color #ffe1e1
width 0
border black
rad 23
canvas c1
}
annotation a5 {
iconcoords {263.0 127.0}
type text
label {}
labelcolor black
fontfamily {Arial}
fontsize {12}
effects {underline}
canvas c1
}
canvas c1 {
name {Canvas1}
}
option global {
interface_names yes
ip_addresses yes
ipv6_addresses no
node_labels yes
link_labels yes
ipsec_configs yes
exec_errors yes
show_api no
background_images no
annotations yes
grid yes
traffic_start 0
}

850
gui/configs/sample9-vpn.imn Normal file
View file

@ -0,0 +1,850 @@
comments {
Sample scenario showing VPNClient and VPNServer service configuration.
This topology features an OpenVPN client and server for virtual private
networking. The client can access the private 10.0.6.0/24 network via the VPN
server. First wait until routing converges in the center routers (try using the
Adjacency Widget and wait for blue lines, meaning full adjacencies), then open
a shell on the vpnclient and try pinging the private address of the vpnserver:
vpnclient> ping 10.0.6.1
You can also access the other 10.0.6.* hosts behind the server. Try running
tcpudmp on one of the center routers, e.g. the n2 eth1/10.0.5.2 interface, and
you'll see UDP packets with TLS encrypted data instead of ICMP packets.
Keys are included as extra files in the VPNClient and VPNServer service
configuration.
}
node n1 {
type router
model router
network-config {
hostname n1
!
interface eth2
ip address 10.0.4.2/24
ipv6 address 2001:4::2/64
!
interface eth1
ip address 10.0.2.1/24
ipv6 address 2001:2::1/64
!
interface eth0
ip address 10.0.0.1/24
ipv6 address 2001:0::1/64
!
}
canvas c1
iconcoords {297.0 236.0}
labelcoords {297.0 264.0}
interface-peer {eth0 n6}
interface-peer {eth1 n2}
interface-peer {eth2 n3}
}
node n2 {
type router
model router
network-config {
hostname n2
!
interface eth1
ip address 10.0.5.2/24
ipv6 address 2001:5::2/64
!
interface eth0
ip address 10.0.2.2/24
ipv6 address 2001:2::2/64
!
}
canvas c1
iconcoords {298.0 432.0}
labelcoords {298.0 460.0}
interface-peer {eth0 n1}
interface-peer {eth1 n4}
}
node n3 {
type router
model router
network-config {
hostname n3
!
interface eth1
ip address 10.0.4.1/24
ipv6 address 2001:4::1/64
!
interface eth0
ip address 10.0.3.1/24
ipv6 address 2001:3::1/64
!
}
canvas c1
iconcoords {573.0 233.0}
labelcoords {573.0 261.0}
interface-peer {eth0 n4}
interface-peer {eth1 n1}
}
node n4 {
type router
model router
network-config {
hostname n4
!
interface eth2
ip address 10.0.5.1/24
ipv6 address 2001:5::1/64
!
interface eth1
ip address 10.0.3.2/24
ipv6 address 2001:3::2/64
!
interface eth0
ip address 10.0.1.1/24
ipv6 address 2001:1::1/64
!
}
canvas c1
iconcoords {574.0 429.0}
labelcoords {574.0 457.0}
interface-peer {eth0 n5}
interface-peer {eth1 n3}
interface-peer {eth2 n2}
}
node n5 {
type router
model host
network-config {
hostname vpnserver
!
interface eth1
ipv6 address 2001:6::10/64
ip address 10.0.6.1/24
!
interface eth0
ip address 10.0.1.10/24
ipv6 address 2001:1::10/64
!
}
canvas c1
iconcoords {726.0 511.0}
labelcoords {726.0 543.0}
interface-peer {eth0 n4}
interface-peer {eth1 n7}
custom-config {
custom-config-id service:VPNServer:copycerts.sh
custom-command copycerts.sh
config {
#!/bin/sh
FILES="vpnserver.pem vpnserver.key ca-cert.pem dh1024.pem"
mkdir -p /tmp/certs
for f in $FILES; do
cp $f /tmp/certs
done
}
}
custom-config {
custom-config-id service:VPNServer:dh1024.pem
custom-command dh1024.pem
config {
-----BEGIN DH PARAMETERS-----
MIGHAoGBAIYQUzZ+2aYWFfdRWRL/Tc8bFqK8ve/0ihW1BPhe0z3b5D5+2/r9HAsG
u7oMkyM2oWp5N1DlzKgTizCRPRno5vgTz01kw4h6Y9ux496+huOHJGZXiCZlkZvM
daP8CC8z1naCC9MZLImQTkb1d1sH9BDRZAyfQYiXVYrHdqtNtqQjAgEC
-----END DH PARAMETERS-----
}
}
custom-config {
custom-config-id service:VPNServer:ca-cert.pem
custom-command ca-cert.pem
config {
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
df:69:1f:ef:e5:af:bf:0f
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, ST=WA, O=core-dev, CN=CORE CA/emailAddress=root@localhost
Validity
Not Before: Mar 20 16:16:08 2012 GMT
Not After : Mar 20 16:16:08 2015 GMT
Subject: C=US, ST=WA, O=core-dev, CN=CORE CA/emailAddress=root@localhost
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (1024 bit)
Modulus:
00:c4:d7:fc:c3:bc:a0:ee:76:7b:58:5c:96:6d:1f:
74:26:c2:93:c1:a4:94:95:13:5e:4f:8b:3f:00:27:
e5:1b:b1:3b:70:3e:72:71:4d:c9:67:54:33:29:49:
1e:de:a6:91:d9:00:ec:84:b8:64:f8:06:51:82:f4:
84:9b:a2:fe:16:34:5c:e1:2f:3d:ad:34:b9:8e:ad:
8e:ea:8a:e9:40:56:5b:f5:09:2c:bf:a0:08:db:81:
7f:fb:d8:b9:6c:a6:be:4c:1f:b1:4e:b3:b0:8d:8d:
e4:04:8e:f8:8e:e9:c7:aa:e7:4a:b4:87:89:a7:25:
72:38:74:bb:e5:b6:7f:86:7b
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
98:0E:C7:0A:74:5D:FB:56:5B:B7:91:80:2A:3A:D4:89:AD:6C:B9:51
X509v3 Authority Key Identifier:
keyid:98:0E:C7:0A:74:5D:FB:56:5B:B7:91:80:2A:3A:D4:89:AD:6C:B9:51
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha1WithRSAEncryption
39:7e:99:fd:40:44:0a:20:4c:3c:9a:bf:01:aa:94:c8:76:bb:
80:53:4f:cd:28:2f:5b:7f:0b:52:09:14:cb:ac:ee:74:7f:17:
4b:79:21:db:e1:a3:9b:e5:b1:72:83:f7:88:02:20:d6:23:33:
e4:ff:50:58:c6:88:e0:22:d7:2b:96:b3:dd:31:1a:80:52:0d:
61:4f:47:72:63:39:1e:7f:a1:ad:f0:2b:82:53:05:ca:3d:0a:
8f:3c:72:58:74:57:ae:8b:66:16:d9:a4:50:99:bc:d3:a7:c5:
54:63:f0:87:cd:06:1a:d4:61:ed:d3:b8:33:5d:5a:d6:a4:f0:
a4:96
-----BEGIN CERTIFICATE-----
MIICijCCAfOgAwIBAgIJAN9pH+/lr78PMA0GCSqGSIb3DQEBBQUAMF4xCzAJBgNV
BAYTAlVTMQswCQYDVQQIDAJXQTERMA8GA1UECgwIY29yZS1kZXYxEDAOBgNVBAMM
B0NPUkUgQ0ExHTAbBgkqhkiG9w0BCQEWDnJvb3RAbG9jYWxob3N0MB4XDTEyMDMy
MDE2MTYwOFoXDTE1MDMyMDE2MTYwOFowXjELMAkGA1UEBhMCVVMxCzAJBgNVBAgM
AldBMREwDwYDVQQKDAhjb3JlLWRldjEQMA4GA1UEAwwHQ09SRSBDQTEdMBsGCSqG
SIb3DQEJARYOcm9vdEBsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
AoGBAMTX/MO8oO52e1hclm0fdCbCk8GklJUTXk+LPwAn5RuxO3A+cnFNyWdUMylJ
Ht6mkdkA7IS4ZPgGUYL0hJui/hY0XOEvPa00uY6tjuqK6UBWW/UJLL+gCNuBf/vY
uWymvkwfsU6zsI2N5ASO+I7px6rnSrSHiaclcjh0u+W2f4Z7AgMBAAGjUDBOMB0G
A1UdDgQWBBSYDscKdF37Vlu3kYAqOtSJrWy5UTAfBgNVHSMEGDAWgBSYDscKdF37
Vlu3kYAqOtSJrWy5UTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBADl+
mf1ARAogTDyavwGqlMh2u4BTT80oL1t/C1IJFMus7nR/F0t5Idvho5vlsXKD94gC
INYjM+T/UFjGiOAi1yuWs90xGoBSDWFPR3JjOR5/oa3wK4JTBco9Co88clh0V66L
ZhbZpFCZvNOnxVRj8IfNBhrUYe3TuDNdWtak8KSW
-----END CERTIFICATE-----
}
}
custom-config {
custom-config-id service:VPNServer:vpnserver.pem
custom-command vpnserver.pem
config {
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
df:69:1f:ef:e5:af:bf:14
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, ST=WA, O=core-dev, CN=CORE CA/emailAddress=root@localhost
Validity
Not Before: Apr 12 15:09:45 2012 GMT
Not After : Apr 10 15:09:45 2022 GMT
Subject: C=US, ST=WA, O=core-dev, CN=vpnserver
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (1024 bit)
Modulus:
00:af:da:e2:fb:f7:e1:ca:97:bb:94:1b:8f:f7:70:
2f:c5:dc:71:22:b6:d2:f3:8b:fc:3a:d1:ef:65:60:
21:0f:e5:49:ed:71:45:1c:e9:f7:b9:f7:00:74:05:
a3:ab:63:05:5c:be:23:fd:18:c6:b7:17:52:21:3a:
86:5f:68:07:a6:1b:2f:fc:df:ce:ac:45:55:cd:2a:
d4:8a:66:d1:46:99:e4:b2:57:49:53:df:d0:c0:1e:
0f:84:6f:52:8d:2c:6e:4b:cb:f7:7e:c4:27:51:72:
cd:db:68:54:fd:4d:c4:42:1a:27:be:9f:03:03:d8:
ff:11:58:46:2f:58:13:2c:37
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
56:F2:E8:73:73:76:FD:14:13:1C:1A:AB:F2:8F:30:D4:91:7D:83:62
X509v3 Authority Key Identifier:
keyid:98:0E:C7:0A:74:5D:FB:56:5B:B7:91:80:2A:3A:D4:89:AD:6C:B9:51
Signature Algorithm: sha1WithRSAEncryption
29:62:f5:4a:40:ce:65:e0:73:ff:d1:80:ca:89:a3:29:4e:d8:
63:52:f0:76:21:b7:83:49:a4:fa:54:f7:0d:58:eb:af:fb:59:
61:63:02:57:de:4d:c1:8d:f1:de:d6:00:40:53:12:25:3c:9b:
48:9a:a7:3b:95:5d:67:83:11:b2:b2:ef:c2:71:95:23:e5:42:
88:09:ac:95:c9:cf:e8:5c:d8:14:9e:d8:4f:6f:af:10:4f:f5:
19:a2:71:f3:96:5f:1b:19:53:e9:16:4d:4e:be:e5:8a:83:57:
0a:93:7a:a4:53:05:1a:64:bf:25:69:fc:3c:3b:9b:aa:43:f4:
1d:fc
-----BEGIN CERTIFICATE-----
MIICmDCCAgGgAwIBAgIJAN9pH+/lr78UMA0GCSqGSIb3DQEBBQUAMF4xCzAJBgNV
BAYTAlVTMQswCQYDVQQIDAJXQTERMA8GA1UECgwIY29yZS1kZXYxEDAOBgNVBAMM
B0NPUkUgQ0ExHTAbBgkqhkiG9w0BCQEWDnJvb3RAbG9jYWxob3N0MB4XDTEyMDQx
MjE1MDk0NVoXDTIyMDQxMDE1MDk0NVowQTELMAkGA1UEBhMCVVMxCzAJBgNVBAgM
AldBMREwDwYDVQQKDAhjb3JlLWRldjESMBAGA1UEAwwJdnBuc2VydmVyMIGfMA0G
CSqGSIb3DQEBAQUAA4GNADCBiQKBgQCv2uL79+HKl7uUG4/3cC/F3HEittLzi/w6
0e9lYCEP5UntcUUc6fe59wB0BaOrYwVcviP9GMa3F1IhOoZfaAemGy/8386sRVXN
KtSKZtFGmeSyV0lT39DAHg+Eb1KNLG5Ly/d+xCdRcs3baFT9TcRCGie+nwMD2P8R
WEYvWBMsNwIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVu
U1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUVvLoc3N2/RQTHBqr
8o8w1JF9g2IwHwYDVR0jBBgwFoAUmA7HCnRd+1Zbt5GAKjrUia1suVEwDQYJKoZI
hvcNAQEFBQADgYEAKWL1SkDOZeBz/9GAyomjKU7YY1LwdiG3g0mk+lT3DVjrr/tZ
YWMCV95NwY3x3tYAQFMSJTybSJqnO5VdZ4MRsrLvwnGVI+VCiAmslcnP6FzYFJ7Y
T2+vEE/1GaJx85ZfGxlT6RZNTr7lioNXCpN6pFMFGmS/JWn8PDubqkP0Hfw=
-----END CERTIFICATE-----
}
}
custom-config {
custom-config-id service:VPNServer:vpnserver.key
custom-command vpnserver.key
config {
-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAK/a4vv34cqXu5Qb
j/dwL8XccSK20vOL/DrR72VgIQ/lSe1xRRzp97n3AHQFo6tjBVy+I/0YxrcXUiE6
hl9oB6YbL/zfzqxFVc0q1Ipm0UaZ5LJXSVPf0MAeD4RvUo0sbkvL937EJ1Fyzdto
VP1NxEIaJ76fAwPY/xFYRi9YEyw3AgMBAAECgYBcUveOP5KsUULqvBm2V5DNOTGw
fvl7Ycf3fZZIy9IvzTolzazyRCeJ25LCVt+ZsC/1g+HTE/nnz/ePeHFpj21LuVWJ
uWsV9qmdO0K5WxfXM4M08df+EVRrOh4rmgnHZp7jBW6srwGSSJxsvRAe0cRlZcCW
JsgJcyLJfZk0ypsSgQJBAOTtkUfJvqdU0CslBSmDY6skxjneS6kLQGvrELHRTZgd
K31E5WDYJgkpVGhWur19kUYIj7Fs3/Z1Q0KC0bRWokECQQDEpp52u4ilaP9nJsMm
5l/JVEO5gIzbqStVTmU64wLgx3mapL6P8Sa1gbJMlc5NMyayjRP0PoN0cvz+V9t4
3cB3AkEAxhLHINXtn9pCQxJE5SZJlkq7OFaeICUcGEPKrg/qkzKp7jkuPhzGzCZ2
YdCowkti5rWBnoIVRakwCNwnlWFgAQJAEhyWc7EKANIO091KFAcbw1szcZ5ZWtHV
3+F8iVPnK/SzSn7p3jADtKvhVBRoD8wqQD+mGtS3Hr6IdpR47kTeOQJBAJhd4vi6
LxbQZlS009DamuSrqgwsmTcfylu58bhFN4YkWCw8CPk3iKJXH6beomDvYEIQl8C5
jWe+PqSX6XcwnTk=
-----END PRIVATE KEY-----
}
}
custom-config {
custom-config-id service:VPNServer:vpnserver.sh
custom-command vpnserver.sh
config {
#!/bin/sh
# custom VPN Server Configuration for service (security.py)
# -------- CUSTOMIZATION REQUIRED --------
#
# The VPNServer service sets up the OpenVPN server for building VPN tunnels
# that allow access via TUN/TAP device to private networks.
#
# note that the IPForward and DefaultRoute services should be enabled
# directory containing the certificate and key described below, in addition to
# a CA certificate and DH key
keydir=/tmp/certs
# the name used for a "$keyname.pem" certificate and "$keyname.key" private key.
keyname=vpnserver
# the VPN subnet address from which the client VPN IP (for the TUN/TAP)
# will be allocated
vpnsubnet=10.0.200.0
# public IP address of this vpn server (same as VPNClient vpnserver= setting)
vpnserver=10.0.1.10
# optional list of private subnets reachable behind this VPN server
# each subnet and next hop is separated by a space
# "<subnet1>,<nexthop1> <subnet2>,<nexthop2> ..."
privatenets="10.0.6.0,10.0.1.10"
# optional list of VPN clients, for statically assigning IP addresses to
# clients; also, an optional client subnet can be specified for adding static
# routes via the client
# Note: VPN addresses x.x.x.0-3 are reserved
# "<keyname>,<vpnIP>,<subnetIP> <keyname>,<vpnIP>,<subnetIP> ..."
#vpnclients="client1KeyFilename,10.0.200.5,10.0.0.0 client2KeyFilename,,"
vpnclients=""
# NOTE: you may need to enable the StaticRoutes service on nodes within the
# private subnet, in order to have routes back to the client.
# /sbin/ip ro add <vpnsubnet>/24 via <vpnServerRemoteInterface>
# /sbin/ip ro add <vpnClientSubnet>/24 via <vpnServerRemoteInterface>
# -------- END CUSTOMIZATION --------
echo > $PWD/vpnserver.log
rm -f -r $PWD/ccd
# validate key and certification files
if [ ! -e $keydir\/$keyname.key ] || [ ! -e $keydir\/$keyname.pem ] \
|| [ ! -e $keydir\/ca-cert.pem ] || [ ! -e $keydir\/dh1024.pem ]; then
echo "ERROR: missing certification or key files under $keydir \
$keyname.key or $keyname.pem or ca-cert.pem or dh1024.pem" >> $PWD/vpnserver.log
fi
# validate configuration IP addresses
checkip=0
if [ "$(dpkg -l | grep " sipcalc ")" = "" ]; then
echo "WARNING: ip validation disabled because package sipcalc not installed\
" >> $PWD/vpnserver.log
checkip=1
else
if [ "$(sipcalc "$vpnsubnet" "$vpnserver" | grep ERR)" != "" ]; then
echo "ERROR: invalid vpn subnet or server address \
$vpnsubnet or $vpnserver " >> $PWD/vpnserver.log
fi
fi
# create client vpn ip pool file
(
cat << EOF
EOF
)> $PWD/ippool.txt
# create server.conf file
(
cat << EOF
# openvpn server config
local $vpnserver
server $vpnsubnet 255.255.255.0
push redirect-gateway def1
EOF
)> $PWD/server.conf
# add routes to VPN server private subnets, and push these routes to clients
for privatenet in $privatenets; do
if [ $privatenet != "" ]; then
net=${privatenet%%,*}
nexthop=${privatenet##*,}
if [ $checkip = "0" ] &&
[ "$(sipcalc "$net" "$nexthop" | grep ERR)" != "" ]; then
echo "ERROR: invalid vpn server private net address \
$net or $nexthop " >> $PWD/vpnserver.log
fi
echo push route $net 255.255.255.0 >> $PWD/server.conf
/sbin/ip ro add $net/24 via $nexthop
/sbin/ip ro add $vpnsubnet/24 via $nexthop
fi
done
# allow subnet through this VPN, one route for each client subnet
for client in $vpnclients; do
if [ $client != "" ]; then
cSubnetIP=${client##*,}
cVpnIP=${client#*,}
cVpnIP=${cVpnIP%%,*}
cKeyFilename=${client%%,*}
if [ "$cSubnetIP" != "" ]; then
if [ $checkip = "0" ] &&
[ "$(sipcalc "$cSubnetIP" "$cVpnIP" | grep ERR)" != "" ]; then
echo "ERROR: invalid vpn client and subnet address \
$cSubnetIP or $cVpnIP " >> $PWD/vpnserver.log
fi
echo route $cSubnetIP 255.255.255.0 >> $PWD/server.conf
if ! test -d $PWD/ccd; then
mkdir -p $PWD/ccd
echo client-config-dir $PWD/ccd >> $PWD/server.conf
fi
if test -e $PWD/ccd/$cKeyFilename; then
echo iroute $cSubnetIP 255.255.255.0 >> $PWD/ccd/$cKeyFilename
else
echo iroute $cSubnetIP 255.255.255.0 > $PWD/ccd/$cKeyFilename
fi
fi
if [ "$cVpnIP" != "" ]; then
echo $cKeyFilename,$cVpnIP >> $PWD/ippool.txt
fi
fi
done
(
cat << EOF
keepalive 10 120
ca $keydir/ca-cert.pem
cert $keydir/$keyname.pem
key $keydir/$keyname.key
dh $keydir/dh1024.pem
cipher AES-256-CBC
status /var/log/openvpn-status.log
log /var/log/openvpn-server.log
ifconfig-pool-linear
ifconfig-pool-persist $PWD/ippool.txt
port 1194
proto udp
dev tun
verb 4
daemon
EOF
)>> $PWD/server.conf
# start vpn server
openvpn --config server.conf
}
}
custom-config {
custom-config-id service:VPNServer
custom-command VPNServer
config {
('vpnserver.sh', 'vpnserver.key', 'vpnserver.pem', 'ca-cert.pem', 'dh1024.pem', 'copycerts.sh', )
50
('sh copycerts.sh', 'sh vpnserver.sh', )
('killall openvpn', )
('pidof openvpn', )
}
}
services {IPForward DefaultRoute SSH VPNServer}
}
node n6 {
type router
model PC
network-config {
hostname vpnclient
!
interface eth0
ip address 10.0.0.20/24
ipv6 address 2001:0::20/64
!
}
canvas c1
iconcoords {120.0 133.0}
labelcoords {120.0 165.0}
interface-peer {eth0 n1}
custom-config {
custom-config-id service:VPNClient:vpnclient.key
custom-command vpnclient.key
config {
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAM49tCuXw4Wjt8iY
84nU+fdOCw5M9RXXDfwHOxd1ILSP4KDLB7FfqVo9/DZOMlqNHYBeeF0WXLnr+zda
kKQUWpWHJQGQ4qHIJ+xCsBRCVbTPsRngeQMCCQw5ekW7NZKpKj6ANWkIm4dhiuTr
ZshR5Q6idNFG/b/ksNQsARK8vlJlAgMBAAECgYEAoKeKMKcAxJpasGUM2OJRcWaW
0CX8iG3EU/2h90zjFCQ7m6VsMaxN9KDyVa8mJElmoLd2VTT1OFLtlxnyMA423Hro
0tlKGErCH2yWMnrcjO30w7pmWSONn0yU/iAbzYAsmLNwYKCPAX2tJ9FZKsfVhctd
MEDMf/skhYL6CFe4XwECQQD1pV7C9lj0vsno22WoVg8n6/7OZu/ZBtCXoAQKAo14
bUqknK+SDMgqnexDQjarkQFrq4yxrPmp3Mv4a6M9vKglAkEA1u8i+1m4VMAARe9N
3qiFA0hk9v3Nm7f/ZVrkddoZNChV8CQW9y3Caltrlrjj0ugTAaWKdOhOcWeRcDo9
EMrNQQJAbXwpgkf+Wgd3QrwW0TKaSrbauPAUUuzAp/QAGN4OY/CCZmAXuMbNqID+
vvOSHmHg+jZZ3Q81r8njd3OyLGAbqQJAURqn3qT6c7CH6dvlTHHWz2hQAQvAvFPw
IbTspLQJ8q6NzzIvIFK6HBwnOxbFkV5VXbezyW2nvA9SyECRrnZ4gQJAfV2In/xB
qxyrHHInJPtwzsKjfgw9787ulXeDa+gYQrmwfrqYvPo6NtfJ9i2ahl8tr3LIFWIH
NavHWA5NKc4GVw==
-----END PRIVATE KEY-----
}
}
custom-config {
custom-config-id service:VPNClient:vpnclient.pem
custom-command vpnclient.pem
config {
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
df:69:1f:ef:e5:af:bf:13
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, ST=WA, O=core-dev, CN=CORE CA/emailAddress=root@localhost
Validity
Not Before: Apr 12 15:09:01 2012 GMT
Not After : Apr 10 15:09:01 2022 GMT
Subject: C=US, ST=WA, O=core-dev, CN=vpnclient
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (1024 bit)
Modulus:
00:ce:3d:b4:2b:97:c3:85:a3:b7:c8:98:f3:89:d4:
f9:f7:4e:0b:0e:4c:f5:15:d7:0d:fc:07:3b:17:75:
20:b4:8f:e0:a0:cb:07:b1:5f:a9:5a:3d:fc:36:4e:
32:5a:8d:1d:80:5e:78:5d:16:5c:b9:eb:fb:37:5a:
90:a4:14:5a:95:87:25:01:90:e2:a1:c8:27:ec:42:
b0:14:42:55:b4:cf:b1:19:e0:79:03:02:09:0c:39:
7a:45:bb:35:92:a9:2a:3e:80:35:69:08:9b:87:61:
8a:e4:eb:66:c8:51:e5:0e:a2:74:d1:46:fd:bf:e4:
b0:d4:2c:01:12:bc:be:52:65
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
A0:59:F2:02:46:86:A3:2A:BD:C0:33:DA:31:71:1F:78:88:16:43:CE
X509v3 Authority Key Identifier:
keyid:98:0E:C7:0A:74:5D:FB:56:5B:B7:91:80:2A:3A:D4:89:AD:6C:B9:51
Signature Algorithm: sha1WithRSAEncryption
0a:39:71:f3:9f:50:68:f9:de:3e:47:eb:73:6b:4e:d8:6c:ff:
d5:38:0a:a0:8f:52:8f:cb:7e:6f:95:62:b6:04:2f:1d:3f:42:
32:26:38:c5:89:ea:ef:fc:27:ab:f0:81:39:e2:58:d6:fd:f8:
3e:f8:db:22:ce:39:dd:13:49:6a:7b:eb:90:8a:cc:bc:7d:87:
c5:d4:25:5f:f5:9a:0a:8f:1e:28:86:50:46:e2:fd:4e:ff:5d:
b8:0e:48:2d:bd:0f:38:b4:85:0f:4e:05:c6:60:cf:5a:d9:d0:
5c:32:ed:70:3c:72:28:fd:75:c5:38:d5:52:cb:57:f9:4b:86:
0a:74
-----BEGIN CERTIFICATE-----
MIICmDCCAgGgAwIBAgIJAN9pH+/lr78TMA0GCSqGSIb3DQEBBQUAMF4xCzAJBgNV
BAYTAlVTMQswCQYDVQQIDAJXQTERMA8GA1UECgwIY29yZS1kZXYxEDAOBgNVBAMM
B0NPUkUgQ0ExHTAbBgkqhkiG9w0BCQEWDnJvb3RAbG9jYWxob3N0MB4XDTEyMDQx
MjE1MDkwMVoXDTIyMDQxMDE1MDkwMVowQTELMAkGA1UEBhMCVVMxCzAJBgNVBAgM
AldBMREwDwYDVQQKDAhjb3JlLWRldjESMBAGA1UEAwwJdnBuY2xpZW50MIGfMA0G
CSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOPbQrl8OFo7fImPOJ1Pn3TgsOTPUV1w38
BzsXdSC0j+CgywexX6laPfw2TjJajR2AXnhdFly56/s3WpCkFFqVhyUBkOKhyCfs
QrAUQlW0z7EZ4HkDAgkMOXpFuzWSqSo+gDVpCJuHYYrk62bIUeUOonTRRv2/5LDU
LAESvL5SZQIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVu
U1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUoFnyAkaGoyq9wDPa
MXEfeIgWQ84wHwYDVR0jBBgwFoAUmA7HCnRd+1Zbt5GAKjrUia1suVEwDQYJKoZI
hvcNAQEFBQADgYEACjlx859QaPnePkfrc2tO2Gz/1TgKoI9Sj8t+b5VitgQvHT9C
MiY4xYnq7/wnq/CBOeJY1v34PvjbIs453RNJanvrkIrMvH2HxdQlX/WaCo8eKIZQ
RuL9Tv9duA5ILb0POLSFD04FxmDPWtnQXDLtcDxyKP11xTjVUstX+UuGCnQ=
-----END CERTIFICATE-----
}
}
custom-config {
custom-config-id service:VPNClient:copycerts.sh
custom-command copycerts.sh
config {
#!/bin/sh
FILES="vpnclient.pem vpnclient.key"
mkdir -p /tmp/certs
for f in $FILES; do
cp $f /tmp/certs
done
}
}
custom-config {
custom-config-id service:VPNClient:vpnclient.sh
custom-command vpnclient.sh
config {
#!/bin/sh
# custom VPN Client configuration for service (security.py)
# -------- CUSTOMIZATION REQUIRED --------
#
# The VPNClient service builds a VPN tunnel to the specified VPN server using
# OpenVPN software and a virtual TUN/TAP device.
# directory containing the certificate and key described below
keydir=/tmp/certs
# the name used for a "$keyname.pem" certificate and "$keyname.key" private key.
keyname=vpnclient
# the public IP address of the VPN server this client should connect with
vpnserver="10.0.1.10"
# optional next hop for adding a static route to reach the VPN server
nexthop=""
# --------- END CUSTOMIZATION --------
# validate addresses
if [ "$(dpkg -l | grep " sipcalc ")" = "" ]; then
echo "WARNING: ip validation disabled because package sipcalc not installed
" > $PWD/vpnclient.log
else
if [ "$(sipcalc "$vpnserver" "$nexthop" | grep ERR)" != "" ]; then
echo "ERROR: invalide address $vpnserver or $nexthop \
" > $PWD/vpnclient.log
fi
fi
# validate key and certification files
if [ ! -e $keydir\/$keyname.key ] || [ ! -e $keydir\/$keyname.pem ] \
|| [ ! -e $keydir\/ca-cert.pem ] || [ ! -e $keydir\/dh1024.pem ]; then
echo "ERROR: missing certification or key files under $keydir \
$keyname.key or $keyname.pem or ca-cert.pem or dh1024.pem" >> $PWD/vpnclient.log
fi
# if necessary, add a static route for reaching the VPN server IP via the IF
vpnservernet=${vpnserver%.*}.0/24
if [ "$nexthop" != "" ]; then
/sbin/ip route add $vpnservernet via $nexthop
fi
# create openvpn client.conf
(
cat << EOF
client
dev tun
proto udp
remote $vpnserver 1194
nobind
ca $keydir/ca-cert.pem
cert $keydir/$keyname.pem
key $keydir/$keyname.key
dh $keydir/dh1024.pem
cipher AES-256-CBC
log /var/log/openvpn-client.log
verb 4
daemon
EOF
) > client.conf
openvpn --config client.conf
}
}
custom-config {
custom-config-id service:VPNClient
custom-command VPNClient
config {
('vpnclient.sh', 'copycerts.sh', 'vpnclient.pem', 'vpnclient.key', )
60
('sh copycerts.sh', 'sh vpnclient.sh', )
('killall openvpn', )
('pidof openvpn', )
}
}
services {DefaultRoute VPNClient}
}
node n7 {
type lanswitch
network-config {
hostname n7
!
}
canvas c1
iconcoords {824.0 458.0}
labelcoords {824.0 482.0}
interface-peer {e0 n5}
interface-peer {e1 n8}
interface-peer {e2 n9}
interface-peer {e3 n10}
}
node n8 {
type router
model PC
network-config {
hostname n8
!
interface eth0
ip address 10.0.6.20/24
ipv6 address 2001:6::20/64
!
}
canvas c1
iconcoords {801.0 264.0}
labelcoords {801.0 296.0}
interface-peer {eth0 n7}
}
node n9 {
type router
model PC
network-config {
hostname n9
!
interface eth0
ip address 10.0.6.21/24
ipv6 address 2001:6::21/64
!
}
canvas c1
iconcoords {885.0 305.0}
labelcoords {885.0 337.0}
interface-peer {eth0 n7}
}
node n10 {
type router
model PC
network-config {
hostname n10
!
interface eth0
ip address 10.0.6.22/24
ipv6 address 2001:6::22/64
!
}
canvas c1
iconcoords {954.0 353.0}
labelcoords {954.0 385.0}
interface-peer {eth0 n7}
}
link l1 {
nodes {n6 n1}
bandwidth 0
}
link l2 {
nodes {n4 n5}
bandwidth 0
}
link l3 {
nodes {n1 n2}
bandwidth 0
}
link l4 {
nodes {n3 n4}
bandwidth 0
}
link l5 {
nodes {n3 n1}
bandwidth 0
}
link l6 {
nodes {n4 n2}
bandwidth 0
}
link l7 {
nodes {n5 n7}
bandwidth 0
}
link l8 {
nodes {n8 n7}
bandwidth 0
}
link l9 {
nodes {n9 n7}
bandwidth 0
}
link l10 {
nodes {n10 n7}
bandwidth 0
}
annotation a1 {
iconcoords {661.0 187.0 997.0 579.0}
type rectangle
label {private network}
labelcolor black
fontfamily {Arial}
fontsize 12
color #e9e9fe
width 0
border black
rad 25
effects {bold}
canvas c1
}
canvas c1 {
name {Canvas1}
}
option global {
interface_names no
ip_addresses yes
ipv6_addresses no
node_labels yes
link_labels yes
ipsec_configs yes
exec_errors yes
show_api no
background_images no
annotations yes
grid yes
traffic_start 0
}

60
gui/core-bsd-cleanup.sh Executable file
View file

@ -0,0 +1,60 @@
#!/bin/sh
#
# cleanup.sh
#
# Copyright 2005-2013 the Boeing Company.
# See the LICENSE file included in this distribution.
#
# Removes leftover netgraph nodes and vimages from an emulation that
# did not exit properly.
#
ngnodes="pipe eiface hub switch wlan"
vimages=`vimage -l | fgrep -v " " | cut -d: -f 1 | sed s/\"//g`
# shutdown netgraph nodes
for ngn in $ngnodes
do
nodes=`ngctl list | grep $ngn | awk '{print $2}'`
for n in $nodes
do
echo ngctl shutdown $n:
ngctl shutdown $n:
done
done
# kills processes and remove vimages
for vimage in $vimages
do
procs=`vimage $vimage ps x | awk '{print $1}'`
for proc in $procs
do
if [ $proc != "PID" ]
then
echo vimage $vimage kill $proc
vimage $vimage kill $proc
fi
done
loopback=`vimage $vimage ifconfig -a | head -n 1 | awk '{split($1,a,":"); print a[1]}'`
if [ "$loopback" != "" ]
then
addrs=`ifconfig $loopback | grep inet | awk '{print $2}'`
for addr in $addrs
do
echo vimage $vimage ifconfig $loopback $addr -alias
vimage $vimage ifconfig $loopback $addr -alias
if [ $? != 0 ]
then
vimage $vimage ifconfig $loopback inet6 $addr -alias
fi
done
echo vimage $vimage ifconfig $loopback down
vimage $vimage ifconfig $loopback down
fi
vimage $vimage kill -9 -1 2> /dev/null
echo vimage -d $vimage
vimage -d $vimage
done
# clean up temporary area
rm -rf /tmp/pycore.*

164
gui/core-gui.in Executable file
View file

@ -0,0 +1,164 @@
#!/bin/sh
#
# Copyright 2005-2013 the Boeing Company.
# See the LICENSE file included in this distribution.
#
#
# Copyright 2004-2008 University of Zagreb, Croatia.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# This work was supported in part by Croatian Ministry of Science
# and Technology through the research contract #IP-2003-143.
#
case $1 in
-h | --help)
echo ""
echo "Usage: `basename $0` [-h|-v] [-b|-c <sessionid>] [-s] [<configfile.imn>]"
echo ""
echo "Launches the CORE Tcl/Tk X11 GUI or starts an imn-based emulation."
echo ""
echo " -(-h)elp show help message and exit"
echo " -(-v)ersion show version number and exit"
echo " -(-b)atch batch mode (no X11 GUI)"
echo -n " -(-c)losebatch <sessionid> stop and clean up a batch mode "
echo "session <sessionid>"
echo " -(-s)tart start in execute mode, not edit mode"
echo " <configfile.imn> (optional) load the specified imn scenario file"
echo ""
echo "With no parameters, starts the GUI in edit mode with a blank canvas."
echo ""
exit 0
;;
-v | --version)
exec echo "`basename $0` version @CORE_VERSION@ (@CORE_VERSION_DATE@)"
exit 0
;;
esac
SHELL=/bin/sh
export SHELL
export LIBDIR="@CORE_LIB_DIR@"
export SBINDIR="@SBINDIR@"
# eval is used here to expand "~" to user's home dir
if [ x$CONFDIR = x ]; then export CONFDIR=`eval "echo @CORE_GUI_CONF_DIR@"` ; fi
export CORE_STATE_DIR="@CORE_STATE_DIR@"
export CORE_DATA_DIR="@CORE_DATA_DIR@"
export CORE_USER=`id -u -n`
export CORE_START_DIR=$PWD
init_conf_dir() {
echo "Setting up user config area $CONFDIR, $CONFDIR/configs, and "
echo " $CONFDIR/myservices"
mkdir -p $CONFDIR
if [ $? != 0 ]; then echo "error making directory $CONFDIR!"; fi
mkdir -p $CONFDIR/configs
if [ $? != 0 ]; then
echo "error making directory $CONFDIR/configs!";
else
cp -a $CORE_DATA_DIR/examples/configs/* $CONFDIR/configs/
fi
mkdir -p $CONFDIR/myservices
if [ $? != 0 ]; then
echo "error making directory $CONFDIR/myservices!";
else
cp -a $CORE_DATA_DIR/examples/myservices/* $CONFDIR/myservices/
fi
}
cd $LIBDIR
core=$LIBDIR/core.tcl
# locate wish8.5 binaries
WISHLIST="/usr/local/bin/wish8.5 /usr/bin/wish8.5"
for wishbin in $WISHLIST
do
if [ -x $wishbin ]
then
WISH=$wishbin;
break;
fi;
done;
if [ a$WISH = a ]
then
echo "CORE could not locate the Tcl/Tk binary (wish8.5)."
exit 1;
fi;
# create /home/user/.core directory if necessary
if [ ! -e $CONFDIR ]
then
init_conf_dir
fi;
# check for and fix write permissions on /home/user/.core directory
while [ ! -w $CONFDIR ];
do
echo " CORE requires write permissions to the '$CONFDIR'"
echo " configuration directory for the user '$CORE_USER',"
echo " would you like to fix this now [Y/n]?"
read yn
if [ "z$yn" = "zn" ]; then
break
fi
echo -n " (sudo may prompt you for a password; if you do not have sudo set"
echo " up for the"
echo " user '$CORE_USER', su to root and run this command:"
echo " chown -R $CORE_USER $CONFDIR )"
sudo chown -R $U $CONFDIR
sudo chmod -R u+w $CONFDIR
done
# GUI config directory should not be a file (old prefs)
if [ ! -d $CONFDIR ]
then
mv $CONFDIR $CONFDIR.tmp
if [ $? != 0 ]; then echo "error moving $CONFDIR!"; exit 1; fi
init_conf_dir
echo "Old preferences file $CONFDIR has been moved to $CONFDIR/prefs.conf"
mv $CONFDIR.tmp $CONFDIR/prefs.conf
if [ $? != 0 ]; then echo "error moving $CONFDIR.tmp to $CONFDIR/prefs.conf!"; exit 1; fi
fi;
case $1 in
-b | --batch)
TCLBIN=`echo ${WISH} | sed s/wish/tclsh/g`
exec ${TCLBIN} $core "$@"
;;
-c | --closebatch)
TCLBIN=`echo ${WISH} | sed s/wish/tclsh/g`
exec ${TCLBIN} $core "$@"
;;
-s)
exec ${WISH} $core "--start $@"
;;
*)
exec ${WISH} $core $@
;;
esac
cd $CORE_START_DIR

280
gui/core.tcl Executable file
View file

@ -0,0 +1,280 @@
#
# Copyright 2005-2013 the Boeing Company.
# See the LICENSE file included in this distribution.
#
#
# Copyright 2004-2008 University of Zagreb, Croatia.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# This work was supported in part by Croatian Ministry of Science
# and Technology through the research contract #IP-2003-143.
#
#****h* imunes/imunes.tcl
# NAME
# imunes.tcl
# FUNCTION
# Starts imunes in batch or interactive mode. Include procedures from
# external files and initializes global variables.
#
# imunes [-b|--batch] [filename]
#
# When starting the program in batch mode the option -b or --batch must
# be specified.
#
# When starting the program with defined filename, configuration for
# file "filename" is loaded to imunes.
#****
if {[lindex $argv 0] == "-b" || [lindex $argv 0] == "--batch"} {
set argv [lrange $argv 1 end]
set execMode batch
} elseif {[lindex $argv 0] == "-c" || [lindex $argv 0] == "--closebatch"} {
set argv [lrange $argv 1 end]
set execMode closebatch
} elseif {[lindex $argv 0] == "-a" || [lindex $argv 0] == "--addons"} {
set argv [lrange $argv 1 end]
set execMode addons
} else {
set execMode interactive
}
#
# Include procedure definitions from external files. There must be
# some better way to accomplish the same goal, but that's how we do it
# for the moment.
#
#****v* imunes.tcl/LIBDIR
# NAME
# LIBDIR
# FUNCTION
# The location of imunes library files. The LIBDIR variable
# will be automatically set to the proper value by the installation script.
#*****
set LIBDIR ""
set SBINDIR "/usr/local/sbin"
set CONFDIR "."
set CORE_DATA_DIR "."
set CORE_STATE_DIR "."
set CORE_START_DIR ""
set CORE_USER ""
if { [info exists env(LIBDIR)] } {
set LIBDIR $env(LIBDIR)
}
if { [info exists env(SBINDIR)] } {
set SBINDIR $env(SBINDIR)
}
if { [info exists env(CONFDIR)] } {
set CONFDIR $env(CONFDIR)
}
if { [info exists env(CORE_DATA_DIR)] } {
set CORE_DATA_DIR $env(CORE_DATA_DIR)
}
if { [info exists env(CORE_STATE_DIR)] } {
set CORE_STATE_DIR $env(CORE_STATE_DIR)
}
if { [info exists env(CORE_START_DIR)] } {
set CORE_START_DIR $env(CORE_START_DIR)
}
if { [info exists env(CORE_USER)] } {
set CORE_USER $env(CORE_USER)
}
source "$LIBDIR/version.tcl"
source "$LIBDIR/linkcfg.tcl"
source "$LIBDIR/nodecfg.tcl"
source "$LIBDIR/ipv4.tcl"
source "$LIBDIR/ipv6.tcl"
source "$LIBDIR/cfgparse.tcl"
source "$LIBDIR/exec.tcl"
source "$LIBDIR/canvas.tcl"
source "$LIBDIR/editor.tcl"
source "$LIBDIR/annotations.tcl"
source "$LIBDIR/help.tcl"
source "$LIBDIR/filemgmt.tcl"
source "$LIBDIR/ns2imunes.tcl"
source "$LIBDIR/mobility.tcl"
source "$LIBDIR/api.tcl"
source "$LIBDIR/wlan.tcl"
source "$LIBDIR/wlanscript.tcl"
source "$LIBDIR/util.tcl"
source "$LIBDIR/plugins.tcl"
source "$LIBDIR/nodes.tcl"
source "$LIBDIR/services.tcl"
source "$LIBDIR/traffic.tcl"
source "$LIBDIR/exceptions.tcl"
#
# Global variables are initialized here
#
#****v* imunes.tcl/node_list
# NAME
# node_list
# FUNCTION
# Represents the list of all the nodes in the simulation. When starting
# the program this list is empty.
#*****
#****v* imunes.tcl/link_list
# NAME
# link_list
# FUNCTION
# Represents the list of all the links in the simulation. When starting
# the program this list is empty.
#*****
#****v* imunes.tcl/canvas_list
# NAME
# canvas_list
# FUNCTION
# Contains the list of all the canvases in the simulation. When starting
# the program this list is empty.
#*****
#****v* imunes.tcl/prefs
# NAME
# prefs
# FUNCTION
# Contains the list of preferences. When starting a program
# this list is empty.
#*****
#****v* imunes.tcl/eid
# NAME
# eid -- experiment id.
# FUNCTION
# The id of the current experiment. When starting a program this variable
# is set to e0.
#*****
set node_list {}
set link_list {}
set annotation_list {}
set canvas_list {}
set eid e0
set plot_list {}
#****v* core.tcl/exec_servers
# NAME
# exec_servers -- array of CORE remote execution servers
# FUNCTION
#*****
# IP port monitor_port active ssh username
array set exec_servers {}
loadServersConf ;# populate exec_servers
# global vars
set showAPI 0
set mac_byte4 0
set mac_byte5 0
set g_mrulist {}
initDefaultPrefs
loadDotFile
loadPluginsConf
autoConnectPlugins
#
# Initialization should be complete now, so let's start doing something...
#
if {$execMode == "interactive"} {
# GUI-related files
source "$LIBDIR/widget.tcl"
source "$LIBDIR/tooltips.tcl"
source "$LIBDIR/initgui.tcl"
source "$LIBDIR/topogen.tcl"
source "$LIBDIR/graph_partitioning.tcl"
source "$LIBDIR/gpgui.tcl"
source "$LIBDIR/debug.tcl"
# Load all Tcl files from the addons directory
foreach file [glob -nocomplain -directory "$LIBDIR/addons" *.tcl] {
if { [catch { if { [file isfile $file ] } { source "$file"; } } e] } {
puts "*** Error loading addon file: $file"
puts " $e"
}
}
# end Boeing
setOperMode edit
fileOpenStartUp
# Boeing --start option
foreach arg $argv {
if { $arg == "--start -s" || $arg == "--start" } {
global currentFile
if { [file extension $currentFile] == ".xml" } {
after 100; update; # yield to other events so XML file
after 100; update; # can be loaded and received
}
startStopButton "exec"; break;
}
}
# Boeing changed elseif to catch batch and else to output error
} elseif {$execMode == "batch"} {
puts "batch execute $argv"
set sock [lindex [getEmulPlugin "*"] 2]
if { $sock == "" || $sock == "-1" || $sock == -1 } { exit.real; }
if {$argv != ""} {
global currentFile
set currentFile [argAbsPathname $argv]
set fileId [open $currentFile r]
set cfg ""
foreach entry [read $fileId] {
lappend cfg $entry
}
close $fileId
after 100 {
loadCfg $cfg
deployCfgAPI $sock
puts "waiting to enter RUNTIME state..."
}
global vwaitdummy
vwait vwaitdummy
}
} elseif {$execMode == "closebatch"} {
global g_session_choice
set g_session_choice $argv
puts "Attempting to close session $argv ..."
global vwaitdummy
vwait vwaitdummy
} elseif {$execMode == "addons"} {
# pass control to included addons code
foreach file [glob -nocomplain -directory "$LIBDIR/addons" *.tcl] {
if { [file isfile $file ] } { source "$file"; }
}
global vwaitdummy
vwait vwaitdummy
} else {
puts "ERROR: execMode is not set in core.tcl"
}

54
gui/debug.tcl Normal file
View file

@ -0,0 +1,54 @@
#
# CORE Debugger
# Copyright 2005-2013 the Boeing Company.
# See the LICENSE file included in this distribution.
#
# author: Jeff Ahrenholz <jeffrey.m.ahrenholz@boeing.com>
#
.menubar.tools add command -label "Debugger..." -command popupDebugger
set g_last_debug_cmd "puts \"Hello world\""
proc popupDebugger {} {
global g_last_debug_cmd
set wi .debugger
catch { destroy $wi }
toplevel $wi
wm transient $wi .
wm resizable $wi 300 200
wm title $wi "CORE Debugger"
frame $wi.dbg -borderwidth 4
label $wi.dbg.label1 \
-text "Enter TCL/Tk commands below, press Run to evaluate:"
text $wi.dbg.cmd -bg white -width 100 -height 3
pack $wi.dbg.label1 $wi.dbg.cmd -side top -anchor w -padx 4 -pady 4
pack $wi.dbg -side top
$wi.dbg.cmd insert end "$g_last_debug_cmd"
frame $wi.btn
# evaluate debugging commands entered into the text box below
button $wi.btn.exec -text "Run" -command {
global g_last_debug_cmd
set wi .debugger
set i 1
set g_last_debug_cmd ""
while { 1 } {
set cmd [$wi.dbg.cmd get $i.0 $i.end]
set g_last_debug_cmd "$g_last_debug_cmd$cmd\n"
if { $cmd == "" } { break }
catch { eval $cmd } output
puts $output
incr i
}
}
button $wi.btn.close -text "Close" -command "destroy .debugger"
pack $wi.btn.exec $wi.btn.close -side left -padx 4 -pady 4
pack $wi.btn -side bottom
}

5149
gui/editor.tcl Executable file

File diff suppressed because it is too large Load diff

209
gui/exceptions.tcl Normal file
View file

@ -0,0 +1,209 @@
#
# Copyright 2011-2013 the Boeing Company.
# See the LICENSE file included in this distribution.
#
array set g_exceptions {}
global execMode
if { $execMode == "interactive" } {
set g_img_cel [image create photo -file $CORE_DATA_DIR/icons/tiny/cel.gif]
}
set g_cel_blink_state "off"
# receive an exception into the g_exceptions array from an Exception Message
proc receiveException { valuelist } {
global g_exceptions EXCEPTION_LEVELS
set idx [expr {1 + [array size g_exceptions]}]
array set g_exceptions [list $idx $valuelist]
# exceptions with level ERROR or FATAL will throw the CEL
array set vals $valuelist
if { $vals(level) <= [lsearch -exact $EXCEPTION_LEVELS "ERROR"] } {
throwCEL false
if { $vals(level) <= [lsearch -exact $EXCEPTION_LEVELS "FATAL" ] } {
blinkCEL start
}
}
}
# turn on/off the CEL in the bottom right indicator area
proc throwCEL { clear } {
global execMode
if { $execMode != "interactive" } { return }
global g_img_cel
if { $clear } {
.bottom.indicators configure -image "" -width 5
} else {
if { [.bottom.indicators cget -image] == "" } {
.bottom.indicators configure -image $g_img_cel -width 42
}
}
}
# blink the CEL on and off for fatal errors
proc blinkCEL { cmd } {
global execMode
if { $execMode != "interactive" } { return }
# keep track of state so this can be called multiple times
global g_cel_blink_state
if { $cmd == "start" } {
if { $g_cel_blink_state != "off" } { return } ;# already on
set g_cel_blink_state "on"
} elseif { $cmd == "stop" } {
if { $g_cel_blink_state != "on" } { return } ;# already off
set g_cel_blink_state "off"
}
if { $g_cel_blink_state == "off" } {
throwCEL true
return
}
if { [.bottom.indicators cget -image] == "" } {
set clear false ;# CEL is off, turn it on
} else {
set clear true ;# CEL is on, turn it off
}
throwCEL $clear
after 750 blinkCEL "blink"
}
# clear the g_exceptions array and the CEL
proc clearExceptions { tree txt } {
global g_exceptions
array unset g_exceptions
array set g_exceptions {}
if { $tree != "" } {
exceptionsPopulateTree $tree $txt
}
}
# show the CEL dialog for viewing a list of exceptions
proc popupExceptions {} {
global g_img_cel CORE_STATE_DIR
set w .popupExceptions
catch {destroy $w}
toplevel $w
wm transient $w .
wm title $w "CEL"
ttk::frame $w.top
ttk::label $w.top.icon -image $g_img_cel
ttk::label $w.top.lab -text "Check Emulation Light"
pack $w.top.icon $w.top.lab -side left -padx 4
pack $w.top -side top -padx 4 -pady 4
ttk::frame $w.mid
ttk::treeview $w.mid.tree -columns {time level node source} -show headings \
-yscroll "$w.mid.vsb set" -xscroll "$w.mid.hsb set"
ttk::scrollbar $w.mid.vsb -orient vertical -command "$w.mid.tree yview"
ttk::scrollbar $w.mid.hsb -orient horizontal -command "$w.mid.tree xview"
pack $w.mid -side top -fill both -expand true -padx 4 -pady 4
grid $w.mid.tree $w.mid.vsb -in $w.mid -sticky nsew
grid $w.mid.hsb -in $w.mid -sticky nsew
grid column $w.mid 0 -weight 1
grid row $w.mid 0 -weight 1
ttk::frame $w.detail
text $w.detail.txt -height 10 -yscrollcommand "$w.detail.vsb set"
ttk::scrollbar $w.detail.vsb -orient vertical -command "$w.detail.txt yview"
pack $w.detail -side top -fill both -expand true -padx 4 -pady 4
grid $w.detail.txt $w.detail.vsb -in $w.detail -sticky nsew
grid column $w.detail 0 -weight 1
grid row $w.detail 0 -weight 1
bind $w.mid.tree <<TreeviewSelect>> \
"exceptionSelect $w.mid.tree $w.detail.txt"
ttk::frame $w.btn
set clearhicmd "drawNodeCircle {} {} {} {} excphi"
set clearexcpcmd "clearExceptions $w.mid.tree $w.detail.txt"
set closecmd "destroy $w; $clearhicmd"
bind $w <Key-Escape> $closecmd
ttk::button $w.btn.reset -text "Reset CEL" \
-command "throwCEL true; blinkCEL stop; $clearhicmd; $clearexcpcmd"
ttk::button $w.btn.log -text "View core-daemon log" \
-command "popupFileView $CORE_STATE_DIR/log/core-daemon.log"
ttk::button $w.btn.nlog -text "View node log" -state disabled
ttk::button $w.btn.close -text "Close" -command $closecmd
pack $w.btn.reset $w.btn.log $w.btn.nlog $w.btn.close -side left
pack $w.btn -side top -padx 4 -pady 4
# populate treeview
set widths { 150 40 40 60 }; set i 0
foreach col {time level node source} {
$w.mid.tree heading $col -text $col
set width [lindex $widths $i]; incr i
$w.mid.tree column $col -width $width
}
exceptionsPopulateTree $w.mid.tree $w.detail.txt
}
# populate the given TreeView with a list of exceptions from g_exceptions
proc exceptionsPopulateTree { tree txt } {
global g_exceptions
set items [$tree children {}]
$tree delete $items
$txt delete 0.0 end
foreach idx [lsort -integer [array names g_exceptions]] {
array set vals $g_exceptions($idx)
set level [exceptionLevelText $vals(level)]
$tree insert {} end -id $idx \
-values [list $vals(date) "$level ($vals(level))" \
$vals(num) $vals(src)]
}
}
# user has clicked on an exception from the TreeView, display the details
proc exceptionSelect { tree txt } {
global g_exceptions g_current_session
set idx [$tree selection]
set btn .popupExceptions.btn.nlog
$txt delete 0.0 end
drawNodeCircle "" "" "" "" excphi
if { ![info exists g_exceptions($idx)] } {
puts "missing exception data"
return
}
array set vals $g_exceptions($idx)
$txt insert end "DATE: $vals(date)\n"
set level [exceptionLevelText $vals(level)]
$txt insert end "LEVEL: $level ($vals(level))\n"
set node ""
if { $vals(num) >= 0 } {
set node "n$vals(num)"
global $node
if { [info exists $node] } {
drawNodeCircle $node 30 red excphi ""
set node [getNodeName $node]
$btn configure -command \
"popupFileView /tmp/pycore.$g_current_session/$node.log"
$btn state !disabled
} else {
$btn state disabled
}
} else {
$btn state disabled
}
$txt insert end "NODE: $vals(num)\t($node)\n"
$txt insert end "SESSION: $vals(sess)\n"
$txt insert end "SOURCE: $vals(src)\n"
$txt insert end "\n$vals(txt)\n\n"
if { $vals(opaque) != "" } {
$txt insert end "\nOPAQUE: $vals(opaque)\n\n"
}
}
proc exceptionLevelText { level } {
global EXCEPTION_LEVELS ;# from api.tcl
if { $level < 0 || $level >= [llength $EXCEPTION_LEVELS] } {
return "UNKNOWN"
} else {
return [lindex $EXCEPTION_LEVELS $level]
}
}

857
gui/exec.tcl Executable file
View file

@ -0,0 +1,857 @@
#
# Copyright 2005-2013 the Boeing Company.
# See the LICENSE file included in this distribution.
#
#
# Copyright 2004-2008 University of Zagreb, Croatia.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# This work was supported in part by the Croatian Ministry of Science
# and Technology through the research contract #IP-2003-143.
#
#****f* exec.tcl/nexec
# NAME
# nexec -- execute program
# SYNOPSIS
# set result [nexec $args]
# FUNCTION
# Executes the sting given in args variable. The sting is not executed
# if IMUNES is running in editor only mode. Execution of a string can
# be local or remote. If socket can not be opened in try of a remote
# execution, mode is switched to editor only mode.
# INPUTS
# * args -- the string that should be executed localy or remotely.
# RESULT
# * result -- the standard output of the executed string.
#****
proc nexec { node args } {
global exec_servers
# debug output of every command
#puts "nexec($node): $args"
#if {[lsearch $args ngctl] != -1 } {
# puts "XXX $args"
# set fileId [open "nexec.log" a]
# puts $fileId $args
# close $fileId
#}
# safely exec the given command, printing errors to stdout
if { $node == "localnode" } { ;# local execution
if { [ catch {eval exec $args} e ] } {
if { $e == "child process exited abnormally" } { return };# ignore
puts "error executing: exec $args ($e)"
}
return $e
} else {
puts "error: nexec called with node=$node"
}
}
proc acquireOperModeLock { mode } {
global setOperMode_lock oper_mode
if { ![info exists setOperMode_lock] } { set setOperMode_lock 0 }
if { $oper_mode == "exec" } {
# user somehow pressed start while we were still shutting down...
if { $mode == "exec" } {
set choice [tk_messageBox -type yesno -default no -icon warning \
-message "You have selected to start the session while the previous one is still shutting down. Are you sure you want to interrupt the shutdown? (not recommended)"]
if { $choice == "no" } {
set activetool select
return; # return and allow previous setOperMode to finish...
}
# check if user pressed stop while we were starting up...
} elseif { $setOperMode_lock } { ;# mode == "edit"
set choice [tk_messageBox -type yesno -default no -icon warning \
-message "You are trying to stop the session while it is still starting. Are you sure you want to interrupt the startup? (not recommeded)"]
if { $choice == "no" } {
set activetool select
return; # return and allow previous setOperMode to finish...
}
}
}
set setOperMode_lock 1
}
proc releaseOperModeLock { } {
global setOperMode_lock
set setOperMode_lock 0
}
proc checkRJ45s {} {
global systype node_list g_prefs
if { [lindex $systype 0] == "Linux" } {
set extifcs [nexec localnode /sbin/ifconfig -a -s | tail -n +2 | awk "{ print \$1 }" | xargs]
set extifcs \
[lreplace $extifcs [lsearch $extifcs lo] [lsearch $extifcs lo]]
} else {
set extifcs [nexec localnode ifconfig -l]
set extifcs \
[lreplace $extifcs [lsearch $extifcs lo0] [lsearch $extifcs lo0]]
}
foreach node $node_list {
if { [getNodeLocation $node] != "" } { continue }
if { [nodeType $node] == "rj45" } {
set i [lsearch $extifcs [getNodeName $node]]
if { $i >= 0 } { continue }
set msg "Error: external interface \"[getNodeName $node]\""
set msg "$msg does not exist. Press OK to continue with RJ45s"
set msg "$msg disabled. NOTE: this setting can be re-enabled"
set msg "$msg through Session > Options..."
set choice [tk_messageBox -type okcancel -icon error -message $msg]
if { $choice == "cancel" } {
return -1
}
setSessionOptions "" "enablerj45=0"
break;
}
}
return 0
}
proc drawToolbar { mode } {
global CORE_DATA_DIR
global activetoolp defSelectionColor
set activetoolp ""
markerOptions off
#
# edit mode button bar
#
set buttons [list start link]
foreach b $buttons {
if { $mode == "exec"} { destroy .left.$b } else {
# add buttons when in edit mode
set imgf "$CORE_DATA_DIR/icons/tiny/$b.gif"
set image [image create photo -file $imgf]
catch {
radiobutton .left.$b -indicatoron 0 \
-variable activetool -value $b -selectcolor $defSelectionColor \
-width 32 -height 32 -image $image \
-command "popupMenuChoose \"\" $b $imgf"
leftToolTip $b .left
pack .left.$b -side top
}
}
}
# popup toolbar buttons have submenus
set buttons {routers hubs bgobjs}
foreach b $buttons {
if { $mode == "exec"} { destroy .left.$b } else {
# create buttons for parent items
set menubuttons { }
if { $b == "routers" } {
set menubuttons [getNodeTypeNames]
} elseif { $b == "hubs" } {
set menubuttons { hub lanswitch wlan rj45 tunnel }
} elseif { $b == "bgobjs" } {
set menubuttons { marker oval rectangle text }
}
set firstb [lindex $menubuttons 0]
set firstfn "$CORE_DATA_DIR/icons/tiny/$firstb.gif"
set image [image create photo -file $firstfn]
$image read "$CORE_DATA_DIR/icons/tiny/arrow.gif" -to 27 22
# create the parent menu
menubutton .left.$b -indicatoron 0 -direction right \
-width 32 -height 32 -image $image \
-padx 0 -pady 0 -relief raised \
-menu .left.${b}.menu
set buttonmenu [menu .left.${b}.menu \
-activebackground $defSelectionColor \
-borderwidth 1 -tearoff 0]
# create the child menutbuttons
drawToolbarSubmenu $b $menubuttons
# tooltips for parent and submenu items
leftToolTip $b .left
bind $buttonmenu <<MenuSelect>> {leftToolTipSubMenu %W}
bind $buttonmenu <Leave> {
set newlen [expr {[string length %W] - 6}]
set w [string range %W 0 $newlen]
destroy ${w}.balloon
}
# set submenu tooltips for user-defined types to type name
setLeftTooltips $b $menubuttons
pack .left.$b -side top
}
}
#
# Exec mode button bar
#
if { "$mode" == "edit" } {
.left.start configure -command "startStopButton exec"
}
foreach b {stop observe plot marker twonode run } {
if { "$mode" != "exec" } { destroy .left.$b } else {
set cmd ""
set fn "$CORE_DATA_DIR/icons/tiny/$b.gif"
set image [image create photo -file $fn]
if { $b == "stop" } {
set cmd "startStopButton edit"
} elseif { $b == "observe" } {
set cmd "popupObserverWidgets"
} elseif { $b == "marker" } {
set cmd "markerOptions on"
} elseif { $b == "mobility" } {
set cmd "popupMobilityDialog"
} elseif { $b == "twonode" } {
set cmd "popupTwoNodeDialog"
} elseif { $b == "run" } {
set cmd "popupRunDialog"
}
# add more cmds here
radiobutton .left.$b -indicatoron 0 \
-variable activetool -value $b -command $cmd \
-selectcolor [.left cget -bg] \
-width 32 -height 32 -activebackground gray -image $image
leftToolTip $b .left
pack .left.$b -side top
}
}
# turn off any existing tooltip
balloon .left ""
}
proc drawToolbarSubmenu { b menubuttons } {
global CORE_DATA_DIR
set buttonmenu .left.${b}.menu
if { ![winfo exists $buttonmenu] } {
return ;# this may occur in exec mode
}
$buttonmenu delete 0 end
foreach menubutton $menubuttons {
if { $b == "routers" } {
set imgf [getNodeTypeImage $menubutton tiny]
} else {
set imgf "$CORE_DATA_DIR/icons/tiny/${menubutton}.gif"
}
if { ![file exists $imgf] } { ;# pop custom filename from list
puts "**warning: missing icon $imgf"
continue
}
set img [createImageButton $imgf 0]
$buttonmenu add command -image $img -columnbreak 1 \
-command "popupMenuChoose $b $menubutton $imgf"
}
# add an edit button to the end of the row
if { $b == "routers" } {
set imgf "$CORE_DATA_DIR/icons/normal/document-properties.gif"
set img [createImageButton $imgf 0]
$buttonmenu add command -image $img -columnbreak 1 \
-command "popupNodesConfig"
}
}
proc setSessionStartStopMenu { mode } {
if { $mode == "exec" } {
catch {.menubar.session entryconfigure "Start" \
-label "Stop" -command "startStopButton edit"}
} else {
catch {.menubar.session entryconfigure "Stop" \
-label "Start" -command "startStopButton exec"}
}
}
proc updateMenus { mode } {
set s "normal"
if { $mode == "exec" } {
set s "disabled"
}
.menubar.tools entryconfigure "Auto rearrange all" -state $s
.menubar.tools entryconfigure "Auto rearrange selected" -state $s
.menubar.session entryconfigure "Node types..." -state $s
.menubar.session entryconfigure "Emulation servers..." -state $s
if { $s == "normal" } { set s "" }
updateUndoRedoMenu $s
}
proc startStopButton { mode } {
global activetool
#
# Prepare API channel for emulation. Do this before any GUI changes
# so that connect failures leave the GUI in edit mode.
setSystype
global systype
set emul_sock 0
if { $mode == "exec" } {
set msg "The CORE daemon must be running and your kernel must support"
set msg "$msg virtualization for the emulation to start."
} elseif { $mode == "edit" } {
set msg "Communication with daemon was lost."
} else {
puts "unsupported mode: $mode"
return
}
set plugin [lindex [getEmulPlugin "*"] 0]
set emul_sock [pluginConnect $plugin connect true]
if { $emul_sock == "" || $emul_sock == -1 } {
tk_messageBox -type ok -icon warning -message $msg
releaseOperModeLock
set activetool select
return
}
setOperMode $mode
}
#****f* exec.tcl/setOperMode
# NAME
# setOperMode -- set operating mode
# SYNOPSIS
# setOperMode $mode
# FUNCTION
# Sets imunes operating mode to the value of the parameter mode.
# The mode can be set only to edit or exec.
# When changing the mode to exec all the emulation interfaces are
# checked (if they are nonexistent the message is displayed, and
# mode is not changed), all the required buttons are disabled
# (except the simulation/Terminate button, that is enabled) and
# procedure deployCfg is called.
# When changing the mode to edit, all required buttons are enabled
# (except for simulation/Terminate button that is disabled) and
# procedure cleanupCfg is called.
# INPUTS
# * mode -- the new operating mode. Can be edit or exec.
#****
proc setOperMode { mode } {
global oper_mode activetool
global undolevel redolevel
global g_prefs
# special handling when experiment is already running
acquireOperModeLock $mode
# Verify that links to external interfaces are properly configured
if { $mode == "exec" && [getSessionOption enablerj45 1]==1 } {
if { [checkRJ45s] < 0 } {
releaseOperModeLock
set activetool select
return
}
}
# start/stop menu item
setSessionStartStopMenu $mode
#
# take care of GUI changes and bindings when switching modes
#
drawToolbar $mode
if { $mode == "edit" } { ;# these are the default bindings
.c bind node <Double-1> "popupConfigDialog .c"
.c bind nodelabel <Double-1> "popupConfigDialog .c"
} else { ;# double-click to open shell
.c bind node <Double-1> "button3node .c %x %y shift"
.c bind nodelabel <Double-1> "button3node .c %x %y shift"
}
set activetool select
.left.select configure -state active
updateMenus $mode
blinkCEL "stop"
#
# Start/stop the emulation
#
### start button is pressed
if { "$mode" == "exec" } {
rearrange_off
set oper_mode exec
resetAllNodeCoords save
clearExceptions "" ""
throwCEL true
# Bind left mouse click to displaying the CPU usage in
# a graph format
bind .bottom.cpu_load <1> {manageCPUwindow %X %Y 1}
monitor_loop
set plugin [lindex [getEmulPlugin "*"] 0]
set emul_sock [pluginConnect $plugin connect false]
deployCfgAPI $emul_sock
widget_loop
mobility_script_loop
### stop button is pressed
} else {
if {$oper_mode != "edit"} {
set t_start [clock seconds]
shutdownSession
statgraph off 0
set t_elapsed [expr {[clock seconds] - $t_start}]
statline "Cleanup completed in $t_elapsed seconds."
}
clearLinkHighlights
catch { destroy .popup }
clearWlanLinks ""
widgets_stop
set oper_mode edit
# Bind left mouse click to clearing the CPU graph
bind .bottom.cpu_load <1> {manageCPUwindow %X %Y 0}
manageCPUwindow %X %Y 0
}
.c config -cursor left_ptr
releaseOperModeLock
}
#****f* exec.tcl/statline
# NAME
# statline -- status line
# SYNOPSIS
# statline $line
# FUNCTION
# Sets the string of the status line. If the execution mode is
# set to batch the line is just printed on the standard output.
# INPUTS
# * line -- line to be displayed
#****
proc statline {line} {
global execMode
if {$execMode == "batch" || $execMode == "addons"} {
puts $line
} else {
.bottom.textbox config -text "$line"
animateCursor
}
}
proc getNextMac {} {
global mac_byte4 mac_byte5
set a [format %.2x $mac_byte4]
set b [format %.2x $mac_byte5]
incr mac_byte5
if { $mac_byte5 >= 255 } {
set mac_byte5 0
incr mac_byte4
}
return "00:00:00:aa:$a:$b"
}
#****f* exec.tcl/monitor_loop
# NAME
# monitor_loop -- monitor loop
# SYNOPSIS
# monitor_loop
# FUNCTION
# Calculates the usage of cpu, mbuffers and mbuf clusters.
# The results are displayed in status line and updated
# every two seconds.
#****
proc monitor_loop {} {
global oper_mode systype
global server_cpuusage
global exec_servers
if {$oper_mode != "exec"} {
.bottom.cpu_load config -text ""
.bottom.mbuf config -text ""
return
}
if { [lindex $systype 0] == "Linux" } {
set cpuusage [getCPUUsage]
#TODO: get the cpu usage on all the assigned server
# store usage history for each server stored in an array list
set assigned_servers [getAssignedRemoteServers]
for {set i 0} {$i <= [llength $assigned_servers]} {incr i} {
if {$i == [llength $assigned_servers]} {
# localhost
set ip [getMyIP]
set cpuusageforserver [lindex $cpuusage 0]
} else {
set server [lindex $assigned_servers $i]
set ip [lindex $exec_servers($server) 0]
# TODO: receive CPU usage from other servers
set cpuusageforserver 0
}
# append the latest cpu value to the end of list and
# only keep and display the last 20 values for each server
set server_cpuusage($ip) [lappend server_cpuusage($ip) $cpuusageforserver]
if { [llength $server_cpuusage($ip)] > 20 } {
set server_cpuusage($ip) [lreplace $server_cpuusage($ip) 0 0]
}
}
#plot the usage data if cpu windows already opened
# for all servers
if { [winfo exists .cpu]} {
plotCPUusage
}
set cputxt "CPU [lindex $cpuusage 0]% ("
set cpuusage [lreplace $cpuusage 0 0]
for { set n 0 } { $n < [llength $cpuusage] } { incr n } {
if { $n > 0 } { set cputxt "${cputxt}/" }
set cputxt "${cputxt}[lindex $cpuusage $n]"
}
set cputxt "$cputxt)"
set cpulen [expr {[string length $cputxt] - 2}]
set labellen [.bottom.cpu_load cget -width]
if { $cpulen < $labellen } { set cpulen $labellen }
set stats [nexec localnode vmstat | tail -n 1 ]
set mem_free [lindex $stats 3]
set mem_free_mb [expr { $mem_free / 1024 }]
.bottom.cpu_load config -text $cputxt -width $cpulen
.bottom.mbuf config -text " ${mem_free_mb}M free"
after 2000 { monitor_loop }
return
}
if { $systype == "FreeBSD 4.11-RELEASE" } {
set defaultname "default"
set cpun 3
} else {
set defaultname "."
set cpun 4
}
# CPU usage from `vimage -l`
set vimagetext [nexec localnode vimage -l $defaultname | xargs]
set vimagelist [split $vimagetext :]
set cpuline [lindex $vimagelist $cpun]
set cpu [lindex [split $cpuline %] 0]
.bottom.cpu_load config -text "CPU $cpu%"
# mbuf usage from `netstat -m`
set nstout [split [nexec localnode netstat -m] ]
set mbufline [split [lindex $nstout 0] /]
set mbufs [lindex $mbufline 0]
set nmbufs [lindex [split [lindex $mbufline 2] " "] 0]
set mbufp [expr $mbufs * 100 / $nmbufs]
.bottom.mbuf config -text "mbuf $mbufp%"
after 2000 { monitor_loop }
}
#****f* exec.tcl/execSetLinkParams
# NAME
# execSetLinkParams -- in exec mode set link parameters
# SYNOPSIS
# execSetLinkParams $eid $link
# FUNCTION
# Sets the link parameters during execution.
# All the parameters are set at the same time.
# INPUTS
# eid -- experiment id
# link -- link id
#****
proc execSetLinkParams { eid link } {
set lnode1 [lindex [linkPeers $link] 0]
set sock [lindex [getEmulPlugin $lnode1] 2]
sendLinkMessage $sock $link modify
return
}
# command executed when popup menu item is selected
proc popupMenuChoose { parent b imgf } {
global activetool activetool_prev activetool_prev_imgf activetoolp
#puts "popupMenuChoose $parent -> $b ($activetoolp -> $activetool)"
# deselect previous item
if { $activetoolp != "" } {
set img [createImageButton $activetool_prev_imgf 1]
.left.$activetoolp configure -image $img -relief raised
}
if {$activetool_prev == "marker"} { markerOptions off }
# change the active item; we need activetool_prev b/c of radio button
set activetoolp $parent
set activetool $b
set activetool_prev $b ;# previously-selected activetool
set activetool_prev_imgf $imgf ;# previously-selected button image file
# hint for topogen
global g_last_selected_node_type
if { $activetoolp == "routers" || $activetoolp == "hubs" } {
set g_last_selected_node_type [list $parent $b $imgf]
}
# select a new button
if { $parent != "" } {
set img [createImageButton $imgf 2]
.left.$parent configure -image $img -relief sunken
}
if {$activetool == "marker"} { markerOptions on }
# status message
.bottom.textbox config -text "$b tool selected"
}
#
# Boeing - create an image for use on the button toolbar
# style 0 = no arrow, 1 = arrow, 2 = arrow + select color
proc createImageButton { imgf style } {
global CORE_DATA_DIR defSelectionColor
if { [catch {set img [image create photo -file $imgf] } e] } {
puts "warning: error opening button image $imgf ($e)"
set img [image create photo] ;# blank button
}
# add an arrow to the button
if { $style > 0 } {
$img read "$CORE_DATA_DIR/icons/tiny/arrow.gif" -to 27 22
if { $style == 2 } { ;# highlight the button
set img2 [image create photo]
$img2 put [$img data -background $defSelectionColor]
set img $img2
}
}
return $img
}
# Boeing: status bar graph
proc statgraph { cmd n } {
global statgraph_max statgraph_current tk_patchLevel execMode
if { $execMode != "interactive" || ![info exists tk_patchLevel] } {
return
}
switch -exact $cmd {
on {
if { $n == 0 } { return } ;# Boeing: prevent div by 0
set statgraph_max $n
set statgraph_current 0
label .bottom.status -relief sunken -bd 1 -anchor w -width 2 \
-background green -justify center
label .bottom.status2 -relief sunken -bd 1 -anchor w -width 12
pack .bottom.status .bottom.status2 -side left \
-before .bottom.textbox
}
off {
set statgraph_max 0
set statgraph_current 0
destroy .bottom.status
destroy .bottom.status2
}
inc {
# Boeing: prevent div by 0
if { $n == 0 || $statgraph_max == 0 } { return }
incr statgraph_current $n
set p [expr $statgraph_current.0 / $statgraph_max.0]
set width [expr int($p * 15)]
.bottom.status config -width $width
.bottom.status config -text " ([expr int($p*100)]%)"
.bottom.status2 config -width [expr 15-$width]
}
}
}
proc popupConnectMessage { dst } {
global CORE_DATA_DIR execMode
if { $execMode != "interactive" } { return }
set wi .popupConnectMessage
catch { destroy $wi }
toplevel $wi
wm transient $wi .
wm title $wi "Connecting"
set i [image create photo -file $CORE_DATA_DIR/icons/normal/lanswitch.gif]
frame $wi.txt
label $wi.txt.ico -image $i
label $wi.txt.label1 -text "Please wait, connecting to $dst..."
pack $wi.txt.ico $wi.txt.label1 -side left -padx 4 -pady 4
pack $wi.txt -side top
if { [exec id -u] != 0 } {
frame $wi.txt2
set longtext "(Note: remote emulation may have been enabled\n"
set longtext "$longtext because you are not running as root.)"
label $wi.txt2.label2 -text $longtext
pack $wi.txt2.label2 -side left -padx 4 -pady 4
pack $wi.txt2 -side bottom
}
after 100 { catch { grab .popupConnectMessage } }
update
}
proc popdownConnectMessage { } {
catch { destroy .popupConnectMessage }
}
proc updateConnectMessage { dst } {
set wi .popupConnectMessage
catch {
$wi.txt.label1 configure -text "Please wait, connecting to $dst..."
}
}
# helper to return the list of assigned remote execution servers
proc getAssignedRemoteServers {} {
global node_list
set servers {}
foreach node $node_list {
set server [getNodeLocation $node]
if { $server == "" } { continue }
if { [lsearch -exact $servers $server] < 0 } {
lappend servers $server
}
}
return $servers
}
# generate a separate window for displaying CPU
proc manageCPUwindow {xpos ypos start} {
global exec_servers
global server_cpuusage
if {$start == 1} {
if { ![winfo exists .cpu]} {
toplevel .cpu
wm geometry .cpu 200x210+$xpos+$ypos
wm resizable .cpu 0 0
wm title .cpu "CPU Usage"
canvas .cpu.graph -width 200 -height 210
pack .cpu.graph
}
} else {
if { [winfo exists .cpu]} {
destroy .cpu
set assigned_servers [getAssignedRemoteServers]
for {set i 0} {$i <= [llength $assigned_servers]} {incr i} {
if {$i == [llength $assigned_servers]} {
set ip [getMyIP]
} else {
set server [lindex $assigned_servers $i]
set ip [lindex $exec_servers($server) 0]
}
set server_cpuusage($ip) [lreplace $server_cpuusage($ip) 0 end]
}
}
}
}
proc getMyIP { } {
if { [catch {set theServer [socket -server none -myaddr \
[info hostname] 0]} ] } {
return "127.0.0.1"
}
set myIP [lindex [fconfigure $theServer -sockname] 0]
close $theServer
return $myIP
}
# display all values stored in cpu usage history for each server
proc plotCPUusage { } {
global cpu_palettes
global exec_servers
global server_cpuusage
.cpu.graph delete "all"
.cpu.graph create line 0 100 200 100 -width 2
.cpu.graph create line 0 80 200 80 -width 1
.cpu.graph create line 0 60 200 60 -width 1
.cpu.graph create line 0 40 200 40 -width 1
.cpu.graph create line 0 20 200 20 -width 1
.cpu.graph create line 0 0 200 0 -width 1
.cpu.graph create line 40 0 40 100 -width 1
.cpu.graph create line 80 0 80 100 -width 1
.cpu.graph create line 120 0 120 100 -width 1
.cpu.graph create line 160 0 160 100 -width 1
.cpu.graph create line 200 0 200 100 -width 1
# for each server create a plot of cpu usage
set assigned_servers [getAssignedRemoteServers]
for {set i 0} {$i <= [llength $assigned_servers]} {incr i} {
if {$i == [llength $assigned_servers]} {
set ip [getMyIP]
} else {
set server [lindex $assigned_servers $i]
set ip [lindex $exec_servers($server) 0]
}
#need to add multiple cpuusgaehistory (array)
for { set n 1 } { $n < [llength $server_cpuusage($ip)] } { incr n } {
set prevn [expr {$n - 1}]
set x1 [expr {$prevn * 10}]
set y1 [expr {100 - [lindex $server_cpuusage($ip) $prevn]}]
set x2 [expr {$n * 10}]
set y2 [expr {100 - [lindex $server_cpuusage($ip) $n]}]
if {$i < [llength $cpu_palettes]} {
.cpu.graph create line $x1 $y1 $x2 $y2 -fill [lindex $cpu_palettes $i]
} else {
.cpu.graph create line $x1 $y1 $x2 $y2 -fill [lindex $cpu_palettes end]
}
#debug
#puts " cpu $x1 $y1 $x2 $y2"
}
#for each server create a legend (limited to 8)
set legendtext $ip
append legendtext " " [lindex $server_cpuusage($ip) end] "%"
set legendy [expr {($i * 10) + 120}]
set legendx 10
if {$i < [llength $cpu_palettes]} {
.cpu.graph create rectangle $legendx $legendy \
[expr {$legendx + 8}] [expr {$legendy + 8}] \
-fill [lindex $cpu_palettes $i]
.cpu.graph create text [expr {$legendx + 15}] [expr {$legendy + 4}]\
-text $legendtext -fill [lindex $cpu_palettes $i] \
-anchor w -justify left
} else {
.cpu.graph create rectangle $legendx $legendy \
[expr {$legendx + 8}] [expr {$legendy + 8}] \
-fill [lindex $cpu_palettes end]
.cpu.graph create text [expr {$legendx + 15}] [expr {$legendy + 4}]\
-text $legendtext -fill [lindex $cpu_palettes end] \
-anchor w -justify left
}
}
}

621
gui/filemgmt.tcl Executable file
View file

@ -0,0 +1,621 @@
#
# Copyright 2005-2013 the Boeing Company.
# See the LICENSE file included in this distribution.
#
#
# Copyright 2004-2008 University of Zagreb, Croatia.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# This work was supported in part by Croatian Ministry of Science
# and Technology through the research contract #IP-2003-143.
#
##****h* imunes/filemgmt.tcl
# NAME
# filemgmt.tcl -- file used for manipulation with files
# FUNCTION
# This module is used for all file manipulations. In this file
# a file is read, a new file opened or existing file saved.
# NOTES
# variables:
#
# currentFile
# relative or absolute path to the current configuration file
#
# fileTypes
# types that will be displayed when opening new file
#
# procedures used for loading and storing the configuration file:
#
# newFile
# - creates an empty project
#
# openFile
# - loads configuration from currentFile
#
# saveFile {selectedFile}
# - saves current configuration to a file named selectedFile
# unless the file name is an empty string
#
# fileOpenStartUp
# - opens the file named as command line argument
#
# fileNewDialogBox
# - opens message box to optionally save the changes
#
# fileOpenDialogBox
# - opens dialog box for selecting a file to open
#
# fileSaveDialogBox
# - opens dialog box for saving a file under new name if there is no
# current file
#****
set currentFile ""
set fileTypes {
{ "CORE scenario files" {.xml .imn} }
{ "CORE/IMUNES network configuration" {.imn} }
{ "EmulationScript XML files" {.xml} }
{ "All files" {*} }
}
#****f* filemgmt.tcl/newFile
# NAME
# newFile -- new file
# SYNOPSIS
# newFile
# FUNCTION
# Loads an empty configuration, i.e. creates an empty project.
#****
proc newFile {} {
global currentFile canvas_list curcanvas
global g_prefs oper_mode showGrid systype
global g_current_session g_view_locked
if { [popupStopSessionPrompt]=="cancel" } {
return
}
set showGrid 1
set g_view_locked 0
# flush daemon configuration
if { [llength [findWlanNodes ""]] > 0 } {
if { [lindex $systype 0] == "FreeBSD" } {
catch { exec ngctl config wlan_ctl: flush=all }
}
}
loadCfg ""
resetGlobalVars newfile
set curcanvas [lindex $canvas_list 0]
set num_canvases $g_prefs(gui_num_canvases)
while { $num_canvases > 1 } { newCanvas ""; incr num_canvases -1 }
switchCanvas none
redrawAll
set currentFile ""
set emulp [getEmulPlugin "*"]
set name [lindex $emulp 0]
set sock [lindex $emulp 2]
# reset node services info
if { $sock != -1 && $sock != "" } { sendNodeTypeInfo $sock 1 }
if { $oper_mode == "exec" } {
setOperMode edit
set g_current_session 0
}
# disconnect and get a new session number
if { $name != "" } {
pluginConnect $name disconnect 1
pluginConnect $name connect 1
}
setGuiTitle ""
}
#****f* filemgmt.tcl/openFile
# NAME
# openFile -- open file
# SYNOPSIS
# openFile
# FUNCTION
# Loads the configuration from the file named currentFile.
#****
proc openFile {} {
global currentFile
global undolog activetool
global canvas_list curcanvas systype
global changed
if { [file extension $currentFile] == ".py" } {
set flags 0x10 ;# status request flag
sendRegMessage -1 $flags [list "exec" $currentFile]
addFileToMrulist $currentFile
return
}
if { [file extension $currentFile] == ".xml" } {
setGuiTitle ""
cleanupGUIState
resetGlobalVars openfile
xmlFileLoadSave "open" $currentFile
addFileToMrulist $currentFile
return
}
set fileName [file tail $currentFile]
# flush daemon configuration
if { [llength [findWlanNodes ""]] > 0 } {
if { [lindex $systype 0] == "FreeBSD" } {
catch { exec ngctl config wlan_ctl: flush=all }
}
}
set cfg ""
if { [catch { set fileId [open $currentFile r] } err] } {
puts "error opening file $currentFile: $err"
return
}
if { [catch { foreach entry [read $fileId] { lappend cfg $entry; }} err] } {
puts "error reading config file $currentFile: $err"
close $fileId
return
}
close $fileId
setGuiTitle ""
loadCfg $cfg
set curcanvas [lindex $canvas_list 0]
switchCanvas none
# already called from switchCanvas: redrawAll
resetGlobalVars openfile
set undolog(0) $cfg
set activetool select
# remember opened files
set changed 0
addFileToMrulist $currentFile
}
#
# helper to reset global state
#
proc resetGlobalVars { reason } {
global undolevel redolevel
set undolevel 0
set redolevel 0
}
#****f* filemgmt.tcl/saveFile
# NAME
# saveFile -- save file
# SYNOPSIS
# saveFile $selectedFile
# FUNCTION
# Loads the current configuration into the selectedFile file.
# INPUTS
# * selectedFile -- the name of the file where current
# configuration is saved.
#****
proc saveFile { selectedFile } {
global currentFile
global changed
if { $selectedFile == ""} {
return
}
set currentFile $selectedFile
set fileName [file tail $currentFile]
if { [file extension $selectedFile] == ".xml" } {
xmlFileLoadSave save $selectedFile
} else {
set fileId [open $currentFile w]
dumpCfg file $fileId
close $fileId
}
setGuiTitle ""
.bottom.textbox config -text "Saved $fileName"
set changed 0
# remember saved file
addFileToMrulist $currentFile
}
#****f* filemgmt.tcl/fileOpenStartUp
# NAME
# fileOpenStartUp -- file open in batch mode
# SYNOPSIS
# fileOpenStartUp
# FUNCTION
# Loads configuration from batch input file to the current
# configuration.
#****
proc fileOpenStartUp {} {
global argv
global currentFile
# Boeing
foreach arg $argv {
if { $arg != "" && $arg != "--start -s" && $arg != "--start" && \
$arg != "--batch -b" && $arg != "--batch" } {
set currentFile [argAbsPathname $arg]
openFile
break
}
}
# end Boeing
}
#****f* filemgmt.tcl/fileNewDialogBox
# NAME
# fileNewDialogBox -- save changes dialog box
# SYNOPSIS
# fileNewDialogBox
# FUNCTION
# Opens message box to optionally save the changes.
#****
proc fileNewDialogBox {} {
global currentFile
# Boeing: simplified using promptForSave procedure
global changed
set choice "yes"
# Prompt for save if file was changed
if {$changed != 0 } {
set choice [promptForSave]
}
if { $choice != "cancel"} {
newFile
}
}
#****f* filemgmt.tcl/fileOpenDialogBox
# NAME
# fileOpenDialogBox -- open file dialog box
# SYNOPSIS
# fileOpenDialogBox
# FUNCTION
# Opens a open file dialog box.
#****
set fileDialogBox_initial 0; # static flag
proc fileOpenDialogBox {} {
global currentFile fileTypes g_prefs fileDialogBox_initial
# use default conf file path upon first run
if { $fileDialogBox_initial == 0} {
set fileDialogBox_initial 1
set dir $g_prefs(default_conf_path)
set selectedFile [tk_getOpenFile -filetypes $fileTypes -initialdir $dir]
} else {
# otherwise user may have changed dirs, do not use default conf path
set selectedFile [tk_getOpenFile -filetypes $fileTypes]
}
if { $selectedFile != ""} {
set currentFile $selectedFile
openFile
}
}
#****f* filemgmt.tcl/fileSaveDialogBox
# NAME
# fileSaveDialogBox -- save file dialog box
# SYNOPSIS
# fileSaveDialogBox
# FUNCTION
# Opens dialog box for saving a file under new name if there is no
# current file.
#****
proc fileSaveDialogBox { prompt } {
global currentFile fileTypes g_prefs fileDialogBox_initial
# save without prompting
if { $prompt == "" && $currentFile != "" } {
saveFile $currentFile
return "yes"
}
if { $prompt == "" } { set prompt "imn" } ;# File->Save w/no file yet
set ft [lrange $fileTypes 1 end]
if { $prompt == "xml" } { ;# swap imn/xml file types
set imn [lindex $ft 0]
set ft [lreplace $ft 0 0]
set ft [linsert $ft 1 $imn]
}
set dir ""
# use default conf file path upon first run
if { $fileDialogBox_initial == 0} {
set fileDialogBox_initial 1
set dir $g_prefs(default_conf_path)
}
set initf "untitled"
if { $currentFile != "" } {
set dir [file dirname $currentFile]
set initf [file tail $currentFile]
if { [file extension $initf] != $prompt } { ;# update file extension
set initf "[file rootname $initf].$prompt"
}
}
if { $dir == "" } {
set selectedFile [tk_getSaveFile -filetypes $ft -initialfile $initf]
} else {
set selectedFile [tk_getSaveFile -filetypes $ft -initialfile $initf \
-initialdir $dir]
}
if { $selectedFile == "" } {
return "cancel"
}
saveFile $selectedFile
return "yes"
}
#****f* filemgmt.tcl/relpath
# NAME
# relpath -- return background image filename relative to configuration file
# SYNOPSIS
# relpath bkgImageFilename
# FUNCTION
# Returns relative pathname
#
#***
#####
# Some examples
# puts [relpath /root/imunes/labos.imn /root/EXAMPLES/labos.gif]
# ../EXAMPLES/labos.gif
# puts [relpath /root/EXAMPLES/labos.imn /root/EXAMPLES/labos.gif]
# ./labos.gif
proc relpath {target} {
global currentFile
set basedir $currentFile
# Try and make a relative path to a target file/dir from base directory
set bparts [file split [file normalize $basedir]]
set tparts [file split [file normalize $target]]
if {[lindex $bparts 0] eq [lindex $tparts 0]} {
# If the first part doesn't match - there is no good relative path
set blen [expr {[llength $bparts] - 1}]
set tlen [llength $tparts]
for {set i 1} {$i < $blen && $i < $tlen} {incr i} {
if {[lindex $bparts $i] ne [lindex $tparts $i]} { break }
}
set path [lrange $tparts $i end]
for {} {$i < $blen} {incr i} {
set path [linsert $path 0 ..]
}
# Full name:
# [file normalize [join $path [file separator]]]
# Relative file name:
return [join $path [file separator]]
}
return $target
}
# read user preferences from ~/.core/prefs.conf file
proc loadDotFile {} {
global CONFDIR g_mrulist g_prefs
set isfile 0
if {[catch {set dotfile [open "$CONFDIR/prefs.conf" r]} ]} return
close $dotfile
if {[catch { source "$CONFDIR/prefs.conf" }]} {
puts "The $CONFDIR/prefs.conf preferences file is invalid, ignoring it."
#file delete "~/.core"
return
}
}
# save user preferences to ~/.core/prefs.conf config file
proc savePrefsFile { } {
global CONFDIR g_mrulist g_prefs CORE_VERSION
if {[catch {set dotfile [open "$CONFDIR/prefs.conf" w]} ]} {
puts "Unable to save preferences to $CONFDIR/prefs.conf"
return
}
# header
puts $dotfile "# CORE ${CORE_VERSION} GUI preference file"
# save the most-recently-used file list
puts $dotfile "set g_mrulist \"$g_mrulist\""
# save preferences
puts $dotfile "array set g_prefs {"
foreach pref [lsort -dict [array names g_prefs]] {
set value $g_prefs($pref)
set tabs "\t\t"
if { [string length $pref] >= 16 } { set tabs "\t" }
puts $dotfile "\t$pref$tabs\"$value\""
}
puts $dotfile "}"
close $dotfile
}
# helper for most-recently-used file list menu items
proc mrufile { f } {
global currentFile
set currentFile $f
openFile
}
# add filename to the most-recently-used file list
# if it exists already, remove it from the list, add to the front; also limit
# the length of this list; if no file specified, erase the list
proc addFileToMrulist { f } {
global g_mrulist g_prefs
set MRUI 13 ;# index of MRU list -- update when adding to File menu!
set oldlength [llength $g_mrulist]
set maxlength $g_prefs(num_recent)
if { $maxlength < 1 } { set maxlength 4 }
set existing [lsearch $g_mrulist $f]
if { $existing > -1 } {
set g_mrulist [lreplace $g_mrulist $existing $existing]
}
# clear the MRU list menu
if { $oldlength > 0 } {
set end_of_menu [.menubar.file index end]
.menubar.file delete $MRUI [expr {$end_of_menu - 2}]
}
if { $f == "" } { ;# used to reset MRU list
set g_mrulist {}
return
}
set g_mrulist [linsert $g_mrulist 0 "$f"]
set g_mrulist [lrange $g_mrulist 0 [expr {$maxlength - 1}]]
set i $MRUI
foreach f $g_mrulist {
.menubar.file insert $i command -label "$f" -command "mrufile $f"
incr i 1
}
}
# prompt to terminate experiment
proc popupStopSessionPrompt { } {
global oper_mode
if { ![info exists oper_mode] || $oper_mode != "exec" } {
return "no"
}
set choice [tk_messageBox -type yesnocancel -default yes \
-message "Stop the running session?" -icon question]
if { $choice == "yes" } {
setOperMode edit
}
return $choice
}
# Boeing: cleanup on exit
rename exit exit.real
proc exit {} {
global changed g_prefs systype oper_mode
if { ![info exists oper_mode] } { ;# batch mode
exit.real
}
if { [popupStopSessionPrompt]=="cancel" } {
return
}
# Flush daemon configuration
if { [lindex $systype 0] == "FreeBSD" } {
catch { exec ngctl config wlan_ctl: flush=all }
}
# Prompt for save if file was changed
if { $changed != 0 && [promptForSave] == "cancel" } {
return
}
# save window size and position
set geo [wm geometry .]
if { $g_prefs(gui_save_pos) } {
set split_idx [string first "-" $geo]
incr split_idx
set pos [string range $geo $split_idx end]
array set g_prefs "gui_window_pos $pos"
} else {
array unset g_prefs gui_window_pos
}
if { $g_prefs(gui_save_size) } {
set split_idx [string first "-" $geo]
incr split_idx -1
set size [string range $geo 0 $split_idx]
array set g_prefs "gui_window_size $size"
} else {
array unset g_prefs gui_window_size
}
# save user preferences
savePrefsFile
exit.real
}
# returns yes/no/cancel
proc promptForSave {} {
set choice [tk_messageBox -type yesnocancel -default yes \
-message "File changed: Save?" -icon question ]
if { $choice == "yes" } {
# choice becomes cancel or yes
set choice [fileSaveDialogBox true]
}
return $choice
}
# allow filenames in .imn files to contain special variables CORE_DATA_DIR
# (formerly LIBDIR for icons) and CONFDIR
# convert relative pathname to absolute using imn filename
proc absPathname { f } {
global CORE_DATA_DIR CONFDIR currentFile
if { $f == "" } { return $f }
regsub -all {\$LIBDIR} $f $CORE_DATA_DIR f
regsub -all {\$CORE_DATA_DIR} $f $CORE_DATA_DIR f
regsub -all {\$CONFDIR} $f $CONFDIR f
if { [file pathtype $f] == "relative" && $currentFile != "" } {
set abspath [list [file dirname $currentFile] $f]
set f [join $abspath [file separator]]
}
return $f
}
# convert relative path passed in as program argument to absolute path
proc argAbsPathname { f } {
global CORE_START_DIR
if { $f != "" && $CORE_START_DIR != "" && \
[file pathtype $f] == "relative" } {
set abspath [list $CORE_START_DIR $f]
set f [join $abspath [file separator]]
}
return $f
}
# set the main CORE GUI window title
proc setGuiTitle { txt } {
global currentFile g_current_session
set hn [info hostname] ;# may want to limit string length to 8 here
set fn [file tail $currentFile]
set sid $g_current_session
global execMode
if { $execMode != "interactive"} { return } ; # batch mode
if {$sid == 0} { set sid "" } else { set sid "${sid} " }
if { $txt == "" } {
wm title . "CORE (${sid}on $hn) $fn"
} else {
wm title . "CORE $txt"
}
}

524
gui/gpgui.tcl Normal file
View file

@ -0,0 +1,524 @@
#
# Copyright 2007-2013 the Boeing Company.
# See the LICENSE file included in this distribution.
#
#
# Copyright 2007 Petra Schilhard.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
.menubar.tools.experimental add command -label "Topology partitioning..." -underline 9 -command "dialog";
#****h* gpgui/weight_file
# NAME & FUNCTION
# weight_file -- holds the name of the file where the node weights are saved
#****
set WEIGHT_FILE "node_weights";
array set node_weights {};
#****f* gpgui.tcl/dialog
# NAME
# dialog
# SYNOPSIS
# dialog
# FUNCTION
# Procedure opens a new dialog with a text field for entering the number of parts
# in which the graph is to be partition, and with the node and link weights, which can be
# changed.
#****
proc dialog { } {
# package require BWidget
global partition_list
readNodeWeights;
set wi .popup
toplevel $wi
wm transient $wi .
wm resizable $wi 0 0
wm title $wi "Graph partition settings"
#number of partitions parameter
labelframe $wi.pnum -pady 0 -padx 4
frame $wi.pnum.l
label $wi.pnum.l.p -text "Number of partitions:" -anchor w
pack $wi.pnum.l.p -side top
frame $wi.pnum.e -borderwidth 2
entry $wi.pnum.e.p -bg white -width 10 -validate focus
pack $wi.pnum.e.p -side top
pack $wi.pnum.l $wi.pnum.e -side left
pack $wi.pnum -side top -anchor w -fill both
#buttons for detail node and link weights
labelframe $wi.weight -pady 4 -padx 4 -text "Weights"
frame $wi.weight.wl
label $wi.weight.l -text "Detailed:"
button $wi.weight.wl.lns -text "Link weights" -command \
"displayAllLinkWeights $wi"
frame $wi.weight.wn
button $wi.weight.wn.nds -text "Nodes weights" -command \
"displayAllNodeWeights $wi"
pack $wi.weight.l $wi.weight.wn.nds $wi.weight.wl.lns -side left
pack $wi.weight.wn $wi.weight.wl -side left
#pack $wi.custom -side top -anchor w -fill both
pack $wi.weight -side top -anchor w -fill x
#buttons Ok & Cancel
frame $wi.button -borderwidth 6
button $wi.button.ok -text "OK" -command \
"popupApply $wi"
focus $wi.button.ok
button $wi.button.cancel -text "Cancel" -command \
"destroy $wi"
pack $wi.button.cancel $wi.button.ok -side right
pack $wi.button -side bottom
return;
#grab .popup
}
#****f* gpgui.tcl/displayAllNodeWeights
# NAME
# displayAllNodeWeights -- display all nodes weight
# SYNOPSIS
# displayAllNodeWeights wi
# FUNCTION
# Procedure reads for each node its weight and writes it onto
# new window. The weight is first search in the node_list, and
# if not found, read from the default values.
# INPUTS
# * wi -- parent window id
#****
proc displayAllNodeWeights {wi} {
#package require BWidget
global node_list;
set nw .pop
toplevel $nw
wm transient $nw .
wm resizable $nw 0 0
wm title $nw "Node weights"
#weights settings
labelframe $nw.more -pady 4 -padx 4 -text "Node Weights"
frame $nw.more.weights
set i 1;
set j 1;
#weights from the file
foreach node $node_list {
#read for each node its weight
set wgt [getNodeWeight $node];
label $nw.more.weights.$node -text "$node" -anchor w
spinbox $nw.more.weights.w$node -bg white -width 3 \
-validate focus -invcmd "focusAndFlash %W"
$nw.more.weights.w$node insert 0 $wgt;
$nw.more.weights.w$node configure \
-vcmd {checkIntRange %P 0 100} \
-from 0 -to 100 -increment 1
grid $nw.more.weights.$node -row $i -column $j
grid $nw.more.weights.w$node -row $i -column [expr {int($j+1)}];
incr i;
if {[expr {$i % 10}] == 0} then {
set j [expr {$j + 2}];
set i 1;
}
}
pack $nw.more.weights -side top -anchor w
pack $nw.more -side top -anchor w -fill x
#buttons Apply & Cancel
frame $nw.button -borderwidth 6
button $nw.button.apply -text "Apply" -command "applyNodeWeights $nw"
focus $nw.button.apply
button $nw.button.cancel -text "Cancel" -command "destroy $nw"
pack $nw.button.cancel $nw.button.apply -side right
pack $nw.button -side bottom
}
#****f* gpgui.tcl/displayAllLinkWeights
# NAME
# displayAllLinkWeights -- display all link weights
# SYNOPSIS
# displayAllLinkWeights wi
# FUNCTION
# Procedure reads for each link its characteristics and writes them
# on the new window.
# INPUTS
# * wi -- parent window id
#****
proc displayAllLinkWeights {wi} {
# package require BWidget
global link_list;
set lw .pop
toplevel $lw
wm transient $lw .
wm resizable $lw 0 0
wm title $lw "Link weights"
#weights settings
labelframe $lw.more -pady 4 -padx 4 -text "Link Weights"
frame $lw.more.weights
set i 1;
set j 1;
foreach link $link_list {
label $lw.more.weights.$link -text "$link" -anchor w
#bandwidth
label $lw.more.weights.bl$link -text "Bandwidth:" -anchor w
spinbox $lw.more.weights.b$link -bg white -width 9 \
-validate focus -invcmd "focusAndFlash %W"
$lw.more.weights.b$link insert 0 [getLinkBandwidth $link]
$lw.more.weights.b$link configure \
-vcmd {checkIntRange %P 0 100000000} \
-from 0 -to 100000000 -increment 1000
#delay
label $lw.more.weights.dl$link -text "Delay:" -anchor w
spinbox $lw.more.weights.d$link -bg white -width 9 \
-validate focus -invcmd "focusAndFlash %W"
$lw.more.weights.d$link insert 0 [getLinkDelay $link]
$lw.more.weights.d$link configure \
-vcmd {checkIntRange %P 0 100000000} \
-from 0 -to 100000000 -increment 5
#BER
label $lw.more.weights.rl$link -text "BER (1/N):" -anchor w
spinbox $lw.more.weights.r$link -bg white -width 9 \
-validate focus -invcmd "focusAndFlash %W"
$lw.more.weights.r$link insert 0 [getLinkBER $link]
$lw.more.weights.r$link configure \
-vcmd {checkIntRange %P 0 10000000000000} \
-from 0 -to 10000000000000 -increment 1000
grid $lw.more.weights.$link -row $i -column 1;
grid $lw.more.weights.bl$link -row $i -column 2;
grid $lw.more.weights.b$link -row $i -column 3;
grid $lw.more.weights.dl$link -row $i -column 4;
grid $lw.more.weights.d$link -row $i -column 5;
grid $lw.more.weights.rl$link -row $i -column 6;
grid $lw.more.weights.r$link -row $i -column 7;
incr i;
}
pack $lw.more.weights -side top -anchor w
pack $lw.more -side top -anchor w -fill x
#buttons Apply & Cancel
frame $lw.button -borderwidth 6
button $lw.button.apply -text "Apply" -command \
"applyLinkWeights $lw"
focus $lw.button.apply
button $lw.button.cancel -text "Cancel" -command \
"destroy $lw"
pack $lw.button.cancel $lw.button.apply -side right
pack $lw.button -side bottom
}
#****f* gpgui.tcl/readNodeWeights
# NAME
# readNodeWeights -- read node weights
# SYNOPSIS
# readNodeWeights
# FUNCTION
# Procedure reads from a file node weights and saves them
# in array.
#****
proc readNodeWeights {} {
global node_weights;
#get the weight settings out of the file
set file [openWeightFile "r"];
# Boeing: attempt to recover with default weights
if { $file == "" } {
set i 0;
while { $i < 6 } {
set node_weights($i) $i
incr i
}
return
}
# end Boeing
set n [gets $file line];
set i 0;
while {[gets $file line] >= 0} {
set node_weights($i) $line;
incr i;
}
close $file;
if {$i != 6} then {
puts stdout "Bad file $file.";
return;
}
}
#****f* gpgui.tcl/openWeightFile
# NAME
# openWeightFile -- open weight file
# SYNOPSIS
# openWeightFile $op
# FUNCTION
# Function opens a file specified in WEIGHT_FILE constant,
# and returns file descriptor.
# INPUTS
# * op -- operation "r" (for read) or "w" (for write)
# RESULT
# * fileId -- file id
#****
proc openWeightFile { op } {
global WEIGHT_FILE;
if {[catch {open $WEIGHT_FILE $op} fileId]} then {
puts stdout "graph_partitioning: Cannot open $WEIGHT_FILE.";
return;
}
return $fileId;
}
#****f* gpgui.tcl/applyNodeWeights
# NAME
# applyNodeWeights -- apply node weights
# SYNOPSIS
# applyNodeWeights nw
# FUNCTION
# Procedure reads for each node its weight from the
# window, and save it to the node_list.
# INPUTS
# * nw -- window id
#****
proc applyNodeWeights {nw} {
global node_list;
foreach node $node_list {
writeWeightToNode $node [$nw.more.weights.w$node get];
}
destroy $nw;
}
#****f* gpgui.tcl/applyLinkWeights
# NAME
# applyLinkWeights -- apply link weights
# SYNOPSIS
# applyLinkWeights lw
# FUNCTION
# Procedure reads for each link its characteristics from the
# window, and change theirs values in program.
# INPUTS
# * lw -- window id
#****
proc applyLinkWeights {lw} {
global link_list;
foreach link $link_list {
setLinkBandwidth $link [$lw.more.weights.b$link get];
setLinkDelay $link [$lw.more.weights.d$link get];
setLinkBER $link [$lw.more.weights.r$link get];
}
destroy $lw;
}
#****f* gpgui.tcl/writeWeightToNode
# NAME
# writeWeightToNode -- write weight to node
# SYNOPSIS
# writeWeightToNode $node $weight
# FUNCTION
# Procedure writes the weight to the node.
# INPUTS
# * node -- node id
# * weight -- weight of the node
#****
proc writeWeightToNode {node weight} {
global $node;
set p [lsearch [set $node] "weight *"];
if { $p >= 0 } {
set $node [lreplace [set $node] $p $p "weight $weight"];
} else {
set $node [linsert [set $node] end "weight $weight"];
}
}
#****f* gpgui.tcl/getNodeWeight
# NAME
# getNodeWeight -- get node weight
# SYNOPSIS
# getNodeWeight $node
# FUNCTION
# Function searches the node for the information
# about its weight. If the weight is found, it is
# returned, and if it is not found, an empty string is
# returned.
# INPUTS
# * node -- node id
# RESULT
# * wgt -- weight of the node
#****
proc getNodeWeight {node} {
global $node;
global node_weights;
set wgt [lindex [lsearch -inline [set $node] "weight *"] 1];
if {$wgt == ""} then {
switch -exact -- [nodeType $node] {
pc {
set wgt $node_weights(0);
}
host {
set wgt $node_weights(1);
}
router {
set wgt $node_weights(2);
}
lanswitch {
set wgt $node_weights(3);
}
hub {
set wgt $node_weights(4);
}
rj45 {
set wgt $node_weights(5);
}
default {
set wgt 0;
}
}
}
return $wgt;
}
#****f* gpgui.tcl/changeDefaultWeights
# NAME
# changeDefaultWeights -- change default weights
# SYNOPSIS
# changeDefaultWeights wi
# FUNCTION
# Procedure opens a file with node weights, and writes
# in it the weight for each group of nodes (pc,router,...).
# INPUTS
# * wi -- window id, parent window
#****
#save node weights to the file
proc changeDefaultWeights {wi} {
global node_weights;
set file [openWeightFile "w"];
set node_weights(0) [$wi.weight.pcs get];
set node_weights(1) [$wi.weight.hosts get];
set node_weights(2) [$wi.weight.routers get];
set node_weights(3) [$wi.weight.switchs get];
set node_weights(4) [$wi.weight.hubs get];
set node_weights(5) [$wi.weight.rj45s get];
debug $file [format "%d %d %d %d %d %d" $node_weights(0) $node_weights(1) $node_weights(2) $node_weights(3) $]node_weights(4) $node_weights(5);
close $file;
destroy $wi;
}
#****f* gpgui.tcl/popupApply
# NAME
# popupApply -- popup apply
# SYNOPSIS
# popupApply wi
# FUNCTION
# Procedure saves for each node its weight in node_list.
# INPUTS
# * wi -- window id
#****
proc popupApply { wi } {
global node_list;
set partNum [$wi.pnum.e.p get]
foreach node $node_list {
#read for each node its weight
set wgt [getNodeWeight $node];
#write it to the node_list
writeWeightToNode $node $wgt
}
destroy $wi
#graphPartition $partNum;
test_partitioning $partNum;
}
#****f* gpgui.tcl/displayErrorMessage
# NAME
# displayErrorMessage -- display error message
# SYNOPSIS
# displayErrorMessage $message
# FUNCTION
# Procedure writes a message to the screen as a popup dialog.
# INPUTS
# * message -- message to be writen
#****
proc displayErrorMessage { message } {
tk_dialog .dialog1 "Graph partitioning" $message info 0 Dismiss;
}
#****f* gpgui.tcl/getLinkWeight
# NAME
# getLinkWeight -- calculate link weight
# SYNOPSIS
# getLinkWeight $link
# FUNCTION
# Function calculates for each link its weight from its characteristics.
# INPUTS
# * link -- link id
# RESULT
# * weight -- weight of the link
#****
proc getLinkWeight {link} {
set bndw [getLinkBandwidth $link];
set dly [getLinkDelay $link];
set ber [getLinkBER $link];
set dup [getLinkDup $link];
set weight [expr {$bndw}];
return $weight;
}
proc test_partitioning {partNum} {
# foreach n {2 4 8 16 32 64 128 256 512} {
# if {$n > $partNum} then {
# break;
# }
# for {set i 0} {$i < 3} {incr i} {
# puts "i=$i, n=$n";
graphPartition $partNum;
# }
# }
}

1651
gui/graph_partitioning.tcl Normal file

File diff suppressed because it is too large Load diff

122
gui/help.tcl Executable file
View file

@ -0,0 +1,122 @@
#
# Copyright 2005-2013 the Boeing Company.
# See the LICENSE file included in this distribution.
#
#
# Copyright 2004-2008 University of Zagreb, Croatia.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# This work was supported in part by Croatian Ministry of Science
# and Technology through the research contracts #IP-2003-143 and #IP-2004-154.
#
#****h* imunes/help.tcl
# NAME
# help.tcl -- file used for help infromation
# FUNCTION
# This file is considered to contain all the help information.
# Currently it contains only copyright information.
#****
set copyright {
Copyright 2004-2008 University of Zagreb, Croatia.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
This work was supported in part by Croatian Ministry of Science and
Technology through the research contracts #IP-2003-143 and #IP-2004-154.
}
proc popupAbout {} {
global CORE_DATA_DIR CORE_VERSION CORE_VERSION_DATE copyright
set w .about
catch {destroy $w}
toplevel $w
wm transient $w .
wm title $w "About CORE"
set fn "$CORE_DATA_DIR/icons/normal/core-logo-275x75.gif"
set core_logo [image create photo -file $fn]
canvas .about.logo -width 275 -height 75
pack .about.logo -side top -anchor n -padx 4 -pady 4
.about.logo create image 137 37 -image $core_logo
# version info
label .about.text1 -text "CORE version $CORE_VERSION ($CORE_VERSION_DATE)" \
-foreground #500000 -padx 5 -pady 10
label .about.text2 -text "Copyright (c)2005-2013\
the Boeing Company. See the LICENSE file included in this\
distribution."
pack .about.text1 -side top -anchor n -padx 4 -pady 4
# OS info
set os_info [lindex [checkOS] 1]
label .about.text3 -justify left -text "$os_info"
set txt4 "Portions of the GUI are derived from IMUNES having the following"
set txt4 "$txt4 license and copyright:"
label .about.text4 -text $txt4
pack .about.text2 .about.text3 .about.text4 -side top -anchor w \
-padx 4 -pady 4
# IMUNES info
frame .about.fr
text .about.fr.text -bg white -height 10 -wrap word -setgrid 1 \
-highlightthickness 0 -pady 2 -padx 3 \
-yscrollcommand ".about.fr.scroll set"
scrollbar .about.fr.scroll -command ".about.fr.text yview" -bd 1 -width 10
pack .about.fr.text .about.fr.scroll -side left -anchor w -fill both
pack .about.fr -side top -anchor w -expand true -padx 4 -pady 4
.about.fr.text insert 1.0 "$copyright"
# OK button
button .about.ok -text "OK" -command "destroy .about"
pack .about.ok -side bottom -anchor center -padx 4 -pady 4
after 100 {
grab .about
}
}

111
gui/icons/Makefile.am Executable file
View file

@ -0,0 +1,111 @@
# CORE
# (c)2010-2013 the Boeing Company.
# See the LICENSE file included in this distribution.
#
# author: Jeff Ahrenholz <jeffrey.m.ahrenholz@boeing.com>
#
TINY_ICONS = tiny/button.play.gif \
tiny/select.gif tiny/marker.gif \
tiny/rj45.gif tiny/text.gif \
tiny/edit-delete.gif tiny/stop.gif \
tiny/blank.gif tiny/mobility.gif \
tiny/script_play.gif tiny/arrow.gif \
tiny/lanswitch.gif tiny/script_pause.gif \
tiny/pc.gif tiny/rectangle.gif \
tiny/observe.gif tiny/document-new.gif \
tiny/document-save.gif \
tiny/view-refresh.gif tiny/moboff.gif \
tiny/document-properties.gif tiny/arrow.up.gif \
tiny/host.gif tiny/hub.gif \
tiny/twonode.gif tiny/router.gif \
tiny/eraser.gif \
tiny/stock_connect.gif tiny/stock_disconnect.gif \
tiny/ping.gif tiny/link.gif \
tiny/start.gif \
tiny/trace.gif tiny/button.stop.gif \
tiny/arrow.down.gif tiny/oval.gif \
tiny/wlan.gif tiny/delete.gif \
tiny/run.gif tiny/tunnel.gif \
tiny/script_stop.gif \
tiny/router_black.gif tiny/router_green.gif \
tiny/router_red.gif tiny/router_yellow.gif \
tiny/router_purple.gif \
tiny/ap.gif tiny/mdr.gif \
tiny/folder.gif \
tiny/cel.gif \
tiny/fileopen.gif \
tiny/xen.gif \
tiny/plot.gif
NORM_ICONS = normal/gps-diagram.xbm \
normal/router_black.gif normal/host.gif \
normal/hub.gif \
normal/router.gif \
normal/rj45.gif normal/antenna.gif \
normal/text.gif \
normal/lanswitch.gif normal/core-icon.png \
normal/core-icon.xbm normal/oval.gif \
normal/wlan.gif normal/pc.gif \
normal/tunnel.gif normal/core-logo-275x75.gif \
normal/router_red.gif normal/router_green.gif \
normal/simple.xbm \
normal/document-properties.gif \
normal/thumb-unknown.gif \
normal/router_purple.gif normal/router_yellow.gif \
normal/ap.gif normal/mdr.gif \
normal/xen.gif
SVG_ICONS = svg/ap.svg \
svg/cel.svg \
svg/hub.svg \
svg/lanswitch.svg \
svg/mdr.svg \
svg/otr.svg \
svg/rj45.svg \
svg/router_black.svg \
svg/router_green.svg \
svg/router_purple.svg \
svg/router_red.svg \
svg/router.svg \
svg/router_yellow.svg \
svg/start.svg \
svg/tunnel.svg \
svg/vlan.svg \
svg/xen.svg
#
# Icon files (/usr/local/share/core/icons/[tiny,normal,svg])
#
coreiconnormaldir = $(CORE_DATA_DIR)/icons/normal
dist_coreiconnormal_DATA = $(NORM_ICONS)
coreicontinydir = $(CORE_DATA_DIR)/icons/tiny
dist_coreicontiny_DATA = $(TINY_ICONS)
coreiconsvgdir = $(CORE_DATA_DIR)/icons/svg
dist_coreiconsvg_DATA = $(SVG_ICONS)
iconpixmapdir = $(datarootdir)/pixmaps
icondesktopdir = $(datarootdir)/applications
install-exec-hook: install-gui-icon
uninstall-hook: uninstall-gui-icon
.PHONY: install-gui-icon
install-gui-icon:
test -d $(DESTDIR)/$(iconpixmapdir) || \
mkdir -p $(DESTDIR)/$(iconpixmapdir)
cp -f core-gui.xpm $(DESTDIR)/$(iconpixmapdir)
test -d $(DESTDIR)/$(icondesktopdir) || \
mkdir -p $(DESTDIR)/$(icondesktopdir)
cp -f core-gui.desktop $(DESTDIR)/$(icondesktopdir)
.PHONY: uninstall-gui-icon
uninstall-gui-icon:
rm -f $(iconpixmapdir)/core-gui.xpm
rm -f $(icondesktopdir)/core-gui.desktop
EXTRA_DIST = core-gui.xpm core-gui.desktop
# extra cruft to remove
DISTCLEANFILES = Makefile.in

View file

@ -0,0 +1,12 @@
[Desktop Entry]
Version=1.0
Type=Application
Name=CORE Network Emulator
GenericName=CORE Network Emulator
Comment=Intuitive net emulator that interacts with real networks
Icon=core-gui.xpm
Exec=core-gui
Terminal=false
StartupNotify=false
Categories=System;Emulator
Keywords=net;network;emulator;TCP/IP;IPv4;IPv6;routing;router

294
gui/icons/core-gui.xpm Normal file
View file

@ -0,0 +1,294 @@
/* XPM */
static char *core_icon[] = {
/* columns rows colors chars-per-pixel */
"32 32 256 2 ",
" c #0F150E",
". c #10150F",
"X c #0F1A14",
"o c #141A12",
"O c #1E2C18",
"+ c #182217",
"@ c #21271D",
"# c #24281E",
"$ c #1F3E24",
"% c #262722",
"& c #2E372B",
"* c #263E2A",
"= c #2B3C2B",
"- c #243621",
"; c #303D24",
": c #33362B",
"> c #373731",
", c #2C5719",
"< c #31571D",
"1 c #1D462A",
"2 c #1E522B",
"3 c #1B5C2D",
"4 c #185627",
"5 c #1E4D31",
"6 c #1C5D32",
"7 c #1C5C39",
"8 c #22452C",
"9 c #234C2D",
"0 c #28432A",
"q c #304527",
"w c #35412E",
"e c #334F2B",
"r c #2D552D",
"t c #225629",
"y c #345424",
"u c #3C5025",
"i c #33522C",
"p c #36582F",
"a c #2C4532",
"s c #244D33",
"d c #2E4C3C",
"f c #2A4A33",
"g c #374632",
"h c #3B4E33",
"j c #364B37",
"k c #245335",
"l c #2A5535",
"z c #245B35",
"x c #2A5B33",
"c c #265539",
"v c #245C3B",
"b c #2B5C3B",
"n c #335233",
"m c #345439",
"M c #385838",
"N c #1D6135",
"B c #1F663B",
"V c #2F6223",
"C c #22643D",
"Z c #2A633D",
"A c #26683C",
"S c #326135",
"D c #32613C",
"F c #326C39",
"G c #3A6935",
"H c #414837",
"J c #454B3B",
"K c #404734",
"L c #425A39",
"P c #47593C",
"I c #45603C",
"U c #466037",
"Y c #40723B",
"T c #587A3D",
"R c #275D41",
"E c #2E5B44",
"W c #2F5442",
"Q c #335C42",
"! c #3E5B42",
"~ c #3A5340",
"^ c #285D54",
"/ c #1E6246",
"( c #246442",
") c #2B6442",
"_ c #246A45",
"` c #2D6B45",
"' c #2B634D",
"] c #266C4A",
"[ c #2A694D",
"{ c #276748",
"} c #326244",
"| c #356B4D",
" . c #3C6646",
".. c #26704C",
"X. c #357449",
"o. c #2F6650",
"O. c #2C6E52",
"+. c #28695A",
"@. c #3B6F55",
"#. c #386752",
"$. c #2A7254",
"%. c #2D7559",
"&. c #287557",
"*. c #347456",
"=. c #367A5B",
"-. c #31755F",
";. c #387C65",
":. c #237563",
">. c #494C40",
",. c #4E5742",
"<. c #555E4B",
"1. c #486A46",
"2. c #516D45",
"3. c #54694A",
"4. c #497245",
"5. c #46774E",
"6. c #557D43",
"7. c #54744C",
"8. c #5A7E4D",
"9. c #577648",
"0. c #456E51",
"q. c #5B6A51",
"w. c #467C56",
"e. c #557C55",
"r. c #636E55",
"t. c #666659",
"y. c #637556",
"u. c #6D735D",
"i. c #637B5A",
"p. c #647C55",
"a. c #427F63",
"s. c #707162",
"d. c #37847C",
"f. c #5B8747",
"g. c #4F845C",
"h. c #55825C",
"j. c #588350",
"k. c #648C4F",
"l. c #63825D",
"z. c #6A835E",
"x. c #6C8B5E",
"c. c #668954",
"v. c #659252",
"b. c #6E935C",
"n. c #6C9D58",
"m. c #739B54",
"M. c #7D9754",
"N. c #66984F",
"B. c #6FA35A",
"V. c #6DA457",
"C. c #75AC5D",
"Z. c #7AA75C",
"A. c #42826A",
"S. c #498665",
"D. c #5C8C68",
"F. c #5F9362",
"G. c #428F7B",
"H. c #5D967A",
"J. c #6A8A62",
"K. c #768B65",
"L. c #7D8A6B",
"P. c #788867",
"I. c #649768",
"U. c #729361",
"Y. c #7C9E6D",
"T. c #779867",
"R. c #7C9572",
"E. c #779A74",
"W. c #6AA46A",
"Q. c #6FA360",
"!. c #76A363",
"~. c #7AAB65",
"^. c #7CAB6C",
"/. c #7BA564",
"(. c #7EB068",
"). c #7DB067",
"_. c #7CA173",
"`. c #77AA75",
"'. c #6BAB7D",
"]. c #808E6B",
"[. c #808170",
"{. c #898E76",
"}. c #8B8E79",
"|. c #8A9575",
" X c #8A9973",
".X c #879878",
"XX c #939F7A",
"oX c #969F72",
"OX c #85A667",
"+X c #83A36A",
"@X c #84AB6D",
"#X c #88AA68",
"$X c #83B36D",
"%X c #8CB36E",
"&X c #84B96A",
"*X c #8AA474",
"=X c #84AC74",
"-X c #89A37D",
";X c #8AAD7A",
":X c #88A574",
">X c #94A779",
",X c #84B174",
"<X c #8CB373",
"1X c #8CBA75",
"2X c #8DB37C",
"3X c #8EB97B",
"4X c #87BB70",
"5X c #96B27C",
"6X c #99B67A",
"7X c #95BB7D",
"8X c #9ABE7D",
"9X c #93B475",
"0X c #8FC178",
"qX c #92C37D",
"wX c #659A82",
"eX c #6FA79A",
"rX c #7FBC91",
"tX c #71A686",
"yX c #86AB88",
"uX c #9DA487",
"iX c #97AD81",
"pX c #9AAC8A",
"aX c #9AAD87",
"sX c #89B581",
"dX c #88BA86",
"fX c #92B482",
"gX c #92B982",
"hX c #99BD89",
"jX c #95B48E",
"kX c #A0AD85",
"lX c #A3AF8A",
"zX c #A1B086",
"xX c #AABA8D",
"cX c #A5B28A",
"vX c #ACB593",
"bX c #B2BD96",
"nX c #97C383",
"mX c #9CCA86",
"MX c #9DCC89",
"NX c #9CC685",
"BX c #8CC294",
"VX c #A3C886",
"CX c #A3CC8C",
"ZX c #A1C484",
"AX c #A1D18D",
"SX c #A2CC90",
"DX c #B3C394",
"FX c #B7C29B",
"GX c #BCCB9C",
"HX c #B9C69D",
"JX c #A6D493",
"KX c #AAD595",
"LX c #ADD999",
"PX c #8AC9A0",
"IX c #C3D2A1",
"UX c None",
/* pixels */
"UXUXUXUXUXUXUXUXUXUXUXUXUXUX:X_.R.J.UXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXN./.=XgX;X*XY.U.J.z.y.3.UXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXN.C.).3X<X3X=X+XwXH.c.j.2.2.I h UXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUX$XqXqX0XqX%XOX@X*X.XE.U.x.c.2.U i q UXUXUXUXUXUXUX",
"UXUXUXUXUX).mXLXJXmXqX8XnX7X9X;X*X*X-X.XE.z.3.L q - O UXUXUXUXUX",
"UXUXUXUX(.MXKXJXVXVXCXnXnX6X2XgX5XaXpX-XR.P.y.1.i 0 - O UXUXUXUX",
"UXUXUXUXCXPXBXVXVXVXZX%X#X9X5X5XiXpXpXXXK.P.y.1.P n ^ X % > UXUX",
"UXUXUXSXMXdXAXLXKXJXdXZ.$X2XgX>XoXXXpXyXE.D.e.1.I h . J s.t.UXUX",
"UXUX3XSXqXVXJXLXLXdX'.Z.).@X*X*X;XsX-XyXeXD.e.3.M o s.}.L.H UXUX",
"UXUXMX4X&XVXMXqXqX&XV.m.M.+X,XfXdXyX.XtXwXD.7.j # |.uX}.~ * UXUX",
"UXgXnXC.C.0XqX%X4XOXm.V.~.,XK.u.r.q.,.j l.l.* g lXvX}.~ s s $ UX",
"UXhX<XC.Z.1X9X%X%X$XC.C.^.sXfX].XXL.H ! j.X r.DXbXL.c m c s 8 UX",
"UXhX@XW.`.6X7X3X1X<X^.!.^._. XkX Xw 7.3.o |.GXHXp.2 9 l c c c UX",
"UXfXOXW.`.7X5X;X=X~.B.Q.x.cXxX Xg F.M # kXIXbX4.2 2 k k c c k UX",
"-X2X=X/.$XgX,X=X/.m.n.P.GXDXK.n W.0 H DXIXcXG t t 2 k v c R k 9 ",
"-X=XQ.!.^.`.tX`.T.m.|.IXDXy.U j.o r.DXIX-XF S x z 6 v v l ( c c ",
"-XY.v.N.m.T.U.+XT.kXIXDX,.8.7.. L.DXGXK.F S S S r v C v x v v v ",
"L.b.f.f.k.c.k.z.vXIXkXH F.M + |.xXxXI.X.F A A b b D } v z v v R ",
"UXl.6.T f.T p.HXGX|.#.F.- & XkXiXI.G.=.` A A C _ _ ( b [ +.b UX",
"UXp.8.6.4.P.HXDXr.1.h. K L.XX].S.S.;.*.X.{ ] ( B b b z 7 / { UX",
"UXi.l.9.{.vXlXJ G 4.+ @ H ,.q.r.~ S.A.=.*...| ) A C N N N _ -.UX",
"UXq.<.}.uX|.; , V Y 5.e.g.h.g.g.S.A.;.-.@.| O._ _ _ N N ( $.;.UX",
"UXJ [.}.u.; y , < @.A.5.5.w.w.a.d.;.-.@.%.....] ] B N B ..-.UXUX",
"UXt.s.J d u u y y G .4.4.0.0.0.0.-.+.%...] _ .._ B B ..&.%.UXUX",
"UX> % g h e e y i p S D .| | #.o.$.$.%...B B B B B ..&.&.UXUXUX",
"UXUXUXUXw h n n r i i n D } E [ O.O.%.$.$...B N z _ :.] UXUXUXUX",
"UXUXUXUX& = a f 9 9 9 ^ M ~ } } [ O.....` ) x r t 3 N N UXUXUXUX",
"UXUXUXUXUX& = * 0 1 1 ^ ^ Q E ) } } .} Z Z B 3 3 3 4 UXUXUXUXUX",
"UXUXUXUXUXUXUXw a f 1 1 5 c c b b b C ( _ _ B 3 3 UXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXa d f c c c R R ( R ( ] ] ( C 7 UXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXd W E E ' o.o.[ [ { ( ( UXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXE o.o.o.UXUXUXUXUXUXUXUXUXUXUXUXUXUX"
};

BIN
gui/icons/normal/antenna.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 B

BIN
gui/icons/normal/ap.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 419 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -0,0 +1,14 @@
#define core_icon_width 32
#define core_icon_height 32
static unsigned char core_icon_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x2f, 0x00, 0x00, 0xfc, 0xf2, 0x00,
0x00, 0x3f, 0xc0, 0x01, 0x80, 0x0f, 0xf0, 0x07, 0xc0, 0x03, 0xc0, 0x0f,
0xe0, 0x01, 0xc0, 0x37, 0xf0, 0x00, 0x80, 0x27, 0x78, 0x00, 0xe0, 0x23,
0x38, 0xf8, 0xdf, 0x31, 0x1c, 0x08, 0xf8, 0x78, 0x0c, 0x38, 0x78, 0x7e,
0x0c, 0x18, 0x34, 0x7e, 0x06, 0x06, 0x0f, 0x7f, 0x06, 0x81, 0x86, 0xff,
0x86, 0x40, 0xe1, 0xff, 0x46, 0xe0, 0xe1, 0xff, 0x26, 0x78, 0xf0, 0xff,
0x36, 0x34, 0xf8, 0x7f, 0x0c, 0x1e, 0xfc, 0x7f, 0x82, 0x1f, 0xf0, 0x7f,
0xc6, 0xff, 0xbf, 0x5f, 0xe2, 0x6b, 0x7d, 0x3f, 0xfe, 0xbf, 0xeb, 0x2a,
0xfe, 0xef, 0xbe, 0x1f, 0xf0, 0xff, 0xf5, 0x0b, 0xf0, 0xff, 0xef, 0x0f,
0xe0, 0xff, 0xfe, 0x07, 0x80, 0xff, 0xff, 0x01, 0x00, 0xff, 0xef, 0x00,
0x00, 0xfc, 0x3d, 0x00, 0x00, 0xc0, 0x03, 0x00 };

Binary file not shown.

After

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

116
gui/icons/normal/gps-diagram.xbm Executable file
View file

@ -0,0 +1,116 @@
#define gps_diagram_width 141
#define gps_diagram_height 75
static unsigned char gps_diagram_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0xf8, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0xd8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x18, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x98, 0x00, 0x00, 0x00, 0x80,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x88, 0x00, 0x84, 0x03, 0x80, 0x00, 0x00, 0x00, 0x1c, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x88, 0x00, 0x04, 0x02, 0x80,
0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x84, 0x78, 0x1e, 0x02, 0x80, 0x78, 0x74, 0xf8, 0x10, 0x10, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x84, 0x84, 0x04, 0x02, 0x80,
0xcc, 0x8c, 0xcc, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x84, 0x80, 0x04, 0x02, 0x80, 0x84, 0x84, 0x84, 0x10, 0x10, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x84, 0xf8, 0x04, 0x02, 0x80,
0x84, 0x84, 0x84, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x84, 0x84, 0x04, 0x02, 0x80, 0x84, 0x84, 0x84, 0x10, 0x10, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x88, 0xc4, 0x04, 0x82, 0x80,
0xcc, 0x84, 0xcc, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x88, 0xb8, 0x9c, 0x8f, 0x80, 0x78, 0x84, 0xf8, 0x7c, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x18, 0x00, 0x00, 0x80, 0x00,
0x00, 0x00, 0x80, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x00, 0xe0, 0xf1, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x00, 0xf0, 0xe0, 0x03, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x10,
0x00, 0x00, 0x00, 0x80, 0x81, 0x01, 0x30, 0x00, 0xf8, 0xe0, 0x07, 0x00,
0x00, 0x11, 0x80, 0xe0, 0x01, 0x10, 0x00, 0x00, 0x00, 0x0f, 0x81, 0x01,
0x30, 0x00, 0xfc, 0xc0, 0x0f, 0x00, 0x00, 0x11, 0x80, 0x10, 0x03, 0x10,
0x00, 0x00, 0x80, 0x18, 0x81, 0x01, 0x30, 0x00, 0x7e, 0xc0, 0x1f, 0x00,
0x80, 0x10, 0xcf, 0x03, 0x02, 0x10, 0x8f, 0x0e, 0x1f, 0x10, 0x82, 0x01,
0x30, 0x00, 0x7e, 0x80, 0x1f, 0x00, 0x80, 0x90, 0x90, 0x00, 0x02, 0x90,
0x99, 0x91, 0x19, 0x10, 0x82, 0x01, 0x30, 0x00, 0x3f, 0x80, 0x3f, 0x00,
0x80, 0x10, 0x90, 0x00, 0x01, 0x90, 0x90, 0x90, 0x10, 0x08, 0x82, 0x01,
0x30, 0x00, 0xbf, 0x63, 0x3f, 0x00, 0x80, 0x10, 0x9f, 0x80, 0x00, 0x90,
0x90, 0x90, 0x10, 0x04, 0x82, 0x01, 0x30, 0x00, 0x9f, 0x63, 0x3f, 0x00,
0x80, 0x90, 0x90, 0x40, 0x00, 0x90, 0x90, 0x90, 0x10, 0x02, 0x82, 0x01,
0x30, 0x00, 0x9f, 0x67, 0x3e, 0x00, 0x00, 0x91, 0x98, 0x20, 0x10, 0x90,
0x99, 0x90, 0x19, 0x01, 0x81, 0x01, 0x30, 0x00, 0x8f, 0x6f, 0x3e, 0x00,
0x00, 0x11, 0x97, 0xf3, 0x13, 0x10, 0x8f, 0x10, 0x9f, 0x1f, 0x81, 0x01,
0x30, 0x00, 0x8f, 0x7d, 0x3c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, 0x10, 0x80, 0x81, 0x01, 0x30, 0x00, 0x87, 0x79, 0x3c, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x80, 0x01,
0x30, 0x00, 0x87, 0x71, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0e, 0x00, 0x80, 0x01, 0x30, 0x00, 0x83, 0x61, 0x30, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01,
0x30, 0x00, 0x82, 0x61, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x80, 0x01, 0x30, 0x00, 0x3e, 0x00, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x01,
0x30, 0x00, 0x7c, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0c, 0x80, 0x01, 0x30, 0x00, 0x78, 0x80, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x83, 0x01,
0x30, 0x00, 0x70, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x30, 0x83, 0x01, 0x30, 0x00, 0xc0, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x83, 0x01,
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xc0, 0x83, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x83, 0x01,
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf0, 0x83, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

BIN
gui/icons/normal/host.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
gui/icons/normal/hub.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 719 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 744 B

BIN
gui/icons/normal/mdr.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
gui/icons/normal/oval.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

BIN
gui/icons/normal/pc.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
gui/icons/normal/rj45.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 755 B

BIN
gui/icons/normal/router.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

228
gui/icons/normal/simple.xbm Normal file
View file

@ -0,0 +1,228 @@
#define simple_model_diagram_width 285
#define simple_model_diagram_height 75
static unsigned char simple_model_diagram_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x0a,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x0a,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xde, 0xe1, 0x09, 0x81, 0x8f, 0x47, 0x3c, 0x21, 0x89,
0x87, 0xc3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x22, 0x12, 0x92, 0xc0, 0xcc, 0x4c, 0x42, 0x21, 0xc9,
0x4c, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x22, 0x02, 0x92, 0x40, 0x48, 0x48, 0x40, 0x12, 0x49,
0x48, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x22, 0xe2, 0x63, 0x40, 0xc8, 0x4f, 0x7c, 0x92, 0x48,
0x88, 0xc3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x22, 0x12, 0x92, 0x40, 0x48, 0x40, 0x42, 0x94, 0x48,
0x08, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x22, 0x12, 0x93, 0xc0, 0xcc, 0x48, 0x62, 0x8c, 0xc8,
0x4c, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x22, 0xe2, 0x0a, 0x81, 0x8f, 0x47, 0x5c, 0x48, 0x88,
0x87, 0xc3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x10, 0x00, 0x80, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x80, 0x00, 0x00,
0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x80, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0xbc, 0x23, 0x1d, 0xe0, 0xe3, 0x11, 0x4f, 0x48, 0xe2, 0xe1,
0x70, 0x00, 0x00, 0x00, 0x00, 0x21, 0x8f, 0x16, 0x8f, 0x8f, 0x78, 0x00,
0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x44, 0x24, 0x23, 0x30, 0x33, 0x93, 0x50, 0x48, 0x32, 0x13,
0x89, 0x00, 0x00, 0x00, 0x00, 0xa1, 0x90, 0x91, 0x90, 0x99, 0xcc, 0x00,
0x00, 0x00, 0x63, 0x00, 0x1d, 0x1e, 0x90, 0x74, 0x44, 0x00, 0x00, 0x00,
0x00, 0x00, 0x44, 0x24, 0x21, 0x10, 0x12, 0x12, 0x90, 0x44, 0x12, 0x12,
0x08, 0x00, 0x00, 0x00, 0x00, 0x12, 0x90, 0x10, 0x90, 0x90, 0x84, 0x00,
0x00, 0x00, 0x66, 0x00, 0x23, 0x33, 0x90, 0x8c, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x44, 0x24, 0x21, 0x10, 0xf2, 0x13, 0x9f, 0x24, 0x12, 0xe2,
0x70, 0x00, 0x00, 0x00, 0x00, 0x12, 0x9f, 0x10, 0x9f, 0x90, 0xfc, 0x00,
0x00, 0x00, 0x6c, 0x00, 0x21, 0x21, 0x90, 0x84, 0x14, 0x00, 0x00, 0x00,
0x00, 0x00, 0x44, 0x24, 0x21, 0x10, 0x12, 0x90, 0x10, 0x25, 0x12, 0x02,
0x81, 0x00, 0x00, 0x00, 0x00, 0x92, 0x90, 0x90, 0x90, 0x90, 0x04, 0x00,
0x00, 0x00, 0x78, 0x00, 0x21, 0x21, 0x90, 0x84, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x44, 0x24, 0x21, 0x30, 0x33, 0x92, 0x18, 0x23, 0x32, 0x13,
0x89, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x98, 0x90, 0x98, 0x99, 0x8c, 0x00,
0x00, 0x00, 0x7e, 0x00, 0x21, 0x21, 0x90, 0x84, 0x14, 0x00, 0x00, 0x00,
0x00, 0x00, 0x44, 0x24, 0x21, 0xe0, 0xe3, 0x11, 0x17, 0x12, 0xe2, 0xe1,
0x70, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x97, 0x10, 0x97, 0x8f, 0x78, 0x00,
0x00, 0x00, 0x7e, 0x00, 0x21, 0x33, 0x90, 0x84, 0x24, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x21, 0x1e, 0x90, 0x84, 0x44, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff,
0x7f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff,
0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, 0xff, 0xff,
0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, 0xff,
0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xe0, 0x9f, 0xf9, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xe0, 0x9f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xb8, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xb0, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xb0, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xa0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00,
0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00,
0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
0xdd, 0xdd, 0xdd, 0x9f, 0xe7, 0x79, 0x9e, 0xe7, 0x79, 0x9e, 0xf7, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
0xdd, 0xdd, 0xdd, 0xcf, 0xf3, 0x3c, 0xcf, 0xf3, 0x3c, 0xcf, 0xf3, 0x01,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
0xdd, 0xdd, 0xdd, 0xe7, 0x79, 0x9e, 0xe7, 0x79, 0x9e, 0xe7, 0xf9, 0x03,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
0xdd, 0xdd, 0xdd, 0xf3, 0x3c, 0xcf, 0xf3, 0x3c, 0xcf, 0xf3, 0xfc, 0x01,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
0xdd, 0xdd, 0xdd, 0x79, 0x9e, 0xe7, 0x79, 0x9e, 0xe7, 0x79, 0xfe, 0x00,
0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00,
0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x01, 0x00, 0x00, 0x00, 0xde, 0xe1, 0x09, 0x41, 0xf3, 0xe8, 0xf0,
0xf1, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf0, 0x8e, 0x74, 0x40, 0xf3, 0xe8, 0xf0, 0xf1,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x22, 0x12, 0x92, 0xc0, 0x08, 0x19, 0x99,
0x99, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x91, 0x8c, 0xc0, 0x08, 0x19, 0x99, 0x99,
0x61, 0x00, 0x00, 0x00, 0x00, 0x22, 0x02, 0x92, 0x40, 0x00, 0x09, 0x09,
0x09, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x91, 0x84, 0x40, 0x00, 0x09, 0x09, 0x09,
0x31, 0x00, 0x00, 0x00, 0x00, 0x22, 0xe2, 0x63, 0x40, 0xf0, 0x09, 0x09,
0xf9, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x91, 0x84, 0x40, 0xf0, 0x09, 0x09, 0xf9,
0x01, 0x00, 0x00, 0x00, 0x00, 0x22, 0x12, 0x92, 0x40, 0x08, 0x09, 0x09,
0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x91, 0x84, 0x40, 0x08, 0x09, 0x09, 0x09,
0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x12, 0x93, 0x40, 0x88, 0x09, 0x99,
0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x91, 0x84, 0x40, 0x88, 0x09, 0x99, 0x19,
0x01, 0x00, 0x00, 0x00, 0x00, 0x22, 0xe2, 0x0a, 0x41, 0x70, 0x09, 0xf1,
0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x91, 0x84, 0x40, 0x70, 0x09, 0xf1, 0xf1,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

BIN
gui/icons/normal/text.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

BIN
gui/icons/normal/tunnel.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 799 B

BIN
gui/icons/normal/wlan.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 B

BIN
gui/icons/normal/xen.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

270
gui/icons/svg/ap.svg Normal file
View file

@ -0,0 +1,270 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="146"
height="146"
id="svg3868"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="ap.svg"
inkscape:export-filename="ap2.png"
inkscape:export-xdpi="20.99"
inkscape:export-ydpi="20.99">
<defs
id="defs3870">
<linearGradient
id="linearGradient3929">
<stop
id="stop3931"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop3933"
offset="1"
style="stop-color:#212121;stop-opacity:0.55384618;" />
</linearGradient>
<linearGradient
id="linearGradient5149">
<stop
id="stop5151"
offset="0"
style="stop-color:#5dacd1;stop-opacity:1;" />
<stop
id="stop5153"
offset="1"
style="stop-color:#1b4a78;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient4902">
<stop
style="stop-color:#484848;stop-opacity:1;"
offset="0"
id="stop4904" />
<stop
style="stop-color:#8f8f90;stop-opacity:0;"
offset="1"
id="stop4906" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective3876" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient4908"
x1="5.8083773"
y1="68.180191"
x2="84.600281"
y2="68.180191"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.269166,0,0,1.2912385,-2.3717949,931.82545)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3929"
id="linearGradient5039"
x1="105"
y1="55"
x2="140"
y2="55"
gradientUnits="userSpaceOnUse" />
<inkscape:perspective
id="perspective5049"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient3844"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,9.3066001,-238.48173)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
<linearGradient
id="linearGradient12001">
<stop
style="stop-color:#1b4a78;stop-opacity:1;"
offset="0"
id="stop12003" />
<stop
style="stop-color:#5dacd1;stop-opacity:1;"
offset="1"
id="stop12005" />
</linearGradient>
<inkscape:perspective
id="perspective5135"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective5165"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3929"
id="linearGradient3809"
x1="9.5"
y1="937.36218"
x2="30.5"
y2="937.36218"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.33333333,0,0,1.734375,90,-678.37535)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3929"
id="linearGradient3826"
x1="4.5"
y1="947.36218"
x2="25.5"
y2="947.36218"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.66666666,0,0,1,16.666666,0)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="38.189474"
inkscape:cy="73"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:window-width="1470"
inkscape:window-height="907"
inkscape:window-x="88"
inkscape:window-y="58"
inkscape:window-maximized="0"
inkscape:snap-global="true">
<inkscape:grid
type="xygrid"
id="grid4935"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata3873">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="antenna"
style="display:none">
<path
transform="translate(0,-906.36218)"
id="path3817"
style="fill:url(#linearGradient3826);fill-opacity:1;stroke:#000000;stroke-width:0.81649655px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 33.333334,982.36218 0,-10 -3.333334,-30 0,-30 -6.666666,0 m 0,0 0,30 -3.333334,30 0,10 13.333334,0"
inkscape:connector-curvature="0" />
</g>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-906.36218)"
style="display:inline">
<rect
style="fill:url(#linearGradient4908);fill-opacity:1;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
id="rect4390"
width="100"
height="45"
x="5"
y="997.36218" />
<path
style="fill:url(#linearGradient5039);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 105,45 35,-40 0,45 -35,40 0,-45 z"
id="path5031"
transform="translate(0,952.36218)"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
style="fill:#3a78a0;fill-opacity:1;stroke:none"
d="M 105,45 5,45 40,5 140,5 105,45 z"
id="path5079"
transform="translate(0,952.36218)"
inkscape:connector-curvature="0" />
<path
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none"
d="m 63.720704,982.3378 12.656877,-3.10116 12.656905,-3.10105 -3.523923,3.28427 18.978167,0.15164 -6.571234,6.1243 -18.978156,-0.15164 -3.523925,3.28426 -5.843452,-3.24896 -5.851259,-3.24166 z"
id="path13511"
inkscape:connector-curvature="0" />
<path
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none"
d="M 80.174263,970.7443 74.367199,967.43074 68.560125,964.11719 65,967.36218 46.024691,967.0001 l -6.638732,6.05106 18.975309,0.36208 -3.560123,3.24499 12.690524,-2.96052 12.682595,-2.95341 z"
id="path13513"
inkscape:connector-curvature="0" />
<path
id="path5195"
d="M 65.174263,985.7443 59.367199,982.43074 53.560125,979.11719 50,982.36218 31.024691,982.0001 l -6.638732,6.05106 18.975309,0.36208 -3.560123,3.24499 12.690524,-2.96052 12.682595,-2.95341 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none"
inkscape:connector-curvature="0" />
<path
id="path5209"
d="m 78.9675,967.75499 12.656877,-3.10116 12.656903,-3.10105 -3.52392,3.28427 18.97816,0.15164 -6.57123,6.1243 -18.978154,-0.15164 -3.523925,3.28426 -5.843452,-3.24896 -5.851259,-3.24166 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none"
inkscape:connector-curvature="0" />
<rect
style="fill:#000000"
id="rect3935"
width="20.205694"
height="44.600876"
x="84.666878"
y="997.70026" />
<rect
y="997.36218"
x="4.7943039"
height="44.600876"
width="20.205694"
id="rect3939"
style="fill:#000000" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 5,91 25,91 55,51 40,51 z"
id="path3946"
inkscape:connector-curvature="0"
transform="translate(0,906.36218)" />
<path
inkscape:connector-curvature="0"
id="path3948"
d="m 85,997.36218 20,0 35,-40 -15,0 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="ccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.1 KiB

109
gui/icons/svg/cel.svg Normal file
View file

@ -0,0 +1,109 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64px"
height="64px"
id="svg2985"
version="1.1"
inkscape:version="0.48.0 r9654"
sodipodi:docname="cel2.svg"
inkscape:export-filename="cel.png"
inkscape:export-xdpi="49.651821"
inkscape:export-ydpi="49.651821">
<defs
id="defs2987" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.313708"
inkscape:cx="36.811127"
inkscape:cy="34.352921"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1154"
inkscape:window-height="770"
inkscape:window-x="206"
inkscape:window-y="56"
inkscape:window-maximized="0"
inkscape:snap-global="true">
<inkscape:grid
type="xygrid"
id="grid3020" />
</sodipodi:namedview>
<metadata
id="metadata2990">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
style="fill:#ffff00;stroke:#aa8800;stroke-width:2.27776383999999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 54,44 25.714286,44 21.52381,37.809525 10,37.809525 10,20 l 8.296388,-2 23.132183,0 3.142858,4.95238 9.428571,0 z"
id="path2995"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
<path
style="fill:#aa8800;stroke:#aa8800;stroke-width:1.83941792999999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 9,26.75 -1.4285714,0 0,-6.75 L 4,20 l 0,7.875 1.4285714,3.375 0,6.75 2.1428572,0 0,-7.875 L 9,30.125 z"
id="path3016"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccc" />
<path
style="fill:#aa8800;stroke:#aa8800;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
d="M 28.090909,17 28,15 l 7,0 0,-2 -16,0 0,2 6,0 0,2 z"
id="path3018"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" />
<path
style="fill:#ffff00;stroke:#aa8800;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
d="m 55,35 2,0 0,6 2,0 2,-2 0,-11 -2,-2 -2,0 0,6 -2,0 z"
id="path3022"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:37.54441451999999657px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:30.00000118999999899%;letter-spacing:0px;word-spacing:0px;fill:#aa8800;fill-opacity:1;stroke:none;font-family:UnDotum;-inkscape-font-specification:UnDotum"
x="16.785086"
y="29.288048"
id="text3810"
sodipodi:linespacing="30.000001%"
transform="scale(0.83407376,1.1989347)"><tspan
sodipodi:role="line"
id="tspan3812"
x="16.785086"
y="29.288048"
style="font-size:11.26332378000000034px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#aa8800;font-family:FreeSans;-inkscape-font-specification:FreeSans Bold">CHECK</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:30.00000119%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:UnDotum;-inkscape-font-specification:UnDotum"
x="128.71466"
y="-25.45788"
id="text3814"
sodipodi:linespacing="30.000001%"><tspan
sodipodi:role="line"
id="tspan3816"></tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

197
gui/icons/svg/hub.svg Normal file
View file

@ -0,0 +1,197 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="146"
height="100"
id="svg3868"
version="1.1"
inkscape:version="0.47 r22583"
sodipodi:docname="hub.svg">
<defs
id="defs3870">
<linearGradient
id="linearGradient5149">
<stop
id="stop5151"
offset="0"
style="stop-color:#5dacd1;stop-opacity:1;" />
<stop
id="stop5153"
offset="1"
style="stop-color:#1b4a78;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient4902">
<stop
style="stop-color:#484848;stop-opacity:1;"
offset="0"
id="stop4904" />
<stop
style="stop-color:#8f8f90;stop-opacity:0;"
offset="1"
id="stop4906" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective3876" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient4908"
x1="5.8083773"
y1="68.180191"
x2="84.600281"
y2="68.180191"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.269166,0,0,1.2912385,-2.3717949,931.82545)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient5039"
x1="105"
y1="55"
x2="140"
y2="55"
gradientUnits="userSpaceOnUse" />
<inkscape:perspective
id="perspective5049"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient3844"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,9.3066001,-238.48173)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
<linearGradient
id="linearGradient12001">
<stop
style="stop-color:#1b4a78;stop-opacity:1;"
offset="0"
id="stop12003" />
<stop
style="stop-color:#5dacd1;stop-opacity:1;"
offset="1"
id="stop12005" />
</linearGradient>
<inkscape:perspective
id="perspective5135"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective5165"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="91.162404"
inkscape:cy="35.126778"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="914"
inkscape:window-height="668"
inkscape:window-x="2157"
inkscape:window-y="214"
inkscape:window-maximized="0">
<inkscape:grid
type="xygrid"
id="grid4935"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="0.5px"
spacingy="0.5px" />
</sodipodi:namedview>
<metadata
id="metadata3873">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-952.36218)">
<rect
style="fill:url(#linearGradient4908);fill-opacity:1.0;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
id="rect4390"
width="100"
height="45"
x="5"
y="997.36218" />
<path
style="fill:url(#linearGradient5039);stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1.0"
d="m 105,45 35,-40 0,45 -35,40 0,-45 z"
id="path5031"
transform="translate(0,952.36218)"
sodipodi:nodetypes="ccccc" />
<path
style="fill:#3a78a0;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
d="M 105,45 5,45 40,5 140,5 105,45 z"
id="path5079"
transform="translate(0,952.36218)" />
<path
style="fill:#f2fdff;fill-opacity:0.70980392000000003;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
d="m 32.5,979.86218 7.5,-7.5 77.5,0 -7.5,7.5 -77.5,0 z"
id="path5255" />
<path
style="fill:#f2fdff;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0.70980394"
d="m 45,27.5 -7.5,7.5 10,0 7.5,-7.5 -10,0 z"
id="path5259"
transform="translate(0,952.36218)" />
<path
id="path5261"
d="m 77.5,979.86218 -7.5,7.5 10,0 7.5,-7.5 -10,0 z"
style="fill:#f2fdff;fill-opacity:0.70980392;stroke:none" />
<path
style="fill:#f2fdff;fill-opacity:0.70980392;stroke:none"
d="m 70,964.86218 -7.5,7.5 10,0 7.5,-7.5 -10,0 z"
id="path5263" />
<path
id="path5265"
d="m 102.5,964.86218 -7.5,7.5 10,0 7.5,-7.5 -10,0 z"
style="fill:#f2fdff;fill-opacity:0.70980392;stroke:none" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.4 KiB

190
gui/icons/svg/lanswitch.svg Normal file
View file

@ -0,0 +1,190 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="146"
height="100"
id="svg3868"
version="1.1"
inkscape:version="0.47 r22583"
sodipodi:docname="switch.svg">
<defs
id="defs3870">
<linearGradient
id="linearGradient5149">
<stop
id="stop5151"
offset="0"
style="stop-color:#5dacd1;stop-opacity:1;" />
<stop
id="stop5153"
offset="1"
style="stop-color:#1b4a78;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient4902">
<stop
style="stop-color:#484848;stop-opacity:1;"
offset="0"
id="stop4904" />
<stop
style="stop-color:#8f8f90;stop-opacity:0;"
offset="1"
id="stop4906" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective3876" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient4908"
x1="5.8083773"
y1="68.180191"
x2="84.600281"
y2="68.180191"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.269166,0,0,1.2912385,-2.3717949,931.82545)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient5039"
x1="105"
y1="55"
x2="140"
y2="55"
gradientUnits="userSpaceOnUse" />
<inkscape:perspective
id="perspective5049"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient3844"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,9.3066001,-238.48173)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
<linearGradient
id="linearGradient12001">
<stop
style="stop-color:#1b4a78;stop-opacity:1;"
offset="0"
id="stop12003" />
<stop
style="stop-color:#5dacd1;stop-opacity:1;"
offset="1"
id="stop12005" />
</linearGradient>
<inkscape:perspective
id="perspective5135"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective5165"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8284271"
inkscape:cx="91.162404"
inkscape:cy="35.126778"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="809"
inkscape:window-height="852"
inkscape:window-x="605"
inkscape:window-y="185"
inkscape:window-maximized="0">
<inkscape:grid
type="xygrid"
id="grid4935"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata3873">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-952.36218)">
<rect
style="fill:url(#linearGradient4908);fill-opacity:1.0;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
id="rect4390"
width="100"
height="45"
x="5"
y="997.36218" />
<path
style="fill:url(#linearGradient5039);stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1.0"
d="m 105,45 35,-40 0,45 -35,40 0,-45 z"
id="path5031"
transform="translate(0,952.36218)"
sodipodi:nodetypes="ccccc" />
<path
style="fill:#3a78a0;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
d="M 105,45 5,45 40,5 140,5 105,45 z"
id="path5079"
transform="translate(0,952.36218)" />
<path
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none"
d="m 63.720704,982.3378 12.656877,-3.10116 12.656905,-3.10105 -3.523923,3.28427 18.978167,0.15164 -6.571234,6.1243 -18.978156,-0.15164 -3.523925,3.28426 -5.843452,-3.24896 -5.851259,-3.24166 z"
id="path13511" />
<path
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none"
d="M 80.174263,970.7443 74.367199,967.43074 68.560125,964.11719 65,967.36218 46.024691,967.0001 l -6.638732,6.05106 18.975309,0.36208 -3.560123,3.24499 12.690524,-2.96052 12.682595,-2.95341 z"
id="path13513" />
<path
id="path5195"
d="M 65.174263,985.7443 59.367199,982.43074 53.560125,979.11719 50,982.36218 31.024691,982.0001 l -6.638732,6.05106 18.975309,0.36208 -3.560123,3.24499 12.690524,-2.96052 12.682595,-2.95341 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path5209"
d="m 78.9675,967.75499 12.656877,-3.10116 12.656903,-3.10105 -3.52392,3.28427 18.97816,0.15164 -6.57123,6.1243 -18.978154,-0.15164 -3.523925,3.28426 -5.843452,-3.24896 -5.851259,-3.24166 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.5 KiB

178
gui/icons/svg/mdr.svg Normal file
View file

@ -0,0 +1,178 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="146"
height="100"
id="svg13653"
sodipodi:version="0.32"
inkscape:version="0.47 r22583"
sodipodi:docname="router.svg"
version="1.0">
<defs
id="defs13655">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 99.931252 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="199.10001 : 99.931252 : 1"
inkscape:persp3d-origin="99.550003 : 66.620834 : 1"
id="perspective3835" />
<linearGradient
id="linearGradient12828">
<stop
id="stop12830"
offset="0"
style="stop-color:#484849;stop-opacity:1;" />
<stop
style="stop-color:#434344;stop-opacity:1;"
offset="0"
id="stop12862" />
<stop
id="stop12832"
offset="1.0000000"
style="stop-color:#8f8f90;stop-opacity:0.0000000;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient12828"
id="radialGradient13651"
cx="328.57144"
cy="602.7193"
fx="328.57144"
fy="602.7193"
r="147.14285"
gradientTransform="matrix(1,0,0,0.177184,0,495.9268)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient12001">
<stop
style="stop-color:#1b4a78;stop-opacity:1;"
offset="0"
id="stop12003" />
<stop
style="stop-color:#5dacd1;stop-opacity:1;"
offset="1"
id="stop12005" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient13633"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,118.8781,123.5182)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient3844"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,-45.6934,-239.9103)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="118.57814"
inkscape:cy="50.488033"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="1280"
inkscape:window-height="949"
inkscape:window-x="1631"
inkscape:window-y="29"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata13658">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-33.124945,-44.636248)">
<path
style="fill:url(#linearGradient3844);fill-opacity:1;stroke:none"
d="m 37.14136,72.27878 0,0.29457 c 0.006,-0.0975 0.0206,-0.19729 0.0295,-0.29457 l -0.0295,0 z m 138.62351,0 c 0.0302,0.33044 0.0589,0.66821 0.0589,1.00153 l 0,-1.00153 -0.0589,0 z m 0.0589,1.00153 c -1e-5,15.05224 -31.07495,27.26223 -69.35594,27.26223 -37.68286,1e-5 -68.3765,-11.82771 -69.32649,-26.55527 l 0,40.67979 c -0.0151,0.23376 -0.0147,0.45704 -0.0147,0.69223 0,0.22546 8.7e-4,0.45335 0.0147,0.67751 0.91151,14.74102 31.61889,26.59945 69.32649,26.59945 37.7076,0 68.41498,-11.85843 69.32648,-26.59945 l 0.0295,0 0,-0.50077 c 9.5e-4,-0.0587 0,-0.11794 0,-0.17674 0,-0.0588 9.4e-4,-0.11803 0,-0.17674 l 0,-41.90224 z"
id="path13626" />
<path
sodipodi:type="arc"
style="fill:#3a78a0;fill-opacity:1;stroke:none"
id="path11090"
sodipodi:cx="328.57144"
sodipodi:cy="602.7193"
sodipodi:rx="147.14285"
sodipodi:ry="26.071428"
d="m 475.71429,602.7193 c 0,14.39885 -65.87809,26.07143 -147.14285,26.07143 -81.26475,0 -147.14285,-11.67258 -147.14285,-26.07143 0,-14.39885 65.8781,-26.07143 147.14285,-26.07143 81.26476,0 147.14285,11.67258 147.14285,26.07143 z"
transform="matrix(0.471308,0,0,1.045917,-48.3838,-554.9944)" />
<g
id="g13565"
style="fill:#f2fdff;fill-opacity:0.71171169"
transform="matrix(0.84958,0.276715,-0.703617,0.334119,278.6313,-230.2001)">
<path
id="path13507"
d="m 328.66945,592.8253 -5.97867,10.35298 -5.97867,10.35297 6.18436,0 0,21.24074 11.53226,0 0,-21.24074 6.18435,0 -5.97867,-10.35297 -5.96496,-10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13509"
d="m 328.66945,687.10951 -5.97867,-10.35298 -5.97867,-10.35297 6.18436,0 0,-21.24074 11.53226,0 0,21.24074 6.18435,0 -5.97867,10.35297 -5.96496,10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13511"
d="m 333.74751,639.82449 10.35297,-5.97867 10.35297,-5.97867 0,6.18436 21.24074,0 0,11.53225 -21.24074,0 0,6.18436 -10.35297,-5.97867 -10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13513"
d="m 323.35667,639.82449 -10.35297,-5.97867 -10.35298,-5.97867 0,6.18436 -21.24073,0 0,11.53225 21.24073,0 0,6.18436 10.35298,-5.97867 10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
</g>
<rect
style="fill:#f2fdff;fill-opacity:0.70980394;stroke:#000000;stroke-opacity:1"
id="rect6161"
width="91.923882"
height="37.476658"
x="52.679455"
y="60.048466"
transform="translate(33.124945,44.636248)"
rx="5.454824"
ry="5.454824" />
<text
xml:space="preserve"
style="font-size:32px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:Bitstream Charter Bold"
x="91.107697"
y="135.0903"
id="text6673"><tspan
sodipodi:role="line"
id="tspan6675"
x="91.107697"
y="135.0903">MDR</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.8 KiB

181
gui/icons/svg/otr.svg Normal file
View file

@ -0,0 +1,181 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="146"
height="100"
id="svg13653"
sodipodi:version="0.32"
inkscape:version="0.48.0 r9654"
sodipodi:docname="otr.svg"
version="1.0"
inkscape:export-filename="otr.gif.png"
inkscape:export-xdpi="30.464558"
inkscape:export-ydpi="30.464558">
<defs
id="defs13655">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 99.931252 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="199.10001 : 99.931252 : 1"
inkscape:persp3d-origin="99.550003 : 66.620834 : 1"
id="perspective3835" />
<linearGradient
id="linearGradient12828">
<stop
id="stop12830"
offset="0"
style="stop-color:#484849;stop-opacity:1;" />
<stop
style="stop-color:#434344;stop-opacity:1;"
offset="0"
id="stop12862" />
<stop
id="stop12832"
offset="1.0000000"
style="stop-color:#8f8f90;stop-opacity:0.0000000;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient12828"
id="radialGradient13651"
cx="328.57144"
cy="602.7193"
fx="328.57144"
fy="602.7193"
r="147.14285"
gradientTransform="matrix(1,0,0,0.177184,0,495.9268)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient12001">
<stop
style="stop-color:#1b4a78;stop-opacity:1;"
offset="0"
id="stop12003" />
<stop
style="stop-color:#5dacd1;stop-opacity:1;"
offset="1"
id="stop12005" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient13633"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,118.8781,123.5182)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient3844"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,-45.6934,-239.9103)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="118.57814"
inkscape:cy="50.488033"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="1280"
inkscape:window-height="949"
inkscape:window-x="1631"
inkscape:window-y="29"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata13658">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-33.124945,-44.636248)">
<path
style="fill:url(#linearGradient3844);fill-opacity:1;stroke:none"
d="m 37.14136,72.27878 0,0.29457 c 0.006,-0.0975 0.0206,-0.19729 0.0295,-0.29457 l -0.0295,0 z m 138.62351,0 c 0.0302,0.33044 0.0589,0.66821 0.0589,1.00153 l 0,-1.00153 -0.0589,0 z m 0.0589,1.00153 c -1e-5,15.05224 -31.07495,27.26223 -69.35594,27.26223 -37.68286,1e-5 -68.3765,-11.82771 -69.32649,-26.55527 l 0,40.67979 c -0.0151,0.23376 -0.0147,0.45704 -0.0147,0.69223 0,0.22546 8.7e-4,0.45335 0.0147,0.67751 0.91151,14.74102 31.61889,26.59945 69.32649,26.59945 37.7076,0 68.41498,-11.85843 69.32648,-26.59945 l 0.0295,0 0,-0.50077 c 9.5e-4,-0.0587 0,-0.11794 0,-0.17674 0,-0.0588 9.4e-4,-0.11803 0,-0.17674 l 0,-41.90224 z"
id="path13626" />
<path
sodipodi:type="arc"
style="fill:#3a78a0;fill-opacity:1;stroke:none"
id="path11090"
sodipodi:cx="328.57144"
sodipodi:cy="602.7193"
sodipodi:rx="147.14285"
sodipodi:ry="26.071428"
d="m 475.71429,602.7193 c 0,14.39885 -65.87809,26.07143 -147.14285,26.07143 -81.26475,0 -147.14285,-11.67258 -147.14285,-26.07143 0,-14.39885 65.8781,-26.07143 147.14285,-26.07143 81.26476,0 147.14285,11.67258 147.14285,26.07143 z"
transform="matrix(0.471308,0,0,1.045917,-48.3838,-554.9944)" />
<g
id="g13565"
style="fill:#f2fdff;fill-opacity:0.71171169"
transform="matrix(0.84958,0.276715,-0.703617,0.334119,278.6313,-230.2001)">
<path
id="path13507"
d="m 328.66945,592.8253 -5.97867,10.35298 -5.97867,10.35297 6.18436,0 0,21.24074 11.53226,0 0,-21.24074 6.18435,0 -5.97867,-10.35297 -5.96496,-10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13509"
d="m 328.66945,687.10951 -5.97867,-10.35298 -5.97867,-10.35297 6.18436,0 0,-21.24074 11.53226,0 0,21.24074 6.18435,0 -5.97867,10.35297 -5.96496,10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13511"
d="m 333.74751,639.82449 10.35297,-5.97867 10.35297,-5.97867 0,6.18436 21.24074,0 0,11.53225 -21.24074,0 0,6.18436 -10.35297,-5.97867 -10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13513"
d="m 323.35667,639.82449 -10.35297,-5.97867 -10.35298,-5.97867 0,6.18436 -21.24073,0 0,11.53225 21.24073,0 0,6.18436 10.35298,-5.97867 10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
</g>
<rect
style="fill:#f2fdff;fill-opacity:0.70980394;stroke:#000000;stroke-opacity:1"
id="rect6161"
width="91.923882"
height="37.476658"
x="52.679455"
y="60.048466"
transform="translate(33.124945,44.636248)"
rx="5.454824"
ry="5.454824" />
<text
xml:space="preserve"
style="font-size:32px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:Bitstream Charter Bold"
x="91.107697"
y="135.0903"
id="text6673"><tspan
sodipodi:role="line"
id="tspan6675"
x="91.107697"
y="135.0903">OTR</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.9 KiB

172
gui/icons/svg/rj45.svg Normal file
View file

@ -0,0 +1,172 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="225"
height="225"
id="0"
inkscape:version="0.47 r22583"
sodipodi:docname="rj45.svg">
<metadata
id="metadata29">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs27">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 145.94881 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="232.44093 : 145.94881 : 1"
inkscape:persp3d-origin="116.22047 : 97.299205 : 1"
id="perspective31" />
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1247"
inkscape:window-height="895"
id="namedview25"
showgrid="false"
inkscape:zoom="1"
inkscape:cx="74.66191"
inkscape:cy="93.464113"
inkscape:window-x="1689"
inkscape:window-y="93"
inkscape:window-maximized="0"
inkscape:current-layer="0">
<sodipodi:guide
position="-3.9411977,-4.0666235"
orientation="0,232.44093"
id="guide3747" />
<sodipodi:guide
position="228.49973,-4.0666235"
orientation="-291.89761,0"
id="guide3749" />
<sodipodi:guide
position="228.49973,287.83099"
orientation="0,-232.44093"
id="guide3751" />
<sodipodi:guide
position="-3.9411977,287.83099"
orientation="291.89761,0"
id="guide3753" />
<sodipodi:guide
position="-3.9411977,-4.0666235"
orientation="0,232.44093"
id="guide3755" />
<sodipodi:guide
position="228.49973,-4.0666235"
orientation="-291.89761,0"
id="guide3757" />
<sodipodi:guide
position="228.49973,287.83099"
orientation="0,-232.44093"
id="guide3759" />
<sodipodi:guide
position="-3.9411977,287.83099"
orientation="291.89761,0"
id="guide3761" />
</sodipodi:namedview>
<path
d="m 224.57543,13.774353 -180.682287,0 -43.830643,69.375626 180.64259,0 43.87034,-69.375626 z"
style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.02777889px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="2" />
<path
d="m 209.63653,17.624272 -155.414218,0 -17.024962,24.688427 155.36953,0 17.06965,-24.688427"
style="fill:#b3b3b3;stroke:#000000;stroke-width:0.02991066px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="3" />
<path
d="m 1.2197453,82.720789 179.9184147,0 0,142.216711 -179.9184147,0 0,-142.216711 z"
style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="5" />
<path
d="m 59.339903,213.38388 63.836897,0 0,-11.67273 11.59227,0 0,-14.61076 34.85621,0 0,-92.905391 -156.733864,0 0,92.905391 34.856215,0 0,14.61076 11.592272,0 0,11.67273 z"
style="fill:#616161;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="6" />
<path
d="m 169.34739,123.33712 -14.84764,0 -4.84335,14.72987 -6.78862,-0.0397 -3.73176,11.59333 -60.065435,0 0,-11.59333 -11.631971,0 0,-14.69016 -34.816516,0 0,-28.824501 136.725292,0 0,28.824501 z"
style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="7" />
<path
d="m 137.66714,94.194999 5.20064,11.712431 8.6545,0 -5.20064,-11.712431 -8.6545,0 z"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="8" />
<path
d="m 123.1768,94.234699 5.16094,11.672731 8.6942,0 -5.20064,-11.672731 -8.6545,0 z"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="9" />
<path
d="m 108.68646,94.234699 5.16094,11.672731 8.6148,0 -5.20064,-11.672731 -8.5751,0 z"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="10" />
<path
d="m 94.156419,94.234699 5.160943,11.672731 8.733898,0 -5.16094,-11.672731 -8.733901,0 z"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="11" />
<path
d="m 79.626379,94.234699 5.160943,11.672731 8.694204,0 -5.200642,-11.672731 -8.654505,0 z"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="12" />
<path
d="m 65.136039,94.234699 5.121244,11.672731 8.733903,0 -5.200642,-11.672731 -8.654505,0 z"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="13" />
<path
d="m 50.526601,94.234699 5.160943,11.672731 8.694204,0 -5.200643,-11.672731 -8.654504,0 z"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="14" />
<path
d="m 36.07596,94.234699 5.200643,11.672731 8.733903,0 -5.160943,-11.672731 -8.773603,0 z"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="15" />
<path
d="m 181.28772,83.147026 41.93942,-68.956727 1.31188,113.094881 -43.2513,96.95337 0,-141.091524 z"
style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.03138413px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="16"
sodipodi:nodetypes="ccccc" />
<path
d="M 47.469734,187.49742 67.597412,122.78127"
style="fill:none;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="17" />
<path
d="M 59.459002,201.79055 79.626379,137.11411"
style="fill:none;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="18" />
<path
d="m 123.1371,201.86996 20.12767,-64.67644"
style="fill:none;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="19" />
<path
d="m 134.76907,187.14009 20.16738,-64.71615"
style="fill:none;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="20" />
<path
d="M 12.851717,187.17979 33.019094,122.46365"
style="fill:none;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="21" />
<path
d="M 47.588833,201.83026 67.716511,137.15381"
style="fill:none;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="22" />
</svg>

After

Width:  |  Height:  |  Size: 8.2 KiB

158
gui/icons/svg/router.svg Normal file
View file

@ -0,0 +1,158 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="146"
height="100"
id="svg13653"
sodipodi:version="0.32"
inkscape:version="0.47 r22583"
sodipodi:docname="router.svg"
version="1.0">
<defs
id="defs13655">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 99.931252 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="199.10001 : 99.931252 : 1"
inkscape:persp3d-origin="99.550003 : 66.620834 : 1"
id="perspective3835" />
<linearGradient
id="linearGradient12828">
<stop
id="stop12830"
offset="0"
style="stop-color:#484849;stop-opacity:1;" />
<stop
style="stop-color:#434344;stop-opacity:1;"
offset="0"
id="stop12862" />
<stop
id="stop12832"
offset="1.0000000"
style="stop-color:#8f8f90;stop-opacity:0.0000000;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient12828"
id="radialGradient13651"
cx="328.57144"
cy="602.7193"
fx="328.57144"
fy="602.7193"
r="147.14285"
gradientTransform="matrix(1,0,0,0.177184,0,495.9268)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient12001">
<stop
style="stop-color:#1b4a78;stop-opacity:1;"
offset="0"
id="stop12003" />
<stop
style="stop-color:#5dacd1;stop-opacity:1;"
offset="1"
id="stop12005" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient13633"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,118.8781,123.5182)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient3844"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,-45.6934,-239.9103)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8"
inkscape:cx="118.57814"
inkscape:cy="50.488033"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="1280"
inkscape:window-height="949"
inkscape:window-x="289"
inkscape:window-y="87"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata13658">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-33.124945,-44.636248)">
<path
style="fill:url(#linearGradient3844);fill-opacity:1;stroke:none"
d="m 37.14136,72.27878 0,0.29457 c 0.006,-0.0975 0.0206,-0.19729 0.0295,-0.29457 l -0.0295,0 z m 138.62351,0 c 0.0302,0.33044 0.0589,0.66821 0.0589,1.00153 l 0,-1.00153 -0.0589,0 z m 0.0589,1.00153 c -1e-5,15.05224 -31.07495,27.26223 -69.35594,27.26223 -37.68286,1e-5 -68.3765,-11.82771 -69.32649,-26.55527 l 0,40.67979 c -0.0151,0.23376 -0.0147,0.45704 -0.0147,0.69223 0,0.22546 8.7e-4,0.45335 0.0147,0.67751 0.91151,14.74102 31.61889,26.59945 69.32649,26.59945 37.7076,0 68.41498,-11.85843 69.32648,-26.59945 l 0.0295,0 0,-0.50077 c 9.5e-4,-0.0587 0,-0.11794 0,-0.17674 0,-0.0588 9.4e-4,-0.11803 0,-0.17674 l 0,-41.90224 z"
id="path13626" />
<path
sodipodi:type="arc"
style="fill:#3a78a0;fill-opacity:1;stroke:none"
id="path11090"
sodipodi:cx="328.57144"
sodipodi:cy="602.7193"
sodipodi:rx="147.14285"
sodipodi:ry="26.071428"
d="m 475.71429,602.7193 c 0,14.39885 -65.87809,26.07143 -147.14285,26.07143 -81.26475,0 -147.14285,-11.67258 -147.14285,-26.07143 0,-14.39885 65.8781,-26.07143 147.14285,-26.07143 81.26476,0 147.14285,11.67258 147.14285,26.07143 z"
transform="matrix(0.471308,0,0,1.045917,-48.3838,-554.9944)" />
<g
id="g13565"
style="fill:#f2fdff;fill-opacity:0.71171169"
transform="matrix(0.84958,0.276715,-0.703617,0.334119,278.6313,-230.2001)">
<path
id="path13507"
d="m 328.66945,592.8253 -5.97867,10.35298 -5.97867,10.35297 6.18436,0 0,21.24074 11.53226,0 0,-21.24074 6.18435,0 -5.97867,-10.35297 -5.96496,-10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13509"
d="m 328.66945,687.10951 -5.97867,-10.35298 -5.97867,-10.35297 6.18436,0 0,-21.24074 11.53226,0 0,21.24074 6.18435,0 -5.97867,10.35297 -5.96496,10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13511"
d="m 333.74751,639.82449 10.35297,-5.97867 10.35297,-5.97867 0,6.18436 21.24074,0 0,11.53225 -21.24074,0 0,6.18436 -10.35297,-5.97867 -10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13513"
d="m 323.35667,639.82449 -10.35297,-5.97867 -10.35298,-5.97867 0,6.18436 -21.24073,0 0,11.53225 21.24073,0 0,6.18436 10.35298,-5.97867 10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -0,0 +1,158 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="146"
height="100"
id="svg13653"
sodipodi:version="0.32"
inkscape:version="0.47 r22583"
sodipodi:docname="router-red.svg"
version="1.0">
<defs
id="defs13655">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 99.931252 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="199.10001 : 99.931252 : 1"
inkscape:persp3d-origin="99.550003 : 66.620834 : 1"
id="perspective3835" />
<linearGradient
id="linearGradient12828">
<stop
id="stop12830"
offset="0"
style="stop-color:#484849;stop-opacity:1;" />
<stop
style="stop-color:#434344;stop-opacity:1;"
offset="0"
id="stop12862" />
<stop
id="stop12832"
offset="1.0000000"
style="stop-color:#8f8f90;stop-opacity:0.0000000;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient12828"
id="radialGradient13651"
cx="328.57144"
cy="602.7193"
fx="328.57144"
fy="602.7193"
r="147.14285"
gradientTransform="matrix(1,0,0,0.177184,0,495.9268)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient12001">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop12003" />
<stop
style="stop-color:#acacac;stop-opacity:1;"
offset="1"
id="stop12005" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient13633"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,118.8781,123.5182)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient3844"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,-45.6934,-239.9103)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8"
inkscape:cx="118.57814"
inkscape:cy="50.488033"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="1006"
inkscape:window-height="766"
inkscape:window-x="787"
inkscape:window-y="281"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata13658">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-33.124945,-44.636248)">
<path
style="fill:url(#linearGradient3844);fill-opacity:1;stroke:none"
d="m 37.14136,72.27878 0,0.29457 c 0.006,-0.0975 0.0206,-0.19729 0.0295,-0.29457 l -0.0295,0 z m 138.62351,0 c 0.0302,0.33044 0.0589,0.66821 0.0589,1.00153 l 0,-1.00153 -0.0589,0 z m 0.0589,1.00153 c -1e-5,15.05224 -31.07495,27.26223 -69.35594,27.26223 -37.68286,1e-5 -68.3765,-11.82771 -69.32649,-26.55527 l 0,40.67979 c -0.0151,0.23376 -0.0147,0.45704 -0.0147,0.69223 0,0.22546 8.7e-4,0.45335 0.0147,0.67751 0.91151,14.74102 31.61889,26.59945 69.32649,26.59945 37.7076,0 68.41498,-11.85843 69.32648,-26.59945 l 0.0295,0 0,-0.50077 c 9.5e-4,-0.0587 0,-0.11794 0,-0.17674 0,-0.0588 9.4e-4,-0.11803 0,-0.17674 l 0,-41.90224 z"
id="path13626" />
<path
sodipodi:type="arc"
style="fill:#000000;fill-opacity:1;stroke:none"
id="path11090"
sodipodi:cx="328.57144"
sodipodi:cy="602.7193"
sodipodi:rx="147.14285"
sodipodi:ry="26.071428"
d="m 475.71429,602.7193 c 0,14.39885 -65.87809,26.07143 -147.14285,26.07143 -81.26475,0 -147.14285,-11.67258 -147.14285,-26.07143 0,-14.39885 65.8781,-26.07143 147.14285,-26.07143 81.26476,0 147.14285,11.67258 147.14285,26.07143 z"
transform="matrix(0.471308,0,0,1.045917,-48.3838,-554.9944)" />
<g
id="g13565"
style="fill:#f2fdff;fill-opacity:0.71171169"
transform="matrix(0.84958,0.276715,-0.703617,0.334119,278.6313,-230.2001)">
<path
id="path13507"
d="m 328.66945,592.8253 -5.97867,10.35298 -5.97867,10.35297 6.18436,0 0,21.24074 11.53226,0 0,-21.24074 6.18435,0 -5.97867,-10.35297 -5.96496,-10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13509"
d="m 328.66945,687.10951 -5.97867,-10.35298 -5.97867,-10.35297 6.18436,0 0,-21.24074 11.53226,0 0,21.24074 6.18435,0 -5.97867,10.35297 -5.96496,10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13511"
d="m 333.74751,639.82449 10.35297,-5.97867 10.35297,-5.97867 0,6.18436 21.24074,0 0,11.53225 -21.24074,0 0,6.18436 -10.35297,-5.97867 -10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13513"
d="m 323.35667,639.82449 -10.35297,-5.97867 -10.35298,-5.97867 0,6.18436 -21.24073,0 0,11.53225 21.24073,0 0,6.18436 10.35298,-5.97867 10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -0,0 +1,158 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="146"
height="100"
id="svg13653"
sodipodi:version="0.32"
inkscape:version="0.47 r22583"
sodipodi:docname="router.svg"
version="1.0">
<defs
id="defs13655">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 99.931252 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="199.10001 : 99.931252 : 1"
inkscape:persp3d-origin="99.550003 : 66.620834 : 1"
id="perspective3835" />
<linearGradient
id="linearGradient12828">
<stop
id="stop12830"
offset="0"
style="stop-color:#484849;stop-opacity:1;" />
<stop
style="stop-color:#434344;stop-opacity:1;"
offset="0"
id="stop12862" />
<stop
id="stop12832"
offset="1.0000000"
style="stop-color:#8f8f90;stop-opacity:0.0000000;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient12828"
id="radialGradient13651"
cx="328.57144"
cy="602.7193"
fx="328.57144"
fy="602.7193"
r="147.14285"
gradientTransform="matrix(1,0,0,0.177184,0,495.9268)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient12001">
<stop
style="stop-color:#1b781b;stop-opacity:1;"
offset="0"
id="stop12003" />
<stop
style="stop-color:#5dd15d;stop-opacity:1;"
offset="1"
id="stop12005" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient13633"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,118.8781,123.5182)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient3844"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,-45.6934,-239.9103)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8"
inkscape:cx="118.57814"
inkscape:cy="50.488033"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="1280"
inkscape:window-height="949"
inkscape:window-x="289"
inkscape:window-y="87"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata13658">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-33.124945,-44.636248)">
<path
style="fill:url(#linearGradient3844);fill-opacity:1;stroke:none"
d="m 37.14136,72.27878 0,0.29457 c 0.006,-0.0975 0.0206,-0.19729 0.0295,-0.29457 l -0.0295,0 z m 138.62351,0 c 0.0302,0.33044 0.0589,0.66821 0.0589,1.00153 l 0,-1.00153 -0.0589,0 z m 0.0589,1.00153 c -1e-5,15.05224 -31.07495,27.26223 -69.35594,27.26223 -37.68286,1e-5 -68.3765,-11.82771 -69.32649,-26.55527 l 0,40.67979 c -0.0151,0.23376 -0.0147,0.45704 -0.0147,0.69223 0,0.22546 8.7e-4,0.45335 0.0147,0.67751 0.91151,14.74102 31.61889,26.59945 69.32649,26.59945 37.7076,0 68.41498,-11.85843 69.32648,-26.59945 l 0.0295,0 0,-0.50077 c 9.5e-4,-0.0587 0,-0.11794 0,-0.17674 0,-0.0588 9.4e-4,-0.11803 0,-0.17674 l 0,-41.90224 z"
id="path13626" />
<path
sodipodi:type="arc"
style="fill:#3aa03a;fill-opacity:1;stroke:none"
id="path11090"
sodipodi:cx="328.57144"
sodipodi:cy="602.7193"
sodipodi:rx="147.14285"
sodipodi:ry="26.071428"
d="m 475.71429,602.7193 c 0,14.39885 -65.87809,26.07143 -147.14285,26.07143 -81.26475,0 -147.14285,-11.67258 -147.14285,-26.07143 0,-14.39885 65.8781,-26.07143 147.14285,-26.07143 81.26476,0 147.14285,11.67258 147.14285,26.07143 z"
transform="matrix(0.471308,0,0,1.045917,-48.3838,-554.9944)" />
<g
id="g13565"
style="fill:#f2fdff;fill-opacity:0.71171169"
transform="matrix(0.84958,0.276715,-0.703617,0.334119,278.6313,-230.2001)">
<path
id="path13507"
d="m 328.66945,592.8253 -5.97867,10.35298 -5.97867,10.35297 6.18436,0 0,21.24074 11.53226,0 0,-21.24074 6.18435,0 -5.97867,-10.35297 -5.96496,-10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13509"
d="m 328.66945,687.10951 -5.97867,-10.35298 -5.97867,-10.35297 6.18436,0 0,-21.24074 11.53226,0 0,21.24074 6.18435,0 -5.97867,10.35297 -5.96496,10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13511"
d="m 333.74751,639.82449 10.35297,-5.97867 10.35297,-5.97867 0,6.18436 21.24074,0 0,11.53225 -21.24074,0 0,6.18436 -10.35297,-5.97867 -10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13513"
d="m 323.35667,639.82449 -10.35297,-5.97867 -10.35298,-5.97867 0,6.18436 -21.24073,0 0,11.53225 21.24073,0 0,6.18436 10.35298,-5.97867 10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -0,0 +1,158 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="146"
height="100"
id="svg13653"
sodipodi:version="0.32"
inkscape:version="0.47 r22583"
sodipodi:docname="router-yellow.svg"
version="1.0">
<defs
id="defs13655">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 99.931252 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="199.10001 : 99.931252 : 1"
inkscape:persp3d-origin="99.550003 : 66.620834 : 1"
id="perspective3835" />
<linearGradient
id="linearGradient12828">
<stop
id="stop12830"
offset="0"
style="stop-color:#484849;stop-opacity:1;" />
<stop
style="stop-color:#434344;stop-opacity:1;"
offset="0"
id="stop12862" />
<stop
id="stop12832"
offset="1.0000000"
style="stop-color:#8f8f90;stop-opacity:0.0000000;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient12828"
id="radialGradient13651"
cx="328.57144"
cy="602.7193"
fx="328.57144"
fy="602.7193"
r="147.14285"
gradientTransform="matrix(1,0,0,0.177184,0,495.9268)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient12001">
<stop
style="stop-color:#781b4a;stop-opacity:1;"
offset="0"
id="stop12003" />
<stop
style="stop-color:#d15dac;stop-opacity:1;"
offset="1"
id="stop12005" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient13633"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,118.8781,123.5182)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient3844"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,-45.6934,-239.9103)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="118.57814"
inkscape:cy="50.488032"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="982"
inkscape:window-height="950"
inkscape:window-x="1626"
inkscape:window-y="76"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata13658">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-33.124945,-44.636248)">
<path
style="fill:url(#linearGradient3844);fill-opacity:1.0;stroke:none"
d="m 37.14136,72.27878 0,0.29457 c 0.006,-0.0975 0.0206,-0.19729 0.0295,-0.29457 l -0.0295,0 z m 138.62351,0 c 0.0302,0.33044 0.0589,0.66821 0.0589,1.00153 l 0,-1.00153 -0.0589,0 z m 0.0589,1.00153 c -1e-5,15.05224 -31.07495,27.26223 -69.35594,27.26223 -37.68286,1e-5 -68.3765,-11.82771 -69.32649,-26.55527 l 0,40.67979 c -0.0151,0.23376 -0.0147,0.45704 -0.0147,0.69223 0,0.22546 8.7e-4,0.45335 0.0147,0.67751 0.91151,14.74102 31.61889,26.59945 69.32649,26.59945 37.7076,0 68.41498,-11.85843 69.32648,-26.59945 l 0.0295,0 0,-0.50077 c 9.5e-4,-0.0587 0,-0.11794 0,-0.17674 0,-0.0588 9.4e-4,-0.11803 0,-0.17674 l 0,-41.90224 z"
id="path13626" />
<path
sodipodi:type="arc"
style="fill:#a03a78;fill-opacity:1;stroke:none"
id="path11090"
sodipodi:cx="328.57144"
sodipodi:cy="602.7193"
sodipodi:rx="147.14285"
sodipodi:ry="26.071428"
d="m 475.71429,602.7193 c 0,14.39885 -65.87809,26.07143 -147.14285,26.07143 -81.26475,0 -147.14285,-11.67258 -147.14285,-26.07143 0,-14.39885 65.8781,-26.07143 147.14285,-26.07143 81.26476,0 147.14285,11.67258 147.14285,26.07143 z"
transform="matrix(0.471308,0,0,1.045917,-48.3838,-554.9944)" />
<g
id="g13565"
style="fill:#f2fdff;fill-opacity:0.71171169"
transform="matrix(0.84958,0.276715,-0.703617,0.334119,278.6313,-230.2001)">
<path
id="path13507"
d="m 328.66945,592.8253 -5.97867,10.35298 -5.97867,10.35297 6.18436,0 0,21.24074 11.53226,0 0,-21.24074 6.18435,0 -5.97867,-10.35297 -5.96496,-10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13509"
d="m 328.66945,687.10951 -5.97867,-10.35298 -5.97867,-10.35297 6.18436,0 0,-21.24074 11.53226,0 0,21.24074 6.18435,0 -5.97867,10.35297 -5.96496,10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13511"
d="m 333.74751,639.82449 10.35297,-5.97867 10.35297,-5.97867 0,6.18436 21.24074,0 0,11.53225 -21.24074,0 0,6.18436 -10.35297,-5.97867 -10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13513"
d="m 323.35667,639.82449 -10.35297,-5.97867 -10.35298,-5.97867 0,6.18436 -21.24073,0 0,11.53225 21.24073,0 0,6.18436 10.35298,-5.97867 10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -0,0 +1,158 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="146"
height="100"
id="svg13653"
sodipodi:version="0.32"
inkscape:version="0.47 r22583"
sodipodi:docname="router.svg"
version="1.0">
<defs
id="defs13655">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 99.931252 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="199.10001 : 99.931252 : 1"
inkscape:persp3d-origin="99.550003 : 66.620834 : 1"
id="perspective3835" />
<linearGradient
id="linearGradient12828">
<stop
id="stop12830"
offset="0"
style="stop-color:#484849;stop-opacity:1;" />
<stop
style="stop-color:#434344;stop-opacity:1;"
offset="0"
id="stop12862" />
<stop
id="stop12832"
offset="1.0000000"
style="stop-color:#8f8f90;stop-opacity:0.0000000;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient12828"
id="radialGradient13651"
cx="328.57144"
cy="602.7193"
fx="328.57144"
fy="602.7193"
r="147.14285"
gradientTransform="matrix(1,0,0,0.177184,0,495.9268)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient12001">
<stop
style="stop-color:#784a4a;stop-opacity:1;"
offset="0"
id="stop12003" />
<stop
style="stop-color:#d1acac;stop-opacity:1;"
offset="1"
id="stop12005" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient13633"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,118.8781,123.5182)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient3844"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,-45.6934,-239.9103)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8"
inkscape:cx="118.57814"
inkscape:cy="50.488033"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="1006"
inkscape:window-height="766"
inkscape:window-x="602"
inkscape:window-y="231"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata13658">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-33.124945,-44.636248)">
<path
style="fill:url(#linearGradient3844);fill-opacity:1;stroke:none"
d="m 37.14136,72.27878 0,0.29457 c 0.006,-0.0975 0.0206,-0.19729 0.0295,-0.29457 l -0.0295,0 z m 138.62351,0 c 0.0302,0.33044 0.0589,0.66821 0.0589,1.00153 l 0,-1.00153 -0.0589,0 z m 0.0589,1.00153 c -1e-5,15.05224 -31.07495,27.26223 -69.35594,27.26223 -37.68286,1e-5 -68.3765,-11.82771 -69.32649,-26.55527 l 0,40.67979 c -0.0151,0.23376 -0.0147,0.45704 -0.0147,0.69223 0,0.22546 8.7e-4,0.45335 0.0147,0.67751 0.91151,14.74102 31.61889,26.59945 69.32649,26.59945 37.7076,0 68.41498,-11.85843 69.32648,-26.59945 l 0.0295,0 0,-0.50077 c 9.5e-4,-0.0587 0,-0.11794 0,-0.17674 0,-0.0588 9.4e-4,-0.11803 0,-0.17674 l 0,-41.90224 z"
id="path13626" />
<path
sodipodi:type="arc"
style="fill:#a03a3a;fill-opacity:1;stroke:none"
id="path11090"
sodipodi:cx="328.57144"
sodipodi:cy="602.7193"
sodipodi:rx="147.14285"
sodipodi:ry="26.071428"
d="m 475.71429,602.7193 c 0,14.39885 -65.87809,26.07143 -147.14285,26.07143 -81.26475,0 -147.14285,-11.67258 -147.14285,-26.07143 0,-14.39885 65.8781,-26.07143 147.14285,-26.07143 81.26476,0 147.14285,11.67258 147.14285,26.07143 z"
transform="matrix(0.471308,0,0,1.045917,-48.3838,-554.9944)" />
<g
id="g13565"
style="fill:#f2fdff;fill-opacity:0.71171169"
transform="matrix(0.84958,0.276715,-0.703617,0.334119,278.6313,-230.2001)">
<path
id="path13507"
d="m 328.66945,592.8253 -5.97867,10.35298 -5.97867,10.35297 6.18436,0 0,21.24074 11.53226,0 0,-21.24074 6.18435,0 -5.97867,-10.35297 -5.96496,-10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13509"
d="m 328.66945,687.10951 -5.97867,-10.35298 -5.97867,-10.35297 6.18436,0 0,-21.24074 11.53226,0 0,21.24074 6.18435,0 -5.97867,10.35297 -5.96496,10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13511"
d="m 333.74751,639.82449 10.35297,-5.97867 10.35297,-5.97867 0,6.18436 21.24074,0 0,11.53225 -21.24074,0 0,6.18436 -10.35297,-5.97867 -10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13513"
d="m 323.35667,639.82449 -10.35297,-5.97867 -10.35298,-5.97867 0,6.18436 -21.24073,0 0,11.53225 21.24073,0 0,6.18436 10.35298,-5.97867 10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -0,0 +1,158 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="146"
height="100"
id="svg13653"
sodipodi:version="0.32"
inkscape:version="0.47 r22583"
sodipodi:docname="router.svg"
version="1.0">
<defs
id="defs13655">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 99.931252 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="199.10001 : 99.931252 : 1"
inkscape:persp3d-origin="99.550003 : 66.620834 : 1"
id="perspective3835" />
<linearGradient
id="linearGradient12828">
<stop
id="stop12830"
offset="0"
style="stop-color:#484849;stop-opacity:1;" />
<stop
style="stop-color:#434344;stop-opacity:1;"
offset="0"
id="stop12862" />
<stop
id="stop12832"
offset="1.0000000"
style="stop-color:#8f8f90;stop-opacity:0.0000000;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient12828"
id="radialGradient13651"
cx="328.57144"
cy="602.7193"
fx="328.57144"
fy="602.7193"
r="147.14285"
gradientTransform="matrix(1,0,0,0.177184,0,495.9268)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient12001">
<stop
style="stop-color:#784a1b;stop-opacity:1;"
offset="0"
id="stop12003" />
<stop
style="stop-color:#d1ac5d;stop-opacity:1;"
offset="1"
id="stop12005" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient13633"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,118.8781,123.5182)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient3844"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,-45.6934,-239.9103)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2"
inkscape:cx="118.57814"
inkscape:cy="50.488032"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="982"
inkscape:window-height="950"
inkscape:window-x="1626"
inkscape:window-y="76"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata13658">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-33.124945,-44.636248)">
<path
style="fill:url(#linearGradient3844);fill-opacity:1.0;stroke:none"
d="m 37.14136,72.27878 0,0.29457 c 0.006,-0.0975 0.0206,-0.19729 0.0295,-0.29457 l -0.0295,0 z m 138.62351,0 c 0.0302,0.33044 0.0589,0.66821 0.0589,1.00153 l 0,-1.00153 -0.0589,0 z m 0.0589,1.00153 c -1e-5,15.05224 -31.07495,27.26223 -69.35594,27.26223 -37.68286,1e-5 -68.3765,-11.82771 -69.32649,-26.55527 l 0,40.67979 c -0.0151,0.23376 -0.0147,0.45704 -0.0147,0.69223 0,0.22546 8.7e-4,0.45335 0.0147,0.67751 0.91151,14.74102 31.61889,26.59945 69.32649,26.59945 37.7076,0 68.41498,-11.85843 69.32648,-26.59945 l 0.0295,0 0,-0.50077 c 9.5e-4,-0.0587 0,-0.11794 0,-0.17674 0,-0.0588 9.4e-4,-0.11803 0,-0.17674 l 0,-41.90224 z"
id="path13626" />
<path
sodipodi:type="arc"
style="fill:#a0783a;fill-opacity:1;stroke:none"
id="path11090"
sodipodi:cx="328.57144"
sodipodi:cy="602.7193"
sodipodi:rx="147.14285"
sodipodi:ry="26.071428"
d="m 475.71429,602.7193 c 0,14.39885 -65.87809,26.07143 -147.14285,26.07143 -81.26475,0 -147.14285,-11.67258 -147.14285,-26.07143 0,-14.39885 65.8781,-26.07143 147.14285,-26.07143 81.26476,0 147.14285,11.67258 147.14285,26.07143 z"
transform="matrix(0.471308,0,0,1.045917,-48.3838,-554.9944)" />
<g
id="g13565"
style="fill:#f2fdff;fill-opacity:0.71171169"
transform="matrix(0.84958,0.276715,-0.703617,0.334119,278.6313,-230.2001)">
<path
id="path13507"
d="m 328.66945,592.8253 -5.97867,10.35298 -5.97867,10.35297 6.18436,0 0,21.24074 11.53226,0 0,-21.24074 6.18435,0 -5.97867,-10.35297 -5.96496,-10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13509"
d="m 328.66945,687.10951 -5.97867,-10.35298 -5.97867,-10.35297 6.18436,0 0,-21.24074 11.53226,0 0,21.24074 6.18435,0 -5.97867,10.35297 -5.96496,10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13511"
d="m 333.74751,639.82449 10.35297,-5.97867 10.35297,-5.97867 0,6.18436 21.24074,0 0,11.53225 -21.24074,0 0,6.18436 -10.35297,-5.97867 -10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13513"
d="m 323.35667,639.82449 -10.35297,-5.97867 -10.35298,-5.97867 0,6.18436 -21.24073,0 0,11.53225 21.24073,0 0,6.18436 10.35298,-5.97867 10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

215
gui/icons/svg/start.svg Normal file
View file

@ -0,0 +1,215 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
id="svg4908"
sodipodi:version="0.32"
inkscape:version="0.47 r22583"
sodipodi:docname="start.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="start.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45"
version="1.0">
<defs
id="defs4910">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 24 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="48 : 24 : 1"
inkscape:persp3d-origin="24 : 16 : 1"
id="perspective2991" />
<radialGradient
gradientTransform="matrix(1.349881,0,0,1.349881,-3.498814,-1.810859)"
gradientUnits="userSpaceOnUse"
r="9.7183542"
fy="4.9892726"
fx="9.6893959"
cy="4.9892726"
cx="9.6893959"
id="radialGradient5177"
xlink:href="#linearGradient5171"
inkscape:collect="always" />
<radialGradient
gradientTransform="matrix(2.417917,0,0,2.417917,-14.17917,-4.903184)"
gradientUnits="userSpaceOnUse"
r="9.7785711"
fy="3.458019"
fx="10"
cy="3.458019"
cx="10"
id="radialGradient5157"
xlink:href="#linearGradient5151"
inkscape:collect="always" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.928125,0,0,0.3143011,0.7718789,12.358015)"
r="9.0598059"
fy="18.022524"
fx="10.739184"
cy="18.022524"
cx="10.739184"
id="radialGradient5145"
xlink:href="#linearGradient5139"
inkscape:collect="always" />
<linearGradient
id="linearGradient5139"
inkscape:collect="always">
<stop
id="stop5141"
offset="0"
style="stop-color:black;stop-opacity:1;" />
<stop
id="stop5143"
offset="1"
style="stop-color:black;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient5151"
inkscape:collect="always">
<stop
id="stop5153"
offset="0"
style="stop-color:white;stop-opacity:1;" />
<stop
id="stop5155"
offset="1"
style="stop-color:white;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient5171">
<stop
id="stop5173"
offset="0"
style="stop-color:#00fe1b;stop-opacity:1;" />
<stop
id="stop5175"
offset="1"
style="stop-color:#00cc0b;stop-opacity:1;" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="2.8284271"
inkscape:cx="35.649059"
inkscape:cy="26.052211"
inkscape:current-layer="g7001"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1098"
inkscape:window-height="952"
inkscape:window-x="1664"
inkscape:window-y="58"
width="48px"
height="48px"
inkscape:window-maximized="0">
<inkscape:grid
type="xygrid"
id="grid2993"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="0.5px"
spacingy="0.5px" />
</sodipodi:namedview>
<metadata
id="metadata4913">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:date>December 2006</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:contributor>
<cc:Agent>
<dc:title>Andreas Nilsson</dc:title>
</cc:Agent>
</dc:contributor>
<cc:license
rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
<dc:subject>
<rdf:Bag>
<rdf:li>stop</rdf:li>
<rdf:li>halt</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
<cc:requires
rdf:resource="http://web.resource.org/cc/SourceCode" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
inkscape:label="Layer 1"
id="g7001"
transform="matrix(1.4566048,0,0,1.4455352,0.4112881,1.2324709)">
<path
transform="matrix(1.4472753,0,0,1.4583582,1.7215589,1.7135444)"
d="m 19.25,9.625 c 0,5.108634 -4.141366,9.25 -9.25,9.25 -5.1086339,0 -9.25,-4.141366 -9.25,-9.25 0,-5.1086339 4.1413661,-9.25 9.25,-9.25 5.108634,0 9.25,4.1413661 9.25,9.25 z"
sodipodi:ry="9.25"
sodipodi:rx="9.25"
sodipodi:cy="9.625"
sodipodi:cx="10"
id="path4262"
style="opacity:1;color:#000000;fill:url(#radialGradient5177);fill-opacity:1.0;fill-rule:nonzero;stroke:#00a403;stroke-width:0.47435912000000002;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<path
sodipodi:type="arc"
style="opacity:0.35393258;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#radialGradient5157);stroke-width:0.49999994;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="path5149"
sodipodi:cx="10"
sodipodi:cy="9.625"
sodipodi:rx="9.25"
sodipodi:ry="9.25"
d="m 19.25,9.625 c 0,5.108634 -4.141366,9.25 -9.25,9.25 -5.1086339,0 -9.25,-4.141366 -9.25,-9.25 0,-5.1086339 4.1413661,-9.25 9.25,-9.25 5.108634,0 9.25,4.1413661 9.25,9.25 z"
transform="matrix(1.373056,0,0,1.3835706,2.4637512,2.4333749)" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2.06745481;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 14.821255,9.8700669 0,12.1062431 5.148961,-5.18839 0,-1.729463 -5.148961,-5.1883901 z"
id="path2995" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.5 KiB

192
gui/icons/svg/tunnel.svg Normal file
View file

@ -0,0 +1,192 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="225"
height="225"
id="0"
inkscape:version="0.47 r22583"
sodipodi:docname="tunnel.svg">
<metadata
id="metadata29">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs27">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 145.94881 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="232.44093 : 145.94881 : 1"
inkscape:persp3d-origin="116.22047 : 97.299205 : 1"
id="perspective31" />
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1247"
inkscape:window-height="895"
id="namedview25"
showgrid="false"
inkscape:zoom="2.8284271"
inkscape:cx="109.61715"
inkscape:cy="113.86304"
inkscape:window-x="1689"
inkscape:window-y="93"
inkscape:window-maximized="0"
inkscape:current-layer="0">
<sodipodi:guide
position="-3.9411977,-4.0666235"
orientation="0,232.44093"
id="guide3747" />
<sodipodi:guide
position="228.49973,-4.0666235"
orientation="-291.89761,0"
id="guide3749" />
<sodipodi:guide
position="228.49973,287.83099"
orientation="0,-232.44093"
id="guide3751" />
<sodipodi:guide
position="-3.9411977,287.83099"
orientation="291.89761,0"
id="guide3753" />
<sodipodi:guide
position="-3.9411977,-4.0666235"
orientation="0,232.44093"
id="guide3755" />
<sodipodi:guide
position="228.49973,-4.0666235"
orientation="-291.89761,0"
id="guide3757" />
<sodipodi:guide
position="228.49973,287.83099"
orientation="0,-232.44093"
id="guide3759" />
<sodipodi:guide
position="-3.9411977,287.83099"
orientation="291.89761,0"
id="guide3761" />
</sodipodi:namedview>
<path
d="m 224.57543,13.774353 -180.682287,0 -43.830643,69.375626 180.64259,0 43.87034,-69.375626 z"
style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.02777889px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="2" />
<path
d="m 209.63653,17.624272 -155.414218,0 -17.024962,24.688427 155.36953,0 17.06965,-24.688427"
style="fill:#cccccc;stroke:#000000;stroke-width:0.02991066000000000px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="3" />
<path
d="m 1.2197453,82.720789 179.9184147,0 0,142.216711 -179.9184147,0 0,-142.216711 z"
style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="5" />
<path
d="m 59.339903,213.38388 63.836897,0 0,-11.67273 11.59227,0 0,-14.61076 34.85621,0 0,-92.905391 -156.733864,0 0,92.905391 34.856215,0 0,14.61076 11.592272,0 0,11.67273 z"
style="fill:#616161;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="6" />
<path
d="m 169.34739,123.33712 -14.84764,0 -4.84335,14.72987 -6.78862,-0.0397 -3.73176,11.59333 -60.065435,0 0,-11.59333 -11.631971,0 0,-14.69016 -34.816516,0 0,-28.824501 136.725292,0 0,28.824501 z"
style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="7" />
<path
d="m 137.66714,94.194999 5.20064,11.712431 8.6545,0 -5.20064,-11.712431 -8.6545,0 z"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="8" />
<path
d="m 123.1768,94.234699 5.16094,11.672731 8.6942,0 -5.20064,-11.672731 -8.6545,0 z"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="9" />
<path
d="m 108.68646,94.234699 5.16094,11.672731 8.6148,0 -5.20064,-11.672731 -8.5751,0 z"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="10" />
<path
d="m 94.156419,94.234699 5.160943,11.672731 8.733898,0 -5.16094,-11.672731 -8.733901,0 z"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="11" />
<path
d="m 79.626379,94.234699 5.160943,11.672731 8.694204,0 -5.200642,-11.672731 -8.654505,0 z"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="12" />
<path
d="m 65.136039,94.234699 5.121244,11.672731 8.733903,0 -5.200642,-11.672731 -8.654505,0 z"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="13" />
<path
d="m 50.526601,94.234699 5.160943,11.672731 8.694204,0 -5.200643,-11.672731 -8.654504,0 z"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="14" />
<path
d="m 36.07596,94.234699 5.200643,11.672731 8.733903,0 -5.160943,-11.672731 -8.773603,0 z"
style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="15" />
<path
d="m 181.28772,83.147026 41.93942,-68.956727 1.31188,113.094881 -43.2513,96.95337 0,-141.091524 z"
style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.03138413px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="16"
sodipodi:nodetypes="ccccc" />
<path
d="M 47.469734,187.49742 67.597412,122.78127"
style="fill:none;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="17" />
<path
d="M 59.459002,201.79055 79.626379,137.11411"
style="fill:none;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="18" />
<path
d="m 123.1371,201.86996 20.12767,-64.67644"
style="fill:none;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="19" />
<path
d="m 134.76907,187.14009 20.16738,-64.71615"
style="fill:none;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="20" />
<path
d="M 12.851717,187.17979 33.019094,122.46365"
style="fill:none;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="21" />
<path
d="M 47.588833,201.83026 67.716511,137.15381"
style="fill:none;stroke:#ffffff;stroke-width:0.03969956px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
id="22" />
<path
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 92,13.5 62.5,61 85,60.5 113.32843,13.146447 92,13.5 z"
id="path2942"
sodipodi:nodetypes="ccccc" />
<path
style="fill:#0000ff;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 102.57107,52.489593 53.403806,54.073724 66.298062,70.707107 102.57107,52.489593 z"
id="path3724"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="ccccc"
id="path3752"
d="m 130.53732,23.045942 -29.5,47.5 22.5,-0.5 28.32843,-47.353553 -21.32843,0.353553 z"
style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cccc"
id="path3760"
d="m 112.80077,31.109125 49.16727,-1.58413 -12.89426,-16.63338 -36.27301,18.21751 z"
style="fill:#0000ff;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</svg>

After

Width:  |  Height:  |  Size: 9.4 KiB

180
gui/icons/svg/vlan.svg Normal file
View file

@ -0,0 +1,180 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="146"
height="100"
id="svg13653"
sodipodi:version="0.32"
inkscape:version="0.48.0 r9654"
sodipodi:docname="vlan.svg"
version="1.0"
inkscape:export-filename="vlan-tiny.png"
inkscape:export-xdpi="20.939951"
inkscape:export-ydpi="20.939951">
<defs
id="defs13655">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 99.931252 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="199.10001 : 99.931252 : 1"
inkscape:persp3d-origin="99.550003 : 66.620834 : 1"
id="perspective3835" />
<linearGradient
id="linearGradient12828">
<stop
id="stop12830"
offset="0"
style="stop-color:#484849;stop-opacity:1;" />
<stop
style="stop-color:#434344;stop-opacity:1;"
offset="0"
id="stop12862" />
<stop
id="stop12832"
offset="1.0000000"
style="stop-color:#8f8f90;stop-opacity:0.0000000;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient12828"
id="radialGradient13651"
cx="328.57144"
cy="602.7193"
fx="328.57144"
fy="602.7193"
r="147.14285"
gradientTransform="matrix(1,0,0,0.177184,0,495.9268)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient12001">
<stop
style="stop-color:#1b4a78;stop-opacity:1;"
offset="0"
id="stop12003" />
<stop
style="stop-color:#5dacd1;stop-opacity:1;"
offset="1"
id="stop12005" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient13633"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,118.8781,123.5182)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient3844"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,-45.6934,-239.9103)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="120.76522"
inkscape:cy="18.9567"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="1280"
inkscape:window-height="949"
inkscape:window-x="1631"
inkscape:window-y="29"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata13658">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-33.124945,-44.636248)">
<path
style="fill:url(#linearGradient3844);fill-opacity:1;stroke:none"
d="m 37.14136,72.27878 0,0.29457 c 0.006,-0.0975 0.0206,-0.19729 0.0295,-0.29457 l -0.0295,0 z m 138.62351,0 c 0.0302,0.33044 0.0589,0.66821 0.0589,1.00153 l 0,-1.00153 -0.0589,0 z m 0.0589,1.00153 c -1e-5,15.05224 -31.07495,27.26223 -69.35594,27.26223 -37.68286,1e-5 -68.3765,-11.82771 -69.32649,-26.55527 l 0,40.67979 c -0.0151,0.23376 -0.0147,0.45704 -0.0147,0.69223 0,0.22546 8.7e-4,0.45335 0.0147,0.67751 0.91151,14.74102 31.61889,26.59945 69.32649,26.59945 37.7076,0 68.41498,-11.85843 69.32648,-26.59945 l 0.0295,0 0,-0.50077 c 9.5e-4,-0.0587 0,-0.11794 0,-0.17674 0,-0.0588 9.4e-4,-0.11803 0,-0.17674 l 0,-41.90224 z"
id="path13626" />
<path
sodipodi:type="arc"
style="fill:#3a78a0;fill-opacity:1;stroke:none"
id="path11090"
sodipodi:cx="328.57144"
sodipodi:cy="602.7193"
sodipodi:rx="147.14285"
sodipodi:ry="26.071428"
d="m 475.71429,602.7193 c 0,14.39885 -65.87809,26.07143 -147.14285,26.07143 -81.26475,0 -147.14285,-11.67258 -147.14285,-26.07143 0,-14.39885 65.8781,-26.07143 147.14285,-26.07143 81.26476,0 147.14285,11.67258 147.14285,26.07143 z"
transform="matrix(0.471308,0,0,1.045917,-48.3838,-554.9944)" />
<g
id="g13565"
style="fill:#f2fdff;fill-opacity:0.71171169"
transform="matrix(0.84958,0.276715,-0.703617,0.334119,278.6313,-230.2001)">
<path
id="path13507"
d="m 328.66945,592.8253 -5.97867,10.35298 -5.97867,10.35297 6.18436,0 0,21.24074 11.53226,0 0,-21.24074 6.18435,0 -5.97867,-10.35297 -5.96496,-10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13509"
d="m 328.66945,687.10951 -5.97867,-10.35298 -5.97867,-10.35297 6.18436,0 0,-21.24074 11.53226,0 0,21.24074 6.18435,0 -5.97867,10.35297 -5.96496,10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13511"
d="m 333.74751,639.82449 10.35297,-5.97867 10.35297,-5.97867 0,6.18436 21.24074,0 0,11.53225 -21.24074,0 0,6.18436 -10.35297,-5.97867 -10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13513"
d="m 323.35667,639.82449 -10.35297,-5.97867 -10.35298,-5.97867 0,6.18436 -21.24073,0 0,11.53225 21.24073,0 0,6.18436 10.35298,-5.97867 10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
</g>
<rect
style="fill:#f2fdff;fill-opacity:0.70980392;stroke:#000000;stroke-width:1.0548979;stroke-opacity:1"
id="rect6161"
width="102.29377"
height="37.476658"
x="75.434517"
y="104.68472"
rx="6.0701799"
ry="5.454824" />
<text
xml:space="preserve"
style="font-size:32px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:Bitstream Charter Bold"
x="79.107697"
y="135.0903"
id="text6673"><tspan
sodipodi:role="line"
id="tspan6675"
x="79.107697"
y="135.0903">VLAN</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.9 KiB

181
gui/icons/svg/xen.svg Normal file
View file

@ -0,0 +1,181 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="146"
height="100"
id="svg13653"
sodipodi:version="0.32"
inkscape:version="0.48.0 r9654"
sodipodi:docname="xen.svg"
version="1.0"
inkscape:export-filename="xen.png"
inkscape:export-xdpi="30.464558"
inkscape:export-ydpi="30.464558">
<defs
id="defs13655">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 99.931252 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="199.10001 : 99.931252 : 1"
inkscape:persp3d-origin="99.550003 : 66.620834 : 1"
id="perspective3835" />
<linearGradient
id="linearGradient12828">
<stop
id="stop12830"
offset="0"
style="stop-color:#484849;stop-opacity:1;" />
<stop
style="stop-color:#434344;stop-opacity:1;"
offset="0"
id="stop12862" />
<stop
id="stop12832"
offset="1.0000000"
style="stop-color:#8f8f90;stop-opacity:0.0000000;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient12828"
id="radialGradient13651"
cx="328.57144"
cy="602.7193"
fx="328.57144"
fy="602.7193"
r="147.14285"
gradientTransform="matrix(1,0,0,0.177184,0,495.9268)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient12001">
<stop
style="stop-color:#1b4a78;stop-opacity:1;"
offset="0"
id="stop12003" />
<stop
style="stop-color:#5dacd1;stop-opacity:1;"
offset="1"
id="stop12005" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient13633"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,118.8781,123.5182)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12001"
id="linearGradient3844"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.471308,0,0,0.471308,-45.6934,-239.9103)"
x1="175.71875"
y1="737.01562"
x2="470.00089"
y2="737.01562" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="118.57814"
inkscape:cy="50.488033"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="1280"
inkscape:window-height="949"
inkscape:window-x="1631"
inkscape:window-y="29"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata13658">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-33.124945,-44.636248)">
<path
style="fill:url(#linearGradient3844);fill-opacity:1;stroke:none"
d="m 37.14136,72.27878 0,0.29457 c 0.006,-0.0975 0.0206,-0.19729 0.0295,-0.29457 l -0.0295,0 z m 138.62351,0 c 0.0302,0.33044 0.0589,0.66821 0.0589,1.00153 l 0,-1.00153 -0.0589,0 z m 0.0589,1.00153 c -1e-5,15.05224 -31.07495,27.26223 -69.35594,27.26223 -37.68286,1e-5 -68.3765,-11.82771 -69.32649,-26.55527 l 0,40.67979 c -0.0151,0.23376 -0.0147,0.45704 -0.0147,0.69223 0,0.22546 8.7e-4,0.45335 0.0147,0.67751 0.91151,14.74102 31.61889,26.59945 69.32649,26.59945 37.7076,0 68.41498,-11.85843 69.32648,-26.59945 l 0.0295,0 0,-0.50077 c 9.5e-4,-0.0587 0,-0.11794 0,-0.17674 0,-0.0588 9.4e-4,-0.11803 0,-0.17674 l 0,-41.90224 z"
id="path13626" />
<path
sodipodi:type="arc"
style="fill:#3a78a0;fill-opacity:1;stroke:none"
id="path11090"
sodipodi:cx="328.57144"
sodipodi:cy="602.7193"
sodipodi:rx="147.14285"
sodipodi:ry="26.071428"
d="m 475.71429,602.7193 c 0,14.39885 -65.87809,26.07143 -147.14285,26.07143 -81.26475,0 -147.14285,-11.67258 -147.14285,-26.07143 0,-14.39885 65.8781,-26.07143 147.14285,-26.07143 81.26476,0 147.14285,11.67258 147.14285,26.07143 z"
transform="matrix(0.471308,0,0,1.045917,-48.3838,-554.9944)" />
<g
id="g13565"
style="fill:#f2fdff;fill-opacity:0.71171169"
transform="matrix(0.84958,0.276715,-0.703617,0.334119,278.6313,-230.2001)">
<path
id="path13507"
d="m 328.66945,592.8253 -5.97867,10.35298 -5.97867,10.35297 6.18436,0 0,21.24074 11.53226,0 0,-21.24074 6.18435,0 -5.97867,-10.35297 -5.96496,-10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13509"
d="m 328.66945,687.10951 -5.97867,-10.35298 -5.97867,-10.35297 6.18436,0 0,-21.24074 11.53226,0 0,21.24074 6.18435,0 -5.97867,10.35297 -5.96496,10.35298 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13511"
d="m 333.74751,639.82449 10.35297,-5.97867 10.35297,-5.97867 0,6.18436 21.24074,0 0,11.53225 -21.24074,0 0,6.18436 -10.35297,-5.97867 -10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
<path
id="path13513"
d="m 323.35667,639.82449 -10.35297,-5.97867 -10.35298,-5.97867 0,6.18436 -21.24073,0 0,11.53225 21.24073,0 0,6.18436 10.35298,-5.97867 10.35297,-5.96496 z"
style="fill:#f2fdff;fill-opacity:0.71171169;stroke:none" />
</g>
<rect
style="fill:#f2fdff;fill-opacity:0.70980394;stroke:#000000;stroke-opacity:1"
id="rect6161"
width="91.923882"
height="37.476658"
x="52.679455"
y="60.048466"
transform="translate(33.124945,44.636248)"
rx="5.454824"
ry="5.454824" />
<text
xml:space="preserve"
style="font-size:32px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:Bitstream Charter Bold"
x="91.107697"
y="135.0903"
id="text6673"><tspan
sodipodi:role="line"
id="tspan6675"
x="91.107697"
y="135.0903">Xen</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.9 KiB

BIN
gui/icons/tiny/ap.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 667 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

BIN
gui/icons/tiny/arrow.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 B

BIN
gui/icons/tiny/arrow.up.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 B

BIN
gui/icons/tiny/blank.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 915 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 922 B

BIN
gui/icons/tiny/cel.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 666 B

BIN
gui/icons/tiny/delete.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,006 B

BIN
gui/icons/tiny/eraser.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

BIN
gui/icons/tiny/fileopen.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
gui/icons/tiny/folder.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
gui/icons/tiny/host.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
gui/icons/tiny/hub.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 719 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 744 B

BIN
gui/icons/tiny/link.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

BIN
gui/icons/tiny/marker.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 B

BIN
gui/icons/tiny/mdr.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
gui/icons/tiny/mobility.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 B

Some files were not shown because too many files have changed in this diff Show more