home
topology files
command‑line options
the core API
FAQ
download and install
|
cnet Changelog
cnet's version number changes when a change to its source
code affects cnet's execution semantics.
The version number does not change if (only) cosmetic changes are made
to the source code or GUI, or if the documentation changes.
Version 4.0 - from March 2023
- v4.0.4 -
Shellscript provided to download and install pre-built binaries and resources.
Yet more refactoring.
- 4.0.3 -
Protocols may be written in either, or a mixture of, C11 or C++11.
Added -P command-line option to provide CNETPATH.
Simplified searching of $CNETPATH.
Corrected display of map legend and WLAN signals.
Added ability to generate and execute random WAN-connected topologies.
Added ability to single-step through execution.
Added ability to annotate transmissions on timeline with
CNET_annotate_timeline() .
- v4.0.2 - Node windows no longer (randomly) crash application on start-up.
Tabs correctly expanded; tabstops may be specified in toploogy file.
- v4.0.1 - Added basic support for dark-mode on macOS.
System-fonts used by default; font size and name may be specified in toploogy file.
Fixed a problem where closing the timeline window crashed the application.
- v4.0.0 - All rewritten in C++ (all previous versions in C),
using wxWidgets (all previous versions used Tcl/Tk).
Version 3.5 - from February 2022 (no longer supported)
- v3.5.3 - small fix to src/tclfunctions.c required for macOS.
- v3.5.2 - small fixes to compile cleanly on Linux and macOS.
- v3.5.1 - fix to prototype fdopen().
- v3.5.0 - support for macOS on Apple Silicon
Improved isolation of platform dependencies in Makefiles
Version 3.4 - from March 2020 (no longer supported)
- v3.4.2 - Added a menu item to check latest version.
- v3.4.1 - Added instructions for installing on
Windows Subsystem for Linux (WSL), under Windows-10.
Added support for macOS's DarkMode (Mojave, 10.4 onwards).
Corrected a bug in which output filenames requested by the
-o command-line option,
were not unique for each node.
- v3.4.0 - Lots of refactoring.
Corrected a bug on some Linux distributions in which the
symbol "_end" was not being defined in shared objects
(thanks to Peter Elliott, Univ. of Alberta).
Under macOS we now use Tck/Tk provided by Homebrew,
(rather than the outdated version packaged with XCode),
and no longer require XQuartz.
Implementation of per-node functions for C99's srand and rand .
Improved implementation of internal Poisson distribution function.
Documentation changed from basic HTML to basic PHP.
Removed - CNET_srand , CNET_rand ,
CNET_newrand , and CNET_nextrand ,
and internal use of Mersenne Twister functions.
Removed - removed support for execution on iPods.
Ahhh, jailbreaking was fun.
Version 3.3 - from June 2013 (no longer supported)
- v3.3.4 - Cleaned up code to address 'new' warnings from an
updated gcc on Linux.
- v3.3.3 - Corrected a bug in
compile.c which prevented correct
parsing of compilation string.
Changed calls to abs() to fabs() , in lan.c
- v3.3.2 - Corrected a bug in which AL errors were not updated on the GUI.
Added -G command-line option,
equivalent to -WTgqz.
- v3.3.1 - Added compile-time support for XQuartz under macOS.
Corrected use of Tcl_SetObjResult() to report errors.
- v3.3.0 - The
x,y,z fields of CnetPosition are now
of type double to better support mapping.
Added the functions
CNET_Wflag() ,
CNET_vflag() ,
CNET_get_mapmargin() , and
TCLTK_interp() .
Support added for global- and per-node variables in topology files,
accessed from protocols using the new
CNET_getvar() function.
Added the
CNET_unused_timer_event()
and
CNET_unused_debug_event()
functions.
Changes made to Tcl/Tk code to correctly use
Tcl_GetStringResult() and Tcl_EvalEx() .
Version 3.2 - from September 2009 (no longer supported)
- v3.2.4 - Removed the ability (gimmick) to set a node's operating system
type and icon.
Added -Q command-line option
to (silently) ignore out-of-sequence errors in the Application Layer.
Changed code to enable clean compilations on Ubuntu Linux,
where
-Wunused-but-set-variable is set by default.
- v3.2.3 - wish I'd kept this up-to-date
- v3.2.2 - wish I'd kept this up-to-date
- v3.2.1 - Correction made to gathering of LAN statistics.
The -S command-line option now correctly
replaces (overrides)
the seed parameter to
CNET_srand() and CNET_newrand() .
- v3.2.0 - Support added for 64-bit macOS.
Support added for Tcl/Tk v8.5 (now preferred).
Support added for Ubuntu Linux (return value of write() captured).
Documentation rewritten, providing Unix-manual-like pages for each
function.
Version 3.1 - from October 2007 (no longer supported)
- v3.1.4 - Added the
CNET_shmem2()
function.
- v3.1.3 - Corrected memory allocation for WLAN nodes.
Refactored some Tcl/Tk for event and statistics updates.
Corrected the information provided by
CNET_get_wlanstate .
New documentation for core data structures
nodeinfo and linkinfo .
- v3.1.2 - Corrected a bug processing the -D, -U, and -I command-line
options.
Corrected a bug in
CNET_write_physical which caused
a crash when scheduling frame collisions.
The -z command-line option now implies -s .
The buffer and message parameters of
CNET_read_physical ,
CNET_write_physical ,
CNET_write_physical_reliable ,
CNET_write_direct ,
CNET_read_application , and
CNET_write_application
are now of type
void * or
const void *
(were char * or
const char * ).
The icons of mobile nodes are now always raised on the map.
Simplified handling of fonts in Tc/Tk.
Corrected some of the map layout to correctly honour map-scaling.
- v3.1.1 - Added the
CNET_get_mapscale
function.
Modified the calculation of distance between two (mobile) nodes.
Included memory alignment in the calculation of per-node data segment size
for macOS.
Corrected Makefile for make uninstall.
Version 3.0 - from November 2004 (no longer supported)
- v3.0.20 - Supported on 64-bit Linux distributions.
Signal-strength "bars" added to the popup windows of nodes with WLANs.
The
CnetColour type is now just a C string.
Random number generation functions renamed to
CNET_srand ,
CNET_rand ,
CNET_newrand , and
CNET_nextrand .
- v3.0.19 - Corrections made to link bandwidth calculations.
- v3.0.18 - Support for vectors of data added to the support API.
- v3.0.17 - Correction to calculation of frame collision statistics.
Correction to a rare problem where sleeping
LT_WLAN
links could receive frames.
- v3.0.16 -
<cnet.h> now includes <math.h> ,
and the standard C mathematics library (-lm) is now linked in by default.
Added simple macros to convert between dBm and mW.
Corrected a bug in the hashtable_new() support function.
Added one-button support for macOS
(thanks to Michael Rogers, Tennessee Tech.Univ.).
- v3.0.15 - Improved collision handling for
LT_WLAN links.
- v3.0.14 - Added the
positionerror global attribute.
Corrected image scaling and node positioning
on the simulation map.
- v3.0.13 - Added the
<cnetsupport.h> header file,
the support source directory,
automatic linking against the libcnetsupport.a library,
and its associated documentation.
Each node's outputfile attribute may now be
formatted like the icontitle attribute.
Corrected a bug causing events to be lost when the
simulation was paused from the GUI.
- v3.0.12 - Added the
EVENT_HANDLER macro to
<cnet.h> .
Changed the data type of many function paramters describing
length from int or unsigned int to size_t .
New functions CNET_printf , CNET_puts , and
CNET_putchar introduced to overcome Darwin's prebinding of
shared libraries. These functions are not traced.
- v3.0.11 - The dataframes on any number of
LT_WAN
links may are now drawn on their own canvas.
You may view a LT_WAN link's frames by clicking the
right mouse button (control-click on Macintoshes) on the link.
An internal default event handler for the EV_DRAWFRAME is provided.
Added the jitter attribute to all linktypes.
- v3.0.10 - Datatypes
WLANRESULT and WLANSIGNAL ,
and the function CNET_set_wlan_model , introduced.
Datatype CnetPosition introduced, and functions
CNET_get_position and CNET_get_position
modified to receive their parameters of this type.
ER_CORRUPTDATA renamed to ER_CORRUPTFRAME .
Two new events - EV_PERIODIC and EV_UPDATEGUI .
Introduced the -x option and support for extension modules.
Corrected handling of -N option.
- v3.0.9 - Two new error values introduced:
ER_DUPLICATEMSG and
ER_MISSINGMSG . These replace ER_OUTOFSEQ .
New enumerated type CnetColour introduced.
Function CNET_set_LED added.
Tracing of Application and Physical Layer functions improved.
Scheduling of EV_DEBUG events corrected.
- v3.0.8 - Each WLAN's signal strength "circle" expands so as to
reach all nodes that hear its signal.
Tcl/Tk scripting improved for macOS.
- v3.0.7 - New files scheduler.h and queuing.c support Calendar
queuing of pending events, supporting much faster simulations with
several hundred, or several thousand, pending events.
Uses the POSIX
getopt function to parse arguments,
so we can now use:
cnet -gsT -u100s FLOODING
Event tracing now appears in an additional popup window,
and highlights API calls that fail.
- v3.0.6 - Transmissions with
CNET_write_physical on
LT_WLAN links now 'cause' collisions at the destination(s)
if two or more overlapping-in-time signals arrive.
Transmissions with CNET_write_physical_reliable on
LT_WLAN links do not 'cause' collisions.
New function CNET_carrier_sense indicates if a
LT_LAN or LT_WLAN link can sense any arriving signal.
Nodes and NICs that are sleeping "remember" that a
signal is passing them, so that when they awaken they may not
immediately be able to transmit successfully.
The new -B command-line option disables buffering on
LT_LAN or LT_WLAN links -
you cannot transmit a new frame while one is still being sent.
Each link type accepts a new Boolean attribute in the topology file,
such as wlan-buffered = false to indicate
if it's buffering.
The new -i command-line option
now reports instantaneous statistics
(existing -s option reports cumulative statistics).
The new -J command-line option
permits you to just compile the indicated *.c files to their *.o files
(to support pre-compiled libraries/layers for students).
If the topology file name is "-",
it will be read from standard input.
The scheduler now detects/warns if there
are no more (non-interactive) events scheduled.
The first parameter passed to CNET_read_physical
may be NULL if you don't require the link number of the
arriving frame.
New topology file attributes: bgcolour ,
bghex , drawnodes , and drawlinks .
- major changes:
- cnet's own code, and the protocols that cnet executes
are now written in ISO-C99 (no longer just ANSI-C89).
This provides native 64-bit integers and the
bool data type.
- First attempt at working under macOS (v10.3 onwards), still using Tcl/Tk.
- Much rewriting of cnet's own code
to support mobile and wireless network simulations.
- The MT19937 (Mersenne Twister) pseudo-random number generator is now
used internally in place of the slower and less portable
rand48 family of functions.
- new and changed datatypes and constants (via cnet.h):
- All times are measured in microseconds and use the new
CnetTime datatype, which is the 64-bit integer type
int64_t in ISO-C99.
- The
CnetData type is now guaranteed long enough to hold
integer and pointer values.
- The new
CnetRandom type introduced.
- The
CnetTimer type is renamed to CnetTimerID .
- The
transmitbufsize field of the CnetLinkinfo datatype,
has been renamed mtu (maximum transmit unit).
- The constant
LT_POINT2POINT has been renamed LT_WAN ,
the constant LT_ETHERNET has been renamed LT_LAN ,
and the new constant LT_WLAN introduced.
- Timer events now range from
EV_TIMER0..EV_TIMER9
(no longer 1..10), and
debug events now range from EV_DEBUG0..EV_DEBUG4
(no longer 1..5).
- Two new nodetypes,
NT_MOBILE and NT_ACCESSPOINT
have been added to support mobile and wireless network simulations.
- new and changed APIs:
- All functions accepting lengths (e.g. number of bytes in a frame)
are now of type
size_t .
- Several new functions make multiple MT19937 sequences available in
each node:
CNET_srand , CNET_rand , CNET_newrand , and
CNET_nextrand .
- Several new functions supporting wireless LANs introduced:
CNET_get_position ,
CNET_set_position ,
CNET_wlan_arrival ,
CNET_get_wlaninfo , and
CNET_set_wlaninfo .
- The functions
CNET_shmem
and CNET_check_version
introduced.
- Checksum and CRC functions have been renamed:
checksum_crc16 ->
CNET_crc16 ,
checksum_crc32 ->
CNET_crc32 ,
checksum_ccitt ->
CNET_ccitt , and
checksum_internet ->
CNET_IP_checksum .
- changes to the Tcl/Tk windowing:
- The speed of the simulation may now be controlled from the main window
(under Tcl/Tk).
- The single-step button now correctly increments the simulation time.
- The main statistics window now displays instantaneous
as well as total statistics.
- The current simulation time is now displayed on the main window.
- Deprecated:
- Everything previously requiring the
CnetInt64 datatype and
the int64_* API has been replaced by the 64-bit integer type
int64_t in ISO-C99.
- The
CNET_set_promiscuous function.
- The
-P option (which specified the source code files for a
Physical Layer) is now longer supported.
- The
-k option (which compiled protocols with an "old"
Kernighan and Ritchie (K&R) C compiler) is no longer supported.
- Each of the very old
CNET_set_cursor ,
CNET_get_cursor ,
CNET_clear_to_eos and
CNET_clear_to_eoln
functions are no longer recognized.
Version 2.0 - from February 2002 (no longer supported)
- v2.0.10 - many modifications to source code to provide clean
compilation of cnet and examples with new, more rigorous, versions of gcc.
- v2.0.9 - another attempt to correct a bug which permitted events to
be delivered after a node had crashed.
- v2.0.8 - corrected a bug in the
<cnet64bits.h> header file
which permitted only constants to be passed as arguments to
int64_INIT .
Corrected a bug which permitted timer events to still expire
after a node had crashed.
Improved installation on FreeBSD (5.1-RELEASE) -
thanks to Rohan Joyce
<joycer01(at)tartarus.uwa.edu.au> for submitting a patch.
Corrected the detection of PowerPC architectures.
- v2.0.7 - corrected the detection of SPARC architectures and some
compiler warnings when using gcc and ANSI-C - thanks to Peter Neubert
<neubert(at)mcs.sci.kuniv.edu.kw> for reporting the problem.
- v2.0.6 - fixed an off-by-one error in handling changing linkstates
(re)reported by Donald Gordon.
- v2.0.5 - added facility for a short string to be drawn on animated
frames - thanks to Alex Feldman
<alex(at)alexandrite.boisestate.edu> for the suggestion.
- v2.0.4 - compilations with gcc now have the
-Werror
flag added by default.
Improved the CHECK() macro in <cnet.h> .
Improvements to installation scripts -
thanks to John Murdie <john(at)cs.york.ac.uk> for these.
Fixed an off-by-one error in handling changing linkstates -
thanks to Donald Gordon <Donald.Gordon(at)mcs.vuw.ac.nz> for this.
- v2.0.3 - small change to the scheduling of Ethernet segments -
thanks to Klaus Doerrscheidt <kdoerrscheidt(at)web.de> for this.
- v2.0.2 - small event scheduler problem corrected.
- Support for 10Mbps IEEE 802.3 Ethernet segments has been added;
physical links are now each of the new type
CnetLinkType .
- Network Interface Cards (NICs) connect nodes to Ethernet segments;
the new datatype
CnetNICaddr
provides support for each NIC's hardware address.
The address may be set with the new function
CNET_set_nicaddr ,
and the new functions
CNET_parse_nicaddr and
CNET_format_nicaddr
convert between character strings and the CnetNICaddr datatype.
NICs may be set into promiscuous mode with the new function
CNET_set_promiscuous .
- 64-bit integers are now used to store all times (now in microseconds)
and large statistics.
A new datatype,
CnetInt64 ,
and a number of arithmetic, conversion, and I/O routines are defined
in the new header file
<cnet64bits.h> .
The new header file is included by the standard header file
<cnet.h> .
- The values of
nodeinfo.messagerate ,
nodeinfo.time_in_usec , and
linkinfo[i].propagationdelay
are now of type CnetInt64 .
- The 2nd argument of
CNET_start_timer
is now of type CnetInt64 and requests a time in microseconds,
not milliseconds.
- Three new constants,
HAVE_LONG_LONG , SIZEOF_INT , and SIZEOF_LONG
must now be specified in the config.h file.
- Nodes are now provided with
command-line arguments
when they reboot.
- The Application Layer is now consulted to check that user-requested
message sizes are neither too big nor too small.
- Documentation extended, including some much-requested
protocol walkthroughs.
- Tcl/Tk scripts corrected to capture WM_DELETE_WINDOW messages for all
top-level windows.
- Corrected the values displayed on each node's Tcl/Tk radiobuttons
used to modify the node's attributes at run-time.
- Output via stdio functions (to Tcl/Tk windows) simplified and improved
so that scrollbars do not "jump back" to bottom of the window
on every output.
- All statistics are now "flushed" via a single Tcl/Tk periodic event,
rather than via cnet's main scheduler.
- Statistics windows are now only updated if they have changed values.
- Improved documentation.
Version 1.7 - August 2001 (no longer supported)
- The data-link frames of 2-node simulations may now be
animated.
A new
EV_DRAWFRAME event provides the user's protocol code
with the opportunity to specify how the each individual data-Link
frame is to be drawn. The protocols themselves do not need to
provide any special windowing/drawing code.
Up to 6 fields of each frame may be drawn in colours specified in
the standard header file <cnet.h> .
- Event tracing now appears in a separate scrollable Tcl/Tk window
under the main map window (rather than just to
stderr ).
A separate file may also be specified via the new global
attribute
tracefile (specified in the topology file),
to receive a full copy of the simulation's trace.
- The link attributes of
costperframe or costperbyte
may now be drawn on each link on the topology map by setting the
new Boolean attributes
costperframe or costperbyte
to true in the topology file.
costperframe is shown in preference to costperbyte .
- Added facility for protocol source and object files to be specified
with full pathnames.
- Physical Layer corruption now only modifies two bytes of a frame
to guarantee detection by the provided checksum functions.
- The Physical Layer may now to asked to corrupt frames by truncating
them, by setting
MAY_TRUNCATE_FRAMES in config.h .
- A background image (GIF) may now be displayed on the toplogy map under
Tcl/Tk by specifying the new
bgimage
attribute in the topology file.
- Support added for the FreeBSD platform -
thanks to Jordan Hubbard <jkh(at)freebsd.org>
and Michael Haro <mharo(at)area51.fremont.ca.us>
- Support added for the NetBSD platform -
thanks to Mark Davies, <mark(at)mcs.vuw.ac.nz>
- Corrected a bug where any output to a node's window produced by
an
EV_DEBUG? event handler did not appear if using the
-q comand-line option.
- Each node's statistics' window is now only updated if that window if
displayed.
- The values of
CnetTimerID returned by CNET_start_timer ,
are now an independent property of each node.
- A number of internal global variables consolidated into the
gattr structure.
- Each node's name, in
nodeinfo.nodename , is now stored in a
fixed sized array of MAX_NODENAME_LEN (=32) bytes,
rather than via a character pointer.
- Improved documentation.
Version 1.6 - May 2000 (no longer supported)
- The cnet functions
CNET_set_cursor ,
CNET_get_cursor ,
CNET_clear_to_eoln , and
CNET_clear_to_eos are no longer supported.
- When tracing events, arbitrary addresses/variables may now be traced
by name (instead of their hexadecimal addresses) by calling
CNET_trace_name at the top of an event's handler.
- The link attributes of
propagationdelay and
bandwidth may no longer be changed at run-time via the
windowing interface.
- A new function,
CNET_timer_data , enables a protocol to
retrieve a timer's user-data before the timer expires.
This permits a protocol to retrive and deallocate dynamically
allocated storage before it calls CNET_stop_timer .
- No "raw" X-window API functions called.
All windowing, mouse tracking, fonts etc, are provided by Tcl/Tk.
No special support provided for monochrome-only displays.
- All windowing for statistics, etc, "pushed" into the Tck/Tk code.
- Support added for Tcl/Tk v8.0 and beyond.
- A warning message is porduced if a provided topology file is not
connected. Random topologies, requested via the
-r nnodes
command-line option, are now guaranteed to be connected.
- Node icons are now located in a directory via the value of
CNETPATH , rather than as statically-compiled XPM structures.
XPM operating system support is no longer required.
- Both recieve and interupt now recognized spelling errors.
- Improved documentation.
Version 1.5 - April 1999 (no longer supported)
- Support for Linux a.out format dropped
(now only ELF format).
- Support for Motif and XView windowing dropped
(now only Tcl/Tk).
- Improved documentation.
Version 1.4 - February 1997 (no longer supported)
Version 1.3 - July 1996 (no longer supported)
Version 0.1 - June 1991 (no longer supported)
|