Skip to content

Commit 206ee34

Browse files
committed
Releasing v25.5
1 parent 95221ed commit 206ee34

File tree

536 files changed

+62399
-1572
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

536 files changed

+62399
-1572
lines changed

changelog/2025/may.rst

Lines changed: 282 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
--------------------------------------------------------------------------------
2+
New
3+
--------------------------------------------------------------------------------
4+
* IOSXE
5+
* Added ShowIpv6MfibInterface
6+
* 'show ipv6 mfib interface'

sdk_generator/outputs/github_parser.json

Lines changed: 2950 additions & 1188 deletions
Large diffs are not rendered by default.

src/genie/libs/parser/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
'''
99

1010
# metadata
11-
__version__ = '25.4'
11+
__version__ = "25.5"
1212
__author__ = 'Cisco Systems Inc.'
1313
1414
__copyright__ = 'Copyright (c) 2018, Cisco Systems Inc.'

src/genie/libs/parser/iosxe/cat9k/c9500/show_platform.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,9 @@ def cli(self, output=None):
154154
# BOOTLDR: System Bootstrap, Version 17.1.1[FC2], RELEASE SOFTWARE (P)
155155
p5 = re.compile(r'^BOOTLDR: +(?P<bootldr_version>[\S\s]+)$')
156156

157+
# ROM: IOS-XE ROMMONBOOTLDR: System Bootstrap, Version 17.11.0.1r, DEVELOPMENT SOFTWARE
158+
p4and5 = re.compile(r'^ROM: +(?P<rom>.+)BOOTLDR: +(?P<bootldr>[\S\s]+)$')
159+
157160
# SF2 uptime is 1 day, 18 hours, 48 minutes
158161
p6 = re.compile(r'^(?P<hostname>.+) +uptime +is +(?P<uptime>.+)$')
159162

@@ -312,8 +315,9 @@ def cli(self, output=None):
312315
m = p4.match(line)
313316
if m:
314317
rom = m.groupdict()['rom']
315-
version_dict['rom'] = rom
316-
continue
318+
if "ROMMONBOOTLDR" not in rom:
319+
version_dict['rom'] = rom
320+
continue
317321

318322
# BOOTLDR: System Bootstrap, Version 17.1.1[FC2], RELEASE SOFTWARE (P)
319323
m = p5.match(line)
@@ -322,6 +326,14 @@ def cli(self, output=None):
322326
version_dict['bootldr'] = m.groupdict()['bootldr_version']
323327
continue
324328

329+
# ROM: IOS-XE ROMMONBOOTLDR: System Bootstrap, Version 17.11.0.1r, DEVELOPMENT SOFTWARE
330+
m = p4and5.match(line)
331+
if m:
332+
version_dict['bootldr_version'] = m.groupdict()['bootldr']
333+
version_dict['bootldr'] = m.groupdict()['bootldr']
334+
version_dict['rom'] = m.groupdict()['rom']
335+
continue
336+
325337
# SF2 uptime is 1 day, 18 hours, 48 minutes
326338
m = p6.match(line)
327339
if m:
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
expected_output = {
2+
'version': {
3+
'bootldr': 'System Bootstrap, Version 17.11.0.1r, DEVELOPMENT SOFTWARE',
4+
'bootldr_version': 'System Bootstrap, Version 17.11.0.1r, DEVELOPMENT SOFTWARE',
5+
'chassis': 'C9500X-60L4D',
6+
'code_name': 'IOSXE',
7+
'compiled_by': 'mcpre',
8+
'compiled_date': 'Thu 24-Apr-25 21:57',
9+
'disks': {
10+
'bootflash:': {
11+
'disk_size': '11161600',
12+
},
13+
'crashinfo:': {
14+
'disk_size': '1638400',
15+
},
16+
},
17+
'hostname': 'ott-c9500x-16',
18+
'image_id': 'CAT9K_IOSXE',
19+
'label': '[BLD_POLARIS_DEV_LATEST_20250425_043858:/nobackup/mcpre/s2c-build-ws 101]',
20+
'last_reload_reason': 'Image Install',
21+
'mac_address': 'b0:8d:57:9e:28:00',
22+
'main_mem': '5769295',
23+
'mb_assembly_num': '4DBE',
24+
'mb_rev_num': '3',
25+
'mb_sn': 'FDO28020Q8G',
26+
'mem_size': {
27+
'non_volatile_memory': '32768',
28+
'physical_memory': '33554432',
29+
},
30+
'model_num': 'C9500X-60L4D',
31+
'model_rev_num': 'V02',
32+
'os': 'IOS-XE',
33+
'platform': 'Catalyst L3 Switch',
34+
'processor_board_id': 'FDO28021F19',
35+
'processor_type': 'X86',
36+
'returned_to_rom_by': 'Image Install at 04:19:26 UTC Sat Apr 26 2025',
37+
'revision': 'V01',
38+
'rom': 'IOS-XE ROMMON',
39+
'smart_licensing_status': 'Smart Licensing Using Policy',
40+
'system_image': 'bootflash:packages.conf',
41+
'system_sn': 'FDO28021F19',
42+
'uptime': '3 days, 28 minutes',
43+
'uptime_this_cp': '3 days, 30 minutes',
44+
'version': '17.19.20250425:045711',
45+
'version_short': '17.19',
46+
'xe_version': 'BLD_POLARIS_DEV_LATEST_20250425_043858',
47+
},
48+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
Cisco IOS XE Software, Version BLD_POLARIS_DEV_LATEST_20250425_043858
2+
Cisco IOS Software [IOSXE], Catalyst L3 Switch Software (CAT9K_IOSXE), Experimental Version 17.19.20250425:045711 [BLD_POLARIS_DEV_LATEST_20250425_043858:/nobackup/mcpre/s2c-build-ws 101]
3+
Copyright (c) 1986-2025 by Cisco Systems, Inc.
4+
Compiled Thu 24-Apr-25 21:57 by mcpre
5+
6+
7+
Cisco IOS-XE software, Copyright (c) 2005-2025 by cisco Systems, Inc.
8+
All rights reserved. Certain components of Cisco IOS-XE software are
9+
licensed under the GNU General Public License ("GPL") Version 2.0. The
10+
software code licensed under GPL Version 2.0 is free software that comes
11+
with ABSOLUTELY NO WARRANTY. You can redistribute and/or modify such
12+
GPL code under the terms of GPL Version 2.0. For more details, see the
13+
documentation or "License Notice" file accompanying the IOS-XE software,
14+
or the applicable URL provided on the flyer accompanying the IOS-XE
15+
software.
16+
17+
18+
ROM: IOS-XE ROMMONBOOTLDR: System Bootstrap, Version 17.11.0.1r, DEVELOPMENT SOFTWARE
19+
ott-c9500x-16 uptime is 3 days, 28 minutes
20+
Uptime for this control processor is 3 days, 30 minutes
21+
System returned to ROM by Image Install at 04:19:26 UTC Sat Apr 26 2025
22+
System restarted at 04:46:59 UTC Sat Apr 26 2025
23+
System image file is "bootflash:packages.conf"
24+
Last reload reason: Image Install
25+
26+
27+
28+
This product contains cryptographic features and is subject to United
29+
States and local country laws governing import, export, transfer and
30+
use. Delivery of Cisco cryptographic products does not imply
31+
third-party authority to import, export, distribute or use encryption.
32+
Importers, exporters, distributors and users are responsible for
33+
compliance with U.S. and local country laws. By using this product you
34+
agree to comply with applicable laws and regulations. If you are unable
35+
to comply with U.S. and local laws, return this product immediately.
36+
37+
A summary of U.S. laws governing Cisco cryptographic products may be found at:
38+
http://www.cisco.com/wwl/export/crypto/tool/stqrg.html
39+
40+
If you require further assistance please contact us by sending email to
41+
42+
43+
44+
Technology Package License Information:
45+
46+
------------------------------------------------------------------------------
47+
Technology-package Technology-package
48+
Current Type Next reboot
49+
------------------------------------------------------------------------------
50+
network-advantage Smart License network-advantage
51+
dna-advantage Subscription Smart License dna-advantage
52+
53+
54+
Smart Licensing Status: Smart Licensing Using Policy
55+
56+
cisco C9500X-60L4D (X86) processor (revision V01) with 5769295K/6147K bytes of memory.
57+
Processor board ID FDO28021F19
58+
1 Virtual Ethernet interface
59+
60 Fifty Gigabit Ethernet interfaces
60+
4 Four Hundred Gigabit Ethernet interfaces
61+
32768K bytes of non-volatile configuration memory.
62+
33554432K bytes of physical memory.
63+
11161600K bytes of Bootflash at bootflash:.
64+
1638400K bytes of Crash Files at crashinfo:.
65+
234430023K bytes of SATA hard disk at disk0:.
66+
67+
Base Ethernet MAC Address : b0:8d:57:9e:28:00
68+
69+
Motherboard Assembly Number : 4DBE
70+
Motherboard Serial Number : FDO28020Q8G
71+
Model Revision Number : V02
72+
Motherboard Revision Number : 3
73+
Model Number : C9500X-60L4D
74+
System Serial Number : FDO28021F19

src/genie/libs/parser/iosxe/cat9k/show_l2protocol.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def cli(self, output=None):
6868
p6 = re.compile(r"^(?P<protocol>\S+)\s+(?P<action>\S+)\s+(?P<shutdown_threshold>[\d\-]+)\s+(?P<drop_threshold>[\d\-]+)$")
6969

7070
ret_dict = {}
71-
last_port = None # Track the last port parsed
71+
port_dict = {}
7272
for line in output.splitlines():
7373
line = line.strip()
7474

@@ -104,8 +104,9 @@ def cli(self, output=None):
104104
m = p5.match(line)
105105
if m:
106106
dict_val = m.groupdict()
107-
last_port = Common.convert_intf_name(dict_val["port"])
108-
port_dict = ret_dict.setdefault("port", {}).setdefault(last_port, {})
107+
port_dict = ret_dict.setdefault("port", {}).setdefault(
108+
Common.convert_intf_name(dict_val["port"]), {}
109+
)
109110
port_dict["status"] = dict_val["status"]
110111

111112
protocol_dict = port_dict.setdefault("protocol", {}).setdefault(
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
2+
# Metaparser
3+
import re
4+
from genie.metaparser import MetaParser
5+
from genie.metaparser.util.schemaengine import Schema, Optional, ListOf
6+
7+
# pyATS
8+
from pyats.utils.exceptions import SchemaTypeError
9+
10+
class ShowSoftwareAuthenticityKeysSchema(MetaParser):
11+
"""Schema for show software authenticity keys"""
12+
schema = {
13+
'public_key': {
14+
int: {
15+
'key_type': str,
16+
'key_type_note': str,
17+
'key_algorithm': str,
18+
'modulus_size': int,
19+
'modulus': str,
20+
'exponent_size': int,
21+
'exponent': int,
22+
'key_version': str,
23+
'product_name': str
24+
}
25+
}
26+
}
27+
28+
class ShowSoftwareAuthenticityKeys(ShowSoftwareAuthenticityKeysSchema):
29+
"""Parser for show software authenticity keys"""
30+
31+
cli_command = 'show software authenticity keys'
32+
33+
def cli(self, output=None):
34+
if output is None:
35+
output = self.device.execute(self.cli_command)
36+
37+
ret_dict = {}
38+
current_dict = None
39+
40+
# Public Key #1 Information
41+
p1 = re.compile(r'^Public Key #(?P<key_number>\d+) Information$')
42+
43+
# Key Type : Production (Primary)
44+
p2 = re.compile(
45+
r'^Key Type +: (?P<key_type>\w+) +\((?P<key_type_note>\w+)\)$'
46+
)
47+
48+
# Public Key Algorithm : RSA
49+
p3 = re.compile(r'^Public Key Algorithm : (?P<key_algorithm>\w+)$')
50+
51+
# Modulus (512 bytes) :
52+
p4 = re.compile(
53+
r'^Modulus \((?P<modulus_size>\d+) bytes\) +: *$'
54+
)
55+
56+
# d8:1f:8e:b1:49:7c:bd:83:20:5f:25:43:d9:32:5a:b5:
57+
p5 = re.compile(
58+
r'^(?P<modulus>[0-9a-f:]+|[0-9a-f:]+[0-9a-f])$'
59+
)
60+
61+
# Exponent (4 bytes) : 10001
62+
p6 = re.compile(
63+
r'^Exponent \((?P<exponent_size>\d+) bytes\) +: (?P<exponent>\d+)$'
64+
)
65+
66+
# Key Version : A
67+
p7 = re.compile(r'^Key Version +: (?P<key_version>\w+)$')
68+
69+
# Product Name : IOS-XE
70+
p8 = re.compile(r'^Product Name +: (?P<product_name>.*)$')
71+
72+
for line in output.splitlines():
73+
line = line.strip()
74+
75+
# Public Key #1 Information
76+
if p1.match(line):
77+
key_number = int(p1.match(line).group(1))
78+
current_dict = ret_dict.setdefault('public_key', {}).setdefault(
79+
key_number, {}
80+
)
81+
continue
82+
83+
# Key Type : Production (Primary)
84+
match = p2.match(line)
85+
if match:
86+
group = match.groupdict()
87+
key_type = group['key_type']
88+
key_type_note = group['key_type_note']
89+
current_dict['key_type'] = key_type
90+
current_dict['key_type_note'] = key_type_note
91+
continue
92+
93+
# Public Key Algorithm : RSA
94+
match = p3.match(line)
95+
if match:
96+
group = match.groupdict()
97+
key_algorithm = group['key_algorithm']
98+
current_dict['key_algorithm'] = key_algorithm
99+
continue
100+
101+
# Modulus (512 bytes) :
102+
match = p4.match(line)
103+
if match:
104+
group = match.groupdict()
105+
modulus_size = int(group['modulus_size'])
106+
current_dict['modulus_size'] = modulus_size
107+
continue
108+
109+
# d8:1f:8e:b1:49:7c:bd:83:20:5f:25:43:d9:32:5a:b5:
110+
match = p5.match(line)
111+
if match:
112+
group = match.groupdict()
113+
modulus = group['modulus']
114+
current_dict.setdefault('modulus', '')
115+
current_dict['modulus'] += modulus
116+
continue
117+
118+
# Exponent (4 bytes) : 10001
119+
match = p6.match(line)
120+
if match:
121+
group = match.groupdict()
122+
exponent_size = int(group['exponent_size'])
123+
exponent = int(group['exponent'])
124+
current_dict['exponent_size'] = exponent_size
125+
current_dict['exponent'] = exponent
126+
continue
127+
128+
# Key Version : A
129+
match = p7.match(line)
130+
if match:
131+
group = match.groupdict()
132+
key_version = group['key_version']
133+
current_dict['key_version'] = key_version
134+
continue
135+
136+
# Product Name : IOS-XE
137+
match = p8.match(line)
138+
if match:
139+
group = match.groupdict()
140+
product_name = group['product_name']
141+
current_dict['product_name'] = product_name
142+
continue
143+
144+
return ret_dict

src/genie/libs/parser/iosxe/ie3k/tests/ShowSoftwareAuthenticityKeys/cli/empty/empty_output_output.txt

Whitespace-only changes.

0 commit comments

Comments
 (0)