---
search:
  boost: 4
kind_code_name: cisco_c8000v
kind_display_name: Cisco Catalyst 8000V
---
# Cisco c8000v

The Cisco Catalyst 8000V is identified with `-{{ kind_code_name }}-` kind in the [topology file](../topo-def-file.md).

Cisco c8000v is a successor of [Cisco CSR1000v](../kinds/vr-csr.md) and is a **different** product from [Cisco 8000](../kinds/c8000.md) platform emulator.

## Hardware resource requirements

Each c8000v node is started with 1vCPU and 4GB of RAM by default.

## Managing c8000v nodes

/// note
Cisco c8000v boots process takes around 5 minutes. To monitor boot progress:

```bash
docker logs -f <container-name/id>
```

Wait for `Startup complete in: <time>` message.
///

/// tab | SSH

`ssh admin@<node-name>`  
Password: `admin`
///
/// tab | bash
to connect to a `bash` shell of a running c8000v container:

```bash
docker exec -it <container-name/id> bash
```

///

### Credentials

Default credentials: `admin:admin`

## Interface naming

You can use [interfaces names](../topo-def-file.md#interface-naming) in the topology file like they appear in -{{ kind_display_name }}-.

The interface naming convention is: `GigabitEthernetX` (or `GiX`), where `X` is the port number.

With that naming convention in mind:

* `Gi2` - first data port available
* `Gi3` - second data port, and so on...

/// admonition
    type: warning
Data port numbering starts at `2`, as `Gi1` is reserved for management connectivity. Attempting to use `Gi1` in a containerlab topology will result in an error.
///

The example ports above would be mapped to the following Linux interfaces inside the container running the -{{ kind_display_name }}- VM:

* `eth0` - management interface connected to the containerlab management network (rendered as `GigabitEthernet1` in the CLI)
* `eth1` - first data interface, mapped to the first data port of the VM (rendered as `GigabitEthernet2`)
* `eth2+` - second and subsequent data interfaces, mapped to the second and subsequent data ports of the VM (rendered as `GigabitEthernet3` and so on)

When containerlab launches -{{ kind_display_name }}- node the `GigabitEthernet1` interface of the VM gets assigned `10.0.0.15/24` address from the QEMU DHCP server. This interface is transparently stitched with container's `eth0` interface such that users can reach the management plane of the -{{ kind_display_name }}- using containerlab's assigned IP.

Data interfaces `GigabitEthernet2+` need to be configured with IP addressing manually using CLI or other available management interfaces and will appear `unset` in the CLI:

```
node1#sh ip int br
Interface              IP-Address      OK? Method Status                Protocol
GigabitEthernet1       10.0.0.15       YES manual up                    up      
GigabitEthernet2       unassigned      YES unset  administratively down down
```

## Features and options

### Operating Modes

The c8000v supports two modes via the `type` parameter:

* **`autonomous`** (default): Traditional IOS-XE routing
* **`controller`**: SD-WAN controller-managed mode

```yaml
topology:
  nodes:
    edge:
      kind: cisco_c8000v
      type: controller  # For SD-WAN managed devices
      image: vrnetlab/vr-c8000v:17.11.01a
```

When using `controller` mode, the device can either take a full SD-WAN bootstrap config or a regular device-config.
If no config is provided the management interface will be in vrf 513 as a temporary management vrf. This is required as vpn 512 cannot be created without being in vManage mode in newer IOS-XE releases.

### User defined config

Use [`startup-config`](../nodes.md#startup-config) to provide a custom configuration file:

```yaml
name: c8000v
topology:
  nodes:
    c8000:
      kind: cisco_c8000v
      startup-config: r1.cfg
```

When a config file is passed via `startup-config` parameter it will be used during an initial lab deployment. However, a config file that might be in the lab directory of a node takes precedence over the startup-config[^1].

## Lab examples

```yaml
name: c8000v
topology:
  nodes:
    node1:
      kind: cisco_c8000v
      image: vrnetlab/vr-c8000v:17.11.01a
    node2:
      kind: cisco_c8000v
      image: vrnetlab/vr-c8000v:17.11.01a

  links:
    - endpoints: ["node1:Gi2", "node2:Gi2"]

```

[^1]: if startup config needs to be enforced, either deploy a lab with `--reconfigure` flag, or use [`enforce-startup-config`](../nodes.md#enforce-startup-config) setting.
