gns3 / dynamips Goto Github PK
View Code? Open in Web Editor NEWDynamips development
License: GNU General Public License v2.0
Dynamips development
License: GNU General Public License v2.0
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:
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"
.nvram_push_config
split the data if the divider is foundprivate-config
nvram_push_config
aware of private-config
in the nvram and preserve it when writing startup-config
@grossmj
What would be preferable?
http://forum.gns3.net/topic5520.html
http://forum.gns3.net/topic5374.html
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.
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.
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
-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
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:
Disadvantages:
(...)
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'"
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
http://forum.gns3.net/topic8508.html
Patch: http://forum.gns3.net/post26454.html#p26454
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'"]
IOS crashes at startup with C7200-IO-2FE + 5 or 6 PA-2FE-TX.
This is probably related to unfinished hardware features.
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
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
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 long
s
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
Reimplement the standalone tool nvram_export
:
IOS crashes after router restart (start, stop, start, crash)
Reported to happen with:
Likely cause: something that is supposed to be cleared on reset isn't being cleared
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
You lose the configuration files when you do write mem
or copy run start
, stop the router and start again.
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.
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
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.
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)
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 ...
http://forum.gns3.net/topic167.html
http://forum.gns3.net/topic5051.html
http://forum.gns3.net/topic6349.html
issue #29 - packet loss with multicast traffic
segmentation fault when accessing the memory mapped file of a device
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). =~~
This issue is a collection of data aimed at improving idle pc calculation.
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.
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.
vm clean <instance_name>
Deletes all <platform>_<instance_name>_*
files in the working directory.
The vm must exist and be stopped.
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?
I don't know the source of the microcode.
The oldest dynamips source code I could find already has it in binary form.
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
The nvram_extract_config
functions open the nvram/rom with vm_mmap_open_file
, but never close it.
Therefore a file description is being leaked every time the config is extracted/read.
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.
Doing a reload from the router console doesn't work properly, probably due to missing hardware functionality.
Not sure if it fails on all the models, but I assume so.
Packet transmission is limited because:
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)
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
Someone on the forum has submitted this idea. Don't know if this is feasible but I find it interesting.
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?
./path/to/dynamips.exe -P 2600 [-j] c2600-image.bin
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
Tried each configuration 3 times.
Invalid IA 0x00000005
Invalid IA 0x00000005
It's unrelated, but the cygwin console doesn't work properly after killing the dynamips process.
TODO
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:
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.
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!
GNS3 isn't notified when a router stops, which means it's an inconsistent state when the IOS crashes for some reason.
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.
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.
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.
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]"
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%).
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:
All the limits I found:
In short:
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)
http://forum.gns3.net/post31730.html
http://ask.wireshark.org/questions/23620/an-error-while-capturing-with-gns-3
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
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.
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.
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
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)
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:
!!!!.
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.
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
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:
README.hypervisor
man/hypervisor_mode.7
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?
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)
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
: TLB (load or instruction fetch) exception, CPU signal 10, PC = 0x633E0788
Possible software fault. Upon reccurence, please collect
-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
-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
-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
=== Flushing messages () ===
-Alexey "Technologov"
[email protected]
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
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.