annotations:
  - border_color: '#000000'
    border_radius: 0
    border_style: ''
    color: '#EB6F6F'
    thickness: 1
    type: rectangle
    x1: -720.0
    y1: 280.0
    x2: 320.0
    y2: 120.0
    z_index: 0
  - border_color: '#000000'
    border_radius: 0
    border_style: ''
    color: '#3BD1D1'
    thickness: 1
    type: rectangle
    x1: -280.0
    y1: 280.0
    x2: 320.0
    y2: 120.0
    z_index: 1
  - border_color: '#00000000'
    border_style: ''
    color: '#181818'
    rotation: 0
    text_bold: false
    text_content: |-
      VLAN 10
      Employees
      192.168.1.0/24
    text_font: monospace
    text_italic: false
    text_size: 10
    text_unit: pt
    thickness: 1
    type: text
    x1: -690.0
    y1: 310.0
    z_index: 2
  - border_color: '#00000000'
    border_style: ''
    color: '#181818'
    rotation: 0
    text_bold: false
    text_content: |-
      VLAN 100
      Servers
      192.168.100.0/24
    text_font: monospace
    text_italic: false
    text_size: 10
    text_unit: pt
    thickness: 1
    type: text
    x1: -108.00000000000001
    y1: 313.33333333333337
    z_index: 2
  - border_color: '#00000000'
    border_style: ''
    color: '#2A2A2A'
    rotation: 0
    text_bold: false
    text_content: 192.168.1.11
    text_font: monospace
    text_italic: false
    text_size: 10
    text_unit: pt
    thickness: 1
    type: text
    x1: -528.0
    y1: 366.0
    z_index: 3
  - border_color: '#00000000'
    border_style: ''
    color: '#2A2A2A'
    rotation: 0
    text_bold: false
    text_content: 192.168.100.101
    text_font: monospace
    text_italic: false
    text_size: 10
    text_unit: pt
    thickness: 1
    type: text
    x1: -255.3333333333331
    y1: 363.3333333333333
    z_index: 3
  - border_color: '#00000000'
    border_style: ''
    color: '#2A2A2A'
    rotation: 0
    text_bold: false
    text_content: |-
      Subinterfaces:
      .10  - 192.168.1.1/24
      .100 - 192.168.100.1/4
    text_font: monospace
    text_italic: false
    text_size: 8
    text_unit: pt
    thickness: 1
    type: text
    x1: -702.2114987825522
    y1: 48.92563235356046
    z_index: 3
  - border_color: '#00000000'
    border_style: ''
    color: '#FF0505'
    rotation: 0
    text_bold: false
    text_content: po11
    text_font: monospace
    text_italic: false
    text_size: 8
    text_unit: pt
    thickness: 1
    type: text
    x1: -491.43090756087463
    y1: 73.97521064015106
    z_index: 4
  - border_color: '#00000000'
    border_style: ''
    color: '#FF0505'
    rotation: 304
    text_bold: false
    text_content: po12
    text_font: monospace
    text_italic: false
    text_size: 8
    text_unit: pt
    thickness: 1
    type: text
    x1: -397.739358779888
    y1: 68.02026329028361
    z_index: 4
  - border_color: '#00000000'
    border_style: ''
    color: '#FF0505'
    rotation: 58
    text_bold: false
    text_content: po21
    text_font: monospace
    text_italic: false
    text_size: 8
    text_unit: pt
    thickness: 1
    type: text
    x1: -291.1912576522562
    y1: 39.74080808198981
    z_index: 4
  - border_color: '#00000000'
    border_style: ''
    color: '#FF0505'
    rotation: 0
    text_bold: false
    text_content: po22
    text_font: monospace
    text_italic: false
    text_size: 8
    text_unit: pt
    thickness: 1
    type: text
    x1: -212.8196203929658
    y1: 72.54061130037327
    z_index: 4
  - border_color: '#00000000'
    border_style: ''
    color: '#FF0505'
    rotation: 270
    text_bold: false
    text_content: po10
    text_font: monospace
    text_italic: false
    text_size: 8
    text_unit: pt
    thickness: 1
    type: text
    x1: -347.0186928379591
    y1: 23.287020743712766
    z_index: 4
  - border_color: '#FF0000'
    border_style: ''
    color: '#FFFFFFFF'
    thickness: 2
    type: ellipse
    x1: -342.2902807613724
    y1: -0.24367126710102482
    x2: 13.097264996467857
    y2: 26.994198354724713
    z_index: 0
  - border_color: '#FF0000'
    border_style: ''
    color: '#FFFFFFFF'
    thickness: 2
    type: ellipse
    x1: -295.37566300116237
    y1: 54.701553806700545
    x2: 12.5
    y2: 23.15867638187116
    z_index: 0
  - border_color: '#FF0000'
    border_style: ''
    color: '#FFFFFFFF'
    thickness: 2
    type: ellipse
    x1: -385.45744357316516
    y1: 54.701553806700545
    x2: 12.5
    y2: 22.42926925173348
    z_index: 0
  - border_color: '#FF0000'
    border_style: ''
    color: '#FFFFFFFF'
    thickness: 2
    type: ellipse
    x1: -478.4293249986807
    y1: 78.71729912850432
    x2: 28.69936710505462
    y2: 12.5
    z_index: 0
  - border_color: '#FF0000'
    border_style: ''
    color: '#FFFFFFFF'
    thickness: 2
    type: ellipse
    x1: -200.92932499868073
    y1: 77.46729912850432
    x2: 28.69936710505462
    y2: 12.5
    z_index: 0
  - border_color: '#00000000'
    border_style: ''
    color: '#FF0505'
    rotation: 0
    text_bold: false
    text_content: po41
    text_font: monospace
    text_italic: false
    text_size: 8
    text_unit: pt
    thickness: 1
    type: text
    x1: -215.48993750601974
    y1: 235.81041629364026
    z_index: 4
  - border_color: '#FF0000'
    border_style: ''
    color: '#FFFFFFFF'
    thickness: 2
    type: ellipse
    x1: -200.68201359118396
    y1: 240.37240055670247
    x2: 28.69936710505462
    y2: 12.5
    z_index: 0
  - border_color: '#00000000'
    border_style: ''
    color: '#000000'
    rotation: 0
    text_bold: false
    text_content: |-
      Device     EtherChannel       Members
      DLS1       Port-channel 10    Eth0/0, Eth1/0
      DLS1       Port-channel 11    Eth0/1, Eth1/1
      DLS1       Port-channel 12    Eth0/2, Eth1/2

      DLS2       Port-channel 10    Eth0/0, Eth1/0
      DLS2       Port-channel 21    Eth0/1, Eth1/1
      DLS2       Port-channel 22    Eth0/2, Eth1/2

      ALS1       Port-channel 11    Eth0/0, Eth0/2
      ALS1       Port-channel 21    Eth0/1, Eth0/3

      ALS2       Port-channel 12    Eth0/0, Eth0/2
      ALS2       Port-channel 22    Eth0/1, Eth0/3
      ALS2       Port-channel 41    Eth1/0, Eth1/1

      Server1    bond0              Eth0, Eth1
    text_font: monospace
    text_italic: false
    text_size: 12
    text_unit: pt
    thickness: 1
    type: text
    x1: 106.45983461127673
    y1: -37.03373620522541
    z_index: 5
  - border_color: '#00000000'
    border_style: ''
    color: '#000000'
    rotation: 0
    text_bold: true
    text_content: Device     EtherChannel       Members
    text_font: monospace
    text_italic: false
    text_size: 12
    text_unit: pt
    thickness: 1
    type: text
    x1: 106.45983461127673
    y1: -37.03373620522541
    z_index: 5
  - border_color: '#00000000'
    border_style: ''
    color: '#000000'
    rotation: 0
    text_bold: true
    text_content: ____________________________________________
    text_font: monospace
    text_italic: false
    text_size: 12
    text_unit: pt
    thickness: 1
    type: text
    x1: 106.45983461127673
    y1: -37.03373620522541
    z_index: 5
  - border_color: '#00000000'
    border_style: ''
    color: '#808080FF'
    rotation: 0
    text_bold: false
    text_content: |-
      Credentials for all Hosts
      * Username: cisco
      * Password: cisco
    text_font: monospace
    text_italic: false
    text_size: 8
    text_unit: pt
    thickness: 1
    type: text
    x1: -123.95395708563774
    y1: 226.4831318973873
    z_index: 6
  - border_color: '#00000000'
    border_style: ''
    color: '#020202'
    rotation: 0
    text_bold: true
    text_content: 'CCNA Exam Prep: Back to Networking Basics with Hank Preston and
      Patrick Gargano'
    text_font: monospace
    text_italic: false
    text_size: 12
    text_unit: pt
    thickness: 1
    type: text
    x1: -723.9539570856377
    y1: -252.5168681026127
    z_index: 7
  - border_color: '#00000000'
    border_style: ''
    color: '#000000'
    rotation: 0
    text_bold: false
    text_content: |-
      What purpose do etherchannels (aka port-channels) serve in a network design and how to configure and manage them on Cisco IOS.

      * Configure EtherChannel between IOS switches
      * Verify EtherChanel operations
      * Configure EtherChannel betweek switches and other devices
    text_font: monospace
    text_italic: false
    text_size: 12
    text_unit: pt
    thickness: 1
    type: text
    x1: -726.9539570856377
    y1: -181.5168681026127
    z_index: 8
  - border_color: '#00000000'
    border_style: ''
    color: '#000000'
    rotation: 0
    text_bold: true
    text_content: 'Building Resilient Links with EtherChannel: Gain EtherChannel Excellence'
    text_font: monospace
    text_italic: false
    text_size: 18
    text_unit: pt
    thickness: 1
    type: text
    x1: -724.9539570856377
    y1: -223.5168681026127
    z_index: 9
  - border_color: '#808080FF'
    border_radius: 0
    border_style: ''
    color: '#E9E9E9'
    thickness: 1
    type: rectangle
    x1: 80.0
    y1: -80.0
    x2: 480.0
    y2: 480.0
    z_index: 0
  - border_color: '#00000000'
    border_style: ''
    color: '#000000'
    rotation: 0
    text_bold: false
    text_content: 'EtherChannels to create:'
    text_font: monospace
    text_italic: false
    text_size: 12
    text_unit: pt
    thickness: 1
    type: text
    x1: 109.0
    y1: -65.0
    z_index: 10
nodes:
  - boot_disk_size: null
    configuration:
      - name: ios_config.txt
        content: |-
          hostname RTR1
          !
          ! In order to avoid entering a configuration dialog
          ! on boot, please ensure that all ethernet interfaces
          ! have some ip configuration present here such as the
          ! example below:
          !
          interface range Ethernet 0/0 - 3
           no ip address
           shutdown
          !
          no ip domain lookup
          !
          interface e0/0
           no shut
           exit
          interface e0/0.10
           encapsulation dot1q 10
           ip address 192.168.1.1 255.255.255.0
           no shut
           exit
          interface e0/0.100
           encapsulation dot1q 100
           ip address 192.168.100.1 255.255.255.0
           no shut
          !
          ! Setup Loopback Interfaces for traffic tests
          interface Loopback21
           ip address 192.168.21.100 255.255.255.0
          interface Loopback22
           ip address 192.168.22.100 255.255.255.0
          interface Loopback23
           ip address 192.168.23.100 255.255.255.0
          interface Loopback24
           ip address 192.168.24.100 255.255.255.0
          interface Loopback25
           ip address 172.16.25.100 255.255.255.0
          interface Loopback26
           ip address 172.16.26.100 255.255.255.0
          interface Loopback27
           ip address 172.16.27.100 255.255.255.0
          interface Loopback28
           ip address 172.16.28.100 255.255.255.0
           exit
          !
          ! Setup Event Manager Timers for Traffic Generation
          event manager applet ping-emphosts-01
           description "ping EmpHost from Loo21 every 5 seconds"
           event timer watchdog time 5
           action 1.0 cli command "enable"
           action 2.0 cli command "ping 192.168.1.11 source loop21 repeat 1"
           exit
          event manager applet ping-emphosts-02
           description "ping EmpHost from Loo25 every 8 seconds"
           event timer watchdog time 8
           action 1.0 cli command "enable"
           action 2.0 cli command "ping 192.168.1.11 source loop25 repeat 1"
           exit
          event manager applet ping-server-01
           description "ping Server from Loo23 every 3 seconds"
           event timer watchdog time 3
           action 1.0 cli command "enable"
           action 2.0 cli command "ping 192.168.100.101 source loop23 repeat 1"
           exit
          event manager applet ping-server-02
           description "ping Server from Loo26 every 4 seconds"
           event timer watchdog time 11
           action 1.0 cli command "enable"
           action 2.0 cli command "ping 192.168.100.101 source loop26 repeat 1"
           exit
          !
          end
    cpu_limit: null
    cpus: null
    data_volume: null
    hide_links: false
    id: n0
    image_definition: null
    label: RTR1
    node_definition: iol-xe
    parameters: {}
    ram: null
    tags: []
    x: -680
    y: 0
    interfaces:
      - id: i0
        label: Loopback0
        type: loopback
      - id: i1
        label: Ethernet0/0
        slot: 0
        type: physical
      - id: i2
        label: Ethernet0/1
        slot: 1
        type: physical
      - id: i3
        label: Ethernet0/2
        slot: 2
        type: physical
      - id: i4
        label: Ethernet0/3
        slot: 3
        type: physical
  - boot_disk_size: null
    configuration:
      - name: ios_config.txt
        content: |-
          hostname DLS1
          !
          no ip domain lookup
          ! Disable VTP
          vtp mode transparent
          !
          ! Setup spanning-tree
          spanning-tree mode rapid
          spanning-tree vlan 1 priority 4096
          spanning-tree vlan 10 priority 4096
          spanning-tree vlan 100 priority 8192
          !
          ! Create VLANs
          vlan 10
           name Employees
          vlan 100
           name Servers
           exit
          !
          ! Shutdown interfaces to start
          interface range e0/0-3,e1/0-3,e2/0-3
           shutdown
           exit
          !
          ! Setup Interswitch Link Interfaces
          interface e0/0
           description DLS2 E0/0
           switch trunk encap dot1q
           switch mode trunk
           no shut
          interface e0/1
           description ALS1 E0/0
           switch trunk encap dot1q
           switch mode trunk
           spanning-tree guard root
           no shut
          interface e0/2
           description ALS2 E0/0
           switch trunk encap dot1q
           switch mode trunk
           spanning-tree guard root
           no shut
          interface e1/0
           description DLS2 E1/0
           switch trunk encap dot1q
           switch mode trunk
           no shut
          interface e1/1
           description ALS1 E0/2
           switch trunk encap dot1q
           switch mode trunk
           spanning-tree guard root
           no shut
          interface e1/2
           description ALS2 E0/2
           switch trunk encap dot1q
           switch mode trunk
           spanning-tree guard root
           no shut
          !
          ! Setup interfaces to Router
          interface e2/0
           description RTR1 e0/0
           switch trunk encap dot1q
           switch mode trunk
           spanning-tree guard root
           no shut
          !
    cpu_limit: null
    cpus: null
    data_volume: null
    hide_links: false
    id: n1
    image_definition: null
    label: DLS1
    node_definition: ioll2-xe
    parameters: {}
    ram: null
    tags: []
    x: -480
    y: 0
    interfaces:
      - id: i0
        label: Loopback0
        type: loopback
      - id: i1
        label: Ethernet0/0
        slot: 0
        type: physical
      - id: i2
        label: Ethernet0/1
        slot: 1
        type: physical
      - id: i3
        label: Ethernet0/2
        slot: 2
        type: physical
      - id: i4
        label: Ethernet0/3
        slot: 3
        type: physical
      - id: i5
        label: Ethernet1/0
        slot: 4
        type: physical
      - id: i6
        label: Ethernet1/1
        slot: 5
        type: physical
      - id: i7
        label: Ethernet1/2
        slot: 6
        type: physical
      - id: i8
        label: Ethernet1/3
        slot: 7
        type: physical
      - id: i9
        label: Ethernet2/0
        slot: 8
        type: physical
      - id: i10
        label: Ethernet2/1
        slot: 9
        type: physical
  - boot_disk_size: null
    configuration:
      - name: node.cfg
        content: |-
          # this is a shell script which will be sourced at boot
          hostname EmpHost1
          # configurable user account
          USERNAME=cisco
          PASSWORD=cisco
          ip address add 192.168.1.11/24 dev eth0
          ip route add default via 192.168.1.1
          # Add host file entry for other devices
          echo "192.168.100.101    server1" >> /etc/hosts
    cpu_limit: null
    cpus: null
    data_volume: null
    hide_links: false
    id: n2
    image_definition: null
    label: EmpHost1
    node_definition: desktop
    parameters: {}
    ram: null
    tags: []
    x: -480
    y: 320
    interfaces:
      - id: i0
        label: eth0
        slot: 0
        type: physical
  - boot_disk_size: null
    configuration:
      - name: ios_config.txt
        content: |-
          hostname DLS2
          !
          no ip domain lookup
          ! Disable VTP
          vtp mode transparent
          !
          ! Setup spanning-tree
          spanning-tree mode rapid
          spanning-tree vlan 1 priority 8192
          spanning-tree vlan 10 priority 8291
          spanning-tree vlan 100 priority 4096
          !
          ! Create VLANs
          vlan 10
           name Employees
          vlan 100
           name Servers
           exit
          !
          ! Shutdown interfaces to start
          interface range e0/0-3,e1/0-3
           shutdown
           exit
          !
          ! Setup Interswitch Link Interfaces
          interface e0/0
           description DLS1 E0/0
           switch trunk encap dot1q
           switch mode trunk
           no shut
          interface e0/1
           description ALS1 E0/1
           switch trunk encap dot1q
           switch mode trunk
           spanning-tree guard root
           no shut
          interface e0/2
           description ALS2 E0/1
           switch trunk encap dot1q
           switch mode trunk
           spanning-tree guard root
           no shut
          interface e1/0
           description DLS1 E1/0
           switch trunk encap dot1q
           switch mode trunk
           no shut
          interface e1/1
           description ALS1 E0/3
           switch trunk encap dot1q
           switch mode trunk
           spanning-tree guard root
           no shut
          interface e1/2
           description ALS2 E0/3
           switch trunk encap dot1q
           switch mode trunk
           spanning-tree guard root
           no shut
          !
    cpu_limit: null
    cpus: null
    data_volume: null
    hide_links: false
    id: n3
    image_definition: null
    label: DLS2
    node_definition: ioll2-xe
    parameters: {}
    ram: null
    tags: []
    x: -200
    y: 0
    interfaces:
      - id: i0
        label: Loopback0
        type: loopback
      - id: i1
        label: Ethernet0/0
        slot: 0
        type: physical
      - id: i2
        label: Ethernet0/1
        slot: 1
        type: physical
      - id: i3
        label: Ethernet0/2
        slot: 2
        type: physical
      - id: i4
        label: Ethernet0/3
        slot: 3
        type: physical
      - id: i5
        label: Ethernet1/0
        slot: 4
        type: physical
      - id: i6
        label: Ethernet1/1
        slot: 5
        type: physical
      - id: i7
        label: Ethernet1/2
        slot: 6
        type: physical
  - boot_disk_size: null
    configuration:
      - name: ios_config.txt
        content: |-
          hostname ALS1
          !
          no ip domain lookup
          ! Disable VTP
          vtp mode transparent
          !
          ! Setup spanning-tree
          spanning-tree mode rapid
          spanning-tree vlan 1-4096 priority 49152
          !
          ! Create VLANs
          vlan 10
           name Employees
          vlan 100
           name Servers
           exit
          !
          ! Shutdown interfaces to start
          interface range e0/0-3,e1/0-3
           shutdown
           exit
          !
          ! Setup Interswitch Link Interfaces
          interface e0/0
           description DLS1 E0/0
           switch trunk encap dot1q
           switch mode trunk
           no shut
          interface e0/1
           description DLS1 E0/1
           switch trunk encap dot1q
           switch mode trunk
           no shut
          interface e0/2
           description DLS1 E1/1
           switch trunk encap dot1q
           switch mode trunk
           no shut
          interface e0/3
           description DLS2 E1/1
           switch trunk encap dot1q
           switch mode trunk
           no shut
          !
          ! Setup interfaces to clients
          interface e1/0
           description EmpHost1 eth0
           switch trunk encap dot1q
           switch mode access
           switch access vlan 10
           spanning-tree portfast
           spanning-tree bpduguard enable
           no shut
          !
    cpu_limit: null
    cpus: null
    data_volume: null
    hide_links: false
    id: n4
    image_definition: null
    label: ALS1
    node_definition: ioll2-xe
    parameters: {}
    ram: null
    tags: []
    x: -480
    y: 160
    interfaces:
      - id: i0
        label: Loopback0
        type: loopback
      - id: i1
        label: Ethernet0/0
        slot: 0
        type: physical
      - id: i2
        label: Ethernet0/1
        slot: 1
        type: physical
      - id: i3
        label: Ethernet0/2
        slot: 2
        type: physical
      - id: i4
        label: Ethernet0/3
        slot: 3
        type: physical
      - id: i5
        label: Ethernet1/0
        slot: 4
        type: physical
  - boot_disk_size: null
    configuration:
      - name: ios_config.txt
        content: |
          hostname ALS2
          !
          no ip domain lookup
          ! Disable VTP
          vtp mode transparent
          !
          ! Setup spanning-tree
          spanning-tree mode rapid
          spanning-tree vlan 1-4096 priority 49152
          !
          ! Create VLANs
          vlan 10
           name Employees
          vlan 100
           name Servers
           exit
          !
          ! Shutdown interfaces to start
          interface range e0/0-3,e1/0-3
           shutdown
           exit
          !
          ! Setup Interswitch Link Interfaces
          interface e0/0
           description DLS1 E0/2
           switch trunk encap dot1q
           switch mode trunk
           no shut
          interface e0/1
           description DLS1 E0/2
           switch trunk encap dot1q
           switch mode trunk
           no shut
          interface e0/2
           description DLS1 E1/2
           switch trunk encap dot1q
           switch mode trunk
           no shut
          interface e0/3
           description DLS2 E1/2
           switch trunk encap dot1q
           switch mode trunk
           no shut
          !
          ! Setup interfaces to clients
          interface e1/0
           description Server eth0
           switch trunk encap dot1q
           switch mode access
           switch access vlan 100
           spanning-tree portfast
           spanning-tree bpduguard enable
           no shut
          interface e1/1
           description Server eth1
           switch trunk encap dot1q
           switch mode access
           switch access vlan 100
           spanning-tree portfast
           spanning-tree bpduguard enable
           no shut
          !
    cpu_limit: null
    cpus: null
    data_volume: null
    hide_links: false
    id: n5
    image_definition: null
    label: ALS2
    node_definition: ioll2-xe
    parameters: {}
    ram: null
    tags: []
    x: -200
    y: 159
    interfaces:
      - id: i0
        label: Loopback0
        type: loopback
      - id: i1
        label: Ethernet0/0
        slot: 0
        type: physical
      - id: i2
        label: Ethernet0/1
        slot: 1
        type: physical
      - id: i3
        label: Ethernet0/2
        slot: 2
        type: physical
      - id: i4
        label: Ethernet0/3
        slot: 3
        type: physical
      - id: i5
        label: Ethernet1/0
        slot: 4
        type: physical
      - id: i6
        label: Ethernet1/1
        slot: 5
        type: physical
  - boot_disk_size: null
    configuration:
      - name: node.cfg
        content: |-
          # this is a shell script which will be sourced at boot
          hostname Server1
          # configurable user account
          USERNAME=cisco
          PASSWORD=cisco

          # Configure network settings for LACP use later
          ethtool -s eth0 speed 1000 duplex full  # Set speed/duplex
          ethtool -s eth1 speed 1000 duplex full
          modprobe bonding mmiimon=100 mode=802.3ad lacp_rate=slow # Enable LACP

          # Set initial IP address
          ip address add 192.168.100.101/24 dev eth0
          ip route add default via 192.168.100.1
          # Add host file entry for other devices
          echo "192.168.1.11    emphost1" >> /etc/hosts
    cpu_limit: null
    cpus: null
    data_volume: null
    hide_links: false
    id: n6
    image_definition: alpine-desktop-3-19-1
    label: Server1
    node_definition: desktop
    parameters: {}
    ram: null
    tags: []
    x: -200
    y: 320
    interfaces:
      - id: i0
        label: eth0
        slot: 0
        type: physical
      - id: i1
        label: eth1
        slot: 1
        type: physical
links:
  - id: l0
    n1: n1
    n2: n5
    i1: i3
    i2: i1
    conditioning: {}
    label: DLS1-Ethernet0/2<->ALS2-Ethernet0/0
  - id: l1
    n1: n3
    n2: n4
    i1: i2
    i2: i2
    conditioning: {}
    label: DLS2-Ethernet0/1<->ALS1-Ethernet0/1
  - id: l2
    n1: n3
    n2: n5
    i1: i3
    i2: i2
    conditioning: {}
    label: DLS2-Ethernet0/2<->ALS2-Ethernet0/1
  - id: l3
    n1: n1
    n2: n3
    i1: i5
    i2: i5
    conditioning: {}
    label: DLS1-Ethernet1/0<->DLS2-Ethernet1/0
  - id: l4
    n1: n1
    n2: n4
    i1: i6
    i2: i3
    conditioning: {}
    label: DLS1-Ethernet1/1<->ALS1-Ethernet0/2
  - id: l5
    n1: n1
    n2: n5
    i1: i7
    i2: i3
    conditioning: {}
    label: DLS1-Ethernet1/2<->ALS2-Ethernet0/2
  - id: l6
    n1: n3
    n2: n4
    i1: i6
    i2: i4
    conditioning: {}
    label: DLS2-Ethernet1/1<->ALS1-Ethernet0/3
  - id: l7
    n1: n3
    n2: n5
    i1: i7
    i2: i4
    conditioning: {}
    label: DLS2-Ethernet1/2<->ALS2-Ethernet0/3
  - id: l8
    n1: n4
    n2: n2
    i1: i5
    i2: i0
    conditioning: {}
    label: ALS1-Ethernet1/0<->EmpHost1-eth0
  - id: l9
    n1: n0
    n2: n1
    i1: i1
    i2: i9
    conditioning: {}
    label: CORE_ROUTER-Ethernet0/0<->DLS1-Ethernet2/0
  - id: l10
    n1: n6
    n2: n5
    i1: i0
    i2: i5
    conditioning: {}
    label: EmpHost1_0-eth0<->ALS2-Ethernet1/0
  - id: l11
    n1: n6
    n2: n5
    i1: i1
    i2: i6
    conditioning: {}
    label: EmpHost1_0-eth1<->ALS2-Ethernet1/1
  - id: l12
    n1: n4
    n2: n1
    i1: i1
    i2: i2
    conditioning: {}
    label: ALS1-Ethernet0/0<->DLS1-Ethernet0/1
  - id: l13
    n1: n1
    n2: n3
    i1: i1
    i2: i1
    conditioning: {}
    label: DLS1-Ethernet0/0<->DLS2-Ethernet0/0
lab:
  description: |-
    CCNA Exam Prep: Back to Networking Basics with Hank Preston and Patrick Gargano

    Building Resilient Links with EtherChannel: Gain EtherChannel Excellence
    What purpose do etherchannels (aka port-channels) serve in a network design and how to configure and manage them on Cisco IOS.

    * Configure EtherChannel between IOS switches
    * Verify EtherChanel operations
    * Configure EtherChannel betweek switches and other devices
  notes: |-
    **CCNA Exam Prep: Back to Networking Basics with Hank Preston and Patrick Gargano**

    # Building Resilient Links with EtherChannel: Gain EtherChannel Excellence

    What purpose do Etherchannels (aka port-channels) serve in a network design and how to configure and manage them on Cisco IOS.

    * Configure EtherChannel between IOS switches
    * Verify EtherChannel operations
    * Configure EtherChannel between switches and other devices

    ## Setup and Scenario
    In this set of lab-based demonstrations, you are the network engineer for a growing organization tasked with updating the network to support new network needs. Recently redundant links were added between network devices, but spanning-tree blocks these links to prevent bridging loops.

    You've been asked to:

    * Explore how network redundancy and resiliency can be maintained while also increasing bandwidth between the switches be leveraging parallel links.
    * Investigate options for providing increased bandwidth to hosts that require more than what a single link can provide.

    *Be sure to **START** the lab before continuing to the demo labs.*

    ## Part 1: Reviewing the Current State of the Network
    Before jumping into configuration of Etherchannels, take some time to explore the current state of the network.  Find answers to the following questions:

    1. How many interfaces are blocked by spanning-tree in VLAN 10? VLAN100?
    1. Which distribution switch is the root bridge for VLAN 10? VLAN 100?
    1. What is the usable bandwidth on inter-switch links?
    1. What happens if the link connecting `ALS2 e1/0` to `Server1 e0` is removed? Can `EmpHost1` still reach server resources?

    ## Part 2: Creating LACP EtherChannel between DLS1 and DLS2
    Network design and engineering is all about redundancy, particularly at key parts of the network.  Distribution layer switches are a very ***key*** part of the network.  This is why they are nearly always deployed in pairs (or more) of switches. But what happens when that trunk link between the pair of switches is broken? Traffic would have to forward through access layer switches, never an optimal solution. Therefore it is standard to deploy at least 2 links between distribution layer switches.

    Spanning-tree will act and prevent bridging loops when the second link is added, but if we could ***use*** both links that would double bandwidth as well as avoid having spent money and resources on a simple "alternate" link.  We'll start our exploration of Etherchannels by configuring `Port-channel 10` as an LACP EtherChannel between `DLS1` and `DLS2`.

    ---

    #### Steps

    1. Create the port-channel interface as a VLAN trunk on `DLS1`:

        ```
        conf t
        interface port-channel 10
         description EtherChannel to DLS2
         switch trunk encap dot1q
         switch mode trunk
         end
        ```

        > If you don't pre-create the port-channel interface, it will be created automatically. However, it is good practice to explicitly configure the port-channel to ensure the intended configuration is applied.

    1. Verify the status and results:

        ```
        show etherchannel summary
        show run interface port-channel 10
        ```

        > `port-channel 10` is created, but not active as it lacks any "members".

    1. Add the "member interfaces" to the port-channel on `DLS1`:

        ```
        config t
        interface range e0/0,e1/0
         channel-group 10 mode active
         end
        ```

    1. Watch syslog for messages.

        ```
        *Sep 24 20:42:16.078: %SPANTREE-2-ROOTGUARD_BLOCK: Received a superior STP BPDU from bridge aabb.cc00.5600. Root guard blocking port Ethernet0/2 on VLAN0100.
        *Sep 24 20:42:17.073: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to down
        *Sep 24 20:42:17.076: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet1/0, changed state to down
        *Sep 24 20:42:23.861: %ETC-5-L3DONTBNDL2: Et0/0 suspended: LACP currently not enabled on the remote port.
        *Sep 24 20:42:24.090: %ETC-5-L3DONTBNDL2: Et1/0 suspended: LACP currently not enabled on the remote port.
        ```

        > * LACP is a "control protocol".  It "aggressively" prevents misconfigurations. It will "suspend" the physical interfaces until both sides agree.
        > * Spanning-tree was configured to prevent access switches from becoming paths to root. With both links to `DLS2` "suspended", the network is currently "down" until configuration is complete. In later steps we'll look at how to avoid this situation.

    1. Verify status and results on `DLS1`:

        ```
        show etherchannel summary
        show spanning-tree vlan 100
        show interfaces e0/0
        ```

    1. Complete the configuration of `port-channel10` on `DLS2`:

        ```
        conf t
        interface port-channel 10
         description Etherchannel to DLS1
         switch trunk encap dot1q
         switch mode trunk
        interface range e0/0,e1/0
         channel-group 10 mode active
         end
        ```

    1. Watch syslog for messages.

        ```
        *Sep 24 20:43:30.091: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to up
        *Sep 24 20:43:30.091: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet1/0, changed state to up
        *Sep 24 20:43:32.999: %LINK-3-UPDOWN: Interface Port-channel10, changed state to up
        *Sep 24 20:43:33.999: %LINEPROTO-5-UPDOWN: Line protocol on Interface Port-channel10, changed state to up
        *Sep 24 20:43:35.630: %SPANTREE-2-ROOTGUARD_UNBLOCK: Root guard unblocking port Ethernet0/2 on VLAN0100.
        ```

        > When LACP negotiates with peer switch, it will enable the interfaces.

    1. Verify status and results on `DLS1`:

        ```
        show etherchannel summary
        show spanning-tree vlan 100
        show interfaces e0/0
        ```

    ---

    #### Notes:

    * Initial creation of and bundling interfaces into an EtherChannel ***is*** disruptive
    * You can ADD interfaces to an existing EtherChannel non-disruptively
        * So even if you are only running cables for a single link at first, sometimes it makes sense to configure the EtherChannel interface up front to prevent disruption later
    * Spanning-tree "cost" changes as bandwidth on a port-channel increases.  Be aware of possible impacts of port role changes

    ## Part 3: Creating the remaining EtherChannels for Inter-switch links.
    With the the distribution switches connected with an EtherChannel, we will look at adding them to the access layer uplinks.  Along the way, we will look at a few important aspects of EtherChannel operations.

    ### Exploring LACP Active / Passive interactions with DLS1 to ALS1
    LACP is a control protocol that involves negotiation and to bring up an EtherChannel between two connected devices. For this negotiation to occur, traffic must be ***actively*** sent between the neighboring devices. But a device can also *passively* wait for another device to initiate the creation of the link.

    Let's explore this aspect of EtherChannels with the link between `ALS1` and `DLS1` and CML's "Packet Capture" feature.

    ---
    #### Steps

    1. Right click the link between `DLS1 e1/1` and `ALS1 e0/2` and choose "Packet Capture".
    1. Click the gear button to configure settings for the capture.
    1. Enter the below BPF filter to limit the capture to LACP traffic on the link. Click "Apply" to save the filter.

        ```
        ether proto 0x8809
        ```

        > * BPF stands for "Berkley Packet Filter" - a common syntax for performing packet captures with tools like tcpdump and Wireshark
        > * LACP is considered an "Ethernet Slow Protocol" which can be identified with [EtherType](https://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml) value `0x8809`. This filter will also match other traffic such as CDP.

    1. "Start" the packet capture.

    1. Configure the EtherChannel on `ALS1` for "passive" mode.

        ```
        config t
        interface port-channel 11
         switch trunk encap dot1q
         switch mode trunk
        interface range e0/0,e0/2
         channel-group 11 mode passive
         end
        ```

    1. Check status on `ALS1`.

        ```
        show etherchannel summary
        show spanning-tree vlan 10
        ```

        * Member ports go `w` (wait) and then `s` (suspend) because neighbor isn't configured
        * Spanning-tree root port for VLAN 10 moved to DLS2 link. Suspended ports don't forward traffic. *We'll look at a a way to prevent this shortly*.

    1. Now configure `DLS1`, also in "passive" mode.

        ```
        config t
        interface port-channel 11
         switch trunk encap dot1q
         switch mode trunk
        interface range e0/1,e1/1
         channel-group 11 mode passive
         end
        ```

        > We are purposefully configuring both sides as `passive` to verify the EtherChannel is **not** established.

    1. Check status on `DLS1`
        * Member ports also suspended, and spanning-tree isn't forwarding on the links.
    1. Neither switch is attempting to negotiate LACP, so the EtherChannel doesn't establish.
    1. Check the packet capture output, there shouldn't have been any LACP packets captured.
    1. Change to mode `active` on `DLS1`:

        ```
        config t
        interface range e0/1,e1/1
         channel-group 11 mode active
         end
        ```
    1. Check the packet capture output, you should see LACP traffic now.

        > The first LACP frame will be from `DLS1` (the "active" member) beginning negotiations. You'll then see frames from `ALS1` in reply.  The source address will be the MAC address for the switch interface. The destination MAC address is the reserved address for [IEEE 802.3 Slow Protocols Multicast](https://standards.ieee.org/products-programs/regauth/grpmac/public/)

        * Select one of the frames and explore the details visible.

    1. Check status on both switches:

        ```
        show etherchannel summary
        show spanning-tree vlan 10
        show lacp 11 neighbor
        show lacp 11 internal
        ```

        * The `show lacp` command illustrates the details in the negotiation of the port-channel.

    1. Stop the Packet Capture.
        > If you don't manually stop the capture, it will auto-stop after 50 packets are captured.

    ---

    #### Notes:

    * LACP EtherChannels require negotiation between the connected devices
    * "active" interfaces will initiate negotiation, "passive" interfaces respond

    ### Create the DLS2 to ALS1 port-channel
    Now perform similar configurations on `DLS2` and `ALS1` to configure the uplink from the access switch to the second distribution switch.

    ---

    #### Steps

    1. On `ALS1`:

        ```
        config t
        interface port-channel 21
         switch trunk encap dot1q
         switch mode trunk
        interface range e0/1,e0/3
         channel-group 21 mode passive
         end
        ```

    1. On `DLS2`:

        ```
        config t
        interface port-channel 21
         switch trunk encap dot1q
         switch mode trunk
        interface range e0/1,e1/1
         channel-group 21 mode active
         end
        ```

    1. Verify status on both switches:

        ```
        show etherchannel summary
        show spanning-tree vlan 100
        ```

    ### Limiting Spanning-Tree Impact with DLS2 to ALS2
    We've seen how an interface becomes suspended when EtherChannels are initially created, and how that can result in spanning-tree changes. In this exercise, we will limit the impact by configuring the etherchannel in stages.

    #### Stages

    * First - Create port-channel using the currently "blocked" interface
    * Second - `shutdown` the currently forwarding interface
    * Third - Configure the second interface as a member of port-channel
    * Fourth - `no shutdown` the second member to complete the bundling

    ---

    #### Steps

    1. Our goal is to configure the EtherChannel uplink with minimal disruption to network traffic.  To check for disruption we will start a ping from `EmpHost1` to `Server1` that we can monitor for lost packets.

        ```
        ping server1 -c 10000
        ```

        > * An entry was made in the `/etc/hosts` file on `EmpHost1` for `Server1` so that ping by name would work
        > * `-c 10000` will send a count of 10,000 ping packets rather than the default of 5 packets

    1. Verify current spanning-tree port status for VLAN100 on `ALS2`:

        ```
        show span vlan 100
        ```

        * `Et0/1` - should be `Root FWD`
        * `Et0/3` - should be `Altn BLK`

    1. Create port-channel 22 on `DLS2` with only `e1/2`:

        ```
        config t
        interface port-channel 22
         switch trunk encap dot1q
         switch mode trunk
        interface e1/2
         channel-group 22 mode active
         end
        ```

    1. Verify interface `Eth0/1` on `ALS2` hasn't changed status
    1. Verify no pings were lost.

    1. Create port-channel 22 on `ALS2` with only `e0/3`:

        ```
        config t
        interface port-channel 22
         switch trunk encap dot1q
         switch mode trunk
        interface e0/3
         channel-group 22 mode passive
         end
        ```

    1. Monitor and verify no ping traffic is lost.

    1. Verify current spanning-tree port status for VLAN 100 on `ALS2`:
        * `Et0/1` - should be `Root FWD`
        * `E0/3` will come up, and so will `Po22` but `Po22` should be `Altn BLK` with a cost of `100`

        > Question:
        > * Why is `Po22` the alternate port instead of `Et0/1`?

    1. Now that the the EtherChannel is built and ready for use in spanning-tree, we can `shutdown` the independent link to transition to the port-channel.
        > This will not necessarily be "without impact", but it will be less of an impact than if we started forwarding all traffic through `DLS1`.

    1. On `DLS2`:

        ```
        interface e0/2
         shutdown
         end
        ```

        > Within the CML simulation, shutting down one interface doesn't bring down the other side as it would on real hardware. So as quickly as possible shutdown the interface on `ALS2`.

    1. On `ALS2`:

        ```
        interface e0/1
         shutdown
         end
        ```

    1. Check the ping traffic, were any packets lost?

    1. Verify current spanning-tree port status for VLAN 100 on `ALS2`:
        * `Et0/1` - should not be listed at all.
        * `Po22` - should be `Root FWD` with a cost of `100`

    1. Now add the shutdown interfaces to the port-channel on each switch.

    1. Add interface `e1/2` to `port-channel22` on `DLS2`:

        ```
        config t
        interface e0/2
         channel-group 22 mode active
         end
        ```

    1. Add interface `e0/1` to `port-channel22` on `ALS2`:

        ```
        config t
        interface e0/1
         channel-group 22 mode passive
         end
        ```

    1. Verify etherchannel status on both switches.

        ```
        show etherchannel summary
        ```

        > The interfaces that were just added should be `(D) - down`.

    1. Enable the both interfaces with `no shutdown`. Again, try to do both switches as simultaneously as possible.
        * On `DLS2`:

            ```
            config t
            interface e0/2
             no shutdown
             end
            ```

        * On `ALS2`:

            ```
            config t
            interface e0/1
             no shutdown
             end
            ```

    1. Check the ping traffic, were any packets lost?
        > Some of the packet loss is due to the fact that as soon as the interface is `no shutdown`, the simulated interface transitions to `UP/UP`. On a "real interface", the operational status of `UP` wouldn't be reached until a link is detected. The number of packets lost in this simulation isn't accurate to real-world.

    1. Verify status on both switches.

        ```
        show etherchannel summary
        show spanning-tree vlan 100
        ```

        * Notice the change in spanning-tree cost to `56` now that the second link is active.

    #### Notes

    * With planning and ordering of network configurations, it is possible to minimize network disruptions when adding EtherChannel configurations to a network
    * It is important to understand the interplay and impact between networking protocols and services, as we've seen between Spanning-tree and EtherChannels here

    ### Create the DLS1 to ALS2 port-channel
    Now complete the deployment of EtherChannels for all the inter-switch links with the final uplink from `ALS2` to `DLS1`.

    ---

    #### Steps

    1. On `ALS2`:

        ```
        config t
        interface port-channel 12
         switch trunk encap dot1q
         switch mode trunk
        interface range e0/0,e0/2
         channel-group 12 mode passive
         end
        ```

    1. On `DLS1`:

        ```
        config t
        interface port-channel 12
         switch trunk encap dot1q
         switch mode trunk
        interface range e0/2,e1/2
         channel-group 12 mode active
         end
        ```

    1. Verify status on both switches:

        ```
        show etherchannel summary
        show spanning-tree vlan 10
        ```

    ### Impact of EtherChannels on the network topology.
    You have now created EtherChannels between each of the switches.  This has the following positive impacts on the network design:

    1. Increased bandwidth.
        * Compare the bandwidth displayed between `show interface port-channel #` to `show interface eth #/#`
    1. Better network utilization.
        * Count how many blocked interfaces there are now compared to the start of the lab.
    1. Improved resiliency.
        * Failover times for LACP are much faster than Spanning-tree


    ## Part 4: Creating LACP EtherChannel to a Linux Host
    LACP EtherChannels are also useful to provide increased bandwidth and resiliency to other network hosts.  A common example are servers located in a data center, many of which come with 2 or 4 network interfaces by default. You may be asked to configure LACP port-channels to connect to these servers to provide increased bandwidth, interface redundancy, or both.

    The IOS configuration for the EtherChannel is the same, and in this lab we'll explore how you can create a port-channel (known as a "bond") interface on Linux.

    > Notes:
    > * The configuration and operation of bond interfaces on Linux is not part of the CCNA blueprint, but this allows us to show real world relevance to the skill beyond just networking infrastructure.
    > * Modern Linux distributions support LACP bond interfaces, but may require enabling the feature in the kernel.
    > * The startup configuration for `Server1` in the CML topology was prepared for configuring LACP with the following commands:
    >
    >     ```
    >     # Set speed and duplex on ethernet interfaces. Required for LACP to negotiate
    >     ethtool -s eth0 speed 1000 duplex full
    >     ethtool -s eth1 speed 1000 duplex full
    >     # Enable LACP kernel module
    >     modprobe bonding mmiimon=100 mode=802.3ad lacp_rate=slow
    >     ```

    ---
    #### Steps
    1. Configure the EtherChannel interface on `ALS2`:
        > Note: This will be disruptive until the configuration is complete on `Server1`.

        ```
        config t
        interface port-channel 41
         switchport mode access
         switchport access vlan 100
         spanning-tree portfast
         spanning-tree bpduguard enable
        interface range e1/0-1
         channel-group 41 mode active
        end
        ```

    1. Inspect the current network interface configuration on `Server1`.
        * Look at the network interfaces configured on `Server1`

            ```
            ip link show
            ```

            > In addition to the 2 expected ethernet interfaces, the server also has a loopback interface and lists a bond interface.  `bond0` was automatically created when LACP "bonding" was enabled on the server, but it is currently `DOWN` and has no members.

        * Check the status of the `bond0` interface

            ```
            cat /proc/net/bonding/bond0
            ```

            > You should see status as down, and no member interfaces listed.

    1. Inspect the current IP configuration on `Server`:

        ```
        ip address show
        ip route show
        ```

        > Only `eth0` and `lo` have IP addresses configured.

    1. We will want to keep the same IP address for the server, so begin by removing it from the `eth0` interface:

        ```
        sudo ip address del 192.168.100.101/24 dev eth0

        # Verify changes
        ip address show dev eth0
        ```

    1. Shutdown `eth0` so that it can be added to the bond:

        ```
        sudo ip link set down dev eth0
        ```

    1. Add the ethernet interfaces as members of `bond0`:

        ```
        sudo ip link set dev eth0 master bond0
        sudo ip link set dev eth1 master bond0

        # Verify changes
        ip link show
        ```

        > Note: The links will be brought `UP` when added to the bond.

    1. Enable `bond0` interface:

        ```
        sudo ip link set up dev bond0
        ```

    1. Check status of the etherchannel on `ALS2`:

        ```
        show etherchannel summary
        ```

        > If it is not "up" verify the steps completed on `Server1`

    1. Check status of the bond on `Server1`:

        ```
        cat /proc/net/bonding/bond0
        ```

        > Everything should show `up` and both ethernet interfaces as members

    1. Configure the IP address for the `bond0` interface.

        ```
        sudo ip address add 192.168.100.101/24 dev bond0
        sudo ip route add default via 192.168.100.1

        # Verify
        ip address show
        ip route show
        ping 192.168.100.1
        ```

    ---

    #### Notes
    * LACP EtherChannel / port-channel / bond interfaces are useful for end host connections as well as network device to device connections
    * Linux generally supports LACP as part of standard networking stack, but check for differences between distributions (ie Ubuntu / CentOS / Alpine)
    * Other host operating systems (such as Windows or VMware) also support LACP interfaces
  title: CCNA Prep 2024 S1E3 Resilient Links with EtherChannel
  version: 0.2.2
