install: removed tcl based gui, updated configure.ac, Makefile.am, and tasks.py to account for removal
|
@ -6,10 +6,6 @@ if WANT_DOCS
|
|||
DOCS = docs man
|
||||
endif
|
||||
|
||||
if WANT_GUI
|
||||
GUI = gui
|
||||
endif
|
||||
|
||||
if WANT_DAEMON
|
||||
DAEMON = daemon
|
||||
endif
|
||||
|
@ -19,7 +15,7 @@ if WANT_NETNS
|
|||
endif
|
||||
|
||||
# keep docs last due to dependencies on binaries
|
||||
SUBDIRS = $(GUI) $(DAEMON) $(NETNS) $(DOCS)
|
||||
SUBDIRS = $(DAEMON) $(NETNS) $(DOCS)
|
||||
|
||||
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_DATA_DIR[@],$(CORE_DATA_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
|
||||
endef
|
||||
|
||||
|
@ -123,7 +118,6 @@ all: change-files
|
|||
|
||||
.PHONY: change-files
|
||||
change-files:
|
||||
$(call change-files,gui/core-gui-legacy)
|
||||
$(call change-files,daemon/core/constants.py)
|
||||
$(call change-files,netns/setup.py)
|
||||
|
||||
|
|
24
configure.ac
|
@ -30,25 +30,14 @@ AC_SUBST(CORE_CONF_DIR)
|
|||
AC_SUBST(CORE_DATA_DIR)
|
||||
AC_SUBST(CORE_STATE_DIR)
|
||||
|
||||
# CORE GUI configuration files and preferences in CORE_GUI_CONF_DIR
|
||||
# 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)
|
||||
# documentation option
|
||||
AC_ARG_ENABLE([docs],
|
||||
[AS_HELP_STRING([--enable-docs[=ARG]],
|
||||
[build python documentation (default is no)])],
|
||||
[], [enable_docs=no])
|
||||
AC_SUBST(enable_docs)
|
||||
|
||||
# python option
|
||||
AC_ARG_ENABLE([python],
|
||||
[AS_HELP_STRING([--enable-python[=ARG]],
|
||||
[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
|
||||
|
||||
# Variable substitutions
|
||||
AM_CONDITIONAL(WANT_GUI, test x$enable_gui = xyes)
|
||||
AM_CONDITIONAL(WANT_DAEMON, test x$enable_daemon = xyes)
|
||||
AM_CONDITIONAL(WANT_DOCS, test x$want_docs = xyes)
|
||||
AM_CONDITIONAL(WANT_PYTHON, test x$want_python = xyes)
|
||||
|
@ -224,9 +212,6 @@ fi
|
|||
|
||||
# Output files
|
||||
AC_CONFIG_FILES([Makefile
|
||||
gui/version.tcl
|
||||
gui/Makefile
|
||||
gui/icons/Makefile
|
||||
man/Makefile
|
||||
docs/Makefile
|
||||
daemon/Makefile
|
||||
|
@ -248,17 +233,12 @@ Build:
|
|||
Prefix: ${prefix}
|
||||
Exec Prefix: ${exec_prefix}
|
||||
|
||||
GUI:
|
||||
GUI path: ${CORE_LIB_DIR}
|
||||
GUI config: ${CORE_GUI_CONF_DIR}
|
||||
|
||||
Daemon:
|
||||
Daemon path: ${bindir}
|
||||
Daemon config: ${CORE_CONF_DIR}
|
||||
Python: ${PYTHON}
|
||||
|
||||
Features to build:
|
||||
Build GUI: ${enable_gui}
|
||||
Build Daemon: ${enable_daemon}
|
||||
Documentation: ${want_docs}
|
||||
|
||||
|
|
2
gui/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
|||
core-gui-legacy
|
||||
version.tcl
|
|
@ -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
|
|
@ -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='"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
3296
gui/api.tcl
406
gui/canvas.tcl
|
@ -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
|
||||
}
|
||||
}
|
1147
gui/cfgparse.tcl
Before Width: | Height: | Size: 312 KiB |
|
@ -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 {
|
||||
}
|
||||
|
|
@ -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"
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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 {
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
Before Width: | Height: | Size: 196 KiB |
|
@ -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 {
|
||||
}
|
||||
|
|
@ -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 {
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
196
gui/core.tcl
|
@ -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"
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
5348
gui/editor.tcl
|
@ -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]
|
||||
}
|
||||
}
|
||||
|
862
gui/exec.tcl
|
@ -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
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
623
gui/filemgmt.tcl
|
@ -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"
|
||||
}
|
||||
}
|
519
gui/gpgui.tcl
|
@ -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;
|
||||
# }
|
||||
# }
|
||||
}
|
117
gui/help.tcl
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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"
|
||||
};
|
Before Width: | Height: | Size: 744 B |
Before Width: | Height: | Size: 230 B |
Before Width: | Height: | Size: 419 B |
Before Width: | Height: | Size: 2.9 KiB |
|
@ -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 };
|
Before Width: | Height: | Size: 6 KiB |
Before Width: | Height: | Size: 1.1 KiB |
|
@ -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 };
|
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 719 B |
Before Width: | Height: | Size: 744 B |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 174 B |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 755 B |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB |
|
@ -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 };
|
Before Width: | Height: | Size: 127 B |
Before Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 799 B |
Before Width: | Height: | Size: 259 B |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
Before Width: | Height: | Size: 744 B |
Before Width: | Height: | Size: 667 B |
Before Width: | Height: | Size: 337 B |
Before Width: | Height: | Size: 54 B |
Before Width: | Height: | Size: 334 B |
Before Width: | Height: | Size: 55 B |
Before Width: | Height: | Size: 915 B |
Before Width: | Height: | Size: 922 B |
Before Width: | Height: | Size: 666 B |
Before Width: | Height: | Size: 137 B |
Before Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 635 B |
Before Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 1,006 B |
Before Width: | Height: | Size: 428 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 719 B |
Before Width: | Height: | Size: 744 B |