marko [Sat, 17 May 2008 01:57:02 +0000 (01:57 +0000)]
Introduce support for automated IPv4 address renumbering, and
replace ad-hoc hardcoded 10.0.0.0/8 address pool with user
selectable variable-mask IPv4 address pool.
Bug found by:
Submitted by: Sanja Marjanovic <Sanja.Marjanovic at fer.hr>
Reviewed by:
Approved by:
Obtained from:
To enable X applications running on virtual nodes we create
a pair of virtual ethernet interfaces (with shell script
startopera), one in "default" and the other in virtual node.
If the experiment is terminated while TCP socket (in any virtual node)
is in state TIME_WAIT a system will hang and then reboot.
To prevent virtual node destruction from rebooting the system
a loop checking TIME_WAIT state in all virtual nodes is added
as temporary fix.
marko [Fri, 8 Feb 2008 13:59:46 +0000 (13:59 +0000)]
Unbreak fetching local IP addresses via netstat for addresses wih ASCII
representation with 13 bytes. Previously 123.123.123.123 would be
truncated to 123.123.123.12
marko [Thu, 31 Jan 2008 10:56:56 +0000 (10:56 +0000)]
Redirect standard and diagnostic output of per-node startup scripts
into out.log files located in experiment/node specific runtime
directories in /tmp.
Suggested by: Atanu Ghosh (some 2, 3 or more years ago)
marko [Mon, 28 Jan 2008 19:03:34 +0000 (19:03 +0000)]
Unbreak instatiation of physical interface (aka RJ-45) nodes.
The problem was an artifact of introduction of per-experiment top level
vimage containers, so now we need to assign physical interfaces to top
level vimages first, before attempting to connect them via netgraph to
other nodes in a virtual topology.
marko [Tue, 8 Jan 2008 14:21:00 +0000 (14:21 +0000)]
Initial implementation of a checkbutton menu to choose among currently
open projects. Selecting a desired project at the bottom of the File
menu switches to that particular project.
marko [Tue, 8 Jan 2008 12:35:30 +0000 (12:35 +0000)]
Introduce a global variable cfg_list which holds all cfg ids (not eids)
for currently open projects.
Move previously global variable currentFile to per-cfg namespaces, given
that each project should typically correspond to a different file.
Rename proc newFile to newProc, and slightly reorganize it so that
newProc does all necessary steps for setting up a project environment
inside the GUI.
Introduce proc setWmTitle which should be used exclusively for updating
window title.
Deprecate procs fileOpenStartup and fileNewDialogBox.
It is no longer necessary to set up the default config namespace in
imunes.tcl and initgui.tcl, given that proc loadCfg and proc newFile
now initialize all the necessary state.
marko [Mon, 7 Jan 2008 11:50:04 +0000 (11:50 +0000)]
Adjust node and nodelabel position to fit into the target canvas
when pasting objects which were originally positioned outside the
bounds of the target canvas, i.e. when copying from a bigger to a
smaller canvas.
marko [Thu, 3 Jan 2008 13:47:54 +0000 (13:47 +0000)]
Initial implementation of an editing clipboard: introduce
cut, copy and paste functions, and hook them up to the common
keyboard shortcuts CTRL+X, CTRL+C and CTRL+V.
So far the new functions operate only on proper nodes and links,
but not on annotations.
The clipboard is stored in ::cf::clipboard namespace, which must
never be used for any other purpose.
marko [Wed, 2 Jan 2008 12:08:46 +0000 (12:08 +0000)]
First in a series of commits aimed at (ab)using TCL namespaces for
removing configuration and per-object (node, link, canvas, annotation)
variables from the global namespace. Once completed, this storage
reorganization should allow us to manage multiple independent IMUNES
configs in parallel and simplify implementation of cut/copy/paste
functionality in the GUI.
This change introduces a new top-level namespace ::cf, which holds
all configuration instances in subordinated namespaces. So far only
::cf::cfg0 is used.
The new global variable "curconf" selects the working configuration
instance. Inside most procedures, access to previously global
variables is replaced by variable aliasing to the appropriate
::cf namespace. The change typically looks like this:
- global $target
+ upvar 0 ::cf::[set ::curcfg]::$target $target
So far only storage for objects visible in a canvas has beend pushed out
of the global namespace. Deciding on how to deal with the various GUI
options (option show) needs more thought.
marko [Tue, 1 Jan 2008 18:22:59 +0000 (18:22 +0000)]
Happy new year - hope it won't be as cosmetic and useless as this
commit:
Replace the 4-clause BSD copyright notice with a simplified 2-clause one
obtained from FreeBSD. Hereby we lift the following two restrictions:
-# 3. All advertising materials mentioning features or use of this software
-# must display the following acknowledgement:
-# This product includes software developed by the University of Zagreb,
-# Croatia and its contributors.
-# 4. Neither the name of the University nor the names of its contributors
-# may be used to endorse or promote products derived from this software
-# without specific prior written permission.
Include all the years from when a file originally appeared until including
2008. in copyright notices.
Drop the "all rights reserved" statement from copyright notices, given
that this is implied automatically by contemproary interpretations of US
copyright law.
Our MZT / MZOS funding only covered years 2004. and 2005., so drop the
notice crediting MZT / MZOS from files / code created from scratch in
2006. and afterwards.
marko [Sun, 16 Dec 2007 20:35:11 +0000 (20:35 +0000)]
Our graph partitioning algortihms have been entirely implemented by
Petra Schilhard while she was in no way formally associated with our
department or project. So beyond any doubt she is the copyright holder,
not the University of Zagreb.
marko [Thu, 13 Dec 2007 13:07:27 +0000 (13:07 +0000)]
Allow for creation of random interconnection topologies between
existing nodes from the GUI. Right click on a selected node ->
Create link to -> Selected -> Random.
marko [Sat, 1 Dec 2007 00:56:46 +0000 (00:56 +0000)]
Restore support for "serial" links, which were used by default
for connecting router nodes in the old days. This will only work
with the most recent kernel code from P4.
Note however that with such "serial" links (ng_iface nodes in
reality) our dear friend quagga has some issues and refuses to
open multicast sockets there, resulting in RIP / OSPF not working
in default configurations. Interesting that running routed -P ripv2
works without a glitch on those interfaces.
miljenko [Mon, 26 Nov 2007 08:56:55 +0000 (08:56 +0000)]
Invalid default capture filter "not ip host" is still present in wireshark
(wireshark-0.99.6.tbz from packages)
Workarond: start it with filter: -f " "
ana [Sat, 24 Nov 2007 23:17:06 +0000 (23:17 +0000)]
Invalid default capture filter "not ip host" is still present in wireshark
(wireshark-0.99.6.tbz from packages)
Workarond: start it with filter: -f " "
miljenko [Tue, 13 Nov 2007 09:34:06 +0000 (09:34 +0000)]
Temporary fix to enable multiple inetd and rpcbind processes (in different vimages).
Sholud be removed if each vimage is running in separate file system.
marko [Sat, 10 Nov 2007 01:47:52 +0000 (01:47 +0000)]
Use a shorter name for the top-level vimage container holding all
virtual nodes in an experiment, so that a string in form of
ifname@eid.nodeid could fit into 15 characters or less for all node
ids smaller than n1000. The 15 chatacter string length limitation
is derived from the IF_NAMESIZE constant which applies when specifying
interface names. Longer eids were previously causing trouble when
attempting to open a bpf tap in child nodes.
This change fixes bugzilla bug #2:
http://imunes.tel.fer.hr/bugzilla/show_bug.cgi?id=2
Bug found by: miljenko at tel.fer.hr
Submitted by:
Reviewed by:
Approved by:
Obtained from:
marko [Thu, 1 Nov 2007 21:51:48 +0000 (21:51 +0000)]
Use the new "vimage -lr" form to traverse the entire vimage
hierarchy bellow the current position, given that from now on
"vimage -l" will list only direct children of current vimage.
marko [Thu, 1 Nov 2007 17:37:20 +0000 (17:37 +0000)]
Nuke a now redundant check whether we are running in a default
vimage. Regardless whether we are at the top of the vimage tree
or not, the current vimage will have an address of ".". More
importantly, we can now _really_ start new experiments from within
non-default vimages, i.e. run IMUNES inside IMUNES!
While here, bump our "version" date.
Bug found by:
Submitted by:
Reviewed by:
Approved by:
Obtained from:
marko [Thu, 1 Nov 2007 10:42:27 +0000 (10:42 +0000)]
Allow for multiple independent experiments to run in parallel.
Each experiment is dynamically assigned an experiment id (eid) which
it then uses throughout its lifetime. By default the eid is
constructed by appending the process id of the tcl interpreter to
the prefix "imunes_". All vimages and netgraph nodes corresponding
to virtual nodes in an experiment are created as child nodes of
a "controlling" vimage which has the same name as eid. All virtual
node specific temporary directories / files are created as
subdirectories in /tmp/$eid directory.
vimageCleanup function is modified to destroy / cleanup only those
vimages / netgraph nodes bellow and including the controlling
vimage for the given experiment. Temporary files in /tmp/$eid are
no longer automatically deleted.
marko [Mon, 29 Oct 2007 16:25:23 +0000 (16:25 +0000)]
First in a series of changes to leverage on recently introduced
hierarchical vimage naming model in the kernel.
The main thrust of this change is to decouple experiment id ($eid)
from vimage / netgraph node names. Instead, a top-level vimage
named $eid is created first, in which all vimages / netgraph nodes
are created as child nodes. This relieves the default vimage
context of any netgraph space pollution, and paves a way for
adding support for parallel execution of independent experiments.
This change does NOT include a revamp of experiment cleanup
routines, so be warned that until further notice neither "imunes -b"
nor attempts to stop an experiment from the GUI will work.
marko [Tue, 9 Oct 2007 11:22:51 +0000 (11:22 +0000)]
Eliminate the guesswork when attempting to determine the id of a
newly created ng_eiface or ng_iface node. The replacement
approach at "ngctl mkpeer" invocation yields deterministic
results, and reduces the spawned process pipeline at the same time,
thus reducing the time / CPU cycles wasted on ng node creation.
marko [Mon, 8 Oct 2007 23:28:13 +0000 (23:28 +0000)]
When cleaning up a running experiment, always attempt to kill
all processes in all vimages first.
It seems that quagga has a bug which sets all zebra processes in an
infinite loop if a network interface disappears while the suite is
running. Before this change, we were "unplugging" the ng_eifaces
while zebra & co. were still running, resulting in each vimage
attempting to hog the CPU. This would leave very little CPU time
for IMUNES scripts, and for any user interaction with the system
for that matter, so cleaning up a more complex topology could
last for quite a while.
In short, the cleanup should be now roughly as fast as it used to be
in 4.11 days.
marko [Thu, 30 Aug 2007 23:57:50 +0000 (23:57 +0000)]
Lift the prohibition from configuring link emulation parameters
on links terminating in rj45 nodes, given that exec.tcl already
inserts a ng_pipe instance between rj45 and whatever is on the
other side of the link. This change also revealed a bug in
ng_pipe that will be fixed soon in p4 after a little bit more of
testing.
marko [Thu, 30 Aug 2007 23:19:21 +0000 (23:19 +0000)]
Change default link bandwith to 0. The reasoning behind this decision
is that as we will target bigger / more complex topologies, the
overhead of emulating link effects might become more pronounced.
ng_pipe nodes when configured for zero bandwith, delay, packet
duplication and loss will bypass the complex queuing and state
keeping / locking code, hence forward the packets with minimal
overhead.
While here, once again change the default settings for which
parameters will be displayed in the editor. Displaying link labels,
ifnames and IPv4 addresses is now on by default, while displaying
of IPv6 addresses is not.
marko [Thu, 30 Aug 2007 22:56:09 +0000 (22:56 +0000)]
When instantiatinga an interface in a L3 node which is directly
connected to an rj45 outlet, use the MAC address of the physical
interface on the virtual interface as well. This allows for
virtual nodes to gain access to the outside world via 802.11
physical cards.
marko [Thu, 30 Aug 2007 18:54:35 +0000 (18:54 +0000)]
ngnodemap must be set for rj45 type nodes as well, otherwise
deployCfg would break when attempting to connect an rj45 node to
whatever is on the other side of the link.
With this change plus a kernel-level fix to be submitted to p4
shortly communication to external world via "rj45" nodes should
work properly.
marko [Tue, 21 Aug 2007 07:54:15 +0000 (07:54 +0000)]
Bring back to life ng_pipe insertion on our links. For this to work
you'll need to fetch the latest kernel sources from my home dir
at imunes.tel.fer.hr or from p4. Note that the scheduler for ng_pipe
in -CURRENT at this point in time cannot provide resolution better than
kernel tick intervals, so you'll probably wish to configure your kernels
with high HZ setting - default in -CURRENT is 1000 HZ which should be
fine for proof-of-concept experiments.
Note that ng_pipe in -CURRENT is stripped off of XCP and [GA]RED
functions, but we never used those directly in IMUNES anyway so noone
should be hurt...
marko [Tue, 14 Aug 2007 20:54:03 +0000 (20:54 +0000)]
A hack to allow multicast to work (to some extent) on FreeBSD -CURRENT:
add a route to 224.0.0.0/4 over our loopback interface. This seems
necessary to allow any multicast traffic to be transmitted out of the
machine / virtual nodes, and in particular allows RIP to work with
XORP. OTOH, for reasons beyond my willingless for further investigation,
quagga does not even properly open multicast sockets for RIP, regardless
whether using quagga built from the ports collection, or using a
package built for 6.2-RELEASE in compatibility mode :(
marko [Tue, 14 Aug 2007 20:46:47 +0000 (20:46 +0000)]
Remove comments embedded in switch construct in popupConfigApply in
an attempt to unbreak it -> man n switch says comments may not be
embedded in between switch tokens / sections, it seems that my copy
of tclsh8.4 becomes really nervous about that (the older versions
did not complain as far as I can recall).
marko [Mon, 13 Aug 2007 07:16:11 +0000 (07:16 +0000)]
Turn on resolving of "@" character to vimage name on per-vimage
basis via vfs.morphing_symlinks sysctl. This finally allows
IMUNES to be run on top of FreeBSD -CURRENT.
NB as of now multicast sending without having default route set still
seems to be broken in FreeBSD -CURRENT (as it is in FreeBSD 5 and 6
as well), so until this is resolved in the kernel or we introduce some
other hack, routing protocols / implementations relying on multicast
transmission won't work inside IMUNES.
marko [Mon, 13 Aug 2007 07:12:06 +0000 (07:12 +0000)]
Do not hardcode path to quaggaboot.sh. This allows IMUNES to be run
from the development directory without having to install
quaggaboot.sh to /usr/local/bin first.
marko [Mon, 13 Aug 2007 07:10:01 +0000 (07:10 +0000)]
Prevent zebra and related daemons from accepting control connections
on their designated TCP ports, given that we strive to control the
suite exclusively through vtysh.
marko [Fri, 20 Jul 2007 09:22:26 +0000 (09:22 +0000)]
Keep all annotation objects in a single list (annotation_list),
instead of having three separate lists for text, rectangle and
oval objects.
In configuration file, deprecate text, rectangle, and oval object
classes, and replace them with a single annotation class. The
type of annotation objects can be determined via proc nodeType.
Add an "xxx xxx xxx" asert in textConfigApply in a suspicious branch.
Remove the request for "raising" canvas objects tagged as "menuBubble"
in proc raiseAll, since it seems to be never used.