Guest Operating System (Guest OS) Installation and Configuration

This chapter details Guest Operating System (Guest OS) installation for the Cisco IR800.

Guest Operating System Overview

The IR800 supports a Hypervisor architecture to support user-specified operating systems within an independent Virtual Machine (VM).

When you install the IR800 IOS software bundle (image) on the router, the image automatically installs the supported Guest OS (Cisco IOS and Linux OS) instance(s). You can use the Linux Guest OS running on a VM on the IR800 to run applications.

The following example shows connectivity of Guest OS and Cisco IOS. A virtual interface managed by Cisco IOS provides network connectivity to Guest OS. Cisco IOS forwards traffic from Guest OS through regular IP forwarding mechanisms.

Figure 1. Connectivity Between Cisco IOS and Guest OS

In this example, number 1 is the interface being used on the router and number 2 is the interface on the Linux OS.

For the Cisco IR809, 1 is Gigabit Ethernet 2 and 2 is Eth 0.

For the Cisco IR829, 1 is Gigabit Ethernet 5 and 2 is Eth 0

Additionally, the Virtual Machine Linux has a virtual console, and two virtual serial ports.

Prerequisites

Router must be running Cisco IOS 15.6(2)T or higher.


Note


The IOXVM image delivered in the IOS bundle may not be the most recent. Check Cisco.com for the latest version at: http:/​/​software.cisco.com/​download/​cart.html?imageGuId=F51FECDC2E4FE5814715000B44317E5500EB47C5&i=rs

Guidelines and Limitations

  • The bundled Guest OS delivered with 15.6(2)T is based on Yocto Linux Project 1.8 Reference Distro, with basic services enabled:

    • IPv4/IPv6

    • DHCP

    • NTP

    • AAA (Radius)

    • Python 2.7

    • Basic debugging tools (tcpdump, top, etc)

    • bash

  • Serial relay for Guest OS control of the Serial Interface

    • Async 0 and Async 1 respectively reserve line 1/5 and 1/6 to relay serial data to the corresponding Guest OS /dev/ttyS1 and /dev/ttyS2


Note


Prior to 15.6(3)M, Serial Interface parameters needed to be set through IOS. 15.6(3)M allows setting the parameters directly from the Guest OS, through standard Linux commands.
  • You must configure Cisco IOS to provide Guest OS connectivity.


Note


There is an IOXVM image more recent than IOS bundle, (IOXVM 1.0.4) available on Cisco.com

Default Settings

The bundled Linux Guest OS:

  • Uses DHCP to acquire the IPv4 address.

  • Does not have a default root password.

  • Uses IPv6 stateless auto-configuration to get an IPv6 address.


Note


Without an IPv6 address set on both GXX and ETH0, the Guest OS will never get displayed as registered under show iox host list detail. GXX is defined as GI5 on the IR829 and GI2 on the IR809.

Installation and Upgrade

By default, IR800s ship with a software bundle that includes the latest versions of all of the required images such as Cisco IOS, Guest OS, and Hypervisor.


Note


Before performing a bundle installation, shutdown the Guest OS. Performing a bundle installation on a device with an active Guest OS may result in it not functioning upon reboot.

Use the following procedure to upgrade your router to the latest software bundle. It can take several minutes for the router to upgrade and install all of the images (Hypervisor, Cisco IOS, and Guest OS).

DETAILED STEPS

Procedure
    Step 1   Copy the bundle image to the IR800 IOS flash partition using scp or sftp.

    Example bundle name: ir800-universalk9-bundle.SPA.<VERSION>

    Step 2   Enter the following commands at the IR800 prompt:

    Command

    Purpose

    bundle install flash: <bundle name>.CG

    Installs the specified bundle.

    copy running config-config startup-config

    Saves the current running configuration.

    reload

    Reloads the router.


    Configuring Cisco IOS

    This section describes how to configure the Cisco IOS VM to provide network connectivity to the Guest OS VM.

    Guest OS connects to the network through a virtual Network Interface Card (VNIC) provided by the Hypervisor. Network attributes such as IP address, Default gateway, DNS server (as shown in the Configuring DHCP Pool section) on the interface are statically configured or configured for DHCP to dynamically obtain IP addresses. Guest OS network connectivity is only through Cisco IOS, using the virtual network interface provided by the Hypervisor. Network attributes such as IP address, can be configured statistically or dynamically, and are obtained from Cisco IOS using DHCP requests. The bundled Linux Guest OS is configured to use DHCP.

    This section outlines the task to configure a Cisco IOS DHCP pool to provision the Linux Guest OS with an IP address, and an external Ethernet interface in Cisco IOS to allow the Guest OS network connectivity.

    This section includes the following topics:

    Configuring the IR800 Ethernet Interface

    You must enable one of the external Ethernet interfaces on the IR800 to provide network connectivity. For details on interface configuration refer to the Cisco 800 Series Integrated Services Routers Software Configuration Guide: http:/​/​www.cisco.com/​c/​en/​us/​td/​docs/​routers/​access/​800/​software/​configuration/​guide/​SCG800Guide.html


    Note


    The IR809 uses Gigabit Ethernet 2, and the IR829 uses Gigabit Ethernet 5.

    IPv6 Gigabit Ethernet

    On Guest OS, IPv6 is enabled by default. The following example configuration uses IPv6 on Guest OS, where Guest OS is automatically assigned an IPv6 address on the Cisco IOS interface GigabitEthernet 5.

    Command

    Purpose

    ipv6 unicast-routing

    Enables unicast routing.

    ipv6 cef

    Enables cef.

    interface GigabitEthernet 5

    Set the internal virtual interface that connects to the Linux Guest OS.

    ipv6 address autoconfig

    Sets the IPv6 address.

    ipv6 enable

    Enables IPv6.

    Enabling IPv4 Gigabit Ethernet


    Note


    Configuring an IPv4 address on a Gigabit port is not a required part of configuring the Guest OS. However, IOS interfaces must be set to enable external devices to communicate with the Guest-OS through IOS.

    To enable an external Gigabit Ethernet IPv4 interface on the IR800 to provide network connectivity, enter the following commands:

    Command

    Purpose

    config terminal

    Enters global configuration mode.

    interface gig 0

    Configures an IPv4 address on Gigabit Ethernet interface 0, and enters interface configuration mode.

    ip address 10.1.2.1 255.255.255.0

    Sets the IP address and subnet mask for Gigabit Ethernet interface 0.

    no shutdown

    Enables the Gigabit Ethernet interface.

    Configuring DHCP Pool

    To configure a local DHCP pool, enter the following commands, one per line:


    Note


    The subnet used for the local DHCP pool must be reachable externally. If you cannot allocate the whole subnet to Guest OS, use a NAT-based configuration. See Configuring Network Address Translation (NAT).

    Command

    Purpose

    config terminal

    Enters global configuration mode.

    ip dhcp pool gospool

    Names the local DHCP pool.

    network 10.1.2.0 255.255.255.0

    Sets the network address.

    default-router 10.1.2.1

    Sets the router address.

    domain-name utility.com

    Sets the subnet address.

    dns-server 10.1.1.1

    Sets the DNS server address.

    lease 5

    Sets the duration of the IP address lease to five days.

    Configuring Guest OS GigabitEthernet on Cisco IOS

    The Guest OS Ethernet port (eth0) connects to a GigabitEthernet interface on Cisco IOS. The IR829 uses GigabitEthernet 5, and the IR809 uses GigabitEthernet 2.

    To configure the GigabitEthernet interface with the default gateway address of the DHCP pool, enter the following commands:


    Note


    IPv6 must always be enabled on the GigabitEthernet interface.

    Note


    The IR809 uses Gigabit Ethernet 2, and the IR829 uses Gigabit Ethernet 5.

    Command

    Purpose

    interface GigabitEthernet 5

    Sets the internal virtual interface that connects to the Linux Guest OS.

    ipv6 enable

    Enables IPv6.

    ipv6 address autoconfig

    Sets the IPv6 address.

    ipv4 address 10.1.2.1 255.255.255.0

    Sets the IPv4 address.

    no shutdown

    Enables the Ethernet interface, changing its state from administratively down to administratively up.

    VDS Configuration


    Note


    There exists a condition where the IR800 could display slow performance if the Guest OS is consuming too many CPU resources. This should only be done under the recommendation of Cisco or an authorized partner. 4G performance may be impacted if changed without proper guidelines.

    By default, Guest OS gets 50% of one of the cores of the CPU. The following command allows you to change the percentage of CPU allocation to VDS out of 100. The rest will go to Guest OS. In the situation where you don't use the Guest OS, the CPU can be allocated 90% to VDS.

    For Example:

    IR800>en
    IR800#config t
    Enter configuration commands, one per line.  End with CNTL/Z.
    IR800(config)#iox hypervisor ?
      sched-policy  percentage of CPU ticks to VDS
    IR800(config)#iox hypervisor sched-policy ?
      10  VDS  10%   Guest OS 90%
      20  VDS  20%   Guest OS 80%
      30  VDS  30%   Guest OS 70%
      40  VDS  40%   Guest OS 60%
      50  VDS  50%   Guest OS 50%
      60  VDS  60%   Guest OS 40%
      70  VDS  70%   Guest OS 30%
      80  VDS  80%   Guest OS 20%
      90  VDS  90%   Guest OS 10%
    IR800(config)#iox hypervisor sched-policy 90
    

    Enabling Virtual Guest OS Console

    For heightened security, the Guest OS console is disabled by default. To enable the Guest OS console, enter the following commands:

    Command

    Purpose

    config terminal

    Enters global configuration mode.

    line 1/4

    Specifies line 1/4 for configuration and enters line configuration collection mode.

    transport input all

    Defines which protocols to use to connect to a specific line of the router.

    Configuring Guest OS

    This section describes how to set the root password for Guest OS and enable SSH access. By default, SSH is disabled in Guest OS. This section describes the steps to reverse-Telnet into Guest OS, and enable SSH access.

    Starting Guest OS

    By default, Guest OS starts after installation. To manually start the Guest OS, enter the following commands:

    Command

    Purpose

    show iox host list detail

    Displays OS: RUNNING if Guest OS is already running. If it is, go to Accessing Virtual Guest OS Console.

    guest-os 1 start

    Starts Guest OS.

    During start up, Guest OS sends a DHCP request and is assigned an IP address from the local DHCP pool and an IPv6 address through IPv6 stateless auto-configuration. Guest OS is then configured with a hostname and sync time from IOS.


    Note


    It can take a few minutes for the Guest OS to start.

    Accessing Virtual Guest OS Console

    The Guest OS console is accessible at port 2070 on any Cisco IOS interface. Use the following commands to access the Linux Guest OS console from Cisco IOS.


    Note


    You must first enable the Guest OS console as described in Enabling Virtual Guest OS Console.

    Command

    Purpose

    telnet 10.1.2.1 2070

    Accesses the Virtual Guest OS console. This uses the IP address of the Gigabit Ethernet 5 port. The following is the example result:

    EXAMPLE

    Poky 9.0 (Yocto Project 1.4 Reference Distro) 1.4 qemux86 ttyS0
    qemux86 login: root
    root@qemux86:~#

    Setting the Root Password

    Guest OS does not have a default root password. To set a root password, at the GOS prompt enter the following command.


    Note


    You must set a root password before turning on SSH access.

    Command

    Purpose

    [GOS] # passwd

    Runs the following UNIX password script. Enter your desired password at the prompt.

    EXAMPLE

    Changing password for user root.
    New UNIX password:
    Retype new UNIX password:
    passwd: all authentication tokens updated successfully.
    [GOS]#

    An alternate method for changing the root password from the IOS CLI is shown in the following example:

    IR800#iox host exec "resetpw cisco" IR800-GOS-1
     
    Password reset successfully. 

    Enabling Remote SSH Access

    By default, SSH access is disabled to prevent unauthorized access to Guest OS. To enable SSH server on the guest OS:

    Procedure
      Step 1   Launch the vi editor to edit the sshd_config file:

      Example:
      vi /etc/ssh/sshd_config
      
      
      Step 2   Set the PermitRootLogin and PasswordAuthentication parameters to yes.
      Note    Ensure that the PermitEmptyPasswords parameter is set to no.


      Example:
      PermitRootLogin yes
      PasswordAuthentication yes
      PermitEmptyPasswords no
      
      
      Step 3   Restart SSHD:

      Example:
      [GOS]# /etc/init.d/sshd stop
      Stopping sshd:       [  OK  ]
      [GOS]# /etc/init.d/sshd start
      Starting sshd:       [  OK  ]
      [GOS]#
      
      
      Step 4   From the IOS command line, enter the following:

      Example:
      IR800#iox host exec enablessh IR800-GOS-1
      	ssh enabled successfully. 
      
      

      You now have remote SSH access to Guest OS.


      Configuring Network Address Translation (NAT)

      The following example configuration uses NAT for Guest OS network connectivity, where:

      • 10.1.1.0 is the externally reachable subnet.

      • 10.1.1.131 is the external IP address made available for Guest OS access.

      • 192.168.1.0 is the private subnet created for Guest OS to Cisco IOS connectivity. This is not directly reachable outside the IR800.

      • The IP address acquired by Guest OS through IOS local DHCP pool is 192.168.1.2. This address can be obtained using show iox host list details command from IOS.


      Note


      This example shows outgoing communications. For incoming communications, proper port mapping will be required.
      ip dhcp pool gospool
      	network 192.168.1.0 255.255.255.0
      	default-router 192.168.1.1
      	domain-name utility.com
      	dns-server 10.1.1.1
      	lease 5
      interface gig 5
      	ip nat inside
      	ip address 192.168.1.1 255.255.255.0
      	ipv6 enable
      	no shutdown
       
      interface gig 0
      	ip nat outside
      	ip address 10.1.1.5 255.255.255.0
      	no shutdown
      ip nat inside source static 192.168.1.2 10.1.1.131
      ! End of configuration
      
      IR800#sh ip nat trans
      Pro Inside global	Inside local		Outside local	 Outside global
      tcp 10.1.1.131:22	192.168.1.2:22		10.1.1.3:53649	10.1.1.3:53649
      tcp 10.1.1.131:60100	192.168.1.2:60100	10.1.1.3:22  	10.1.1.3:22
      --- 10.1.1.131		192.168.1.2	 	---		    ---
      
      

      For more information about NAT, please see the Configuring Network Address Translation: Getting Started Guide.

      http:/​/​www.cisco.com/​c/​en/​us/​support/​docs/​ip/​network-address-translation-nat/​13772-12.html

      IR800 Guest-OS USB Access from IOS

      IR800 IOS releases don’t support an external USB storage directly accessible from IOS. However, it is possible to mount an external USB storage on the IR800 Guest-OS, then use it from IOS through SCP

      Plug an external USB storage, wait for its recognition.

      Edit “/etc/fstab” to add the new sdc1 drive, then mount it.

      root@IR800-GOS-1:# vi /etc/fstab
      Rootfs    /              auto      defaults               1  1
      Proc      /proc          proc      defaults               0  0
      devpts    /dev/pts       devpts    mode=0620,gid=5        0  0
      usbdevfs  /proc/bus/usb  usbdevfs  noauto                 0  0
      tmpfs     /var/volatile  tmpfs     defaults               0  0
      tmpfs     /media/ram     tmpfs     defaults               0  0
      /dev/sdc1 /mnt/sdc1      auto      defaults               0  0
      

      Example of no USB storage recognized

      root@IR800-GOS-1:~# ls /dev/sd*
      /dev/sda  /dev/sda1  /dev/sdb 
      

      Example of USB storage recognized

      root@IR800-GOS-1:~# ls /dev/sd*
      /dev/sda  /dev/sda1  /dev/sdb  /dev/sdc  /dev/sdc1 
      root@IR800-GOS-1:/etc# fdisk -l /dev/sdc
       
      Disk /dev/sdc: 1993 MB, 1993342976 bytes, 3893248 sectors
      Units = sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 512 bytes
      I/O size (minimum/optimal): 512 bytes / 512 bytes
      Disk identifier: 0x00000000
      Device Boot      Start         End      Blocks   Id  System
      /dev/sdc1          2         3893247   1946623   b   W95 FAT32
      

      Mount the drive

      root@IR800-GOS-1:/etc# mount –a
      

      Check that the drive is correctly seen

      root@IR800-GOS-1:/etc# df -H /dev/sdc1
      Filesystem      Size  Used Avail Use% Mounted on
      /dev/sdc1       2.0G  869k  2.0G   1% /mnt/sdc1
      

      Create a symbolic link in order to get the device directory (or subdirectory if created) associated to the SSH login

      root@IR800-GOS-1:# ln -s /mnt/sdc1 ~/testUSB
      

      Show a long listing of the testUSB directory which displays the symbolic link

      root@IR800-GOS-1:~# ls -l testUSB
      lrwxrwxrwx 1 root root 9 Oct 13 18:00 testUSB -> /mnt/sdc1
      root@IR800-GOS-1:~#
      
      

      Now you can use the “test” directory to transfer files from and to the IR800 IOS.

      IR800 IOS SCP From/To Guest-OS USB Storage

      Now that the USB device is available to the Guest OS, you can copy files to and from it.

      IR800#copy ir800-universalk9-mz.SPA.155-3.M0ascp://10.15.15.2/testUSB/ir800-universalk9-mz.SPA.155-3.M0a
      Address or name of remote host [10.15.15.2]? 
      Destination username [IR800]? root
      Destination filename [testUSB/ir800-universalk9-mz.SPA.155-3.M0a]? 
      Writing testUSB/ir800-universalk9-mz.SPA.155-3.M0a 
      Password: 
       Sink: C0644 62083137 ir800-universalk9-mz.SPA.155-3.M0a
      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      62083137 bytes copied in 51.640 secs (1202230 bytes/sec)
      IR800#copy scp://10.15.15.2/testUSB/hosts flash:
      Source username [IR800]? root
      Destination filename [hosts]? 
      Password: 
       Sending file modes: C0755 44 hosts
      !
      44 bytes copied in 13.930 secs (3 bytes/sec)
      

      New for IOS 15.6(1)T

      Guest OS enhancements include:

      • Cisco distribution is based on Yocto Project 1.8 Reference Distro, with basic services enabled:

        • IPv4/IPv6

        • DHCP

        • NTP

        • AAA (Radius)

        • Python 2.7

        • Basic debugging tools (tcpdump, top, etc)

        • bash

      • Serial relay for Guest OS control of the Serial Interface

        • Async 0 and Async 1 respectively reserve line 1/5 and 1/6 to relay serial data to the corresponding Guest OS /dev/ttyS1 and /dev/ttyS2

      New for IOS 15.6(3)M

      USB Support

      Previous to 15.6(3)M, the USB devices, which are connected to external USB port could be emulated on the Guest OS through OHCI mode only. With this feature Hypervisor will be enhanced to support EHCI emulation to Guest OS.

      Serial Device Configuration

      Previously, the Guest OS could not configure the physical serial port on the device. The serial port configuration (e.g. baud rate change) of the serial port needed to be done in IOS.

      With 15.6(3)M, hypervisor and IOS are enhanced so that if the Guest OS changes the virtual serial port configuration, it notifies IOS, and IOS applies the configuration to the physical serial port.

      Command line changes consist of the following:

      • A new option is appended to allow the baudrate, databits, stopbits and parity propagation from Guest OS. If "propagation" is present, the control parameters will be passed from Guest OS to IOS physical port. Otherwise it functions as before.

      • The serial port control parameters included in the propagation are: baudrate, databits, stopbits and parity.

        relay line <linex> <liney> [propagation] 

      Serial Relay Configuration

      IR800#conf term
      Enter configuration commands, one per line.  End with CNTL/Z.
      IR800(config)#inter asyn 0
      IR800(config-if)# encap relay-line
      IR800(config-if)# end
      IR800(config)# line 1
      IR800(config-line)# transport input all
      IR800(config-line)#
      IR800(config)# relay line 1 1/5 propagation
      IR800# show line 1/5
      Guest OS output for /dev/tty
      
      

      GOS is installed through the IOX bundle install process and can be started/stopped and upgraded from IOS CLI

      Verification for digitally-signed GOS image distributed via Cisco DevNet must be installed using the guest-os image install command only.

      Memory Allocation Optimization

      Improvements have been made in the memory allocation optimization between VDS, IOS and GOS on the IR800. Previously, the 2GB RAM was allocated as follows:

      • VDS: 512MB

      • IOS: 512MB

      • Guest OS: 725MB

      • Remainder: used by hypervisor (e.g. device share memory)

      Now with optimization, the VDS memory was reduced to give at least 1GB to the Guest OS.

      Troubleshooting

      To determine common causes of configuration failure, enter the following commands:

      Command

      Purpose

      Guest OS Commands:

      ifconfig eth0

      Checks if Guest OS is assigned an IP address. The following is example output:

      eth0		Link encap:Ethernet  HWaddr 02:00:03:f1:cd:05
      		inet addr:10.1.2.2  Bcast:0.0.0.0  Mask:255.255.255.248
      		UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      		RX packets:2 errors:0 dropped:0 overruns:0 frame:0
      		TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
      		collisions:0 txqueuelen:1000
      		RX bytes:684 (684.0 B)  TX bytes:894 (894.0 B)
      [GOS]# 

      netstat -r

      Displays the Guest OS route table. The following is example output:

      Kernel IP routing table
      Destination Gateway Genmask Flags MSS Window irtt Iface
      default 10.1.2.1 0.0.0.0 UG 0 0 0 eth0
      10.1.2.0 * 255.255.255.0 U 0 0 0 eth0
      [GOS]#

      IOS Commands:

      show ip arp

      Verifies that Cisco IOS learned Guest OS ARP mapping.The following is example output:

      Protocol Address Age (min) Hardware Addr Type Interface
      Internet 10.1.1.1 - 0022.bdef.c562 ARPA GigabitEthernet0
      Internet 10.1.2.1 - 0022.bdef.c569 ARPA GigabitEthernet2
      Internet 10.1.2.2 112 0022.bdef.c56d ARPA GigabitEthernet2
      IR800# 

      show ipv6 neighbor

      Verifies that Cisco IOS learned Guest OS IPv6 neighbor address.The following is example output:

      IPv6 Address    Age Link-layer Addr State Interface
      FE80::1FF:FE90:8B05    0 0200.0190.8b05  REACH Gi2

      show platform guest-os

      Guest-OS started

      Guest OS status:
      Installation: Cisco-GOS,version-1.28
      State: RUNNING
      IR800# 

      show iox host list detail

      Guest-OS started, normal operation

      IOX Server is running. Process ID: 319
      Count of hosts registered: 1
      Host registered:
      ===============
          IOX Server Address: FE80::76A2:E6FF:FEFD:6A6C; Port: 22222
          Link Local Address of Host: FE80::1FF:FE90:8B05
          IPV4 Address of Host:       10.15.15.2
          IPV6 Address of Host:       fe80::1ff:fe90:8b05
          Client Version:             0.1
          Session ID:                 1
          OS Nodename:                IR809-GOS-1
          Host Hardware Vendor:       Cisco Systems, Inc.
          Host Hardware Version:      1.0
          Host Card Type:             not implemented
          Host OS Version:            1.28
          OS status:                  RUNNING
          Interface Hardware Vendor:  None
          Interface Hardware Version: None
          Interface Card Type:        None
          Applications Registered:
          =======================
      	Count of applications registered by this host: 0
      IR800# 

      show iox host list detail

      Guest-OS started but no IPv6 address set-up on the GI2 interface

      IOX Server is running. Process ID: 319
      Count of hosts registered: 0
          IOX Server Address: 0.0.0.0; Port: 22222
      IR800# 

      Checking Connectivity

      Use standard Linux tools (for example, ping and traceroute) to check Guest OS connectivity.

      Related Documentation


      Note


      While some of these references do not apply directly to the Cisco IR800 series of Industrial Routers, they may serve as a source of addition information.

      For information on supporting systems referenced in this guide, refer to the following documentation on Cisco.com:

      DevNet documentation on IOx. Provides an overview as well as details on the IR800 series by scrolling down the left hand side:

      https:/​/​developer.cisco.com/​site/​iox/​documents/​developer-guide/​?ref=overview

      Cisco Fog Director Reference Guide:

      http:/​/​www.cisco.com/​c/​en/​us/​support/​cloud-systems-management/​fog-director/​products-technical-reference-list.html

      IOx Reference Guide:

      http:/​/​www.cisco.com/​c/​en/​us/​support/​cloud-systems-management/​iox/​products-technical-reference-list.html

      Release Notes:

      http:/​/​www.cisco.com/​c/​en/​us/​support/​cloud-systems-management/​iox/​products-release-notes-list.html

      Other Sources:

      Cisco IOS IP Application Services Command Reference

      IPv6 configuration manual