GithubHelp home page GithubHelp logo

dynamips's Introduction

Dynamips (Cisco Router Emulator)

Build Status

Overview

Authors of this document: Fabien Devaux, Christophe Fillot, MtvE, Gordon Russell, Jeremy Grossmann and Flávio J. Saraiva.

Converted to markdown format by Daniel Lintott.

This is a continuation of Dynamips, based on the last development version and improved with patches wrote by various people from the community. This fork was named Dynamips-community up to the 0.2.8-community release and renamed to the original Dynamips on the 0.2.9 release.

You can compile two different versions of Dynamips with this code. Edit the Makefile to set the flags to suit your environment. One of the flags, DYNAMIPS_CODE, can be "stable" or "unstable".

Unstable is the code which contains most of the development code, and is in particular suitable for use on a 64 bit Mac. Unfortunately this has proved to be unstable on other platforms.

Stable contains the same code as Unstable, minus some mips64 bit optimisations and tcb code which seems to trigger instability on a number of platforms. You should probably use stable unless you have a very good reason.

For more information on the how to use Dynamips see the README file

License: GNU GPLv2 only

How to compile Dynamips

Dynamips now uses the CMake build system. To compile Dynamips you will need CMake and a working GCC or Clang compiler, as well as the build dependencies.

Build Dependencies

On Debian based systems the following build dependencies are required and can be installed using apt-get:

  • libelf-dev
  • libpcap0.8-dev

On Redhat based systems (CentOS, Fedora etc) the following build dependencies are required and can be installed using yum:

  • elfutils-libelf-devel
  • libpcap-devel

Similar packages should be available for most distributions, consult your distributions package list to find them.

MacPort & Homebrew:

  • libelf
  • cmake

Windows with Cygwin:

  • Install Winpcap: https://www.winpcap.org/
  • Install Cygwin 32-bit (setup-x86.exe): https://cygwin.com/install.html
  • In Cygwin setup, install the make, cmake, gcc-core and git packages
  • Additionally, install the libelf0 package (important: both bin and src)
  • Download and unzip Winpcap developer pack: http://www.winpcap.org/devel.htm
  • Copy the libraries WpdPack\Lib\libpacket.a and WpdPack\Lib\libwpcap.a to cygwin\lib\
  • Copy all headers from WpdPack\Include to cygwin\usr\include\

Compiling (Linux/Mac)

Either download and extract a source tarball from the releases page or clone the Git repository using:

git clone git://github.com/GNS3/dynamips.git
cd dynamips
mkdir build
cd build
cmake ..

On OSX Yosemite you need to force usage of GCC 4.9:

cmake ..  -DCMAKE_C_COMPILER=/usr/local/bin/gcc-4.9

And for building stable release:

cmake .. -DDYNAMIPS_CODE=stable  -DCMAKE_C_COMPILER=/usr/local/bin/gcc-4.9

This will generate the Makefiles required for compiling Dynamips. To just build Dynamips simple run:

make

or to build and install Dynamips run:

make install

The specify a differant installation location run:

cmake -DCMAKE_INSTALL_PREFIX=/target/path ..

Compiling (Windows)

Open the Cygwin terminal.

First, the libelf has to be manually compiled and installed:

<MIRROR_DOWNLOADS> is the directory used by your Cygwin mirror to download packages. It is possible that the libelf version differs from below.

cp <MIRROR_DOWNLOADS>/x86/release/libelf/libelf0/libelf0-0.8.13-2-src.tar.bz2 .
mkdir libelf && tar xvjf libelf0-0.8.13-2-src.tar.bz2 -C libelf
cd libelf
tar xvzf libelf-0.8.13.tar.gz
cd libelf-0.8.13
./configure
make
make install

Then, Dynamips can be build:

git clone git://github.com/GNS3/dynamips.git
cd dynamips
mkdir build
cd build
cmake ..
make

You will find dynamips.exe in the stable directory. Put cygwin1.dll from the Cygwin bin directory in the same directory as dynamips.exe to be able to start it from outside Cygwin terminal.

Releasing

  • Update ChangeLog
  • In common/dynamips.c update sw_version_tag with date
  • Update RELEASE-NOTE
  • Update CMakeLists.txt
  • git tag the release

Useful Information

Forum: https://gns3.com/community

Repository: https://github.com/GNS3/dynamips

Bugtracker: https://github.com/GNS3/dynamips/issues

dynamips's People

Contributors

candlerb avatar ddragic avatar dresslerfrank avatar flaviojs avatar grossmj avatar julien-duponchelle avatar mend-for-github-com[bot] avatar ocochard avatar paluchpeter avatar twowheeldev avatar ziajka avatar znley avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dynamips's Issues

"Frame is Too Long" error in Wireshark

Description:

A packet with size >= 64KiB was dumped to the capture file but wireshark only suports up to 65535 bytes in a packet.

Sending and receiving packets is done in separate threads.
libpcap/WinPcap isn't thread safe and two threads were dumping at the same time, resulting in the data of one of the frames being out of order. The next frame header contains garbage data, almost always leading to this error (the chance is over 99.99%).

Analysis:

GNS3 uses the dynamips filter called "capture" to dump packets to a .cap file.
Which means I can probably fix it by splitting big packets into multiple chunks.

Different changes might be needed depending on what is triggering it:

  • either it's sending a huge (tcp?) packet that is meant to be split by the network card during transmission
  • or it's a bunch of packets sent together as one
  • or another scenario I can't think of right now

All the limits I found:

  • WinPcap NICs (Network Interface Cards) have a packet limit of 32KiB (BPF_MAXBUFSIZE in pcap/bfp.h)
  • libpcap DLPIs (Data Link Provider Interfaces) have a packet limit of 32KiB or 64KiB
  • libpcap filters have a packet limit of 50KiB
  • the other cases aren't limited (analysis stuff ignored)

In short:

  1. libpcap/WinPcap doesn't have a global packet size limit of 64KiB
  2. the limits I found do not affect our particular case
  3. the file format supports packets up to 4GiB in size (some places treat it as signed, so 2GiB is safer)

We are setting low snapshot values (max size of captured packets) and we don't respect it's value when dumping.
I'll change it to be configurable, default to the max value supported by wireshark and respect it while dumping.
NOTE: wireshark ignores the snapshot value


(continued in the next comment)

Links:

http://forum.gns3.net/post31730.html
http://ask.wireshark.org/questions/23620/an-error-while-capturing-with-gns-3

cmake fails

I built a new Linux box (Mint 17.0) and pulled the dynamips repo as per the instructions:

git clone git://github.com/GNS3/dynamips.git
cd dynamips
mkdir build
cd build
cmake ..

but the cmake fails:

user@GNS3v1 ~/GNS3/Source/dynamips/build $ cmake ..
-- CMAKE_MODULE_PATH=/home/user/GNS3/Source/dynamips/cmake
-- The C compiler identification is GNU 4.8.2
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- broken
CMake Error at /usr/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake:61 (message):
  The C compiler "/usr/bin/cc" is not able to compile a simple test program.

  It fails with the following output:

   Change Dir: /home/user/GNS3/Source/dynamips/build/CMakeFiles/CMakeTmp

  

  Run Build Command:/usr/bin/make "cmTryCompileExec2932928433/fast"

  /usr/bin/make -f CMakeFiles/cmTryCompileExec2932928433.dir/build.make
  CMakeFiles/cmTryCompileExec2932928433.dir/build

  make[1]: Entering directory
  `/home/user/GNS3/Source/dynamips/build/CMakeFiles/CMakeTmp'

  /usr/bin/cmake -E cmake_progress_report
  /home/user/GNS3/Source/dynamips/build/CMakeFiles/CMakeTmp/CMakeFiles 1

  Building C object
  CMakeFiles/cmTryCompileExec2932928433.dir/testCCompiler.c.o

  /usr/bin/cc -o CMakeFiles/cmTryCompileExec2932928433.dir/testCCompiler.c.o
  -c
  /home/user/GNS3/Source/dynamips/build/CMakeFiles/CMakeTmp/testCCompiler.c

  Linking C executable cmTryCompileExec2932928433

  /usr/bin/cmake -E cmake_link_script
  CMakeFiles/cmTryCompileExec2932928433.dir/link.txt --verbose=1

  /usr/bin/cc CMakeFiles/cmTryCompileExec2932928433.dir/testCCompiler.c.o -o
  cmTryCompileExec2932928433 -rdynamic

  /usr/bin/ld: cannot find crt1.o: No such file or directory

  /usr/bin/ld: cannot find crti.o: No such file or directory

  /usr/bin/ld: cannot find -lc

  /usr/bin/ld: cannot find crtn.o: No such file or directory

  collect2: error: ld returned 1 exit status

  make[1]: Leaving directory
  `/home/user/GNS3/Source/dynamips/build/CMakeFiles/CMakeTmp'

  make[1]: *** [cmTryCompileExec2932928433] Error 1

  make: *** [cmTryCompileExec2932928433/fast] Error 2

  

  

  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:27 (project)


-- Configuring incomplete, errors occurred!
See also "/home/user/GNS3/Source/dynamips/build/CMakeFiles/CMakeOutput.log".
See also "/home/user/GNS3/Source/dynamips/build/CMakeFiles/CMakeError.log".

And the files mentioned above look like this:

user@GNS3v1 ~/GNS3/Source/dynamips/build $ cat /home/user/GNS3/Source/dynamips/build/CMakeFiles/CMakeOutput.log
The system is: Linux - 3.13.0-24-generic - i686
Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded.
Compiler: /usr/bin/cc 
Build flags: 
Id flags: -c

The output was:
0


Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "CMakeCCompilerId.o"

The C compiler identification is GNU, found in "/home/user/GNS3/Source/dynamips/build/CMakeFiles/2.8.12.2/CompilerIdC/CMakeCCompilerId.o"

And

user@GNS3v1 ~/GNS3/Source/dynamips/build $ cat /home/user/GNS3/Source/dynamips/build/CMakeFiles/CMakeError.log
Compiling the C compiler identification source file "CMakeCCompilerId.c" failed.
Compiler: /usr/bin/cc 
Build flags: 
Id flags: 

The output was:
1
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: cannot find -lc
/usr/bin/ld: cannot find crtn.o: No such file or directory
collect2: error: ld returned 1 exit status


Determining if the C compiler works failed with the following output:
Change Dir: /home/user/GNS3/Source/dynamips/build/CMakeFiles/CMakeTmp

Run Build Command:/usr/bin/make "cmTryCompileExec2932928433/fast"
/usr/bin/make -f CMakeFiles/cmTryCompileExec2932928433.dir/build.make CMakeFiles/cmTryCompileExec2932928433.dir/build
make[1]: Entering directory `/home/user/GNS3/Source/dynamips/build/CMakeFiles/CMakeTmp'
/usr/bin/cmake -E cmake_progress_report /home/user/GNS3/Source/dynamips/build/CMakeFiles/CMakeTmp/CMakeFiles 1
Building C object CMakeFiles/cmTryCompileExec2932928433.dir/testCCompiler.c.o
/usr/bin/cc    -o CMakeFiles/cmTryCompileExec2932928433.dir/testCCompiler.c.o   -c /home/user/GNS3/Source/dynamips/build/CMakeFiles/CMakeTmp/testCCompiler.c
Linking C executable cmTryCompileExec2932928433
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTryCompileExec2932928433.dir/link.txt --verbose=1
/usr/bin/cc       CMakeFiles/cmTryCompileExec2932928433.dir/testCCompiler.c.o  -o cmTryCompileExec2932928433 -rdynamic 
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: cannot find -lc
/usr/bin/ld: cannot find crtn.o: No such file or directory
collect2: error: ld returned 1 exit status
make[1]: Leaving directory `/home/user/GNS3/Source/dynamips/build/CMakeFiles/CMakeTmp'
make[1]: *** [cmTryCompileExec2932928433] Error 1
make: *** [cmTryCompileExec2932928433/fast] Error 2

add hypervisor module for events

GNS3 isn't notified when a router stops, which means it's an inconsistent state when the IOS crashes for some reason.

Events:
  • notify when a router changes state (stop, start, suspend)
  • ...

C3745 has an emulated NVRAM that is not continuous, so we can generate an invalid checksum when the config is written

Symptoms:

You lose the configuration files when you do write mem or copy run start, stop the router and start again.

Details:

The current code assumes the emulated NVRAM and it's backup are continuous blocks of 128 KiB.

After erasing the nvram, it says 155640 bytes total (155588 bytes free), so it's actually bigger.

After writing the maximum number of files (149) and inspecting the rom file I got these notes:

(block 0xB0000 0x20000)

start 0xB0000

sec 149 0xB0C00
...
sec 40 0xCC000
sec 39 0xCC400
sec 38 0xCC800
sec 37 0xCCC00
sec 36 0xCD000
sec 35 0xCD400
sec 34 0xCD800
sec 33 0xCDC00
sec 32 0xCE000
sec 31 0xCE400
sec 30 0xCE800
sec 29 0xCEC00
sec 28 0xCF000
sec 27 0xCF400
sec 26 0xCF800
sec 25 0xCFC00

(block 0xD0000 0x1C000)

start 0xD0000

sec 149 0xD0C00
...
sec 92 0xDF000
sec 91 0xDF400
sec 90 0xDF800
sec 89 0xDFC00
sec 88 0xE0000
sec 87 0xE0400
sec 86 0xE0800
sec 85 0xE0C00
sec 84 0xE1000
sec 83 0xE1400
sec 82 0xE1800
sec 81 0xE1C00
sec 80 0xE2000
sec 79 0xE2400
sec 78 0xE2800
sec 77 0xE2C00
sec 76 0xE3000
sec 75 0xE3400
sec 74 0xE3800
sec 73 0xE3C00
sec 72 0xE4000
sec 71 0xE4400
sec 70 0xE4800
sec 69 0xE4C00
sec 68 0xE5000
sec 67 0xE5400
sec 66 0xE5800
sec 65 0xE5C00
sec 64 0xE6000
sec 63 0xE6400
sec 62 0xE6800
sec 61 0xE6C00
sec 60 0xE7000
sec 59 0xE7400
sec 58 0xE7800
sec 57 0xE7C00
sec 56 0xE8000
sec 55 0xE8400
sec 54 0xE8800
sec 53 0xE8C00
sec 52 0xE9000
sec 51 0xE9400
sec 50 0xE9800
sec 49 0xE9C00
sec 48 0xEA000
sec 47 0xEA400
sec 46 0xEA800
sec 45 0xEAC00
sec 44 0xEB000
sec 43 0xEB400
sec 42 0xEB800
sec 41 0xEBC00

(block 0xEC000 0x6000)

sec 24 0xEC000
sec 23 0xEC400
sec 22 0xEC800
sec 21 0xECC00
sec 20 0xED000
sec 19 0xED400
sec 18 0xED800
sec 17 0xEDC00
sec 16 0xEE000
sec 15 0xEE400
sec 14 0xEE800
sec 13 0xEEC00
sec 12 0xEF000
sec 11 0xEF400
sec 10 0xEF800
sec 9 0xEFC00
sec 8 0xF0000
sec 7 0xF0400
sec 6 0xF0800
sec 5 0xF0C00
sec 4 0xF1000
sec 3 0xF1400
sec 2 0xF1800
sec 1 0xF1C00

(block 0xF2000 0xA000)

sec 40 0xF2000
sec 39 0xF2400
sec 38 0xF2800
sec 37 0xF2C00
sec 36 0xF3000
sec 35 0xF3400
sec 34 0xF3800
sec 33 0xF3C00
sec 32 0xF4000
sec 31 0xF4400
sec 30 0xF4800
sec 29 0xF4C00
sec 28 0xF5000
sec 27 0xF5400
sec 26 0xF5800
sec 25 0xF5C00
sec 24 0xF6000
sec 23 0xF6400
sec 22 0xF6800
sec 21 0xF6C00
sec 20 0xF7000
sec 19 0xF7400
sec 18 0xF7800
sec 17 0xF7C00
sec 16 0xF8000
sec 15 0xF8400
sec 14 0xF8800
sec 13 0xF8C00
sec 12 0xF9000
sec 11 0xF9400
sec 10 0xF9800
sec 9 0xF9C00
sec 8 0xFA000
sec 7 0xFA400
sec 6 0xFA800
sec 5 0xFAC00
sec 4 0xFB000
sec 3 0xFB400
sec 2 0xFB800
sec 1 0xFBC00

(block 0xFC000 0)

The data is not continuous, so when we write the config file we produce an invalid checksum if there are files stored after the filesystem address 0x1C000.

Unfortunately the sectors start at the end of the filesystem (to easily expand the config files) so, if there's any file other than startup-config and private-config in the filesystem, we'll produce an invalid checksum when writing the config files.

Related topics:

http://forum.gns3.net/topic5051.html

packet loss with multicast traffic

i'm studying for CCIE, in particular to copy multicast topics...

while studying i faced a very weird issues where packets would be dropped "somewhere in the topology" and in that point, ping to the directly connected neighbor would timeout...

after deep investigations i found those two old topics (2008 and 2009)

http://7200emu.hacki.at/viewtopic.php?t=4537
http://ieoc.com/forums/t/3488.aspx

and this more recent in 2012

http://chasingmyccie.wordpress.com/2012/02/02/avoid-ip-multicast-in-your-gns3-labs

in particular what happen is that packets are lost somewhere and is impossible to ping even a directly connected router when the packet loss is isolated on a particular link

this issue is still present with dynamips 0.2.11


Related Topics:

http://forum.gns3.net/topic8508.html
Patch: http://forum.gns3.net/post26454.html#p26454

there is missing hardware functionality

I tried a c3745 image and got suspicious messages in the console during startup.
In the log file there was evidence that the hardware isn't fully functional.

Symptoms in the router console:

At startup:

BIST FAILED...
Unknown file system detected.

R1#show flash: chips

Chip information NOT available.

R1#format flash:

%Error formatting flash (No device available)

Sample errors from log file:

CPU0: IO_FPGA: read from unknown addr 0x6, ...
CPU0: IO_FPGA: read from unknown addr 0x16, ...
CPU0: IO_FPGA: read from unknown addr 0x2e, ...
CPU0: IO_FPGA: read from unknown addr 0x30, ...
CPU0: IO_FPGA: read from unknown addr 0x4c, ...
CPU0: IO_FPGA: read from unknown addr 0x10000a, ...
CPU0: IO_FPGA: write to unknown addr 0x16, ...
CPU0: IO_FPGA: write to unknown addr 0x2e, ...
CPU0: IO_FPGA: write to unknown addr 0x30, ...
CPU0: IO_FPGA: write to unknown addr 0x4c, ...
CPU0: IO_FPGA: write to unknown addr 0x10000a, ...
CPU0: PCI: write request (data=0xc0000000) for unknown device ...
CPU0: MTS: read access to undefined address 0x3c080022 ......
ROM: unhandled syscall 0x0000003e ...
ROM: unhandled syscall 0x00000047 ...

Related topics:

http://forum.gns3.net/topic167.html
http://forum.gns3.net/topic5051.html
http://forum.gns3.net/topic6349.html

Related issues

issue #29 - packet loss with multicast traffic

Telnet output speed

If I remember correctly, before the Dynamips community releases the Console/Telnet output was in chunk of text and not line by line like it is now. Most likely a buffer flush was added somewhere in the code. Apparently some users miss this because it looks faster for them?! I think you don't really have this issue on fast computers.

Related post: http://forum.gns3.net/topic10338.html

reimplement nvram_export

Reimplement the standalone tool nvram_export:

  • use the NVRAM filesystem (fs_nvram.c/.h)
  • support all known formats
  • perform extra checks when opening the filesystem (addr, checksum, backup filesystem)
  • command line options to select the platform or provide custom format settings (meh, too lazy =~~)
  • extract private-config too (optional extra argument)

Rename issues

If I create a router named "R1" and rename it R2 using vm rename R1 R2 I get the following problems:

vm list returns '101 x (c7200)', the x must be a default value when a vm cannot be found.

vm delete R2 fails with "unable to delete VM 'R2'"

libelf not found error on osx10.8.5

hi,all:
i try to compile the dynamips on my mac os,but it throw errors like below:

make -C stable
Linking rom2c
../common/rom2c.c:15:10: fatal error: 'libelf.h' file not found
#include <libelf.h>
         ^
1 error generated.
make[1]: *** [rom2c] Error 1
make: *** [dynamips.stable] Error 2

Then i use homebrew to install the libelf. And it still doesn't work.I install it on /usr/local/lib/libelf.a and the header file on /usr/local/include/libelf/libelf.h.So i try to modify the files that use it and change the #include <libelf.h> to #include <libelf/libelf.h>.And it finally be compiled.

The compiled result:

make -C stable
Compiling ../common/dynamips.c
..........
Compiling ../common/gen_eth.c
Linking dynamips
ld: warning: directory not found for option '-L/opt/local/lib'
Compiling ../common/nvram_export.c
Linking nvram_export
mv stable/dynamips dynamips.stable
mv stable/nvram_export nvram_export.stable

I wonder if this is a bug on mac os?


max os details:

➜  dynamips-0.2.12  uname -a
Darwin admintekiMacBook-Pro.local 12.5.0 Darwin Kernel Version 12.5.0: Sun Sep 29 13:33:47 PDT 2013; root:xnu-2050.48.12~1/RELEASE_X86_64 x86_64

libelf details:

➜  dynamips-0.2.12  brew info libelf
libelf: stable 0.8.13 (bottled)
http://www.mr511.de/software/
/usr/local/Cellar/libelf/0.8.13 (11 files, 264K) *
  Poured from bottle
From: https://github.com/mxcl/homebrew/commits/master/Library/Formula/libelf.rb

[CRITICAL] Dynamips Router crash with IDLE PC value !!!

Short:
When I run a particular Cisco IOS v15 image on Dynamips it works as long as no idle-pc value attached.
After I attach an IDLE-PC value, IOS would CRASH !!
Without IDLE-PC it boots and works fine. (at the cost of 100% CPU usage per core)
Have you experienced anything similar ? (This never happened to me with older IOS v12.3 series)

date: 25.06.2014.
idlepc = 0x60788d00 (also tried with 0x6077c110 and same result !)
IOS image = c7200-adventerprisek9_sna-mz.150-1.M.bin (also happens with: c7200-spservicesk9-mz.150-1.M.bin and c7200-advipservicesk9-mz.150-1.M.bin)
GNS3 = 0.8.6 on Windows 7 x64
Dynamips v0.2.10-x86 (comes with GNS3 all-in-one installer)
I allocated 512 MB RAM for IOS. (16 GB RAM on host)

Booting IOS v15 on Dynamips with IDLE-PC value attached:

Cisco IOS Software, 7200 Software (C7200-ADVENTERPRISEK9_SNA-M), Version 15.0(1)M, RELEASE SOFTWARE (fc2)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2009 by Cisco Systems, Inc.
Compiled Wed 30-Sep-09 07:48 by prod_rel_team
Image text-base: 0x6000F624, data-base: 0x6432CC80

: TLB (store) exception, CPU signal 10, PC = 0x633AE134


Possible software fault. Upon reccurence, please collect

crashinfo, "show tech" and contact Cisco Technical Support.

: TLB (load or instruction fetch) exception, CPU signal 10, PC = 0x633E0788


Possible software fault. Upon reccurence, please collect

crashinfo, "show tech" and contact Cisco Technical Support.

-Traceback=
$0 : 00000000, AT : 66120000, v0 : 00000000, v1 : 00000000
a0 : 7CFFFFA8, a1 : 00000001, a2 : 653650AC, a3 : 00000000
t0 : 00000020, t1 : 00000038, t2 : 00000000, t3 : FFFF00FF
t4 : 60768438, t5 : 00000000, t6 : 00000001, t7 : 00000000
s0 : 00000000, s1 : 00000038, s2 : 633AE134, s3 : 65ED0000
s4 : 00000001, s5 : 65ED0000, s6 : 647E0000, s7 : 00000012
t8 : 00000000, t9 : 00000000, k0 : 665BAFF8, k1 : 00000000
gp : 66127640, sp : 659C53B0, s8 : 00000034, ra : 633E0774
EPC : 633E0788, ErrorEPC : 00000000, SREG : 34008003
MDLO : 00000000, MDHI : 00000006, BadVaddr : 00000040
CacheErr : 00000000, DErrAddr0 : 00000000, DErrAddr1 : 00000000
TEXT_START : 0x6000F624
DATA_START : 0x6432CC80
Cause 00000008 (Code 0x2): TLB (load or instruction fetch) exception

: TLB (load or instruction fetch) exception, CPU signal 10, PC = 0x633E0788


Possible software fault. Upon reccurence, please collect

crashinfo, "show tech" and contact Cisco Technical Support.

-Traceback=
$0 : 00000000, AT : 66120000, v0 : 00000000, v1 : 00000000
a0 : 7CFFFFA8, a1 : 00000001, a2 : 653650AC, a3 : 00000000
t0 : 00000020, t1 : 00000038, t2 : 00000000, t3 : FFFF00FF
t4 : 60768438, t5 : 00000000, t6 : 00000001, t7 : 00000000
s0 : 00000000, s1 : 00000038, s2 : 633AE134, s3 : 65ED0000
s4 : 00000001, s5 : 65ED0000, s6 : 647E0000, s7 : 00000012
t8 : 00000000, t9 : 00000000, k0 : 665BAFF8, k1 : 00000000
gp : 66127640, sp : 659C53B0, s8 : 00000034, ra : 633E0774
EPC : 633E0788, ErrorEPC : 00000000, SREG : 34008003
MDLO : 00000000, MDHI : 00000006, BadVaddr : 00000040
CacheErr : 00000000, DErrAddr0 : 00000000, DErrAddr1 : 00000000
TEXT_START : 0x6000F624
DATA_START : 0x6432CC80
Cause 00000008 (Code 0x2): TLB (load or instruction fetch) exception

Nested write_crashinfo call (2 times)

: TLB (load or instruction fetch) exception, CPU signal 10, PC = 0x633E0788


Possible software fault. Upon reccurence, please collect

crashinfo, "show tech" and contact Cisco Technical Support.

-Traceback=
$0 : 00000000, AT : 66120000, v0 : 00000000, v1 : 00000000
a0 : 7CFFFFA8, a1 : 00000001, a2 : 653650AC, a3 : 00000000
t0 : 00000020, t1 : 00000038, t2 : 00000000, t3 : FFFF00FF
t4 : 60768438, t5 : 00000000, t6 : 00000001, t7 : 00000000
s0 : 00000000, s1 : 00000038, s2 : 633AE134, s3 : 65ED0000
s4 : 00000001, s5 : 65ED0000, s6 : 647E0000, s7 : 00000012
t8 : 00000000, t9 : 00000000, k0 : 665BAFF8, k1 : 00000000
gp : 66127640, sp : 659C53B0, s8 : 00000034, ra : 633E0774
EPC : 633E0788, ErrorEPC : 00000000, SREG : 34008003
MDLO : 00000000, MDHI : 00000006, BadVaddr : 00000040
CacheErr : 00000000, DErrAddr0 : 00000000, DErrAddr1 : 00000000
TEXT_START : 0x6000F624
DATA_START : 0x6432CC80
Cause 00000008 (Code 0x2): TLB (load or instruction fetch) exception

-Traceback=

: TLB (load or instruction fetch) exception, CPU signal 10, PC = 0x633E0BE0


Possible software fault. Upon reccurence, please collect

crashinfo, "show tech" and contact Cisco Technical Support.

=== Flushing messages () ===

-Alexey "Technologov"
[email protected]

c1700 IOS images start once and then fail to boot on second boot.

Originally reported there: GNS3/gns3-gui#70

I ran some tests and it appears that the problem comes from the sparse memory feature.

To reproduce, start the hypervisor: dynamips -H 7200, telnet to it and paste the following commands. Any c1700 image should do. I suspect the same problem with c2600 images.

hypervisor working_dir "/tmp/"
vm create "R1" 1 c1700
vm set_sparse_mem "R1" 1
vm set_con_tcp_port "R1" 2001
vm set_ram "R1" 128
vm set_ios "R1" "/home/grossmj/GNS3/images/IOS/c1700-advsecurityk9-mz.124-25d.image"
vm start "R1"
vm stop "R1"
vm start "R1"

Dynamips will crash just after the restart and throw many error messages like this one:

PPC32: unknown opcode 0x00000000 at ia = 0x4d4
PowerPC Registers:
  $ 0 = 0x00000000  $ 1 = 0x80005fb8  $ 2 = 0x00000000  $ 3 = 0x00000000
  $ 4 = 0xf6000000  $ 5 = 0x00000000  $ 6 = 0x00000000  $ 7 = 0x00000000
  $ 8 = 0x00000000  $ 9 = 0xf6000000  $10 = 0x00000000  $11 = 0x00000003
  $12 = 0x00000000  $13 = 0x00000000  $14 = 0x00000000  $15 = 0x00000000
  $16 = 0x00000000  $17 = 0x00000000  $18 = 0x00000000  $19 = 0x00000000
  $20 = 0x00000000  $21 = 0x00000000  $22 = 0x00000000  $23 = 0x00000000
  $24 = 0x00000000  $25 = 0x00000000  $26 = 0x00000000  $27 = 0x00000000
  $28 = 0x00000000  $29 = 0xf6000000  $30 = 0x00000064  $31 = 0x4c61756e

  ia = 0x000004d4, lr = 0x803aa174
  cr = 0x00000002, msr = 0x00000000, xer = 0x00000000, dec = 0x00000000
  sprg[0] = 0x00000000, sprg[1] = 0x00000000
  sprg[2] = 0x00000000, sprg[3] = 0x00000000

  IRQ count: 0, IRQ false positives: 0, IRQ Pending: 0, IRQ Check: no
  Timer IRQ count: 0, pending: 0, timer drift: 0

  Device access count: 330

Everything works if you remove the set_sparse_mem command from the commands above.

Couldn't compute FAST_CWD pointer (cygwin)

I don't know if this is may be a problem or not but a user reported this issue on the forum. I've seen it myself before and chose to ignore it so far.

When I try to load a new router or switch it hangs for a while then loads but it pops out an on the command prompt window of GNS3-ER which i don't even understand its meaning, here is the error:

"1 [main] dynamips 7460 find_fast_cwd: WARNING: Couldn't compute FAST_CWD pointer. Please report this problem to the public mailing list [email protected]"

http://forum.gns3.net/topic9794.html

Errors GNS 3

I cannot get the GUI to work at all. This is what shows up in my console when I open it.

GNS3 management console. Running GNS3 Early Release (ER) version 1.0-alpha1.
Copyright (c) 2006-2014 GNS3 Project.

=> ---------Traceback lines (saved in exception.log)----------
Traceback (most recent call last):

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/main_window.py", line 715, in startupLoading
self._createTemporaryProject()

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/main_window.py", line 908, in _createTemporaryProject
self.uiGraphicsView.setLocalBaseWorkingDirtoAllModules(self._project_files_dir)

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/graphics_view.py", line 110, in setLocalBaseWorkingDirtoAllModules
instance.setLocalBaseWorkingDir(path)

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/modules/dynamips/init.py", line 156, in setLocalBaseWorkingDir
servers = Servers.instance()

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/servers.py", line 319, in instance
Servers._instance = Servers()

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/servers.py", line 49, in init
self._loadSettings()

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/servers.py", line 80, in _loadSettings
self.setLocalServer(local_server_path, local_server_host, local_server_port)

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/servers.py", line 191, in setLocalServer
self._local_server = WebSocketClient(url)

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/websocket_client.py", line 46, in init
ssl_options, headers=headers)

TypeError: init() got an unexpected keyword argument 'headers'


---------Traceback lines (saved in exception.log)----------
Traceback (most recent call last):

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/main_window.py", line 641, in _preferencesActionSlot
dialog = PreferencesDialog(self)

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/preferences_dialog.py", line 44, in init
self._loadPreferencePages()

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/preferences_dialog.py", line 65, in _loadPreferencePages
servers_page.loadPreferences()

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/pages/server_preferences_page.py", line 150, in loadPreferences
servers = Servers.instance()

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/servers.py", line 319, in instance
Servers._instance = Servers()

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/servers.py", line 49, in init
self._loadSettings()

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/servers.py", line 80, in _loadSettings
self.setLocalServer(local_server_path, local_server_host, local_server_port)

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/servers.py", line 191, in setLocalServer
self._local_server = WebSocketClient(url)

File "/usr/local/lib/python3.3/dist-packages/gns3_gui-1.0_alpha1-py3.3.egg/gns3/websocket_client.py", line 46, in init
ssl_options, headers=headers)

TypeError: init() got an unexpected keyword argument 'headers'


�I am running Xubuntu.
Any ideas? Thanks!

Hypervisor documentation is out of date

Hypervisor module object_store is not documented.

Related code is located in hv_store.c, and it's objects have type OBJ_TYPE_STORE.
Discovered while analysing issue #21.

Tasks:

  • Update README.hypervisor
  • Update man/hypervisor_mode.7

Short lived MAC Address Table in NM-16ESW

Quote rednectar.chris:

I'm not sure if it has anything to do with the way the IOS code does timing
- if it times 300 seconds by way of a system clock then I guess dynamips is
not emulating that clock well enough.  If it is some other arbitrary timing
measure then it would be a difficult job to trace.

Related topics

http://forum.gns3.net/topic6794.html

Renaming devices

Right now when a user rename a device in GNS3, the device is deleted and recreated with the new name.

Here is an example of what happens when you change the hostname for a router from R1 to R2. Everything (all the parameters, UDP NIOs if there are connections etc.) has to be sent again. Surely this is not efficient.

15:02:23: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm delete R1
15:02:23: DEBUG (1): returned -> ["100-VM 'R1' deleted"]
15:02:23: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm create R2 1 c3725
15:02:23: DEBUG (1): returned -> ["100-VM 'R2' created"]
15:02:23: DEBUG (1): PORT TRACKER: allocate port 2102
15:02:23: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_con_tcp_port R2 2102
15:02:23: DEBUG (1): returned -> ['100-OK']
15:02:23: DEBUG (1): PORT TRACKER: allocate port 2502
15:02:23: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_aux_tcp_port R2 2502
15:02:23: DEBUG (1): returned -> ['100-OK']
15:02:23: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_ios R2 "c3725-adventerprisek9-mz.124-15.T14.image"
15:02:23: DEBUG (1): returned -> ["100-IOS image set for 'R2'"]
15:02:23: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_ram R2 128
15:02:23: DEBUG (1): returned -> ['100-OK']
15:02:23: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_sparse_mem R2 1
15:02:23: DEBUG (1): returned -> ['100-OK']
15:02:23: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_idle_pc R2 0x60c086a8
15:02:23: DEBUG (1): returned -> ['100-OK']
15:02:23: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_ghost_status R2 2
15:02:23: DEBUG (1): returned -> ['100-OK']
15:02:23: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_ghost_file R2 "c3725-adventerprisek9-mz.124-15.T14.image-127.0.0.1.ghost"
15:02:23: DEBUG (1): returned -> ['100-OK']
15:02:23: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_con_tcp_port R2 2101
15:02:23: DEBUG (1): returned -> ['100-OK']
15:02:23: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_aux_tcp_port R2 2501
15:02:23: DEBUG (1): returned -> ['100-OK']

There is the same issue with all other Dynamips devices (Ethernet, ATM, Frame-relay switches, ATM bridge, Ethernet hub)

What I propose is to add new hypervisor commands to simply rename devices internally in Dynamips.

IOS device: vm rename old_hostname new_hostname
Ethernet switch: ethsw rename old_hostname new_hostname
Ethernet hub: nio_bridge rename old_hostname new_hostname
Frame-relay switch: frsw rename old_hostname new_hostname
ATM bridge: atm_bridge rename old_hostname new_hostname
ATM switch: atmsw rename old_hostname new_hostname

Thus for instance, the only command needed to rename a router from R1 to R2 would become the following:

15:02:23: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm rename R1 R2
15:02:23: DEBUG (1): returned -> ["100-VM 'R1' renamed 'R2'"]

Knowing when the NVRAM has been modified.

GNS3 should have a way to check if a user issued a "wr" or "copy running-config startup-config" in IOS (in other words if the NVRAM has been modified), thus preventing the user to close GNS3 before he has saved the config.

Don't really know how to implement something like that, my idea is that GNS3 could send a command e.g. "check nvram R1" and Dynamips would reply something like "nvram R1 checksum". Based on the returned checksum, GNS3 would know if the NVRAM has been modified since last time it checked.

Now the big question, is it possible to know if the NVRAM has changed in Dynamips?

replace hypervisor with JSON-RPC?

The idea popped up in my mind a while ago.

The hypervisor syntax is very limited (ex: we have to send complex text as Base64).
It's also difficult to extend functionality.

Replacing the hypervisor with JSON-RPC would allow for lots of flexibility.
JSON can represent any data, so it would be easy to extend functionality (arbitrary arguments and return value).

Advantages:

  • standard format that defines a request-response (version 2.0 defines a notification)
  • easy to extend since methods can have arbitrary arguments and return value
  • more programs can interact with us (JSON is easy to use)
  • it probably needs less parsing code in the methods
  • ...

Disadvantages:

  • replacing the hypervisor would break compatibility with older versions (just bump up the major version?)
  • ...

(...)

Unknown file system detected

Unknown file system detected.
Use format command to format the card as DOS File System.
Or use erase command to format the card as Low End File System.

It appears that cisco supports the Microsoft 16-bit File Allocation Table (FAT16) file system.
So auto-formatting created "Compact Flash" disk files with this file system might fix this. (disks connected to router with PCMCIA, instead of on-board flash chips)

http://www.cisco.com/c/en/us/td/docs/routers/access/1800/1841/software/configuration/guide/sw/b_cflash.html

Related topics

http://forum.gns3.net/topic167.html

Compile fails with bin_ext

Compile fails with bin_ext defined due to slight oversight. Patch below resolves locally:

--- dynamips-community-0.2.8-community/stable/Makefile  2013-07-04 00:03:33.000000000 -0500
+++ dynamips-0.2.8-community/stable/Makefile    2013-07-08 11:22:44.948424227 -0500
@@ -262,10 +262,10 @@
        @$(CC) -Wall $(CFLAGS) -o $@ $< $(LIBS)

 mips64_microcode_dump.inc: rom2c$(BIN_EXT) mips64_microcode
-       @./rom2c mips64_microcode mips64_microcode_dump.inc 0xbfc00000
+       @./rom2c$(BIN_EXT) mips64_microcode mips64_microcode_dump.inc 0xbfc00000

 ppc32_microcode_dump.inc: rom2c$(BIN_EXT) ppc32_microcode
-       @./rom2c ppc32_microcode ppc32_microcode_dump.inc 0xfff00000
+       @./rom2c$(BIN_EXT) ppc32_microcode ppc32_microcode_dump.inc 0xfff00000

 # explicit dependencies needed for parallel jobs
 dev_rom.c: mips64_microcode_dump.inc ppc32_microcode_dump.inc

[feature-request] Mgmt.iface for Cisco Routers (Sliprt/NAT)

I suggest to add management interface to Cisco Routers, like it is done for VirtualBox.

It will allow to stealth-connect to the routers via "backdoor" via TCP/IP, HTTP, telnet and SNMP from the host machine (GNS3) to manage them, and even allows to change IP addresses from GNS3 GUI itself.
It will also allow to "simulate traffic", i.e. send "ping" from one device to the next via this backdoor, all without interfering with the user's console port.

This will require us to patch Dynamips emulator with NAT/slirp module. This networking module, written in C, originally comes from Qemu, but it was ported to other emulators also (VDE, Bochs and VirtualBox).

-Technologov, 29.09.2014.

Dynagen reload issue with Dynamips 0.2.10-amd64

Hello,

I have noticed a bug when using dynagen with Dynamips 0.2.10-amd64 and trying to reload a router. Every time a router needs to be reloaded, I have to stop all the routers, exit dynagen, kill dynamips and start the dynamips and dynagen processes again. Please note that this is not due to lack of RAM - I have plenty available.

I get the following error messages:

In Dynagen:

=> reload R3

C7200 'R3': stopping simulation.
100-VM 'R3' stopped
CPU0: carved JIT exec zone of 64 Mb into 2048 pages of 32 Kb.
C7200 instance 'R3' (id 2):
VM Status : 0
RAM size : 256 Mb
IOMEM size : 256 Mb
NVRAM size : 128 Kb
NPE model : npe-400
Midplane : vxr
IOS image : /opt/dynamips/images/c7200-advipservicesk9-mz.122-33.sre3.extracted.bin

Loading ELF file '/opt/dynamips/images/c7200-advipservicesk9-mz.122-33.sre3.extracted.bin'...
ELF loading skipped, using a ghost RAM file.
ELF entry point: 0x80008000

C7200 'R3': starting simulation (CPU0 PC=0xffffffffbfc00000), JIT enabled.
100-VM 'R3' started
=> MIPS64 Registers:
zr ($ 0) = 0x0000000000000000 at ($ 1) = 0x0000000063de0000
v0 ($ 2) = 0x0000000000000000 v1 ($ 3) = 0x00000000630b0000
a0 ($ 4) = 0xffffffffffffffe8 a1 ($ 5) = 0x0000000000000001
a2 ($ 6) = 0x0000000000000000 a3 ($ 7) = 0x000000000000000e
t0 ($ 8) = 0x0000000000000001 t1 ($ 9) = 0x0000000000000001
t2 ($10) = 0x000000006416a544 t3 ($11) = 0x000000006416a548
t4 ($12) = 0x000000006416a530 t5 ($13) = 0x00000000000003fc
t6 ($14) = 0x00000000000000ff t7 ($15) = 0x000000006416a4f4
s0 ($16) = 0x000000006416a094 s1 ($17) = 0x0000000061720f28
s2 ($18) = 0x0000000063b4502c s3 ($19) = 0x000000006416a08c

MIPS64 Registers:
zr ($ 0) = 0x0000000000000000 at ($ 1) = 0x0000000064070000
v0 ($ 2) = 0x0000000000000000 v1 ($ 3) = 0x0000000000000000
a0 ($ 4) = 0x0000000000000038 a1 ($ 5) = 0x000000007cffffa8
a2 ($ 6) = 0x0000000064170000 a3 ($ 7) = 0x0000000000000001
t0 ($ 8) = 0x0000000000000020 t1 ($ 9) = 0x0000000000000038
t2 ($10) = 0x0000000000000000 t3 ($11) = 0x0000000000000038
t4 ($12) = 0x0000000000008000 t5 ($13) = 0xffffffffffff00ff
t6 ($14) = 0x0000000000000000 t7 ($15) = 0x0000000000000000
s0 ($16) = 0x0000000000000000 s1 ($17) = 0x0000000061747474
s2 ($18) = 0x0000000063b40000 s3 ($19) = 0x0000000000000001
s4 ($20) = 0x0000000063b40000 s5 ($21) = 0x00000000637e0000
s6 ($22) = 0x000000000000000d s7 ($23) = 0x0000000000000012
t8 ($24) = 0x0000000000000000 t9 ($25) = 0x00000000617a364c
k0 ($26) = 0x00000000642d2e60 k1 ($27) = 0x0000000000000000
gp ($28) = 0x0000000063ded340 sp ($29) = 0x0000000063dcf618
fp ($30) = 0x0000000000000034 ra ($31) = 0x000000006177c54c
lo = 0x0000000000001040, hi = 0x0000000000000000
pc = 0x000000006177c580, ll_bit = 0
Instruction: 8c680040 lw t0,64(v1)

CP0 Registers:
index ($ 0) = 0x0000000000000005 random ($ 1) = 0x0000000000000012
entry_lo0 ($ 2) = 0x0000000001200017 entry_lo1 ($ 3) = 0x0000000001210017
context ($ 4) = 0x0000000000000000 pagemask ($ 5) = 0x00000000007fe000
wired ($ 6) = 0x0000000000000000 info ($ 7) = 0x0000000020000000
badvaddr ($ 8) = 0x000000000000001c count ($ 9) = 0x0000000040c6b40e
entry_hi ($10) = 0x000000003c000000 compare ($11) = 0x0000000040cb3aa6
status ($12) = 0x0000000034008001 cause ($13) = 0x000000000000000c
epc ($14) = 0x0000000061747474 prid ($15) = 0x0000000000002721
config ($16) = 0x0000000000c08ff0 ll_addr ($17) = 0x0000000000000000
watch_lo ($18) = 0x0000000000000000 watch_hi ($19) = 0x0000000000000000
xcontext ($20) = 0x0000000000000000 cp0_r21 ($21) = 0x0000000000000000
cp0_r22 ($22) = 0x0000000000000000 cp0_r23 ($23) = 0x0000000000000000
cp0_r24 ($24) = 0x0000000000000000 cp0_r25 ($25) = 0x0000000000000000
ecc ($26) = 0x0000000000000000 cache_err ($27) = 0x0000000000000000
tag_lo ($28) = 0x0000000000000000 tag_hi ($29) = 0x0000000000000000
err_epc ($30) = 0x0000000000000000 cp0_r31 ($31) = 0x0000000000000000

IRQ count: 2955, IRQ false positives: 21, IRQ Pending: 0
Timer IRQ count: 2535, pending: 25, timer drift: 0

Device access count: 197824

MIPS64 Registers:
zr ($ 0) = 0x0000000000000000 at ($ 1) = 0x0000000063de0000
v0 ($ 2) = 0x0000000000000001 v1 ($ 3) = 0x000000007cffffb8
a0 ($ 4) = 0x0000000000000000 a1 ($ 5) = 0x000000007bffff60
a2 ($ 6) = 0x0000000000000001 a3 ($ 7) = 0x00000000637e0000
t0 ($ 8) = 0xffffffffffffffff t1 ($ 9) = 0x0000000063de0000
t2 ($10) = 0x00000000630b3620 t3 ($11) = 0x00000000630b0000
t4 ($12) = 0x0000000000000000 t5 ($13) = 0x0000000000000001
t6 ($14) = 0x0000000000000000 t7 ($15) = 0x0000000000000002
s0 ($16) = 0x0000000000000000 s1 ($17) = 0x0000000061720f28
s2 ($18) = 0x000000006416a094 s3 ($19) = 0x0000000000000000
s4 ($20) = 0x000000006416a08c s5 ($21) = 0x000000007bffff50
s6 ($22) = 0xffffffffffffffe8 s7 ($23) = 0x0000000061782de0
t8 ($24) = 0x0000000000000000 t9 ($25) = 0x0000000000000000
k0 ($26) = 0xffffffffbfc003e0 k1 ($27) = 0x0000000000008000
gp ($28) = 0x0000000063ded340 sp ($29) = 0x0000000065b03e40
fp ($30) = 0x0000000064366a70 ra ($31) = 0x0000000061746c58
lo = 0x0000000000001040, hi = 0x0000000000000000
pc = 0x0000000061746c78, ll_bit = 0
Instruction: ae6a000c sw t2,12(s3)

CP0 Registers:
index ($ 0) = 0x0000000000000005 random ($ 1) = 0x0000000000000003
entry_lo0 ($ 2) = 0x0000000001200017 entry_lo1 ($ 3) = 0x0000000001210017
context ($ 4) = 0x0000000000000000 pagemask ($ 5) = 0x00000000007fe000
wired ($ 6) = 0x0000000000000000 info ($ 7) = 0x0000000020000000
badvaddr ($ 8) = 0x0000000000000040 count ($ 9) = 0x000000004262aa92
entry_hi ($10) = 0x000000003c000000 compare ($11) = 0x0000000042673766
status ($12) = 0x000000003400ff01 cause ($13) = 0x0000000000000000
epc ($14) = 0x0000000061782738 prid ($15) = 0x0000000000002721
config ($16) = 0x0000000000c08ff0 ll_addr ($17) = 0x0000000000000000
watch_lo ($18) = 0x0000000000000000 watch_hi ($19) = 0x0000000000000000
xcontext ($20) = 0x0000000000000000 cp0_r21 ($21) = 0x0000000000000000
cp0_r22 ($22) = 0x0000000000000000 cp0_r23 ($23) = 0x0000000000000000
cp0_r24 ($24) = 0x0000000063db0000 cp0_r25 ($25) = 0x0000000000000000
ecc ($26) = 0x0000000000000000 cache_err ($27) = 0x0000000000000000
tag_lo ($28) = 0x0000000000000000 tag_hi ($29) = 0x0000000000000000
err_epc ($30) = 0x0000000000000000 cp0_r31 ($31) = 0x0000000000000000

IRQ count: 3050, IRQ false positives: 21, IRQ Pending: 0
Timer IRQ count: 2625, pending: 5, timer drift: 0

Device access count: 276702

% No memory map for code execution at 0xdfb10088dfb20000
% Unable to create instruction block for vaddr=0xdfb10088dfb20000
insn_page_compile: unable to create JIT block.
VM 'R3': unable to compile block for CPU0 PC=0xdfb10088dfb20090

On the device:

-Traceback=
$0 : 00000000, AT : 64070000, v0 : 00000000, v1 : 00000000
a0 : 00000038, a1 : 7CFFFFA8, a2 : 64170000, a3 : 00000001
t0 : 00000020, t1 : 00000038, t2 : 00000000, t3 : 00000038
t4 : 00008000, t5 : FFFF00FF, t6 : 00000000, t7 : 00000000
s0 : 00000000, s1 : 61747474, s2 : 63B40000, s3 : 00000001
s4 : 63B40000, s5 : 637E0000, s6 : 0000000D, s7 : 00000012
t8 : 00000000, t9 : 617A364C, k0 : 642D2E60, k1 : 00000000
gp : 63DED340, sp : 63DCF618, s8 : 00000034, ra : 6177C54C
EPC : 6177C580, ErrorEPC : 00000000, SREG : 34008003
MDLO : 00001040, MDHI : 00000000, BadVaddr : 00000040
CacheErr : 00000000, DErrAddr0 : 00000000, DErrAddr1 : 00000000
DATA_START : 0x62AFA000
Cause 00000008 (Code 0x2): TLB (load or instruction fetch) exception

-Traceback=

%ALIGN-1-FATAL: Corrupted program counter 01:26:01 UTC Thu Mar 6 2014
pc=0x61746C78 , ra=0x61746C58 , sp=0x65B03E40

%ALIGN-1-FATAL: Corrupted program counter 01:26:01 UTC Thu Mar 6 2014
pc=0x61746C78 , ra=0x61746C58 , sp=0x65B03E40

01:26:01 UTC Thu Mar 6 2014: TLB (store) exception, CPU signal 10, PC = 0x61746C78


Possible software fault. Upon recurrence, please collect

crashinfo, "show tech" and contact Cisco Technical Support.

-Traceback=
$0 : 00000000, AT : 63DE0000, v0 : 00000001, v1 : 7CFFFFB8
a0 : 00000000, a1 : 7BFFFF60, a2 : 00000001, a3 : 637E0000
t0 : FFFFFFFF, t1 : 63DE0000, t2 : 630B3620, t3 : 630B0000
t4 : 00000000, t5 : 00000001, t6 : 00000000, t7 : 00000002
s0 : 00000000, s1 : 61720F28, s2 : 6416A094, s3 : 00000000
s4 : 6416A08C, s5 : 7BFFFF50, s6 : FFFFFFE8, s7 : 61782DE0
t8 : 00000000, t9 : 00000000, k0 : BFC003E0, k1 : 00008000
gp : 63DED340, sp : 65B03E40, s8 : 64366A70, ra : 61746C58
EPC : 61746C78, ErrorEPC : 00000000, SREG : 3400FF03
MDLO : 00001040, MDHI : 00000000, BadVaddr : 0000000C
CacheErr : 00000000, DErrAddr0 : 00000000, DErrAddr1 : 00000000
DATA_START : 0x62AFA000
Cause 0000000C (Code 0x3): TLB (store) exception

=== Flushing messages (01:26:01 UTC Thu Mar 6 2014) ===

Buffered messages:
Queued messages:
No cache error exceptions since boot

No warm reboot Storage

'unstable' installs 'stable' version on Mac OS X

Ever since dynamips migrated to cmake, I have not been able to install the unstable version on Mac OS X. Repro steps:

$ cd /tmp
$ git clone https://github.com/GNS3/dynamips.git
$ cd /tmp/dynamips
$ mkdir build; cd $_
$ cmake -DANY_COMPILER=1 ..
$ sudo make install

Summary output of CMake displays the unstable version.

Summary:
  CMAKE_INSTALL_PREFIX               : /usr/local
  DYNAMIPS_ARCH                      : amd64
  DYNAMIPS_CODE                      : unstable
  DYNAMIPS_RENAME                    : dynamips_amd64_unstable -> dynamips  (auto)
  BUILD_NVRAM_EXPORT                 : ON
  BUILD_UDP_SEND                     : OFF
  BUILD_UDP_RECV                     : OFF
  Large File support                 : ENABLE_LARGEFILE=ON
  Linux Ethernet (RAW sockets)       : no, not Linux  (linux_eth)
  Generic Ethernet (libpcap/WinPcap) : ENABLE_GEN_ETH=ON  (gen_eth)
  IPv6 support (RFC 2553)            : ENABLE_IPV6=ON
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/dynamips/build

"Tail" output for sudo make install:

...
Linking C executable dynamips
[100%] Built target dynamips_amd64_unstable
Install the project...
-- Install configuration: ""
-- Installing: /usr/local/share/doc/dynamips/ChangeLog
-- Installing: /usr/local/share/doc/dynamips/COPYING
-- Installing: /usr/local/share/doc/dynamips/MAINTAINERS
-- Installing: /usr/local/share/doc/dynamips/README
-- Installing: /usr/local/share/doc/dynamips/README.hypervisor
-- Installing: /usr/local/share/doc/dynamips/RELEASE-NOTES
-- Installing: /usr/local/share/doc/dynamips/TODO
-- Installing: /usr/local/share/man/man1/dynamips.1
-- Installing: /usr/local/share/man/man1/nvram_export.1
-- Installing: /usr/local/share/man/man7/hypervisor_mode.7
-- Installing: /usr/local/bin/nvram_export
-- Installing: /usr/local/bin/dynamips

But when I display the version for the installed binary...

$ type -a dynamips
dynamips is /usr/local/bin/dynamips

$ dynamips 2> /dev/null | grep version
Cisco Router Simulation Platform (version 0.2.14-dev-amd64/Darwin stable)

Ironically, the stable version is unstable on Mac OS X x64, so I'm curious if I'm missing something as the output of cmake and make install means it should install the unstable version.

Testing this with GNS3 also confirms this is the unstable stable version because the dynamips process crashes as soon as you attempt to establish a console connection to a running router instance.

vm send_con_msg

We are using the dynamips hypervisor directly and wish to send
commands to the router's console in order to perform dynamic
reconfiguration. The "vm send_con_msg <instance_name> "
command works great, except that we are unable to send a
carriage return to make the router accept the configuration
string. We've tried escaping the carriage return, sending escape sequences,
etc. Is there a trick for getting a command sent via send_con_msg?

Any help or ideas would be greatly appreciated.

Improve idlepc detection

This issue is a collection of data aimed at improving idle pc calculation.

How idlepc suggestions are calculated:

  • repeat 1000 times (not in cpu thread):
    • count instruction address
    • sleep 10ms
  • for each instruction address:
    • if instruction was counted between 20 to 80 times, add it as a suggestion
    • if there are 10 suggestions, we're done

Other information:

  • I'm assuming the best idlepc values point inside the scheduler function (is there a low priority idle task?)
  • GNS3 0.8.6 auto detection seems to land either inside the scheduler or inside the console handling function most of the time (my intuition)
  • IOS: (ref: https://github.com/flaviojs/dynamips-datasheets/blob/master/cisco/ciscoiosprogrammguide1999.pdf?raw=true)
    • uses cooperative multitasking, so there is a central scheduler that calls tasks. each task should be fast, possibly only doing part of the work in that iteration, and not worry about being interrupted
    • it's very modular, so the scheduler code is probably the same in most of the images

Questions:

  • Why are the idlepc suggestions restricted to those counted between 20 and 80 times out of 1000? Is more than 80 bad?
  • As I understand it, when operating systems want to idle they tell the motherboard/cpu to slow down. How is that done in the hardware we emulate and does IOS use it?

Ideas:

  1. Assuming the scheduler code is almost always the same except for offsets, it's should be possible to find a pattern to identify it. (already possible, needs someone willing to look at the data around detected idlepc values)
  2. A scheduler calls many different functions, maybe we can identify the scheduler by counting address+return_address combinations when a return occurs (note that library functions also have many return addresses)
  3. Slow down when IOS tells it to slow down. (I need more information!!)

compile in MinGW

dynamips doesn't compile in MinGW.
Currently it can compile in Cygwin by relying on it's posix-ness.

Tasks:

  • lock files

    use https://github.com/epi/xedisk/wiki/File-locking as reference

  • missing header sys/mmap.h

    memory mapped files, can be replaced with windows.h (WinXP+)

    mmap -> CreateFileMapping + MapViewOfFile

    munmap -> UnmapViewOfFile

    msync -> FlushViewOfFile (asynchronous, so not exactly what we need)

    consider moving memzone_* functions from utils.c to a separate file memzone.c

  • missing header uuid/uuid.h

    external library, can be replaced with Rpc.h (Win2000+)

    create compatible functions

    uuid_t <-> UUID - convert Data1 with htonl/ntohl, convert Data2 and Data3 with htons/ntohs

    uuid_generate -> UuidCreateNil + UuidCreate

    uuid_parse -> UuidFromString

    uuid_unparse -> UuidToString

    uuid_compare -> UuidCompare

  • missing headers sys/socket.h + sys/un.h + arpa/inet.h + netdb.h + netinet/in.h

    sockets, can be replaced with winsock2.h + ws2tcpip.h (WinXP+ or WinVista+)

    most IPv6 stuff is WinVista+, try to implement it for WinXP+? (WinXP is EOL now)

    struct sockaddr_un doesn't exist, filter out code that needs it

  • other missing headers

    arpa/inet.h - dev_vtty.c, gen_eth.c, hv_atmsw.c, hv_atm_bridge.c, hv_c1700.c, hv_c2600.c, hv_c2691.c, hv_c3600.c, hv_c3725.c, hv_c3745.c, hv_c7200.c, hv_ethsw.c, hv_frsw.c, hv_nio.c, hv_nio_bridge.c, hv_store.c, hv_vm_debug.c, net.c, net_io.c, net_io_filter.c, parser.c, timer.c, utils.c, hv_vm.c, hypervisor.c
    arpa/telnet.h- dev_vtty.c
    dlfcn.h - plugin.c
    netdb.h - dev_vtty.c, gen_eth.c, net.c, net_io.c, net_io_filter.c, timer.c, utils.c
    netinet/in.h - gen_eth.c, net_io.c, net_io_filter.c, timer.c, utils.h(!!)
    netinet/tcp.h - dev_vtty.c
    sys/ioctl.h - gen_eth.c, hv_atmsw.c, hv_atm_bridge.c, hv_c1700.c, hv_c2600.c, hv_c2691.c, hv_c3600.c, hv_c3725.c, hv_c3745.c, hv_c7200.c, hv_ethsw.c, hv_frsw.c, hv_nio.c, hv_nio_bridge.c, hv_store.c, hv_vm_debug.c, net.c, net_io.c, net_io_filter.c, parser.c, utils.c, hv_vm.c, hypervisor.c
    sys/mman.h - utils.c
    sys/select.h - atm.c, atm_bridge.c, atm_vsar.c, eth_switch.c, frame_relay.c, net_io_bridge.c
    sys/socket.h - cisco_eeprom.c, dev_vtty.c, gen_eth.c, hv_atmsw.c, hv_atm_bridge.c, hv_c1700.c, hv_c2600.c, hv_c2691.c, hv_c3600.c, hv_c3725.c, hv_c3745.c, hv_c7200.c, hv_ethsw.c, hv_frsw.c, hv_nio.c, hv_nio_bridge.c, hv_store.c, hv_vm_debug.c, net.c, net_io.c, net_io.h(!!), net_io_filter.c, net_io_filter.h(!!), parser.c, ptask.h(!!), timer.c, utils.c, hv_vm.c, hypervisor.c
    sys/uio.h - atm_vsar.c
    sys/un.h - net_io.c, net_io.h(!!), net_io_filter.c, net_io_filter.h(!!), ptask.h(!!)
    sys/wait.h - gen_eth.c, net_io.c, net_io_filter.c, registry.c
    termios.h - dev_c1700_iofpga.c, dev_c2600_iofpga.c, dev_c2691_iofpga.c, dev_c3600_iofpga.c, dev_c3725_iofpga.c, dev_c3745_iofpga.c, dev_c6msfc1_iofpga.c, dev_c6sup1_iofpga.c, dev_c7200_iofpga.c, dev_ds1620.c, dev_ns16552.c, dev_sb1.c, dev_sb1_io.c, dev_vtty.c

  • consider adding a global include, like all.h, to be included before anything else.

    all OS/compiler juggling can be put in there, as well as common includes.

    currently utils.h serves that purpose, along with providing utility functions.

  • check all longs

    in windows it's always 32-bits, in linux it's either 32-bits or 64-bits (size of pointer)

  • find more stuff that needs changing...

  • make it compile with CMake (optional) - cmake is supported now

'make' with several job slots

Building project in parallel jobs fails with following error.

make -j4
../common/dev_rom.c:22:37: fatal error: mips64_microcode_dump.inc: No such file or directory

"make -j1" works fine, though.

Serial Interface Line protocol Issue

I have a mac 10.9 mavericks with GNS 3 installed.Serial Interface come up initially on no shut command but then go down after 15 sec.I am also not able to ping my own interface.Its a totally whacked out situation

using a self decompressing image can lead to a an invalid IA and stop the cpu

Test Scenario:

  • start dynamips with a c2600 image that self decompresses
    • ./path/to/dynamips.exe -P 2600 [-j] c2600-image.bin
  • somehow the execution goes to an invalid IA after decompression
  • the cpu stops

I'm using a x86 cygwin stable build.

NOTE: with no instructions being processed the console is obviously unresponsive, so this problem might be perceived as the console hanging

Test Configurations:

Tried each configuration 3 times.

  • jit, memwatch:
    • after decompression I get the error Invalid IA 0x00000005
  • nojit, memwatch:
    • all ok
  • jit, no memwatch:
    • after decompression I get the error Invalid IA 0x00000005

It's unrelated, but the cygwin console doesn't work properly after killing the dynamips process.

Initial Suspicion:

  • the memory page with the self decompression code is compiled in JIT
  • the self decompression code writes data to it's own page
  • somehow the jit code of the page isn't invalidated (critical part)
  • finally, an out of date instruction (jit code) is executed, leading to unpredictable results

Current State:

  • since it doesn't manifest with jit disabled and i'm using a x86 stable build, it's related to the x86 jit code
  • since it doesn't manifest in the unstable branch, which has new tcb code, it's probably related to that code
  • there is also a memory leak of x86 jit ops somewhere (haven't been able to track it down yet), so it might be related to that

Related Topics:

TODO

hypervisor command to clean the files of a vm

After making this post I realized that all the old files still remain after you rename a vm.
These files might interfere with a new vm that has the original name and the same platform, so there should be a way to clean them.

Hypervisor command:

vm clean_delete <instance_name>

Deletes the router instance and all the <platform>_<instance_name>_*/<platform_name>_i<instance_id>_* files in the working directory.

Prototype:

vm clean <instance_name>

Deletes all <platform>_<instance_name>_* files in the working directory.
The vm must exist and be stopped.

My concerns:

1. It can delete unrelated files with the same prefix - is this ok?

2. I considered not requiring the vm to exist by providing an optional argument [<platform>], but this raises security concerns since it can build any path for files that have at least one underscore. (ex: platform /tmp/ and instance name /../file produces the pattern /tmp/_/../file_*)
This can be minimized by traversing the working dir and comparing the filename prefixes, but it can still target any file that has two underscores.

What do you think @grossmj?

Dynamips router gives me a flapping link when using ppp multilink

IOS image: c7200-adventerprisek9-mz.152-4.S5.bin
GNS3 0.8.6 on Windows 7 x64
Dynamips 0.2.10

Problem:
PPP Multilink on Dynamips gives me a flapping link when connected more than 1 hop away ! (like R3 to R5)

Topology --
topology2

When ppp multilink is configured between R4 and R5, remote ping from R3 to R5 is flapping... like this:

R3#ping 219.17.100.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 219.17.100.2, timeout is 2 seconds:
.!!..
Success rate is 40 percent (2/5), round-trip min/avg/max = 64/66/68 ms
R3#ping 219.17.100.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 219.17.100.2, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
R3#ping 219.17.100.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 219.17.100.2, timeout is 2 seconds:
!!!!.

=== PPP Multilink configuration

This is simple -- connect 2x serials (s1/2 and s1/3) on two routers (R4 and R5).

!
interface Multilink1
ip address 219.17.100.1 255.255.255.0
ppp multilink
ppp multilink group 1
!
!
interface Serial1/2
no ip address
encapsulation ppp
ppp multilink
ppp multilink group 1
serial restart-delay 0
!
interface Serial1/3
no ip address
encapsulation ppp
ppp multilink
ppp multilink group 1
serial restart-delay 0
!

Workaround:
(config)# no ip cef
This command restores ping !

Strange NOTE:
Neighboring routers connect fine !
R4 can ping to R5, no problem ! Only 1 hop away is a problem !

-Technologov, 23.07.2014.

Reproducable crash

Have a dynamips reproducable crash using self compiled RC7 x86_64 on linux.

session crashes when only running single 7200 npe400 router through GNS3.

Router acting as mpls PE for serial interface pseudowire connection. Trigger for crash is frame relay client off of router establishing a md5 secured eigrp session with the other end frame relay device across the pseudowire.

Pseudowire terminates on a real 7200 physical serial interface on the far end.

How can I assist further?

Console hangs up when trying to connect to 7200 router that was stopped/started in GNS3

IOS: 12.4-24T5 (tested few IOSs with the same results
Dynamips 0.2.8RC7 (I noticed the problem above version 0.2.8RC3 - included)
GNS3 0.8.4-RC4

Problem can by reproduced anytime. Just stop 7206VXR router and start it again and try to connect to the console of the router. The bug is 7200 specific, other models run ok. Seems that bug is presented for all 7200 IOS. Problem is also described here:

http://forum.gns3.net/topic5022.html

This is the log:

GNS3 management console. Running GNS3 version 0.8.4-RC4.
Copyright (c) 2006-2013 GNS3 Project.

=> 11:35:51: DEBUG (1): PORT TRACKER: registering additional local address 127.0.0.1
11:35:51: DEBUG (1): PORT TRACKER: registering additional local address ::1
11:35:51: DEBUG (1): PORT TRACKER: registering additional local address 192.168.0.153
11:35:51: DEBUG (1): PORT TRACKER: registering additional local address FE80::6A5D:43FF:FEAD:AFC5%wlan0
11:35:51: DEBUG (1): PORT TRACKER: registering additional local address 192.168.122.1
11:36:08: DEBUG (2): Running config: {}
11:36:08: DEBUG (2): Convert path /home/brezular/GNS3-work/test-dynamips2/configs to a relative path : configs
11:37:04: DEBUG (2): Use image: 127.0.0.1:/home/brezular/Downloads/GNS3-files/IOS/Unpacked-ios/c7200-adventerprisek9-mz.124-24.T5.bin.unpacked
11:37:04: DEBUG (2): Set default RAM: 512
11:37:04: DEBUG (2): Starting Dynamips with -H 7200 (old way with Dynamips version 0.2.8-RC3 and before)
11:37:04: DEBUG (2): Hypervisor manager: connecting on 127.0.0.1:7200
11:37:05: DEBUG (2): Hypervisor manager: connected to hypervisor on 127.0.0.1 port 7200
11:37:05: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> hypervisor version
11:37:05: DEBUG (1): returned -> ['100-0.2.8-RC3-amd64']
11:37:05: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> hypervisor reset
11:37:05: DEBUG (1): returned -> ['100-OK']
11:37:05: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> hypervisor working_dir "/home/brezular/GNS3-work"
11:37:05: DEBUG (1): returned -> ['100-OK']
11:37:05: DEBUG (2): Hypervisor manager: create a new hypervisor on 127.0.0.1 port 7200
11:37:05: DEBUG (2): Hypervisor manager: hypervisor base UDP is 10000
11:37:05: DEBUG (2): Set image /home/brezular/Downloads/GNS3-files/IOS/Unpacked-ios/c7200-adventerprisek9-mz.124-24.T5.bin.unpacked
11:37:05: DEBUG (2): Set idlemax 1500
11:37:05: DEBUG (2): Set idlesleep 30
11:37:05: DEBUG (2): Enable mmap
11:37:05: DEBUG (2): Enable sparse memory
11:37:05: DEBUG (2): Enable Ghost IOS
11:37:05: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm create R1 0 c7200
11:37:05: DEBUG (1): returned -> ["100-VM 'R1' created"]
11:37:05: DEBUG (1): PORT TRACKER: allocate port 2001
11:37:05: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_con_tcp_port R1 2001
11:37:05: DEBUG (1): returned -> ['100-OK']
11:37:05: DEBUG (1): PORT TRACKER: allocate port 2501
11:37:05: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_aux_tcp_port R1 2501
11:37:05: DEBUG (1): returned -> ['100-OK']
11:37:05: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> c7200 set_npe R1 npe-400
11:37:05: DEBUG (1): returned -> ['100-OK']
11:37:05: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_ios R1 "/home/brezular/Downloads/GNS3-files/IOS/Unpacked-ios/c7200-adventerprisek9-mz.124-24.T5.bin.unpacked"
11:37:05: DEBUG (1): returned -> ["100-IOS image set for 'R1'"]
11:37:05: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_ram R1 512
11:37:05: DEBUG (1): returned -> ['100-OK']
11:37:05: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_sparse_mem R1 1
11:37:05: DEBUG (1): returned -> ['100-OK']
11:37:05: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_ghost_status R1 2
11:37:05: DEBUG (1): returned -> ['100-OK']
11:37:05: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_ghost_file R1 "c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost"
11:37:05: DEBUG (1): returned -> ['100-OK']
11:37:05: DEBUG (2): Router R1 created
11:37:05: DEBUG (2): Applying IOS base config baseconfig.txt
11:37:05: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm push_config R1 IQohCmhvc3RuYW1lIFIxCiEKbm8gaXAgZG9tYWluIGxvb2t1cApubyBpcCBpY21wIHJhdGUtbGltaXQgdW5yZWFjaGFibGUKaXAgdGNwIHN5bndhaXQgNQohCmxpbmUgY29uIDAKIGV4ZWMtdGltZW91dCAwIDAKIGxvZ2dpbmcgc3luY2hyb25vdXMKIHByaXZpbGVnZSBsZXZlbCAxNQogbm8gbG9naW4KbGluZSBhdXggMAogZXhlYy10aW1lb3V0IDAgMAogbG9nZ2luZyBzeW5jaHJvbm91cwogcHJpdmlsZWdlIGxldmVsIDE1CiBubyBsb2dpbgohCiEKZW5kCg==
11:37:05: DEBUG (1): returned -> ["100-IOS config file pushed tm VM 'R1'"]
11:37:05: DEBUG (2): Running config: {'autostart': False, u'127.0.0.1:7200': {'workingdir': u'/home/brezular/GNS3-work', 'udp': 10000, '7200': {'image': u'/home/brezular/Downloads/GNS3-files/IOS/Unpacked-ios/c7200-adventerprisek9-mz.124-24.T5.bin.unpacked', 'ram': 512, 'sparsemem': True, 'ghostios': True}, 'ROUTER R1': {'console': 2001, 'aux': 2501}}}
11:37:12: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm create "ghost-c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost" 1 c7200
11:37:12: DEBUG (1): returned -> ["100-VM 'ghost-c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost' created"]
11:37:12: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_ios "ghost-c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost" "/home/brezular/Downloads/GNS3-files/IOS/Unpacked-ios/c7200-adventerprisek9-mz.124-24.T5.bin.unpacked"
11:37:12: DEBUG (1): returned -> ["100-IOS image set for 'ghost-c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost'"]
11:37:12: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> c7200 set_npe "ghost-c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost" npe-400
11:37:12: DEBUG (1): returned -> ['100-OK']
11:37:12: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_ghost_status "ghost-c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost" 1
11:37:12: DEBUG (1): returned -> ['100-OK']
11:37:12: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_ghost_file "ghost-c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost" c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost
11:37:12: DEBUG (1): returned -> ['100-OK']
11:37:12: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm set_ram "ghost-c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost" 512
11:37:12: DEBUG (1): returned -> ['100-OK']
11:37:12: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm start "ghost-c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost"
11:37:14: DEBUG (1): returned -> ["101 Warning: no console port defined for VM 'ghost-c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost'", "100-VM 'ghost-c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost' started"]
11:37:14: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm stop "ghost-c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost"
11:37:14: DEBUG (1): returned -> ["100-VM 'ghost-c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost' stopped"]
11:37:14: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm delete "ghost-c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost"
11:37:14: DEBUG (1): returned -> ["100-VM 'ghost-c7200-adventerprisek9-mz.124-24.T5.bin.unpacked-127.0.0.1.ghost' deleted"]
11:37:14: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm start R1
11:37:14: DEBUG (1): returned -> ["100-VM 'R1' started"]
11:37:21: DEBUG (2): Start console program /usr/bin/konsole -p tabtitle=R1 -e telnet 127.0.0.1 2001 >/dev/null 2>&1 &
11:37:21: DEBUG (2): R1 has 1 terminal program(s) connected to itself
11:37:27: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm stop R1
11:37:28: DEBUG (1): returned -> ["100-VM 'R1' stopped"]
11:37:33: DEBUG (1): sending to dynamips at 127.0.0.1:7200 -> vm start R1
11:37:34: DEBUG (1): returned -> ["100-VM 'R1' started"]
11:37:40: DEBUG (2): Start console program /usr/bin/konsole -p tabtitle=R1 -e telnet 127.0.0.1 2001 >/dev/null 2>&1 &
11:37:40: DEBUG (2): R1 has 1 terminal program(s) connected to itself

[brezular@K55VM ~]$ netstat -ne | grep 7200
tcp 0 0 127.0.0.1:37372 127.0.0.1:7200 ESTABLISHED 0 242998
tcp 1 0 127.0.0.1:7200 127.0.0.1:37371 CLOSE_WAIT 0 241421
tcp 0 0 127.0.0.1:7200 127.0.0.1:37372 ESTABLISHED 0 241424

extend hypervisor commands push_config, extract_config, and set_config

Continuation of issue #11.

Strategy 3 - extend hypervisor commands push_config, extract_config, and set_config

  • when startup/private data isn't provided, preserve existing data

  • push_config takes in a new optional argument for the private data.

    New behavior: the string '(keep)' means no data is provided and it should preserve existing data

    New behavior: an empty string '' means no data is provided and it should preserve existing data (to write an empty string as data, send a base64 encoded string with only padding '====')

  • extract_config returns both startup and private data.

  • set_config takes in a new optional argument for the file with private data.

    New behavior: an empty string '' means no config file.

  • add command-line option for the private-config file

Protocol status incorrect

Detecting the protocol down (shutting down the remote interface) on etheret interfaces does not work.

A fa0/0<->fa1/0 B

Turning down the interface fa1/0 should result in a "Protocol down" on interface fa0/0. But this behavior does only work on serial interfaces.


Related topics:

GUI Notes

Using GNS3 ER 1.0a6:
Unable to add notes to a project, i.e. IP Address, etc.
Show / hide interface labels doesn't work
Device & Tools tabs are blank.

Dynamips hangs on startup if no (or unknown) parameters are given v0.2.8 and 0.2.9

Originally described in http://forum.gns3.net/topic6748.html the issue seems isolated to Linux, and on versions AFTER 0.2.8-RC6 (haven't tested RC7). So far only tested on Ubuntu and Mint.

Symptoms

dynamips simply hangs. Sometimes - perhaps once every three or four instances, perhaps as little as one every ten launches.

To test, open a terminal window, and enter the command (--help is an example of an unkown parameter)

dynamips
or
dynamips --help

If all is well, dynamips will spit out a large page of information, and return to the prompt

If all is NOT well, you will see the same large page of info - BUT THE PROCESS WILL HANG - you will have to hit ^c to kill it:

BIST FAILED

BIST FAILED...
Unknown file system detected.
Use format command to format the card as DOS File System.
Or use erase command to format the card as Low End File System.

The BIST FAILED message is probably due to unimplemented hardware features.
From the messages that come after it, it appears to be related to PCMCIA disks.

But since BIST appears in the PCI registers, the culprit can be any pci device. The lack of proper device connectivity code makes it hard to pinpoint the culprit.

PCI info: http://wiki.osdev.org/PCI

Related topics

http://forum.gns3.net/topic167.html

create hypervisor command to find a pattern in the router memory

In July 2006 it was reported that the idle-pc value can be found by looking for specific patterns.

Philipp in http://www.ipflow.utc.fr/blog/?p=33#comment-2345 and http://www.ipflow.utc.fr/blog/?p=33#comment-2364:

I have been looking for ways to find the idle-pc value by analyzing different images and found that every IOS image I have looked at so far contains one of two byte patterns around the location of the idle-pc.
12.0 and 12.2 to 12.4T: 00100040F80902002021144000120000
12.0T to 12.1: 00100040F80902002021144000130000
...

There are IMHO two ways to automate the search:

  • Offline analysis of the unzipped image: The idle-pc is usually between (0×60007F00 + [offset of pattern] + 0×0a) and (0×60007FFF + [offset of pattern] + 0×0a). I have so far been unable to determine the cause of the slight address variations.
  • At runtime, after the image has self-decompressed: This could be invoked like the current method to find the idle-pc. The ram address-space is searched for those two possible patterns. The address is then: idle-pc = [offset of pattern] + 0×0a.

To allow this, a hypervisor command that finds a sequence of bytes in the memory should be added.

Prototype:

v1 - vm_debug pmem_find <bytes> [,<start> [,<end>]] (discarded)
v2 - vm_debug pmem_find <instance_name> <cpu_id> <bytes> [,<start> [,<end>]] (discarded)
v3 - vm_debug pmem_cfind <instance_name> <cpu_id> <bytes> [,<first> [,<last>]]
Finds the first matching byte sequence in the cacheable physical memory of the router. Returns the address.

  • instance_name - router instance
  • cpu_id - (unused, matching other pmem functions)
  • bytes - sequence of bytes to search (ex: 00AA55FF)
  • first - first address of the search (inclusive, 0 by default)
  • last - last address of the search (inclusive, 0xffffffffffffffff by default)

segmentation fault when accessing a device that failed to memory map it's file

Symptom:

segmentation fault when accessing the memory mapped file of a device

Cause:

mmap failed with MAP_FAILED ((void *)-1) but the code assumes it's NULL on failure, so it's trying to read memory from an invalid memory location


I discovered this by chance, while working inside a xubuntu VirtualBox guest.

I compiled, did a test run of dynamips, and got an unexpected segmentation fault.
The code was still unchanged so there was no reason for that... O_O

It was getting data from the nvram device for c2600_nvram_check_empty_config, and dev->host_addr had the suspicious value 0xffffffff.

I checked how it's set, and it contains the return value of mmap, which means it got a MAP_FAILED with the value 0xffffffff.
Unfortunately the code assumes it's NULL on failure.

It probably failed because this time I was working inside a shared folder (vboxfs). =~~

nvram:private-config is destroyed when we write nvram:startup-config

I decided to get the filesystem format used in the nvram of the routers.

Apparently startup-config and private-config are kept in a special section at the start of the filesystem, but the nvram_push_config/nvram_extract_config functions don't know how to handle private-config.

This means that by writing startup-config we will destroy any pre-existing private-config... =~~
It probably survives if we happen to write the same amount of data as the existing startup-config.

Ok... I can see two ways of dealing with this:

  • Strategy 1 - bundle both in the config file
    • make nvram_extract_config read both files and add some kind of divider to distinguish between them. Ex: "\n!!!! nvram:private-config divider, DO NOT REMOVE !!!!\n".
    • make nvram_push_config split the data if the divider is found
  • Strategy 2 - preserve existing private-config
    • make nvram_push_config aware of private-config in the nvram and preserve it when writing startup-config

@grossmj
What would be preferable?

Related Topics

http://forum.gns3.net/topic5520.html
http://forum.gns3.net/topic5374.html

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.