install: removed tcl based gui, updated configure.ac, Makefile.am, and tasks.py to account for removal

This commit is contained in:
Blake Harnden 2022-03-08 12:00:42 -08:00
parent f324cfbc4a
commit dc7bb37252
152 changed files with 4 additions and 43031 deletions

View file

@ -6,10 +6,6 @@ if WANT_DOCS
DOCS = docs man DOCS = docs man
endif endif
if WANT_GUI
GUI = gui
endif
if WANT_DAEMON if WANT_DAEMON
DAEMON = daemon DAEMON = daemon
endif endif
@ -19,7 +15,7 @@ if WANT_NETNS
endif endif
# keep docs last due to dependencies on binaries # keep docs last due to dependencies on binaries
SUBDIRS = $(GUI) $(DAEMON) $(NETNS) $(DOCS) SUBDIRS = $(DAEMON) $(NETNS) $(DOCS)
ACLOCAL_AMFLAGS = -I config ACLOCAL_AMFLAGS = -I config
@ -115,7 +111,6 @@ $(info creating file $1 from $1.in)
-e 's,[@]CORE_STATE_DIR[@],$(CORE_STATE_DIR),g' \ -e 's,[@]CORE_STATE_DIR[@],$(CORE_STATE_DIR),g' \
-e 's,[@]CORE_DATA_DIR[@],$(CORE_DATA_DIR),g' \ -e 's,[@]CORE_DATA_DIR[@],$(CORE_DATA_DIR),g' \
-e 's,[@]CORE_CONF_DIR[@],$(CORE_CONF_DIR),g' \ -e 's,[@]CORE_CONF_DIR[@],$(CORE_CONF_DIR),g' \
-e 's,[@]CORE_GUI_CONF_DIR[@],$(CORE_GUI_CONF_DIR),g' \
< $1.in > $1 < $1.in > $1
endef endef
@ -123,7 +118,6 @@ all: change-files
.PHONY: change-files .PHONY: change-files
change-files: change-files:
$(call change-files,gui/core-gui-legacy)
$(call change-files,daemon/core/constants.py) $(call change-files,daemon/core/constants.py)
$(call change-files,netns/setup.py) $(call change-files,netns/setup.py)

View file

@ -30,25 +30,14 @@ AC_SUBST(CORE_CONF_DIR)
AC_SUBST(CORE_DATA_DIR) AC_SUBST(CORE_DATA_DIR)
AC_SUBST(CORE_STATE_DIR) AC_SUBST(CORE_STATE_DIR)
# CORE GUI configuration files and preferences in CORE_GUI_CONF_DIR # documentation option
# scenario files in ~/.core/configs/
AC_ARG_WITH([guiconfdir],
[AS_HELP_STRING([--with-guiconfdir=dir],
[specify GUI configuration directory])],
[CORE_GUI_CONF_DIR="$with_guiconfdir"],
[CORE_GUI_CONF_DIR="\$\${HOME}/.core"])
AC_SUBST(CORE_GUI_CONF_DIR)
AC_ARG_ENABLE([gui],
[AS_HELP_STRING([--enable-gui[=ARG]],
[build and install the GUI (default is yes)])],
[], [enable_gui=yes])
AC_SUBST(enable_gui)
AC_ARG_ENABLE([docs], AC_ARG_ENABLE([docs],
[AS_HELP_STRING([--enable-docs[=ARG]], [AS_HELP_STRING([--enable-docs[=ARG]],
[build python documentation (default is no)])], [build python documentation (default is no)])],
[], [enable_docs=no]) [], [enable_docs=no])
AC_SUBST(enable_docs) AC_SUBST(enable_docs)
# python option
AC_ARG_ENABLE([python], AC_ARG_ENABLE([python],
[AS_HELP_STRING([--enable-python[=ARG]], [AS_HELP_STRING([--enable-python[=ARG]],
[build and install the python bindings (default is yes)])], [build and install the python bindings (default is yes)])],
@ -209,7 +198,6 @@ if [test "x$want_python" = "xyes" && test "x$enable_docs" = "xyes"] ; then
fi fi
# Variable substitutions # Variable substitutions
AM_CONDITIONAL(WANT_GUI, test x$enable_gui = xyes)
AM_CONDITIONAL(WANT_DAEMON, test x$enable_daemon = xyes) AM_CONDITIONAL(WANT_DAEMON, test x$enable_daemon = xyes)
AM_CONDITIONAL(WANT_DOCS, test x$want_docs = xyes) AM_CONDITIONAL(WANT_DOCS, test x$want_docs = xyes)
AM_CONDITIONAL(WANT_PYTHON, test x$want_python = xyes) AM_CONDITIONAL(WANT_PYTHON, test x$want_python = xyes)
@ -224,9 +212,6 @@ fi
# Output files # Output files
AC_CONFIG_FILES([Makefile AC_CONFIG_FILES([Makefile
gui/version.tcl
gui/Makefile
gui/icons/Makefile
man/Makefile man/Makefile
docs/Makefile docs/Makefile
daemon/Makefile daemon/Makefile
@ -248,17 +233,12 @@ Build:
Prefix: ${prefix} Prefix: ${prefix}
Exec Prefix: ${exec_prefix} Exec Prefix: ${exec_prefix}
GUI:
GUI path: ${CORE_LIB_DIR}
GUI config: ${CORE_GUI_CONF_DIR}
Daemon: Daemon:
Daemon path: ${bindir} Daemon path: ${bindir}
Daemon config: ${CORE_CONF_DIR} Daemon config: ${CORE_CONF_DIR}
Python: ${PYTHON} Python: ${PYTHON}
Features to build: Features to build:
Build GUI: ${enable_gui}
Build Daemon: ${enable_daemon} Build Daemon: ${enable_daemon}
Documentation: ${want_docs} Documentation: ${want_docs}

2
gui/.gitignore vendored
View file

@ -1,2 +0,0 @@
core-gui-legacy
version.tcl

View file

@ -1,41 +0,0 @@
# 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 := $(wildcard *.tcl)
ADDONS_FILES := $(wildcard addons/*)
CONFIG_FILES := $(wildcard configs/*)
# CORE GUI script (/usr/local/bin/core-gui-legacy)
dist_bin_SCRIPTS = core-gui-legacy
# 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)
# remove generated file from dist
dist-hook:
-rm -f $(distdir)/version.tcl
# extra cruft to remove
DISTCLEANFILES = Makefile.in
# files to include in source tarball not included elsewhere
EXTRA_DIST = core-gui-legacy.in

View file

@ -1,329 +0,0 @@
#
# 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='"
}
}
}
}
}

View file

@ -1,837 +0,0 @@
#
# 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"
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,406 +0,0 @@
#
# 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
}
}

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 312 KiB

View file

@ -1,462 +0,0 @@
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 IPForward}
}
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 {
}

View file

@ -1,28 +0,0 @@
#
# 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

@ -1,848 +0,0 @@
comments {
Kitchen Sink
============
Contains every type of node available in CORE, except for 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 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 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
}

View file

@ -1,291 +0,0 @@
node n1 {
type router
model host
network-config {
hostname ryu1
!
interface eth1
ip address 10.0.5.10/24
ipv6 address 2001:5::10/64
!
interface eth0
ip address 10.0.4.10/24
ipv6 address 2001:4::10/64
!
}
canvas c1
iconcoords {203.0 65.0}
labelcoords {203.0 97.0}
interface-peer {eth0 n2}
interface-peer {eth1 n3}
}
node n2 {
type router
model OVS
network-config {
hostname ovs1
!
interface eth2
ip address 10.0.4.1/24
ipv6 address 2001:4::1/64
!
interface eth1
ip address 10.0.1.1/24
ipv6 address 2001:1::1/64
!
interface eth0
ip address 10.0.0.1/24
ipv6 address 2001:0::1/64
!
}
canvas c1
iconcoords {124.0 213.0}
labelcoords {124.0 245.0}
interface-peer {eth0 n6}
interface-peer {eth1 n4}
interface-peer {eth2 n1}
}
node n3 {
type router
model OVS
network-config {
hostname ovs2
!
interface eth2
ip address 10.0.5.1/24
ipv6 address 2001:5::1/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 {299.0 220.0}
labelcoords {299.0 252.0}
interface-peer {eth0 n7}
interface-peer {eth1 n5}
interface-peer {eth2 n1}
}
node n4 {
type router
model host
network-config {
hostname n4
!
interface eth0
ip address 10.0.1.10/24
ipv6 address 2001:1::10/64
!
}
canvas c1
iconcoords {39.0 313.0}
labelcoords {39.0 345.0}
interface-peer {eth0 n2}
}
node n5 {
type router
model host
network-config {
hostname n5
!
interface eth0
ip address 10.0.3.10/24
ipv6 address 2001:3::10/64
!
}
canvas c1
iconcoords {286.0 327.0}
labelcoords {286.0 359.0}
interface-peer {eth0 n3}
}
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 {131.0 322.0}
labelcoords {131.0 354.0}
interface-peer {eth0 n2}
}
node n7 {
type router
model host
network-config {
hostname n7
!
interface eth0
ip address 10.0.2.10/24
ipv6 address 2001:2::10/64
!
}
canvas c1
iconcoords {373.0 328.0}
labelcoords {373.0 360.0}
interface-peer {eth0 n3}
}
node n8 {
type router
model mdr
network-config {
hostname n8
!
interface eth0
ip address 10.0.6.1/32
ipv6 address 2001:6::1/128
!
}
canvas c1
iconcoords {579.0 102.0}
labelcoords {579.0 134.0}
interface-peer {eth0 n11}
}
node n9 {
type router
model mdr
network-config {
hostname n9
!
interface eth0
ip address 10.0.6.2/32
ipv6 address 2001:6::2/128
!
}
canvas c1
iconcoords {493.0 212.0}
labelcoords {493.0 244.0}
interface-peer {eth0 n11}
}
node n10 {
type router
model mdr
network-config {
hostname n10
!
interface eth0
ip address 10.0.6.3/32
ipv6 address 2001:6::3/128
!
}
canvas c1
iconcoords {674.0 225.0}
labelcoords {674.0 257.0}
interface-peer {eth0 n11}
}
node n11 {
type wlan
network-config {
hostname mobile-sdn
!
interface wireless
ip address 10.0.6.0/32
ipv6 address 2001:6::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 {683.0 127.0}
labelcoords {683.0 159.0}
interface-peer {e0 n8}
interface-peer {e1 n9}
interface-peer {e2 n10}
}
link l1 {
nodes {n2 n6}
bandwidth 0
}
link l2 {
nodes {n2 n4}
bandwidth 0
}
link l3 {
nodes {n3 n7}
bandwidth 0
}
link l4 {
nodes {n3 n5}
bandwidth 0
}
link l5 {
nodes {n1 n2}
bandwidth 0
}
link l6 {
nodes {n1 n3}
bandwidth 0
}
link l7 {
nodes {n11 n8}
}
link l8 {
nodes {n11 n9}
}
link l9 {
nodes {n11 n10}
}
canvas c1 {
name {Canvas1}
}
option global {
interface_names no
ip_addresses yes
ipv6_addresses no
node_labels yes
link_labels yes
show_api no
background_images no
annotations yes
grid yes
traffic_start 0
mac_address_start 80
}
option session {
}

View file

@ -1,248 +0,0 @@
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
}

View file

@ -1,657 +0,0 @@
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 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
!
}
}
}
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 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
!
}
}
}
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 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
!
}
}
}
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 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
!
}
}
}
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 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
!
}
}
}
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 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
!
}
}
}
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 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
!
}
}
}
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 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
!
}
}
}
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
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 KiB

View file

@ -1,546 +0,0 @@
comments {
Joe Macker NRL
Last updated: Sept 2010,2015(to fix mobility script)
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 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 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 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 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 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 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 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 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 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 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
!
mobmodel
coreapi
basic_range
ns2script
!
}
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 ns2script
custom-command {10 3 11 10 10}
config {
file=sample4.scen
refresh_ms=50
loop=1
autostart=5
map=
}
}
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 {
}

File diff suppressed because it is too large Load diff

View file

@ -1,127 +0,0 @@
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 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
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 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

@ -1,271 +0,0 @@
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

@ -1,274 +0,0 @@
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

@ -1,920 +0,0 @@
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: 16615976057451940887 (0xe697ce3064d18c17)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, ST=WA, O=CORE CA/emailAddress=root@localhost
Validity
Not Before: Sep 9 17:18:04 2013 GMT
Not After : Sep 7 17:18:04 2023 GMT
Subject: C=US, ST=WA, O=CORE CA/emailAddress=root@localhost
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (1024 bit)
Modulus:
00:d3:0d:ab:91:72:50:ca:10:43:8d:18:d8:92:05:
9d:d9:aa:16:2b:d1:25:f8:be:52:48:e4:e7:7a:83:
9b:b4:3b:26:12:fa:46:23:df:09:cb:34:ba:6f:f6:
5e:38:9c:d4:90:ea:44:ad:65:f6:bd:85:6f:ac:9f:
4c:83:d4:10:ab:0a:0e:cd:ba:99:1a:ae:f7:b7:e2:
c3:00:0b:c1:02:69:16:c7:55:e3:cf:4c:c3:72:77:
10:be:da:66:ce:91:b2:cc:92:e1:a8:f0:74:fe:b9:
03:38:fc:49:97:73:bb:40:55:1b:7d:3e:41:63:02:
b5:ad:f4:33:95:76:fd:7b:61
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
9A:EF:A7:36:28:06:4A:0A:2F:F9:2E:99:BE:6F:06:E1:83:9C:A2:0E
X509v3 Authority Key Identifier:
keyid:9A:EF:A7:36:28:06:4A:0A:2F:F9:2E:99:BE:6F:06:E1:83:9C:A2:0E
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha1WithRSAEncryption
2d:88:84:20:19:9b:97:90:2d:18:86:7d:db:6c:d0:5e:ae:c2:
55:61:af:ca:86:5b:3b:e8:15:c5:31:de:ea:d3:7e:9e:39:61:
2e:b4:a0:93:43:bf:a2:95:f8:b6:13:b3:2f:cb:f8:fb:72:8c:
40:95:50:db:03:cc:f7:b8:a5:d8:fb:77:88:c4:f5:f9:65:85:
29:c8:0c:e9:ce:c9:fa:1d:4e:b2:3f:92:dc:b5:2e:73:50:c3:
c8:3e:90:9e:9a:34:ef:fd:ed:de:74:0b:19:73:6a:95:de:90:
3b:ee:db:b0:be:14:fd:bf:3e:c6:7b:cd:7d:3c:ba:45:3c:f1:
46:d7
-----BEGIN CERTIFICATE-----
MIICZDCCAc2gAwIBAgIJAOaXzjBk0YwXMA0GCSqGSIb3DQEBBQUAMEsxCzAJBgNV
BAYTAlVTMQswCQYDVQQIDAJXQTEQMA4GA1UECgwHQ09SRSBDQTEdMBsGCSqGSIb3
DQEJARYOcm9vdEBsb2NhbGhvc3QwHhcNMTMwOTA5MTcxODA0WhcNMjMwOTA3MTcx
ODA0WjBLMQswCQYDVQQGEwJVUzELMAkGA1UECAwCV0ExEDAOBgNVBAoMB0NPUkUg
Q0ExHTAbBgkqhkiG9w0BCQEWDnJvb3RAbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEB
AQUAA4GNADCBiQKBgQDTDauRclDKEEONGNiSBZ3ZqhYr0SX4vlJI5Od6g5u0OyYS
+kYj3wnLNLpv9l44nNSQ6kStZfa9hW+sn0yD1BCrCg7Nupkarve34sMAC8ECaRbH
VePPTMNydxC+2mbOkbLMkuGo8HT+uQM4/EmXc7tAVRt9PkFjArWt9DOVdv17YQID
AQABo1AwTjAdBgNVHQ4EFgQUmu+nNigGSgov+S6Zvm8G4YOcog4wHwYDVR0jBBgw
FoAUmu+nNigGSgov+S6Zvm8G4YOcog4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0B
AQUFAAOBgQAtiIQgGZuXkC0Yhn3bbNBersJVYa/Khls76BXFMd7q036eOWEutKCT
Q7+ilfi2E7Mvy/j7coxAlVDbA8z3uKXY+3eIxPX5ZYUpyAzpzsn6HU6yP5LctS5z
UMPIPpCemjTv/e3edAsZc2qV3pA77tuwvhT9vz7Ge819PLpFPPFG1w==
-----END CERTIFICATE-----
}
}
custom-config {
custom-config-id service:IPsec:test1.pem
custom-command test1.pem
config {
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 16098433458223693585 (0xdf691fefe5afbf11)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, ST=WA, O=CORE CA/emailAddress=root@localhost
Validity
Not Before: Sep 9 17:44:47 2013 GMT
Not After : Sep 7 17:44:47 2023 GMT
Subject: C=US, ST=WA, O=core-dev, CN=test1
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (1024 bit)
Modulus:
00:b3:26:ed:b6:eb:26:ea:c0:5a:d1:09:6f:d4:5f:
8d:11:cc:3c:ff:d7:5e:37:e6:55:71:5c:eb:c9:e8:
f8:8e:a3:85:99:2c:3e:a2:8e:b2:1c:2f:fe:99:c6:
0d:d3:ce:c0:ed:c1:e2:4d:bc:10:35:f6:61:02:b9:
8f:cc:c5:80:d1:7f:c8:2e:2d:9a:32:9f:8a:bb:32:
ea:14:82:e0:6f:cb:3d:9d:d5:1c:f1:43:52:9f:49:
79:f1:94:03:48:2c:91:51:c7:8f:32:90:a7:c2:c0:
25:64:34:f1:c7:f2:ac:d5:96:87:a2:0a:fb:e5:b3:
0b:90:bf:6f:08:75:5d:54:cb
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
B3:EC:1A:56:77:F9:DC:0E:60:0F:B7:69:C9:DC:43:2D:09:39:A6:1C
X509v3 Authority Key Identifier:
keyid:9A:EF:A7:36:28:06:4A:0A:2F:F9:2E:99:BE:6F:06:E1:83:9C:A2:0E
Signature Algorithm: sha1WithRSAEncryption
c5:3f:65:1f:b6:a4:33:fd:c8:04:a1:da:07:f6:e0:3b:55:b9:
76:b7:aa:78:55:4a:59:ad:36:7f:cb:00:1c:32:cb:fe:40:72:
eb:49:27:b4:9d:5d:05:6f:30:37:1d:49:35:5e:0b:6b:5d:c5:
07:3d:c8:63:1f:b6:46:6d:f9:c9:52:ce:1d:1f:d9:e8:02:46:
95:18:26:39:ec:17:fe:ae:07:cf:55:25:45:1f:8a:e4:bb:f2:
73:d2:e1:01:c3:8e:5f:eb:e4:7e:80:44:40:e6:a1:cd:85:9b:
e8:fb:16:d0:7b:4f:ad:3b:4c:eb:bd:67:02:2c:08:2b:62:f1:
c5:0a
-----BEGIN CERTIFICATE-----
MIICgTCCAeqgAwIBAgIJAN9pH+/lr78RMA0GCSqGSIb3DQEBBQUAMEsxCzAJBgNV
BAYTAlVTMQswCQYDVQQIDAJXQTEQMA4GA1UECgwHQ09SRSBDQTEdMBsGCSqGSIb3
DQEJARYOcm9vdEBsb2NhbGhvc3QwHhcNMTMwOTA5MTc0NDQ3WhcNMjMwOTA3MTc0
NDQ3WjA9MQswCQYDVQQGEwJVUzELMAkGA1UECAwCV0ExETAPBgNVBAoMCGNvcmUt
ZGV2MQ4wDAYDVQQDDAV0ZXN0MTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
sybttusm6sBa0Qlv1F+NEcw8/9deN+ZVcVzryej4jqOFmSw+oo6yHC/+mcYN087A
7cHiTbwQNfZhArmPzMWA0X/ILi2aMp+KuzLqFILgb8s9ndUc8UNSn0l58ZQDSCyR
UcePMpCnwsAlZDTxx/Ks1ZaHogr75bMLkL9vCHVdVMsCAwEAAaN7MHkwCQYDVR0T
BAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNh
dGUwHQYDVR0OBBYEFLPsGlZ3+dwOYA+3acncQy0JOaYcMB8GA1UdIwQYMBaAFJrv
pzYoBkoKL/kumb5vBuGDnKIOMA0GCSqGSIb3DQEBBQUAA4GBAMU/ZR+2pDP9yASh
2gf24DtVuXa3qnhVSlmtNn/LABwyy/5AcutJJ7SdXQVvMDcdSTVeC2tdxQc9yGMf
tkZt+clSzh0f2egCRpUYJjnsF/6uB89VJUUfiuS78nPS4QHDjl/r5H6AREDmoc2F
m+j7FtB7T607TOu9ZwIsCCti8cUK
-----END CERTIFICATE-----
}
}
custom-config {
custom-config-id service:IPsec:test1.key
custom-command test1.key
config {
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALMm7bbrJurAWtEJ
b9RfjRHMPP/XXjfmVXFc68no+I6jhZksPqKOshwv/pnGDdPOwO3B4k28EDX2YQK5
j8zFgNF/yC4tmjKfirsy6hSC4G/LPZ3VHPFDUp9JefGUA0gskVHHjzKQp8LAJWQ0
8cfyrNWWh6IK++WzC5C/bwh1XVTLAgMBAAECgYB1zJIgZe04DPVqYC8lURL8cfRm
MeIlFZJ3MSdlo4fUmtddCYfB8dxRxok96cnrzRZ0/7jjblamdPQDC6rvdaqmfLFx
nJ/RVhCj6HqDMrQnv/9tnl6UQmkaYSnYvTn2GgmpqvBf9RUQk4+kjwgRgdqKxaIz
oH8j0ZxMh2DOZuzJMQJBAOJwEnbG085q2k1Qg8PQz0cpVG9QCE3sJUNs0hMPC7dk
IzknFtidlpCf6NMboJ2Nt9dzmJmKLqWb3oauyQRQA6MCQQDKin0wElLV1268IbcF
RXhkVlxcg5fDEazeNL9p1z5vmwaq0IcLtSPrIaect2hacCkfJoREhcA+f9YIpcod
lby5AkEApyXla0ofpXqYxIOPkGc96qCmlDh2uNZ9N0VH2Qu9MVW47oJdSe8h6oYv
/k2hhUvMjjzlQ0mOX28slyzEc+uAkwJAWlAsiE3zX+UjPIJwIMqcZ2lW3+3Rsyrj
gWXV4HUZIxzmeS5ouWC5NnSYT7o8ru8KdxhurDtTwMqx/sMmf9CwCQJAIDbMwwIs
XStw0y/M9+hdPUkccVoHyXKPTensyX/miAUwHZN/oadGUUOZO7XBKb1uNFv1uowU
29bGgXa+mvb6aA==
-----END PRIVATE KEY-----
}
}
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 {
files=('ipsec.sh', 'test1.key', 'test1.pem', 'ca-cert.pem', 'copycerts.sh', )
}
}
services {zebra OSPFv2 OSPFv3 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
}
}
services {zebra OSPFv2 OSPFv3 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
}
}
services {zebra OSPFv2 OSPFv3 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
}

File diff suppressed because it is too large Load diff

View file

@ -1,177 +0,0 @@
#!/bin/sh
#
# 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] [-a address] [-p port]"
echo " [<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 " -(-a)ddress connect to the specified IP address (default 127.0.0.1)"
echo " -(-p)port connect to the specified TCP port (default 4038)"
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 @PACKAGE_VERSION@ (@PACKAGE_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
mkdir -p $CONFDIR/myemane
if [ $? != 0 ]; then
echo "error making directory $CONFDIR/myemane!";
else
cp -a $CORE_DATA_DIR/examples/myemane/* $CONFDIR/myemane/
fi
}
cd $LIBDIR
core=$LIBDIR/core.tcl
# locate wish8.5 binaries
WISHLIST="/usr/bin/wish8.6 /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)
shift
exec ${WISH} $core -- "--start" "$@"
;;
-a)
shift
exec ${WISH} $core -- "--address" "$@"
;;
-p)
shift
exec ${WISH} $core -- "--port" "$@"
;;
*)
exec ${WISH} $core -- $@
;;
esac
cd $CORE_START_DIR

View file

@ -1,196 +0,0 @@
#
# 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.
#
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] == "--addons"} {
set argv [lrange $argv 1 end]
set execMode addons
} else {
set execMode interactive
}
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
#
set node_list {}
set link_list {}
set annotation_list {}
set canvas_list {}
set eid e0
set plot_list {}
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
checkCommandLineAddressPort
autoConnectPlugins
set g_abort_session 0
#
# 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"
}
}
setOperMode edit
fileOpenStartUp
foreach arg $argv {
if { $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"
}

View file

@ -1,46 +0,0 @@
.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
}

File diff suppressed because it is too large Load diff

View file

@ -1,214 +0,0 @@
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 execMode
set idx [expr {1 + [array size g_exceptions]}]
array set g_exceptions [list $idx $valuelist]
array set vals $valuelist
# print exception message on stdout if in batch mode
if { $execMode == "batch" } {
puts "\nFrom $vals(src): $vals(txt)"
# Abort the session if a fatal exception is reported
if { $vals(level) <= [lsearch -exact $EXCEPTION_LEVELS "FATAL" ] } {
global g_current_session g_abort_session
set g_abort_session 1
}
}
# exceptions with level ERROR or FATAL will throw the CEL
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]
}
}

View file

@ -1,862 +0,0 @@
#
# 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" } {
if { [file isdirectory /sys/class/net] } {
set extifcs [nexec localnode ls /sys/class/net]
} else {
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 { type "" } } {
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]
if {$type != "connect"} {
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 srv [array get exec_servers $server]
if { $srv == "" } { continue }
set ip [lindex $srv 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
}
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 srv [array get exec_servers $server]
if { $srv == "" } { continue }
set ip [lindex $srv 0]
}
set server_cpuusage($ip) [lreplace $server_cpuusage($ip) 0 end]
}
}
}
}
proc getMyIP { } {
variable myIP
if { ![info exists myIP] } {
if { [catch {set theServer [socket -server none \
-myaddr [info hostname] 0]} ] } {
set myIP "127.0.0.1"
} else {
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 srv [array get exec_servers $server]
if { $srv == "" } { continue }
set ip [lindex $srv 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
}
}
}

View file

@ -1,623 +0,0 @@
#
# 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 {filename}
# - loads configuration from filename
#
# 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
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 $filename
# FUNCTION
# Loads the configuration from the file named $filename.
#****
proc openFile { filename } {
global currentFile
global undolog activetool
global canvas_list curcanvas systype
global changed
global oper_mode
set prev_oper_mode $oper_mode
if { [popupStopSessionPrompt] == "cancel" } {
return
}
if { [lindex [file extension $filename] 0] == ".py" } {
execPythonFile $filename
return
}
# disconnect and get a new session number
set name [lindex [getEmulPlugin "*"] 0]
if { $name != "" } {
pluginConnect $name disconnect 1
pluginConnect $name connect 1
}
set currentFile $filename
setGuiTitle ""
cleanupGUIState
resetGlobalVars openfile
if { $canvas_list == "" } {
set curcanvas [newCanvas ""]
}
if { $prev_oper_mode == "exec" } {
if { $oper_mode == "exec" } {
global g_current_session
setOperMode edit
set g_current_session 0
}
}
if { [file extension $currentFile] == ".xml" } {
xmlFileLoadSave "open" $currentFile
addFileToMrulist $currentFile
return
}
# flush daemon configuration
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
loadCfg $cfg
switchCanvas none
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
} elseif { [file extension $selectedFile] == ".py" } {
set msg "Python script files cannot be saved by the GUI."
set msg "$msg\nUse File > Export Python script... for export."
tk_messageBox -type ok -icon warning -message $msg -title "Error"
} 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
# Boeing
foreach arg $argv {
if { $arg != "" && $arg != "--start" && $arg != "--batch" } {
openFile [argAbsPathname $arg]
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 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 != ""} {
openFile $selectedFile
}
}
#****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 args } {
openFile [string trim "$f $args"]
}
# 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 g_mru_index
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 $g_mru_index [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 $g_mru_index
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
}
# 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"
}
}

View file

@ -1,519 +0,0 @@
#
# 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;
# }
# }
}

File diff suppressed because it is too large Load diff

View file

@ -1,117 +0,0 @@
#
# 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 \
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
}
}

View file

@ -1,29 +0,0 @@
# 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 := $(wildcard tiny/*)
NORM_ICONS := $(wildcard normal/*)
SVG_ICONS := $(wildcard 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
dist_iconpixmap_DATA = core-gui.xpm
icondesktopdir = $(datarootdir)/applications
dist_icondesktop_DATA = core-gui.desktop
# extra cruft to remove
DISTCLEANFILES = Makefile.in

View file

@ -1,12 +0,0 @@
[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

View file

@ -1,294 +0,0 @@
/* 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"
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 744 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 419 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -1,14 +0,0 @@
#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.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,116 +0,0 @@
#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 };

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 719 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 744 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 755 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -1,228 +0,0 @@
#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 };

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 259 B

View file

@ -1,190 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 6.5 KiB

View file

@ -1,270 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 9.1 KiB

View file

@ -1,109 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 4.4 KiB

View file

@ -1,197 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 6.4 KiB

View file

@ -1,190 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 6.5 KiB

View file

@ -1,178 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 6.8 KiB

View file

@ -1,181 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 6.9 KiB

View file

@ -1,172 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 8.2 KiB

View file

@ -1,158 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -1,158 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -1,158 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -1,158 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -1,158 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -1,158 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -1,215 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 7.5 KiB

View file

@ -1,192 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 9.4 KiB

View file

@ -1,180 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 744 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 667 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 915 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 922 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 666 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 635 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 719 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 744 B

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