Skip to content

Commit 2a982a1

Browse files
authored
Update config mirror_session CLI to support heximal gre type value (sonic-net#2095)
* Update config CLI to support heximal gre type Signed-off-by: bingwang <[email protected]>
1 parent b25f1e1 commit 2a982a1

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

config/main.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,6 +1024,19 @@ def validate_ipv4_address(ctx, param, ip_addr):
10241024
except ValueError as e:
10251025
raise click.UsageError(str(e))
10261026

1027+
def validate_gre_type(ctx, _, value):
1028+
"""A validator for validating input gre_type
1029+
"""
1030+
try:
1031+
base = 10
1032+
if value.lower().startswith('0x'):
1033+
base = 16
1034+
gre_type_value = int(value, base)
1035+
if gre_type_value < GRE_TYPE_RANGE.min or gre_type_value > GRE_TYPE_RANGE.max:
1036+
raise click.UsageError("{} is not a valid GRE type".format(value))
1037+
return gre_type_value
1038+
except ValueError:
1039+
raise click.UsageError("{} is not a valid GRE type".format(value))
10271040

10281041
# This is our main entrypoint - the main 'config' command
10291042
@click.group(cls=clicommon.AbbreviationGroup, context_settings=CONTEXT_SETTINGS)
@@ -1893,7 +1906,7 @@ def mirror_session():
18931906
@click.argument('dst_ip', metavar='<dst_ip>', callback=validate_ipv4_address, required=True)
18941907
@click.argument('dscp', metavar='<dscp>', type=DSCP_RANGE, required=True)
18951908
@click.argument('ttl', metavar='<ttl>', type=TTL_RANGE, required=True)
1896-
@click.argument('gre_type', metavar='[gre_type]', type=GRE_TYPE_RANGE, required=False)
1909+
@click.argument('gre_type', metavar='[gre_type]', callback=validate_gre_type, required=False)
18971910
@click.argument('queue', metavar='[queue]', type=QUEUE_RANGE, required=False)
18981911
@click.option('--policer')
18991912
def add(session_name, src_ip, dst_ip, dscp, ttl, gre_type, queue, policer):
@@ -1917,7 +1930,7 @@ def erspan(ctx):
19171930
@click.argument('dst_ip', metavar='<dst_ip>', callback=validate_ipv4_address,required=True)
19181931
@click.argument('dscp', metavar='<dscp>', type=DSCP_RANGE, required=True)
19191932
@click.argument('ttl', metavar='<ttl>', type=TTL_RANGE, required=True)
1920-
@click.argument('gre_type', metavar='[gre_type]', type=GRE_TYPE_RANGE, required=False)
1933+
@click.argument('gre_type', metavar='[gre_type]', callback=validate_gre_type, required=False)
19211934
@click.argument('queue', metavar='[queue]', type=QUEUE_RANGE, required=False)
19221935
@click.argument('src_port', metavar='[src_port]', required=False)
19231936
@click.argument('direction', metavar='[direction]', required=False)

tests/config_mirror_session_test.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
ERR_MSG_IP_FAILURE = "does not appear to be an IPv4 or IPv6 network"
77
ERR_MSG_IP_VERSION_FAILURE = "not a valid IPv4 address"
8+
ERR_MSG_GRE_TYPE_FAILURE = "not a valid GRE type"
89
ERR_MSG_VALUE_FAILURE = "Invalid value for"
910

1011
def test_mirror_session_add():
@@ -50,7 +51,13 @@ def test_mirror_session_add():
5051
config.config.commands["mirror_session"].commands["add"],
5152
["test_session", "1.1.1.1", "2.2.2.2", "6", "63", "65536", "100"])
5253
assert result.exit_code != 0
53-
assert ERR_MSG_VALUE_FAILURE in result.stdout
54+
assert ERR_MSG_GRE_TYPE_FAILURE in result.stdout
55+
56+
result = runner.invoke(
57+
config.config.commands["mirror_session"].commands["add"],
58+
["test_session", "1.1.1.1", "2.2.2.2", "6", "63", "abcd", "100"])
59+
assert result.exit_code != 0
60+
assert ERR_MSG_GRE_TYPE_FAILURE in result.stdout
5461

5562
# Verify invalid queue
5663
result = runner.invoke(
@@ -67,6 +74,11 @@ def test_mirror_session_add():
6774

6875
mocked.assert_called_with("test_session", "100.1.1.1", "2.2.2.2", 8, 63, 10, 100, None)
6976

77+
result = runner.invoke(
78+
config.config.commands["mirror_session"].commands["add"],
79+
["test_session", "100.1.1.1", "2.2.2.2", "8", "63", "0X1234", "100"])
80+
81+
mocked.assert_called_with("test_session", "100.1.1.1", "2.2.2.2", 8, 63, 0x1234, 100, None)
7082

7183

7284
def test_mirror_session_erspan_add():
@@ -112,7 +124,13 @@ def test_mirror_session_erspan_add():
112124
config.config.commands["mirror_session"].commands["erspan"].commands["add"],
113125
["test_session", "1.1.1.1", "2.2.2.2", "6", "63", "65536", "100"])
114126
assert result.exit_code != 0
115-
assert ERR_MSG_VALUE_FAILURE in result.stdout
127+
assert ERR_MSG_GRE_TYPE_FAILURE in result.stdout
128+
129+
result = runner.invoke(
130+
config.config.commands["mirror_session"].commands["erspan"].commands["add"],
131+
["test_session", "1.1.1.1", "2.2.2.2", "6", "63", "abcd", "100"])
132+
assert result.exit_code != 0
133+
assert ERR_MSG_GRE_TYPE_FAILURE in result.stdout
116134

117135
# Verify invalid queue
118136
result = runner.invoke(
@@ -129,6 +147,12 @@ def test_mirror_session_erspan_add():
129147

130148
mocked.assert_called_with("test_session", "100.1.1.1", "2.2.2.2", 8, 63, 10, 100, None, None, None)
131149

150+
result = runner.invoke(
151+
config.config.commands["mirror_session"].commands["erspan"].commands["add"],
152+
["test_session", "100.1.1.1", "2.2.2.2", "8", "63", "0x1234", "100"])
153+
154+
mocked.assert_called_with("test_session", "100.1.1.1", "2.2.2.2", 8, 63, 0x1234, 100, None, None, None)
155+
132156

133157
def test_mirror_session_span_add():
134158
runner = CliRunner()

0 commit comments

Comments
 (0)