Skip to content

Commit eb6bdd3

Browse files
committed
add mirror session use case
1 parent 09b8dd1 commit eb6bdd3

File tree

1 file changed

+47
-21
lines changed

1 file changed

+47
-21
lines changed

config/main.py

+47-21
Original file line numberDiff line numberDiff line change
@@ -983,7 +983,7 @@ def validate_mirror_session_config(config_db, session_name, dst_port, src_port,
983983
""" Check if SPAN mirror-session config is valid """
984984
ctx = click.get_current_context()
985985
if len(config_db.get_entry('MIRROR_SESSION', session_name)) != 0:
986-
click.echo("Error: {} already exists".format(session_name))
986+
click.echo("Error: {} already exists".format(session_name)) # TODO: MISSING CONSTRAINT IN YANG MODEL
987987
return False
988988

989989
vlan_member_table = config_db.get_table('VLAN_MEMBER')
@@ -2367,25 +2367,35 @@ def add_erspan(session_name, src_ip, dst_ip, dscp, ttl, gre_type, queue, policer
23672367
session_info['gre_type'] = gre_type
23682368

23692369
session_info = gather_session_info(session_info, policer, queue, src_port, direction)
2370+
ctx = click.get_current_context()
23702371

23712372
"""
23722373
For multi-npu platforms we need to program all front asic namespaces
23732374
"""
23742375
namespaces = multi_asic.get_all_namespaces()
23752376
if not namespaces['front_ns']:
2376-
config_db = ConfigDBConnector()
2377+
config_db = ValidatedConfigDBConnector(ConfigDBConnector())
23772378
config_db.connect()
2378-
if validate_mirror_session_config(config_db, session_name, None, src_port, direction) is False:
2379-
return
2380-
config_db.set_entry("MIRROR_SESSION", session_name, session_info)
2379+
if ADHOC_VALIDATION:
2380+
if validate_mirror_session_config(config_db, session_name, None, src_port, direction) is False:
2381+
return
2382+
try:
2383+
config_db.set_entry("MIRROR_SESSION", session_name, session_info)
2384+
except ValueError as e:
2385+
ctx.fail("Invalid mirror session config. Error: {}".format(e))
2386+
23812387
else:
23822388
per_npu_configdb = {}
23832389
for front_asic_namespaces in namespaces['front_ns']:
2384-
per_npu_configdb[front_asic_namespaces] = ConfigDBConnector(use_unix_socket_path=True, namespace=front_asic_namespaces)
2390+
per_npu_configdb[front_asic_namespaces] = ValidatedConfigDBConnector(ConfigDBConnector(use_unix_socket_path=True, namespace=front_asic_namespaces))
23852391
per_npu_configdb[front_asic_namespaces].connect()
2386-
if validate_mirror_session_config(per_npu_configdb[front_asic_namespaces], session_name, None, src_port, direction) is False:
2387-
return
2388-
per_npu_configdb[front_asic_namespaces].set_entry("MIRROR_SESSION", session_name, session_info)
2392+
if ADHOC_VALIDATION:
2393+
if validate_mirror_session_config(per_npu_configdb[front_asic_namespaces], session_name, None, src_port, direction) is False:
2394+
return
2395+
try:
2396+
per_npu_configdb[front_asic_namespaces].set_entry("MIRROR_SESSION", session_name, session_info)
2397+
except ValueError as e:
2398+
ctx.fail("Invalid mirror session config. Error: {}".format(e))
23892399

23902400
@mirror_session.group(cls=clicommon.AbbreviationGroup, name='span')
23912401
@click.pass_context
@@ -2417,25 +2427,34 @@ def add_span(session_name, dst_port, src_port, direction, queue, policer):
24172427
}
24182428

24192429
session_info = gather_session_info(session_info, policer, queue, src_port, direction)
2430+
ctx = click.get_current_context()
24202431

24212432
"""
24222433
For multi-npu platforms we need to program all front asic namespaces
24232434
"""
24242435
namespaces = multi_asic.get_all_namespaces()
24252436
if not namespaces['front_ns']:
2426-
config_db = ConfigDBConnector()
2437+
config_db = ValidatedConfigDBConnector(ConfigDBConnector())
24272438
config_db.connect()
2428-
if validate_mirror_session_config(config_db, session_name, dst_port, src_port, direction) is False:
2429-
return
2430-
config_db.set_entry("MIRROR_SESSION", session_name, session_info)
2439+
if ADHOC_VALIDATION:
2440+
if validate_mirror_session_config(config_db, session_name, dst_port, src_port, direction) is False:
2441+
return
2442+
try:
2443+
config_db.set_entry("MIRROR_SESSION", session_name, session_info)
2444+
except ValueError as e:
2445+
ctx.fail("Invalid mirror session config. Error: {}".format(e))
24312446
else:
24322447
per_npu_configdb = {}
24332448
for front_asic_namespaces in namespaces['front_ns']:
2434-
per_npu_configdb[front_asic_namespaces] = ConfigDBConnector(use_unix_socket_path=True, namespace=front_asic_namespaces)
2449+
per_npu_configdb[front_asic_namespaces] = ValidatedConfigDBConnector(ConfigDBConnector(use_unix_socket_path=True, namespace=front_asic_namespaces))
24352450
per_npu_configdb[front_asic_namespaces].connect()
2436-
if validate_mirror_session_config(per_npu_configdb[front_asic_namespaces], session_name, dst_port, src_port, direction) is False:
2437-
return
2438-
per_npu_configdb[front_asic_namespaces].set_entry("MIRROR_SESSION", session_name, session_info)
2451+
if ADHOC_VALIDATION:
2452+
if validate_mirror_session_config(per_npu_configdb[front_asic_namespaces], session_name, dst_port, src_port, direction) is False:
2453+
return
2454+
try:
2455+
per_npu_configdb[front_asic_namespaces].set_entry("MIRROR_SESSION", session_name, session_info)
2456+
except ValueError as e:
2457+
ctx.fail("Invalid mirror session config. Error: {}".format(e))
24392458

24402459

24412460
@mirror_session.command()
@@ -2447,16 +2466,23 @@ def remove(session_name):
24472466
For multi-npu platforms we need to program all front asic namespaces
24482467
"""
24492468
namespaces = multi_asic.get_all_namespaces()
2469+
ctx = click.get_current_context()
24502470
if not namespaces['front_ns']:
2451-
config_db = ConfigDBConnector()
2471+
config_db = ValidatedConfigDBConnector(ConfigDBConnector())
24522472
config_db.connect()
2453-
config_db.set_entry("MIRROR_SESSION", session_name, None)
2473+
try:
2474+
config_db.set_entry("MIRROR_SESSION", session_name, None)
2475+
except JsonPatchConflict:
2476+
ctx.fail("Failed to remove MIRROR_SESSION {}".format(session_name))
24542477
else:
24552478
per_npu_configdb = {}
24562479
for front_asic_namespaces in namespaces['front_ns']:
2457-
per_npu_configdb[front_asic_namespaces] = ConfigDBConnector(use_unix_socket_path=True, namespace=front_asic_namespaces)
2480+
per_npu_configdb[front_asic_namespaces] = ValidatedConfigDBConnector(ConfigDBConnector(use_unix_socket_path=True, namespace=front_asic_namespaces))
24582481
per_npu_configdb[front_asic_namespaces].connect()
2459-
per_npu_configdb[front_asic_namespaces].set_entry("MIRROR_SESSION", session_name, None)
2482+
try:
2483+
per_npu_configdb[front_asic_namespaces].set_entry("MIRROR_SESSION", session_name, None)
2484+
except JsonPatchConflict:
2485+
ctx.fail("Failed to remove MIRROR_SESSION {}".format(session_name))
24602486

24612487
#
24622488
# 'pfcwd' group ('config pfcwd ...')

0 commit comments

Comments
 (0)