Cisco has internal testing tool, initialy it is named as IOU (IOS running on Unix, specificaly Solaris). Since Solaris has gone, IOU is ported to run on Intel x86 Linux, so it is called IOL now. It is a very light weight, and it is excellent tool for learning networking protocol.

Since Ubuntu distribution is keeping updated, so it is needed from time to time move IOL to new version of ubuntu.

ARM conf 2016

In this post, I share steps to do to make IOL work under Ubuntu 16.04.

First, notice that IOL is built as 32-bit user space application.

weng@weng-u1604:~/iounet$ file i86bi_linux-adventerprise-ms 
i86bi_linux-adventerprise-ms: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, stripped
weng@weng-u1604:~/iounet$ 

Nowadays, I always run 64-bit ubuntu, here is first thing I need to do to install infrastructure needed for 32-bit application to run.

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1

Lastly, install missing library for IOL specifically

The following command shows libcrypto.so.4 is missing, everything else is fine.

weng@weng-u1604:~/iounet$ ldd i86bi_linux_l2-adventerprise-ms
	linux-gate.so.1 =>  (0xf7726000)
	libcrypto.so.4 => not found
	libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf76e7000)
	libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7691000)
	libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7674000)
	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf74be000)
	libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf74b9000)
	/lib/ld-linux.so.2 (0x56629000)
weng@weng-u1604:~/iounet$

Now we use the command to install libssl. for ubuntu 16.04, it is version 1.0.0. For others, it could be version 0.9.8. After installation is completed, the file /lib/i386-linux-gnu/libcrypto.so.1.0.0 will be created.

weng@weng-u1604:~/iounet$ sudo apt-get install libssl1.0.0:i386
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  gcc-6-base gcc-6-base:i386 lib32gcc1 libc6:i386 libgcc1 libgcc1:i386
  libssl1.0.0 libx32gcc1
Suggested packages:
  glibc-doc:i386 locales:i386
The following NEW packages will be installed:
  gcc-6-base:i386 libc6:i386 libgcc1:i386 libssl1.0.0:i386
The following packages will be upgraded:
  gcc-6-base lib32gcc1 libgcc1 libssl1.0.0 libx32gcc1
5 upgraded, 4 newly installed, 0 to remove and 1088 not upgraded.
Need to get 4,462 kB of archives.
After this operation, 13.1 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 libx32gcc1 amd64 1:6.0.1-0ubuntu1 [38.7 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 lib32gcc1 amd64 1:6.0.1-0ubuntu1 [46.6 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 gcc-6-base amd64 6.0.1-0ubuntu1 [14.3 kB]
Get:4 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 libgcc1 amd64 1:6.0.1-0ubuntu1 [38.5 kB]
Get:5 http://us.archive.ubuntu.com/ubuntu xenial/main i386 gcc-6-base i386 6.0.1-0ubuntu1 [14.3 kB]
Get:6 http://us.archive.ubuntu.com/ubuntu xenial/main i386 libgcc1 i386 1:6.0.1-0ubuntu1 [46.8 kB]
Get:7 http://us.archive.ubuntu.com/ubuntu xenial/main i386 libc6 i386 2.23-0ubuntu3 [2,270 kB]
Get:8 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libssl1.0.0 amd64 1.0.2g-1ubuntu4.5 [1,082 kB]
Get:9 http://us.archive.ubuntu.com/ubuntu xenial-updates/main i386 libssl1.0.0 i386 1.0.2g-1ubuntu4.5 [912 kB]
Fetched 4,462 kB in 7s (636 kB/s)                                              
Preconfiguring packages ...
(Reading database ... 222576 files and directories currently installed.)
Preparing to unpack .../libx32gcc1_1%3a6.0.1-0ubuntu1_amd64.deb ...
Unpacking libx32gcc1 (1:6.0.1-0ubuntu1) over (1:6-20160227-0ubuntu1) ...
Preparing to unpack .../lib32gcc1_1%3a6.0.1-0ubuntu1_amd64.deb ...
Unpacking lib32gcc1 (1:6.0.1-0ubuntu1) over (1:6-20160227-0ubuntu1) ...
Preparing to unpack .../gcc-6-base_6.0.1-0ubuntu1_amd64.deb ...
Unpacking gcc-6-base:amd64 (6.0.1-0ubuntu1) over (6-20160227-0ubuntu1) ...
Selecting previously unselected package gcc-6-base:i386.
Preparing to unpack .../gcc-6-base_6.0.1-0ubuntu1_i386.deb ...
Unpacking gcc-6-base:i386 (6.0.1-0ubuntu1) ...
Processing triggers for libc-bin (2.23-0ubuntu3) ...
Setting up gcc-6-base:amd64 (6.0.1-0ubuntu1) ...
Setting up gcc-6-base:i386 (6.0.1-0ubuntu1) ...
(Reading database ... 222580 files and directories currently installed.)
Preparing to unpack .../libgcc1_1%3a6.0.1-0ubuntu1_amd64.deb ...
Unpacking libgcc1:amd64 (1:6.0.1-0ubuntu1) over (1:6-20160227-0ubuntu1) ...
Selecting previously unselected package libgcc1:i386.
Preparing to unpack .../libgcc1_1%3a6.0.1-0ubuntu1_i386.deb ...
Unpacking libgcc1:i386 (1:6.0.1-0ubuntu1) ...
Processing triggers for libc-bin (2.23-0ubuntu3) ...
Setting up libgcc1:amd64 (1:6.0.1-0ubuntu1) ...
Processing triggers for libc-bin (2.23-0ubuntu3) ...
Selecting previously unselected package libc6:i386.
(Reading database ... 222582 files and directories currently installed.)
Preparing to unpack .../libc6_2.23-0ubuntu3_i386.deb ...
Unpacking libc6:i386 (2.23-0ubuntu3) ...
Replacing files in old package libc6-i386 (2.23-0ubuntu3) ...
Processing triggers for libc-bin (2.23-0ubuntu3) ...
Setting up libc6:i386 (2.23-0ubuntu3) ...
Setting up libgcc1:i386 (1:6.0.1-0ubuntu1) ...
Processing triggers for libc-bin (2.23-0ubuntu3) ...
(Reading database ... 222884 files and directories currently installed.)
Preparing to unpack .../libssl1.0.0_1.0.2g-1ubuntu4.5_amd64.deb ...
Unpacking libssl1.0.0:amd64 (1.0.2g-1ubuntu4.5) over (1.0.2e-1ubuntu1) ...
Selecting previously unselected package libssl1.0.0:i386.
Preparing to unpack .../libssl1.0.0_1.0.2g-1ubuntu4.5_i386.deb ...
Unpacking libssl1.0.0:i386 (1.0.2g-1ubuntu4.5) ...
Processing triggers for libc-bin (2.23-0ubuntu3) ...
Setting up libx32gcc1 (1:6.0.1-0ubuntu1) ...
Setting up lib32gcc1 (1:6.0.1-0ubuntu1) ...
Setting up libssl1.0.0:amd64 (1.0.2g-1ubuntu4.5) ...
Setting up libssl1.0.0:i386 (1.0.2g-1ubuntu4.5) ...
Processing triggers for libc-bin (2.23-0ubuntu3) ...
weng@weng-u1604:~/iounet$ ls -l /lib/i386-linux-gnu/libcrypto.so.1.0.0 
-rw-r--r-- 1 root root 1997348 Sep 23 05:24 /lib/i386-linux-gnu/libcrypto.so.1.0.0
weng@weng-u1604:~/iounet$ sudo ln -s //lib/i386-linux-gnu/libcrypto.so.1.0.0 /lib/i386-linux-gnu/libcrypto.so.4
weng@weng-u1604:~/iounet$ ldd i86bi_linux_l2-adventerprise-ms
	linux-gate.so.1 =>  (0xf779e000)
	libcrypto.so.4 => /lib/i386-linux-gnu/libcrypto.so.4 (0xf7590000)
	libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7573000)
	libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf751d000)
	libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7500000)
	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf734a000)
	libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7345000)
	/lib/ld-linux.so.2 (0x565b9000)
weng@weng-u1604:~/iounet$ 3

Now we see all criteria for IOL to run is met.

Run it!!!

weng@weng-u1604:~/iounet$ ./i86bi_linux_l2-adventerprise-ms -m 256 123
IOS On Unix - Cisco Systems confidential, internal use only

              Restricted Rights Legend

Use, duplication, or disclosure by the Government is
subject to restrictions as set forth in subparagraph
(c) of the Commercial Computer Software - Restricted
Rights clause at FAR sec. 52.227-19 and subparagraph
(c) (1) (ii) of the Rights in Technical Data and Computer
Software clause at DFARS sec. 252.227-7013.

           cisco Systems, Inc.
           170 West Tasman Drive
           San Jose, California 95134-1706



Cisco IOS Software, Linux Software (I86BI_LINUX_L2-ADVENTERPRISE-M), Experimental Version 15.4(20131113:081654) [mcp_dev-weweng-mcp_dev-iol-nov12 101]
Copyright (c) 1986-2013 by Cisco Systems, Inc.
Compiled Wed 13-Nov-13 18:16 by weweng

%Error -1 initializing H.225 ASN encode/decode library support
Linux Unix (Intel-x86) processor with 170259K bytes of memory.
Processor board ID 2048123
8 Ethernet interfaces
16K bytes of NVRAM.


         --- System Configuration Dialog ---

Would you like to enter the initial configuration dialog? [yes/no]: no