What is IOU?
From the Cisco Engineering Education web site (a long time ago):
IOS on Unix (IOU) is a fully working version of IOS that runs as a user mode UNIX (Solaris) process. IOU is built as a native Solaris image and run just like any other program. IOU supports all platform independent protocols and features.
What operating systems does IOU run on?
It is my understanding that, initially, IOU was Solaris (SPARC) only. Nowadays, however, there are also builds for OS X and Linux. Similar to dynamips, IOU allows you to build out a network topology on a computer, without the need for physical routers. This is useful for validating designs, proof-of-concept testing, and certification self-study.
Is my system compatible with IOU?
You will need to be running the operating system that your IOU image were built for, obviously. Other than that, there are no special requirements to run IOU. It is not very CPU- or memory-intensive, unlike dynamips.
What skills do I need to run IOU?
You will need to be comfortable on the command-line of your operating system. Knowledge of vi (or other text editors) and shell scripting would definitely be useful. If you’ve only ever used Windows, you might want to look into GNS3 instead.
Warnings
Is this legal?
Usage of IOU outside of Cisco (and trusted partners) is a potentially legal gray area. From an old internal-only Cisco web page:
Cisco IOS on Unix is a tool intended for internal use only. Distribution of IOU images to customers or external persons, or discussion of IOU with customers or external persons, is prohibited. Don’t do it or we’ll have to come and kill you.
Does IOU attempt to call home?
Yes. At startup, IOU images will attempt to make an HTTP POST of some XML data to xml.cisco.com. The data includes your (short) hostname (e.g. not the FQDN), the username of the user running IOU, the version, etc. It appears that xml.cisco.com is not reachable from the Internet, however, so the connection will not be made. This could change in the future, though, so you may want to do the following:
# echo '127.0.0.1 xml.cisco.com' >> /etc/hosts
I can’t find it, will you send me a copy?
No, don’t even ask. Seriously.
Features
What features does IOU support?
Pretty much everything, depending upon the image you’re using. The major exception is layer 2 switching, which L2IOU should take care of.
What version of IOS does it use?
I have seen a few Linux images floating around. One appears to be built on the “ipbase” featureset and another appears to be built with the “adventerpisek9″ featureset.
Are there pagent images?
Yes, in addition to “standard” IOU images, there are pagent images.
Licensing
Do I need a license to use IOU?
It does not seem that older IOU images needed a license to be used, while newer IOU images (including the Linux ones I have seen) do require a valid license.
How do I get a license?
Unfortunately, licenses are only able to be acquired inside of Cisco. An individual license code is generated, based upon the machine’s hostname and IP address.
Will you post your script to “crack” it?
Although I initially said I would, I have decided against this after careful thought. You may do this on your own, if you are so inclined.
Pre-requisites
What is the IOURC file?
The IOURC file is where IOU looks for your license code at startup.
Where does the IOURC file go?
IOU will look for the following:
A file named “iourc” in the current working directory
A file named “.iourc” in the user’s home directory
The file pointed to by the IOURC environment variable
What is the format of the IOURC file?
For licensing, your IOURC file needs to look like this:
[license]
hostname = 4242424242424242;
Replace “hostname” with your computer’s (short) hostname — not the fully-qualified domain name — and “4242424242424242″ with your license code. Make sure the line ends with a semi-colon. Your hostname can be found from the error IOU spits out or by running the following at a command-line:
# hostname -s
What is the NETMAP file?
The network topology map, or NETMAP, file is similar to a .net file for dynagen. It is used for controlling the layout of the “virtual cabling”.
Where does the NETMAP file go?
IOU will look for the following:
A file named “NETMAP” in the current working directory
A file named “.NETMAP” in the user’s home directory
The file pointed to by the NETIO_NETMAP environment variable
What is the format of the NETMAP file?
I’ve posted an example topology and NETMAP file that might be helpful.
Using IOU
How do I run IOU?
Usage:
Options:
-e
-s
-n
-c
-d Generate debug information
-t Netio message trace
-q Suppress informational messages
-h Display this help
-C Turn off use of host clock
-m
-L Disable local console, use remote console
-u
How do I stop IOU?
Simply hit CTRL-C and the process will exit.
What is the “wrapper”?
When you run an IOU image, it will stay in the foreground and you’ll be connected to the “console”. This may not always be the desired behavior, especially if you wish to telnet to the console from another host on the network (a la dynamips). The wrapper program can be used to redirect a TCP port to the “console” of the router so that you can do exactly this.
How do I use the wrapper?
$ ./wrapper
Usage: ./wrapper [-v] -m
where
all options after the '--' are passed to iou
[-v] Display version
Instead of just running “./imagename
$ ./wrapper -m ./imagename -p 2000 -- -e0 -s1 -m 64 100
This would tell the wrapper to start the image named “./imagename” and listen ton TCP port 2000. Any options after “–” are passed off to the executable, so in this case our IOU instance would start up with zero ethernet interfaces (“-e0″), one serial interface (“-s1″) — which actually means four in newer images, due to something called “Wide Port Adapters” — and 64 MB of RAM. The “application ID”, which we’ll use to refer to this instance in the NETMAP file, is 100.
The wrapper is most useful in a shell script to start up and background a number of IOU instances at once.
How do I stop IOU when using the wrapper?
If you are using the wrapper and have backgrounded the IOU instance, you’ll need to find the process ID and kill it. The following will find all running instances and kill them:
$ ps -ef | grep [w]rapper | awk '{ print $2 }' | xargs kill
IOUlive
What is IOUlive?
IOUlive is a separate application that allows one to bridge an IOU instance to the real world. This is similar to using dynagen’s NIO_linux_eth descriptor. By connecting an IOU instance to IOUlive, your virtual routers can talk to devices on your physical network.
How do I use IOUlive?
I’ve posted an example topology and NETMAP file that might be helpful.
Errors
What does “UNIX ERR:tcgetattr:Invalid argument” mean?
No idea, but it doesn’t seem to hurt anything. it appears that it can be safely ignored.
I’m getting an error about libcrypto.so.4.
These images were compiled against an older version of the libcrypto shared library than what your Linux distribution may have. For me, creating a symbolic link from /lib/libcrypto.so.0.9.8 to /lib/libcrypto.so.4 took care of the error.
I’m getting a “host not found in iourc file” error.
Fix your IOURC file. See above.
How can I add an NM-16ESW module?
You can’t.
There must be some way to add ATM or NM-16ESW modules!
There’s not.
When running “./wrapper-linux -m i86bi_linux-adventerprisek9-ms …” I get “No such file or directory”.
Provide the path to the IOU image. If it’s in the working directory, refer to it as “./i86bi_linux-adventerprisek9-ms”, for example.
I’ve tried everything and I can’t get it to work. What should I do?
Google “gns3″ and follow a tutorial on how to download and install it. Seriously.
If