La documentazione per questo prodotto è stata redatta cercando di utilizzare un linguaggio senza pregiudizi. Ai fini di questa documentazione, per linguaggio senza di pregiudizi si intende un linguaggio che non implica discriminazioni basate su età, disabilità, genere, identità razziale, identità etnica, orientamento sessuale, status socioeconomico e intersezionalità. Le eventuali eccezioni possono dipendere dal linguaggio codificato nelle interfacce utente del software del prodotto, dal linguaggio utilizzato nella documentazione RFP o dal linguaggio utilizzato in prodotti di terze parti a cui si fa riferimento. Scopri di più sul modo in cui Cisco utilizza il linguaggio inclusivo.
Cisco ha tradotto questo documento utilizzando una combinazione di tecnologie automatiche e umane per offrire ai nostri utenti in tutto il mondo contenuti di supporto nella propria lingua. Si noti che anche la migliore traduzione automatica non sarà mai accurata come quella fornita da un traduttore professionista. Cisco Systems, Inc. non si assume alcuna responsabilità per l’accuratezza di queste traduzioni e consiglia di consultare sempre il documento originale in inglese (disponibile al link fornito).
In questo documento viene descritto come risolvere i problemi relativi a un utilizzo elevato della CPU dovuto a interruzioni sulle piattaforme Cisco IOS® XE con le versioni 16.x.
Questo documento è stato redatto da Raymond Whiting e Yogesh Ramdoss, Cisco TAC Engineers.
Questo documento introduce anche diversi nuovi comandi integrati su questa piattaforma per risolvere i problemi relativi all'utilizzo elevato della CPU. È importante comprendere come viene costruito Cisco IOS XE. Con Cisco IOS XE, Cisco è passato a un kernel Linux e tutti i sottosistemi sono stati suddivisi in processi. Tutti i sottosistemi precedentemente inclusi in Cisco IOS, ad esempio i driver dei moduli, l'alta disponibilità (HA, High Availability) e così via, vengono ora eseguiti come processi software nel sistema operativo Linux. Cisco IOS stesso funziona come daemon nel sistema operativo Linux (IOSd). Cisco IOS XE conserva non solo lo stesso aspetto del classico Cisco IOS, ma anche il suo funzionamento, supporto e gestione.
Di seguito sono riportate alcune definizioni utili:
Un diagramma di alto livello del percorso di comunicazione tra Piano dati e Piano di controllo:
Questa sezione fornisce un flusso di lavoro sistematico per la valutazione dei problemi di elevata CPU sugli switch. Si noti che, al momento della scrittura di questa sezione, copre un processo selezionato.
Il processo di risoluzione dei problemi e verifica descritto in questa sezione può essere utilizzato in larga misura per un utilizzo elevato della CPU a causa di interruzioni.
Il show process cpu comando viene usato per visualizzare lo stato del processo corrente all'interno del daemon IOSd. Quando si aggiunge la modifica dell'output
| exclude 0.00, vengono esclusi i processi attualmente inattivi.
Di seguito sono riportate due importanti informazioni:
- Utilizzo CPU per cinque secondi: 91%/30%
- Il primo numero (91%) è l'utilizzo complessivo della CPU dello switch
- Il secondo numero (30%) è l'utilizzo causato dagli interrupt dal piano dati
- Il processo Address Resolution Protocol
(ARP) Input è attualmente il primo processo Cisco IOS a utilizzare le risorse:
Switch# show processes cpu sort | ex 0.00
CPU utilization for five seconds: 91%/30%; one minute: 30%; five minutes: 8%
PID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process
37 14645 325 45061 59.53% 18.86% 4.38% 0 ARP Input
137 2288 115 19895 1.20% 0.14% 0.07% 0 Per-minute Jobs
373 2626 35334 74 0.15% 0.11% 0.09% 0 MMA DB TIMER
218 3123 69739 44 0.07% 0.09% 0.12% 0 IP ARP Retry Age
404 2656 35333 75 0.07% 0.09% 0.09% 0 MMA DP TIMER
Il comando
show processes cpu platform sorted viene usato per visualizzare l'aspetto dell'utilizzo del processo dal kernel Linux. Dai risultati si può osservare che il processo FED è elevato, il che è dovuto alle richieste ARP puntate al processo IOSd:
Switch# show processes cpu platform sorted CPU utilization for five seconds: 38%, one minute: 38%, five minutes: 40% Core 0: CPU utilization for five seconds: 39%, one minute: 37%, five minutes: 39% Core 1: CPU utilization for five seconds: 41%, one minute: 38%, five minutes: 40% Core 2: CPU utilization for five seconds: 30%, one minute: 38%, five minutes: 40% Core 3: CPU utilization for five seconds: 37%, one minute: 39%, five minutes: 41% Pid PPid 5Sec 1Min 5Min Status Size Name -------------------------------------------------------------------------------- 22701 22439 89% 88% 88% R 2187444224 linux_iosd-imag 11626 11064 46% 47% 48% S 2476175360 fed main event 4585 2 7% 9% 9% S 0 lsmpi-xmit 4586 2 3% 6% 6% S 0 lsmpi-rx
Passaggio 2. Analizza i motivi per cui il FED sta inviando i pacchetti al Control Plane
Dal passo 1. Si può concludere che il processo IOSd/ARP è molto elevato ma è vittima del traffico introdotto dal Data Plane. Ulteriori indagini sul motivo per cui il processo FED punta il traffico verso la CPU e da dove questo traffico proviene è necessario.
Il
show platform software fed switch active punt cause summary fornisce una panoramica di alto livello della ragione del punt. Qualsiasi numero incrementato su più esecuzioni di questo comando indica:
Switch#show platform software fed switch active punt cause summary Statistics for all causes Cause Cause Info Rcvd Dropped ------------------------------------------------------------------------------ 7 ARP request or response 18444227 0 11 For-us data 16 0 21 RP<->QFP keepalive 3367 0 24 Glean adjacency 2 0 55 For-us control 6787 0 60 IP subnet or broadcast packet 14 0 96 Layer2 control protocols 3548 0 ------------------------------------------------------------------------------
I pacchetti inviati al control plane da FED utilizzano una struttura di coda divisa in modo da garantire un traffico di controllo ad alta priorità. Non si perde con il traffico a bassa priorità, come ARP. Una panoramica di alto livello di queste code può essere visualizzata utilizzando il
show platform software fed switch active cpu-interface. Dopo aver eseguito questo comando più volte, si può notare che la coda
Forus Resolution (Forus - che significa traffico destinato alla CPU) aumenta rapidamente.
Switch#show platform software fed switch active cpu-interface queue retrieved dropped invalid hol-block ------------------------------------------------------------------------- Routing Protocol 8182 0 0 0 L2 Protocol 161 0 0 0 sw forwarding 2 0 0 0 broadcast 14 0 0 0 icmp gen 0 0 0 0 icmp redirect 0 0 0 0 logging 0 0 0 0 rpf-fail 0 0 0 0 DOT1X authentication 0 0 0 0 Forus Traffic 16 0 0 0 Forus Resolution 24097779 0 0 0 Inter FED 0 0 0 0 L2 LVX control 0 0 0 0 EWLC control 0 0 0 0 EWLC data 0 0 0 0 L2 LVX data 0 0 0 0 Learning cache 0 0 0 0 Topology control 4117 0 0 0 Proto snooping 0 0 0 0 DHCP snooping 0 0 0 0 Transit Traffic 0 0 0 0 Multi End station 0 0 0 0 Webauth 0 0 0 0 Crypto control 0 0 0 0 Exception 0 0 0 0 General Punt 0 0 0 0 NFL sampled data 0 0 0 0 Low latency 0 0 0 0 EGR exception 0 0 0 0 FSS 0 0 0 0 Multicast data 0 0 0 0 Gold packet 0 0 0 0
L'uso di
show platform software fed switch active punt cpuq all fornisce una visione più dettagliata di queste code. La coda 5 è responsabile dell'ARP e, come previsto, aumenta in più esecuzioni del comando. Il comando
show plat soft fed sw active inject cpuq clear può essere usato per cancellare i contatori e facilitarne la lettura.
Switch#show platform software fed switch active punt cpuq all <snip> CPU Q Id : 5 CPU Q Name : CPU_Q_FORUS_ADDR_RESOLUTION Packets received from ASIC : 21018219 Send to IOSd total attempts : 21018219 Send to IOSd failed count : 0 RX suspend count : 0 RX unsuspend count : 0 RX unsuspend send count : 0 RX unsuspend send failed count : 0 RX consumed count : 0 RX dropped count : 0 RX non-active dropped count : 0 RX conversion failure dropped : 0 RX INTACK count : 1050215 RX packets dq'd after intack : 90 Active RxQ event : 3677400 RX spurious interrupt : 1050016 <snip>
Da qui, ci sono un paio di opzioni. Il protocollo ARP è traffico broadcast, quindi è possibile cercare interfacce con una velocità di trasmissione insolitamente elevata (utile anche per risolvere i problemi dei loop di livello 2). È necessario eseguire questo comando più volte per determinare l'interfaccia che viene incrementata attivamente.
Switch#show interfaces counters Port InOctets InUcastPkts InMcastPkts InBcastPkts Gi1/0/1 1041141009678 9 0 16267828358 Gi1/0/2 1254 11 0 1 Gi1/0/3 0 0 0 0 Gi1/0/4 0 0 0 0
L'altra opzione consiste nell'utilizzare lo strumento Embedded Packet Capture (EPC) per raccogliere un campione dei pacchetti visualizzati sul piano di controllo.
Switch#monitor capture cpuCap control-plane in match any file location flash:cpuCap.pcap Switch#show monitor capture cpuCap Status Information for Capture cpuCap Target Type: Interface: Control Plane, Direction: IN Status : Inactive Filter Details: Capture all packets Buffer Details: Buffer Type: LINEAR (default) File Details: Associated file name: flash:cpuCap.pcap Limit Details: Number of Packets to capture: 0 (no limit) Packet Capture duration: 0 (no limit) Packet Size to capture: 0 (no limit) Packet sampling rate: 0 (no sampling)
Con questo comando viene configurata un'acquisizione interna sullo switch per acquisire tutto il traffico puntuale verso il control plane. Il traffico viene salvato in un file sul flash. Si tratta di un file normale
wireshark pcap che può essere esportato da uno switch e aperto in Wireshark per ulteriori analisi.
Avviare l'acquisizione, lasciarla in esecuzione per alcuni secondi e arrestarla:
Switch#monitor capture cpuCap start Enabling Control plane capture may seriously impact system performance. Do you want to continue? [yes/no]: yes Started capture point : cpuCap *Jun 14 17:57:43.172: %BUFCAP-6-ENABLE: Capture Point cpuCap enabled. Switch#monitor capture cpuCap stop Capture statistics collected at software: Capture duration - 59 seconds Packets received - 215950 Packets dropped - 0 Packets oversized - 0 Bytes dropped in asic - 0 Stopped capture point : cpuCap Switch# *Jun 14 17:58:37.884: %BUFCAP-6-DISABLE: Capture Point cpuCap disabled.
Inoltre, è possibile visualizzare il file di acquisizione sullo switch:
Switch#show monitor capture file flash:cpuCap.pcap Starting the packet display ........ Press Ctrl + Shift + 6 to exit 1 0.000000 Xerox_d7:67:a1 -> Broadcast ARP 60 Who has 192.168.1.24? Tell 192.168.1.2 2 0.000054 Xerox_d7:67:a1 -> Broadcast ARP 60 Who has 192.168.1.24? Tell 192.168.1.2 3 0.000082 Xerox_d7:67:a1 -> Broadcast ARP 60 Who has 192.168.1.24? Tell 192.168.1.2 4 0.000109 Xerox_d7:67:a1 -> Broadcast ARP 60 Who has 192.168.1.24? Tell 192.168.1.2 5 0.000136 Xerox_d7:67:a1 -> Broadcast ARP 60 Who has 192.168.1.24? Tell 192.168.1.2 6 0.000162 Xerox_d7:67:a1 -> Broadcast ARP 60 Who has 192.168.1.24? Tell 192.168.1.2 7 0.000188 Xerox_d7:67:a1 -> Broadcast ARP 60 Who has 192.168.1.24? Tell 192.168.1.2 8 0.000214 Xerox_d7:67:a1 -> Broadcast ARP 60 Who has 192.168.1.24? Tell 192.168.1.2 9 0.000241 Xerox_d7:67:a1 -> Broadcast ARP 60 Who has 192.168.1.24? Tell 192.168.1.2
Da questo output, è evidente che l'host 192.168.1.2 è l'origine degli ARP costanti che causano l'uso intensivo della CPU sullo switch. Utilizzare i comandi
show ip arp e
show mac address-table address per individuare l'host e rimuoverlo dalla rete o individuare gli ARP. Inoltre, è possibile ottenere i dettagli completi di ciascun pacchetto acquisito usando l'opzione detail del comando capture view
show monitor capture file flash:cpuCap.pcap detail. Per ulteriori informazioni sull'acquisizione dei pacchetti su uno switch Catalyst, consultare questa guida.
Studio del caso 2. Reindirizzamenti IP con CoPP
Per impostazione predefinita, gli switch Catalyst di ultima generazione sono protetti da Control Plane Policing (CoPP). Il protocollo CoPP viene usato per proteggere la CPU da attacchi dannosi e da configurazioni errate che possono compromettere la capacità degli switch di mantenere funzioni critiche, quali lo spanning tree e i protocolli di routing. Queste protezioni possono condurre a scenari in cui lo switch ha solo una CPU leggermente elevata e non ha contatori di interfaccia, ma il traffico viene interrotto durante l'attraversamento dello switch. È importante notare l'utilizzo della CPU di base sul dispositivo durante le normali operazioni. L'utilizzo elevato della CPU non è necessariamente un problema e dipende dalle funzionalità abilitate nel dispositivo, ma quando l'utilizzo aumenta senza apportare modifiche alla configurazione, può essere un segno di preoccupazione.
Considerare questo scenario: gli host che non funzionano con lo switch gateway segnalano una velocità di download lenta e la perdita del ping verso Internet. Un controllo generale dello stato dello switch non mostra errori sulle interfacce o perdite di ping quando originato dallo switch gateway.
Quando si controlla la CPU, vengono visualizzati numeri leggermente elevati a causa degli interrupt.
Switch#show processes cpu sorted | ex 0.00 CPU utilization for five seconds: 8%/7%; one minute: 8%; five minutes: 8% PID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process 122 913359 1990893 458 0.39% 1.29% 1.57% 0 IOSXE-RP Punt Se 147 5823 16416 354 0.07% 0.05% 0.06% 0 PLFM-MGR IPC pro 404 13237 183032 72 0.07% 0.08% 0.07% 0 MMA DP TIMER
Se si controlla l'interfaccia della CPU, si osserverà che il contatore di reindirizzamento ICMP è incrementato attivamente.
Switch#show platform software fed switch active cpu-interface queue retrieved dropped invalid hol-block ------------------------------------------------------------------------- Routing Protocol 12175 0 0 0 L2 Protocol 236 0 0 0 sw forwarding 714673 0 0 0 broadcast 2 0 0 0 icmp gen 0 0 0 0 icmp redirect 2662788 0 0 0 logging 7 0 0 0 rpf-fail 0 0 0 0 DOT1X authentication 0 0 0 0 Forus Traffic 21776434 0 0 0 Forus Resolution 724021 0 0 0 Inter FED 0 0 0 0 L2 LVX control 0 0 0 0 EWLC control 0 0 0 0 EWLC data 0 0 0 0 L2 LVX data 0 0 0 0 Learning cache 0 0 0 0 Topology control 6122 0 0 0 Proto snooping 0 0 0 0 DHCP snooping 0 0 0 0 Transit Traffic 0 0 0 0
Mentre non si osservano cadute nel FED, se si seleziona CoPP, le cadute possono essere osservate nella coda di reindirizzamento ICMP.
Switch#show platform hardware fed switch 1 qos queue stats internal cpu policer CPU Queue Statistics ============================================================================================ (default) (set) Queue QId PlcIdx Queue Name Enabled Rate Rate Drop(Bytes) ----------------------------------------------------------------------------- 0 11 DOT1X Auth Yes 1000 1000 0 1 1 L2 Control Yes 2000 2000 0 2 14 Forus traffic Yes 4000 4000 0 3 0 ICMP GEN Yes 600 600 0 4 2 Routing Control Yes 5400 5400 0 5 14 Forus Address resolution Yes 4000 4000 0 6 0 ICMP Redirect Yes 600 600 463538463 7 16 Inter FED Traffic Yes 2000 2000 0 8 4 L2 LVX Cont Pack Yes 1000 1000 0 <snip>
Il CoPP è essenzialmente una policy QoS posizionata sul control plane del dispositivo. Il protocollo CoPP funziona come qualsiasi altro protocollo QoS sullo switch: quando la coda di un traffico specifico è esaurita, il traffico che utilizza quella coda viene interrotto. Da questi output, è possibile sapere che il traffico viene commutato dal software a causa dei reindirizzamenti ICMP e che il traffico viene scartato a causa del limite di velocità sulla coda di reindirizzamento ICMP. È possibile eseguire un'acquisizione sul piano di controllo per verificare che i pacchetti che colpiscono il piano di controllo provengano dagli utenti.
Per verificare la logica di corrispondenza utilizzata da ciascuna classe, è necessario usare una CLI per identificare i tipi di pacchetto che hanno raggiunto una determinata coda. Considerare questo esempio, per sapere cosa colpisce la
system-cpp-routing-control classe:
Switch#show platform software qos copp policy-info
Default rates of all classmaps are displayed:
policy-map system-cpp-policy
class system-cpp-police-routing-control
police rate 5400 pps
Switch#show platform software qos copp class-info
ACL representable classmap filters are displayed:
class-map match-any system-cpp-police-routing-control
description Routing control and Low Latency
match access-group name system-cpp-mac-match-routing-control
match access-group name system-cpp-ipv4-match-routing-control
match access-group name system-cpp-ipv6-match-routing-control
match access-group name system-cpp-ipv4-match-low-latency
match access-group name system-cpp-ipv6-match-low-latency
mac access-list extended system-cpp-mac-match-routing-control
permit any host 0180.C200.0014
permit any host 0900.2B00.0004
ip access-list extended system-cpp-ipv4-match-routing-control
permit udp any any eq rip
<...snip...>
ipv6 access-list system-cpp-ipv6-match-routing-control
permit ipv6 any FF02::1:FF00:0/104
permit ipv6 any host FF01::1
<...snip...>
ip access-list extended system-cpp-ipv4-match-low-latency
permit udp any any eq 3784
permit udp any any eq 3785
ipv6 access-list system-cpp-ipv6-match-low-latency
permit udp any any eq 3784
permit udp any any eq 3785
<...snip...>
Switch#monitor capture cpuSPan control-plane in match any file location flash:cpuCap.pcap Control-plane direction IN is already attached to the capture Switch#monitor capture cpuSpan start Enabling Control plane capture may seriously impact system performance. Do you want to continue? [yes/no]: yes Started capture point : cpuSpan Switch# *Jun 15 17:28:52.841: %BUFCAP-6-ENABLE: Capture Point cpuSpan enabled. Switch#monitor capture cpuSpan stop Capture statistics collected at software: Capture duration - 12 seconds Packets received - 5751 Packets dropped - 0 Packets oversized - 0 Bytes dropped in asic - 0 Stopped capture point : cpuSpan Switch# *Jun 15 17:29:02.415: %BUFCAP-6-DISABLE: Capture Point cpuSpan disabled. Switch#show monitor capture file flash:cpuCap.pcap detailed Starting the packet display ........ Press Ctrl + Shift + 6 to exit Frame 1: 60 bytes on wire (480 bits), 60 bytes captured (480 bits) on interface 0
<snip>
Ethernet II, Src: OmronTat_2c:a1:52 (00:00:0a:2c:a1:52), Dst: Cisco_8f:cb:47 (00:42:5a:8f:cb:47)
<snip>
Internet Protocol Version 4, Src: 192.168.1.10, Dst: 8.8.8.8
<snip>
Quando l'host esegue il ping 8.8.8.8, invia il ping all'indirizzo MAC del gateway, perché l'indirizzo di destinazione è esterno alla VLAN. Lo switch gateway rileva che l'hop successivo si trova nella stessa VLAN, riscrive l'indirizzo MAC di destinazione nel firewall e inoltra il pacchetto. Questo processo può essere eseguito nell'hardware, ma un'eccezione a questo inoltro hardware è il processo di reindirizzamento IP. Quando lo switch riceve il ping, rileva che sta instradando il traffico sulla stessa VLAN e reindirizza il traffico alla CPU per generare un pacchetto di reindirizzamento verso l'host. Questo messaggio di reindirizzamento informa l'host che esiste un percorso più ottimale verso la destinazione. In questo caso, l'hop successivo di layer 2 è progettato e previsto, lo switch deve essere configurato in modo da non inviare i messaggi di reindirizzamento e inoltrare i pacchetti nell'hardware. a tal fine, è possibile disabilitare i reindirizzamenti sull'interfaccia VLAN.
interface Vlan1 ip address 192.168.1.1 255.255.255.0 no ip redirects end
Quando i reindirizzamenti IP sono disattivati, lo switch riscrive l'indirizzo MAC e lo inoltra nell'hardware.
Studio del caso 3. CPU alta intermittente
Nel caso in cui la CPU dello switch sia intermittente, è possibile configurare uno script sullo switch in modo da eseguire automaticamente questi comandi quando si verificano eventi di CPU elevata. A tale scopo, è possibile utilizzare Cisco IOS Embedded Event Manager (EEM).
Il valore entry-level viene usato per determinare il livello della CPU prima dei trigger dello script. Lo script controlla l'OID SNMP medio di 5 secondi della CPU. Due file vengono scritti nella memoria flash,
tac-cpu-<timestamp>.txt contiene gli output dei comandi e
tac-cpu-<timestamp>.pcap contiene l'acquisizione in entrata della CPU. Questi file possono quindi essere rivisti in un secondo momento.
config t
no event manager applet high-cpu authorization bypass
event manager applet high-cpu authorization bypass
event snmp oid 1.3.6.1.4.1.9.9.109.1.1.1.1.3.1 get-type next entry-op gt entry-val 80 poll-interval 1 ratelimit 300 maxrun 180
action 0.01 syslog msg "High CPU detected, gathering system information."
action 0.02 cli command "enable"
action 0.03 cli command "term exec prompt timestamp"
action 0.04 cli command "term length 0"
action 0.05 cli command "show clock"
action 0.06 regex "([0-9]|[0-9][0-9]):([0-9]|[0-9][0-9]):([0-9]|[0-9][0-9])" $_cli_result match match1
action 0.07 string replace "$match" 2 2 "."
action 0.08 string replace "$_string_result" 5 5 "."
action 0.09 set time $_string_result
action 1.01 cli command "show proc cpu sort | append flash:tac-cpu-$time.txt"
action 1.02 cli command "show proc cpu hist | append flash:tac-cpu-$time.txt"
action 1.03 cli command "show proc cpu platform sorted | append flash:tac-cpu-$time.txt"
action 1.04 cli command "show interface | append flash:tac-cpu-$time.txt"
action 1.05 cli command "show interface stats | append flash:tac-cpu-$time.txt"
action 1.06 cli command "show log | append flash:tac-cpu-$time.txt"
action 1.07 cli command "show ip traffic | append flash:tac-cpu-$time.txt"
action 1.08 cli command "show users | append flash:tac-cpu-$time.txt"
action 1.09 cli command "show platform software fed switch active punt cause summary | append flash:tac-cpu-$time.txt"
action 1.10 cli command "show platform software fed switch active cpu-interface | append flash:tac-cpu-$time.txt"
action 1.11 cli command "show platform software fed switch active punt cpuq all | append flash:tac-cpu-$time.txt"
action 2.08 cli command "no monitor capture tac_cpu"
action 2.09 cli command "monitor capture tac_cpu control-plane in match any file location flash:tac-cpu-$time.pcap"
action 2.10 cli command "monitor capture tac_cpu start" pattern "yes"
action 2.11 cli command "yes"
action 2.12 wait 10
action 2.13 cli command "monitor capture tac_cpu stop"
action 3.01 cli command "term default length"
action 3.02 cli command "terminal no exec prompt timestamp"
action 3.03 cli command "no monitor capture tac_cpu"
Informazioni correlate
- Cisco IOS XE 16 in breve
- Risoluzione dei problemi di utilizzo intenso della CPU degli switch Catalyst serie 3850
- Esempio di configurazione di Embedded Packet Capture per Cisco IOS e Cisco IOS XE
- Configurazione dell'acquisizione di pacchetti FED Punt/Inject sugli switch Catalyst con Cisco IOS XE 16.x
- Supporto tecnico Cisco e download
Revisione | Data di pubblicazione | Commenti |
---|---|---|
2.0 |
13-Mar-2024 |
Certificazione |
1.0 |
08-Aug-2018 |
Versione iniziale |