Contents

Introduction

Pré-requisitos para executar o script manualmente

Pré-requisitos para executar o script a partir do contêiner

Etapas para executar os scripts

Introduction

A ACI segue o switching cut-through, o que significa que o pacote já é encaminhado antes que o CRC possa ser computado. Normalmente, esses pacotes são empacotados e encaminhados como erros de saída. Como a ACI não descarta esses pacotes, o mesmo pacote atravessa o pacote e os contadores de CRC estomp são incrementados no caminho. Isso não significa que todas as interfaces que veem o CRC estão com defeito. Portanto, é necessária uma triagem adequada para isolar a porta/SFP/fibra problemática. O processo de triagem agora é automatizado por meio de scripts Python, o que resulta em solução de problemas mais fácil e em evitar tarefas manuais. O escopo deste documento é explicar como usar os scripts de automação a serem usados (consulte anexo).

Pré-requisitos para executar o script manualmente

A máquina cliente de onde o script será executado precisa atender aos seguintes requisitos

a. Python3 deve ser instalado

b. Acesso à rede para o domínio da ACI

c. ACI_CRC_requirements.txt (anexado) a ser instalado. Este arquivo está localizado aqui.

Faça o download do arquivo (ACI_CRC_requirements.txt) para a máquina cliente

Abra o Terminal e execute o comando - pip3 install -r ACI_CRC_requirements.txt

ABCD-M-G24X:downloads abcd$ pip3 install -r ACI_CRC_requirements.txt

Collecting bcrypt==3.2.0 (from -r ACI_CRC_requirements.txt (line 1))

Downloading https://files.pythonhosted.org/packages/bf/6a/0afb1e04aebd4c3ceae630a87a55fbfbbd94dea4eaf01e53d36743c85f02/bcrypt-3.2.0-cp36-abi3-macosx_10_9_x86_64.whl

Collecting cffi==1.14.6 (from -r ACI_CRC_requirements.txt (line 2))

Downloading https://files.pythonhosted.org/packages/ca/e1/015e2ae23230d9de8597e9ad8c0b81d5ac181f08f2e6e75774b7f5301677/cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl (176kB)

|████████████████████████████████| 184kB 1.4MB/s

**snip**

Successfully installed DateTime-4.3 Pillow-8.3.2 bcrypt-3.2.0 cffi-1.14.6 cryptography-3.4.8 cycler-0.10.0 kiwisolver-1.3.2

matplotlib-3.4.3 numpy-1.21.2 pandas-1.3.2 paramiko-2.7.2 pyparsing-2.4.7 python-dateutil-2.8.2 pytz-2021.1 six-1.16.0

stdiomask-0.0.5 tabulate-0.8.9 termcolor-1.1.0 zope.interface-5.4.0

Pré-requisitos para executar o script a partir do contêiner

Um recipiente é preparado com os Pacotes Python acima pré-instalados.

docker login docker.io

docker pull aci-stomper

docker run -d --name

-p

:80 aci-stomper (on your browser http://ContainerIP:someport) docker ps docker exec -it

/bin/bash root@6df99d5dbbad:/# cd /home/scripts/ root@6df99d5dbbad:/home/scripts# ls ACI_CRC_Parser.py ACI_CRC_Poller.py

Etapas para executar os scripts

Observe que há um total de dois scripts python (ACI_CRC_Poller.py e ACI_CRC_Parser.py). Esses scripts estão disponíveis para download no Cisco DevNet Code Exchange usando o URL abaixo.

https://developer.cisco.com/codeexchange/github/repo/CiscoDevNet/ACI-CRC-FCS-Checker

Faça o download dos dois em máquina/computador, de onde deseja executar esses scripts.

Neste documento, o script-1 refere-se a ACI_CRC_Poller.py e o script-2 refere-se a ACI_CRC_Parser.py.

1. O ACI_CRC_Poller.py coletará dados de erro de CRC e FCS em arquivos a cada cinco minutos, no máximo, por sete dias de duração.

Execute o script-1 (ACI_CRC_Poller.py) do terminal.  Insira o endereço IP OOB para um dos APICs em um determinado cluster e suas credenciais.

ABCD-M-G24X:downloads abcd$ python3 ACI_CRC_Poller.py

Enter the IP address or DNS Name of APIC: 10.197.204.184

__________________________________________________________

Enter the username: admin

___________________________________________________________

Enter the password: **********

Trying to connect to APIC

Connection established to the APIC

___________________________________________________________

2.  O Script-1 solicita a localização/caminho na máquina/computador local, onde armazenará os registros.  Insira um caminho válido, caso contrário, o script não será executado.

Please enter the folder where files have to be stored

_____________________________________________________________

VALID folder format:

EXAMPLE:

Windows-> C:\Users\Admin\Desktop\ACI\

MAC -> /User/admin/Desktop/ACI/

---------------------------------------------------------------------------------------------------

PLEASE NOTE that data collection and script execution might get impacted if folder format is not as below

--------------------------------------------------------------------------------------------------------

Enter the absolute path of the folder where the files have to be stored:/Users/abcd/Downloads/FCS_Checker/  <<<<<<<<<<<<<<

3.  O script agora solicitará a hora de término da execução.

Insira a hora no formato aaaa-mm-dd hh:mm (por fuso horário local da malha), no mínimo 5 minutos e no máximo 7 dias.

No momento, o script-1 começa a coletar erros de FCS/CRC da estrutura a cada cinco minutos (até o tempo de término especificado anteriormente pelo usuário) e salva dados em arquivos no caminho especificado na entrada anterior.

----------------------------------------------------------------

Enter the End Time until which the script runs(in the format of yyyy-mm-dd hh:mm, current time:2021-09-27 11:27....  maximum upto 2021-10-04 11:27): 2021-09-27 11:32 <<<<<

___________________________________________________________

The script is executing ........................

The script is executing ........................

ABCD-M-G24X:downloads abcd$

4. Após a execução bem-sucedida do primeiro script, ele armazenará arquivos de dados brutos no local, especificado pelo usuário na etapa 2.

Verifique o mesmo como mostrado no exemplo abaixo.

ABCD-M-G24X:FCS_Checker kbosu$ pwd

/Users/abcd/Downloads/FCS_Checker

ls -l

total 16

-rw-r--r--@ 1 kbosu  staff  1419 Sep 27 11:28 CRC_FCS_20210927_1128.txt

-rw-r--r--@ 1 kbosu  staff  1419 Sep 27 11:33 CRC_FCS_20210927_1133.txt

ABCD-M-G24X:FCS_Checker abcd$

5. Agora é hora de executar o segundo script (ACI_CRC_Parser.py).

O Script 2 usará os arquivos criados pelo script-1 e funcionará mais.

Insira o endereço IP OOB para um dos APICs em um determinado cluster e suas credenciais.

Além disso, insira o mesmo local de arquivo que você inseriu na etapa 2 ao executar o primeiro script.

ABCD-M-G24X:downloads abcd$ python3 ACI_CRC_Parser.py

Enter the IP address or DNS Name of APIC: 10.197.204.184

__________________________________________________________

Enter the username: admin

___________________________________________________________

Enter the password: **********

Trying to connect to APIC

Connection established to the APIC

_____________________________________________________________

Please enter the folder where files are stored

Please make sure we have at least two files exists in the directory where you have saved data

_____________________________________________________________

--------------------------------------------------------------------------------------------------------

Enter the absolute path of the folder where the files are stored:/Users/abcd/Downloads/FCS_Checker/

___________________________________________________________

You have CRC and FCS for the below date range

1.2021-09-27

Fetching first and last file of the same date 20210927

CRC_FCS_20210927_1128.txt

CRC_FCS_20210927_1133.txt

__________________________________________________________

The script is executing.....

__________________________________________________________

The script execution has completed

6. O Script 2 imprimirá os dados em um formato tabular, como mostrado no exemplo abaixo.

Primeiro, ele listará as interfaces de nó com erros de CRC e FCS diferentes de zero, juntamente com a diferença em seus contadores CRC/FCS, durante o intervalo de tempo especificado pelo usuário. Usando o LLDP, o script também vai determinar o dispositivo vizinho conectado a determinadas interfaces e, mais importante, ele vai indicar qual nó/interface é a origem dos erros do ponto de vista da estrutura e quais interfaces de nó estão apenas vendo CRCs devido ao Stomp.

Do ponto de vista da solução de problemas do FCS, o destacado em "Vermelho" e marcado como "Local" é onde a solução de problemas deve ser focada.

Isso é provavelmente a(s) interface(s), onde pacotes corrompidos/danificados estão entrando na estrutura de e fazendo com que os CRCs sejam inundados na estrutura.

+--------+---------+--------------------+-----------+-----------+---------------+---------------+---------------+---------------+-------------------------------------------------------------------------------------+--------------+

| POD_ID | NODE_ID |     NODE_NAME      | NODE_ROLE | INTERFACE | 20210927_1128 | 20210927_1133 | 20210927_1128 | 20210927_1133 |                                      NEIGHBOR                                       | ERROR SOURCE |

+--------+---------+--------------------+-----------+-----------+-----CRC-------+----CRC Diff---+----FCS--------+---FCS Diff----+-------------------------------------------------------------------------------------+--------------+

|   1    |   302   | bgl-aci06-t2-leaf2 |   leaf    |  eth1/44  | 5002806823759 |   127841888   | 5002806823759 |   127841888   | No LLDP /CDP neighbours found please check physically where this interface connects |    Local     |

|   1    |   101   |  bgl-aci06-spine1  |   spine   |  eth1/1   |  2981200154   |   132103050   |       0       |       0       |                System:bgl-aci06-t1-leaf1.cisco.com,Interface:Eth1/49                |    Stomp     |

|   1    |   101   |  bgl-aci06-spine1  |   spine   |  eth1/2   |    968286     |       0       |       0       |       0       |                                                                                     |   Historic   |

|   1    |   201   | bgl-aci06-t1-leaf1 |   leaf    |  eth1/1   |      12       |       0       |       0       |       0       |                                                                                     |   Historic   |

|   1    |   201   | bgl-aci06-t1-leaf1 |   leaf    |  eth1/51  | 4999243774529 |       0       |       0       |       0       |                                                                                     |   Historic   |

|   1    |   201   | bgl-aci06-t1-leaf1 |   leaf    |  eth1/52  | 5002807353809 |   127841212   |       0       |       0       |                System:bgl-aci06-t2-leaf2.cisco.com,Interface:Eth1/49                |    Stomp     |

|   1    |   202   | bgl-aci06-t1-leaf2 |   leaf    |  eth1/51  |    968286     |       0       |       0       |       0       |                                                                                     |   Historic   |

|   1    |   301   | bgl-aci06-t2-leaf1 |   leaf    |  eth1/44  | 4999245287405 |       0       | 4999245287405 |       0       |                                                                                     |   Historic   |

|   1    |   301   | bgl-aci06-t2-leaf1 |   leaf    |  eth1/49  | 4999823953891 |       0       |       0       |       0       |                                                                                     |   Historic   |

|   1    |   302   | bgl-aci06-t2-leaf2 |   leaf    |  eth1/49  | 4999243774529 |       0       |       0       |       0       |                                                                                     |   Historic   |

+--------+---------+--------------------+-----------+-----------+---------------+---------------+---------------+---------------+-------------------------------------------------------------------------------------+--------------+

7. Além disso, o script fornecerá as seguintes opções aos usuários para classificar e exibir dados granulares, o que foi coletado pelos scripts 1 e 2.

O usuário pode escolher uma opção entre o número 1 e 3 como entrada. Veja o exemplo abaixo.

1.Sort the data further

2.View the granular data of an interface

3.Exit

Input the number:

No exemplo abaixo, vamos ver a opção 2, que nos ajuda a visualizar dados granulares para qualquer interface específica.

O script solicitará que o usuário digite o respectivo número POD , ID do nó e ID da interface da tabela impressa acima (etapa 6).

Aqui neste exemplo, estamos usando 1-302-eth1/44, onde o ID do POD é 1, o ID do nó é 302 e o ID da interface eth1/44. Esta é a interface

onde o FCS local foi informado pelo script, como mostrado na etapa 6.

Input the number:2

---------------------------------------------------------------------------

Enter an interface for which you need granular data(POD_ID-NODE_ID-INTERFACE  Example:1-101-eth1/5): 1-302-eth1/44

----------------------------------------------------------------------

You have CRC and FCS data in the below date range

1.2021-09-27

Enter the date for which you need granular data(any number from the above list range(1-1)):

Em nosso exemplo, coletamos os dados por apenas alguns minutos de um dia, portanto vemos apenas uma opção para o dia 27 de setembro.

Assim, nossa contribuição será "1".

Enter the date for which you need granular data(any number from the above list range(1-1)): 1

+-------+---------------+---------------+

| Time  |      CRC      |      FCS      |

+-------+---------------+---------------+

| 11:28 | 5002806823759 | 5002806823759 |

| 11:33 | 5002934665647 | 5002934665647 |

+-------+---------------+---------------+

----------------------------------------------------------------

Do you want to continue viewing the granular data(0/1), 1-yes, 0-no:0

--------------------------------------------------------------------------------

Please select any number below to sort the data further or to view granular data of an interface

1.Sort the data further

2.View the granular data of an interface

3.Exit

Input the number:3

ABCD-M-G24X:downloads abcd$