def handle_srv6_behavior( operation, grpc_address, grpc_port, segment, action='', device='', table=-1, nexthop="", lookup_table=-1, interface="", segments="", metric=-1, fwd_engine='Linux'): """Handle a SRv6 behavior""" # pylint: disable=too-many-arguments with utils.get_grpc_session(grpc_address, grpc_port) as channel: res = srv6_utils.handle_srv6_behavior( operation=operation, channel=channel, segment=segment, action=action, device=device, table=table, nexthop=nexthop, lookup_table=lookup_table, interface=interface, segments=segments.split(','), metric=metric, fwd_engine=fwd_engine ) if res == 0: print('OK') else: print('Error')
def shift_path(): # +--------------------------------------------------------------------+ # | Switch from r1---r7---r8 path to r1---r4---r8 path | # | by exchanging the metrics | # +--------------------------------------------------------------------+ logger.info( '*** Attempting to change path from r1---r7---r8 to r1---r4---r8') # IP addresses r1 = 'fcff:1::1' r8 = 'fcff:8::1' # Open gRPC channels with get_grpc_session(r1, GRPC_PORT) as r1_chan, \ get_grpc_session(r8, GRPC_PORT) as r8_chan: # +---------------------------------------------------------------+ # | Decreasing the metric value of the | # | r4 route to an intermediate value | # +---------------------------------------------------------------+ logger.info('******* Decreasing the metric value of ' 'the r4 route to an intermediate value') # # Encap route on r1 # on r1: ip -6 route add fd00:0:83::/64 encap seg6 mode encap segs # fcff:4::1,fcff:8:100 dev r1-h11 metric 99 logger.info('*********** Creating encap route on r1') res = handle_srv6_path(op='add', channel=r1_chan, destination='fd00:0:83::/64', segments=['fcff:4::1', 'fcff:8::100'], device='r1-h11', metric=99) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Encap route created successfully') else: logger.error('*********** Error while creating encap route') # # Decap route on r8 # on r8: ip -6 route add fcff:8::100 encap seg6local action End.DT6 # table 254 dev r8-h83 metric 99 logger.info('*********** Creating decap route on r8') res = handle_srv6_behavior(op='add', channel=r8_chan, segment='fcff:8::100', action='End.DT6', lookup_table=254, device='r8-h83', metric=99) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Decap route created successfully') else: logger.error('*********** Error while creating decap route') # # Encap route on r8 # on r8: ip -6 route add fd00:0:11::/64 encap seg6 mode encap segs # fcff:4::1,fcff:1:100 dev r8-h83 metric 99 logger.info('*********** Creating encap route on r8') res = handle_srv6_path(op='add', channel=r8_chan, destination='fd00:0:11::/64', segments=['fcff:4::1', 'fcff:1::100'], device='r8-h83', metric=99) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Encap route created successfully') else: logger.error('*********** Error while creating encap route') # # Decap route on r1 # on r1: ip -6 route add fcff:1::100 encap seg6local action End.DT6 # table 254 dev r1-h11 metric 99 logger.info('*********** Creating decap route on r1') res = handle_srv6_behavior(op='add', channel=r1_chan, segment='fcff:1::100', action='End.DT6', lookup_table=254, device='r1-h11', metric=99) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Decap route created successfully') else: logger.error('*********** Error while creating decap route') # # # +---------------------------------------------------------------+ # | Removing old route via r4 | # +---------------------------------------------------------------+ logger.info('*** Attempting to remove tunnel r1---r4---r8') # # Encap route on r1 # on r1: ip -6 route del fd00:0:83::/64 encap seg6 mode encap segs # fcff:4::1,fcff:8:100 dev r1-h11 metric 200 logger.info('*********** Removing encap route on r1') res = handle_srv6_path(op='del', channel=r1_chan, destination='fd00:0:83::/64', device='r1-h11', metric=200) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Encap route removed successfully') else: logger.error('*********** Error while removing encap route') # # Decap route on r8 # on r8: ip -6 route del fcff:8::100 encap seg6local action End.DT6 # table 254 dev r8-h83 metric 200 logger.info('*********** Removing decap route on r8') res = handle_srv6_behavior(op='del', channel=r8_chan, segment='fcff:8::100', device='r8-h83', metric=200) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Decap route removed successfully') else: logger.error('*********** Error while removing decap route') # # Encap route on r8 # on r8: ip -6 route del fd00:0:11::/64 encap seg6 mode encap segs # fcff:4::1,fcff:1:100 dev r8-h83 metric 200 logger.info('*********** Removing encap route on r8') res = handle_srv6_path(op='del', channel=r8_chan, destination='fd00:0:11::/64', device='r8-h83', metric=200) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Encap route removed successfully') else: logger.error('*********** Error while removing encap route') # # Decap route on r1 # on r1: ip -6 route del fcff:1::100 encap seg6local action End.DT6 # table 254 dev r1-h11 metric 200 logger.info('*********** Removing decap route on r1') res = handle_srv6_behavior(op='del', channel=r1_chan, segment='fcff:1::100', device='r1-h11', metric=200) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Decap route removed successfully') else: logger.error('*********** Error while removing decap route') # # # +----------------------------------------------------------------+ # | Increasing the metric value of the r7 path | # +----------------------------------------------------------------+ logger.info( '*** Increasing the metric value of the tunnel r1---r7---r8') # # Encap route on r1 # on r1: ip -6 route add fd00:0:83::/64 encap seg6 mode encap segs # fcff:7::1,fcff:8:100 dev r1-h11 metric 200 logger.info('*********** Creating encap route on r1') res = handle_srv6_path(op='add', channel=r1_chan, destination='fd00:0:83::/64', segments=['fcff:7::1', 'fcff:8::100'], device='r1-h11', metric=200) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Encap route created successfully') else: logger.error('*********** Error while creating encap route') # # Decap route on r8 # on r8: ip -6 route add fcff:8::100 encap seg6local action End.DT6 # table 254 dev r8-h83 metric 200 logger.info('*********** Creating decap route on r8') res = handle_srv6_behavior(op='add', channel=r8_chan, segment='fcff:8::100', action='End.DT6', lookup_table=254, device='r8-h83', metric=200) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Decap route created successfully') else: logger.error('*********** Error while creating decap route') # # Encap route on r8 # on r8: ip -6 route add fd00:0:11::/64 encap seg6 mode encap segs # fcff:7::1,fcff:1:100 dev r8-h83 metric 200 logger.info('*********** Creating encap route on r8') res = handle_srv6_path(op='add', channel=r8_chan, destination='fd00:0:11::/64', segments=['fcff:7::1', 'fcff:1::100'], device='r8-h83', metric=200) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Encap route created successfully') else: logger.error('*********** Error while creating encap route') # # Decap route on r1 # on r1: ip -6 route add fcff:1::100 encap seg6local action End.DT6 # table 254 dev r1-h11 metric 200 logger.info('*********** Creating decap route on r1') res = handle_srv6_behavior(op='add', channel=r1_chan, segment='fcff:1::100', action='End.DT6', lookup_table=254, device='r1-h11', metric=200) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Decap route created successfully') else: logger.error('*********** Error while creating decap route') # # # +---------------------------------------------------------------+ # | Removing old route via r7 | # +---------------------------------------------------------------+ logger.info('*** Attempting to remove tunnel r1---r7---r8') # Encap route on r1 # on r1: ip -6 route del fd00:0:83::/64 encap seg6 mode encap segs # fcff:7::1,fcff:8:100 dev r1-h11 metric 100 logger.info('*********** Removing encap route on r1') res = handle_srv6_path(op='del', channel=r1_chan, destination='fd00:0:83::/64', device='r1-h11', metric=100) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Encap route removed successfully') else: logger.error('*********** Error while removing encap route') # # Decap route on r8 # on r8: ip -6 route del fcff:8::100 encap seg6local action End.DT6 # table 254 dev r8-h83 metric 100 logger.info('*********** Removing decap route on r8') res = handle_srv6_behavior(op='del', channel=r8_chan, segment='fcff:8::100', device='r8-h83', metric=100) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Decap route removed successfully') else: logger.error('*********** Error while removing decap route') # # Encap route on r8 # on r8: ip -6 route del fd00:0:11::/64 encap seg6 mode encap segs # fcff:7::1,fcff:1:100 dev r8-h83 metric 100 logger.info('*********** Removing encap route on r8') res = handle_srv6_path(op='del', channel=r8_chan, destination='fd00:0:11::/64', device='r8-h83', metric=100) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Encap route removed successfully') else: logger.error('*********** Error while removing encap route') # # Decap route on r1 # on r1: ip -6 route del fcff:1::100 encap seg6local action End.DT6 # table 254 dev r1-h11 metric 100 logger.info('*********** Removing decap route on r1') res = handle_srv6_behavior(op='del', channel=r1_chan, segment='fcff:1::100', device='r1-h11', metric=100) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Decap route removed successfully') else: logger.error('*********** Error while removing decap route') # # # +---------------------------------------------------------------+ # | Assign to r4 route a definitive value of the metric | # +---------------------------------------------------------------+ logger.info('*** Assign to r4 route a definitive value of the metric') # # Encap route on r1 # on r1: ip -6 route add fd00:0:83::/64 encap seg6 mode encap segs # fcff:4::1,fcff:8:100 dev r1-h11 metric 100 logger.info('*********** Creating encap route on r1') res = handle_srv6_path(op='add', channel=r1_chan, destination='fd00:0:83::/64', segments=['fcff:4::1', 'fcff:8::100'], device='r1-h11', metric=100) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Encap route created successfully') else: logger.error('*********** Error while creating encap route') # # Decap route on r8 # on r8: ip -6 route add fcff:8::100 encap seg6local action End.DT6 # table 254 dev r8-h83 metric 100 logger.info('*********** Creating decap route on r8') res = handle_srv6_behavior(op='add', channel=r8_chan, segment='fcff:8::100', action='End.DT6', lookup_table=254, device='r8-h83', metric=100) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Decap route created successfully') else: logger.error('*********** Error while creating decap route') # # Encap route on r8 # on r8: ip -6 route add fd00:0:11::/64 encap seg6 mode encap segs # fcff:4::1,fcff:1:100 dev r8-h83 metric 100 logger.info('*********** Creating encap route on r8') res = handle_srv6_path(op='add', channel=r8_chan, destination='fd00:0:11::/64', segments=['fcff:4::1', 'fcff:1::100'], device='r8-h83', metric=100) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Encap route created successfully') else: logger.error('*********** Error while creating encap route') # # Decap route on r1 # on r1: ip -6 route add fcff:1::100 encap seg6local action End.DT6 # table 254 dev r1-h11 metric 100 logger.info('*********** Creating decap route on r1') res = handle_srv6_behavior(op='add', channel=r1_chan, segment='fcff:1::100', action='End.DT6', lookup_table=254, device='r1-h11', metric=100) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Decap route created successfully') else: logger.error('*********** Error while creating decap route') # # # +---------------------------------------------------------------+ # | Delete the r4 route with the intermediate value of the metric | # +---------------------------------------------------------------+ logger.info('*** Delete the r4 route with the intermediate value of ' 'the metric') # # Encap route on r1 # on r1: ip -6 route del fd00:0:83::/64 encap seg6 mode encap segs # fcff:4::1,fcff:8:100 dev r1-h11 metric 99 logger.info('*********** Removing encap route on r1') res = handle_srv6_path(op='del', channel=r1_chan, destination='fd00:0:83::/64', device='r1-h11', metric=99) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Encap route removed successfully') else: logger.error('*********** Error while removing encap route') # # Decap route on r8 # on r8: ip -6 route del fcff:8::100 encap seg6local action End.DT6 # table 254 dev r8-h83 metric 99 logger.info('*********** Removing decap route on r8') res = handle_srv6_behavior(op='del', channel=r8_chan, segment='fcff:8::100', device='r8-h83', metric=99) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Decap route removed successfully') else: logger.error('*********** Error while removing decap route') # # Encap route on r8 # on r8: ip -6 route del fd00:0:11::/64 encap seg6 mode encap segs # fcff:4::1,fcff:1:100 dev r8-h83 metric 99 logger.info('*********** Removing encap route on r8') res = handle_srv6_path(op='del', channel=r8_chan, destination='fd00:0:11::/64', device='r8-h83', metric=99) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Encap route removed successfully') else: logger.error('*********** Error while removing encap route') # # Decap route on r1 # on r1: ip -6 route del fcff:1::100 encap seg6local action End.DT6 # table 254 dev r1-h11 metric 99 logger.info('*********** Removing decap route on r1') res = handle_srv6_behavior(op='del', channel=r1_chan, segment='fcff:1::100', device='r1-h11', metric=99) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Decap route removed successfully') else: logger.error('*********** Error while removing decap route') # # # +---------------------------------------------------------------+ # | Done | # +---------------------------------------------------------------+ print()
def HandleSRv6Behavior(self, request, context): """ Handle a SRv6 behavior. """ # Iterate on the SRv6 behaviors srv6_behaviors = None for srv6_behavior in request.srv6_behaviors: # Perform the operation # # The "with" block is used to avoid duplicating the error handling # code with srv6_mgr_error_handling() as response: # Extract the SRv6 action action = grpc_to_py_srv6_action[srv6_behavior.action] # Extract the forwarding engine fwd_engine = grpc_to_py_fwd_engine[srv6_behavior.fwd_engine] if fwd_engine == 'FWD_ENGINE_UNSPEC': fwd_engine = '' # Handle the behavior srv6_behaviors = srv6_utils.handle_srv6_behavior( operation=srv6_behavior.operation, grpc_address=(srv6_behavior.grpc_address if srv6_behavior.grpc_address != '' else None), grpc_port=(srv6_behavior.grpc_port if srv6_behavior.grpc_port != -1 else None), segment=(srv6_behavior.segment if srv6_behavior.segment != '' else None), action=action if action != '' else None, device=(srv6_behavior.device if srv6_behavior.device != '' else None), table=(srv6_behavior.table if srv6_behavior.table != -1 else None), nexthop=(srv6_behavior.nexthop if srv6_behavior.nexthop != '' else None), lookup_table=(srv6_behavior.lookup_table if srv6_behavior.lookup_table != -1 else None), interface=(srv6_behavior.interface if srv6_behavior.interface != '' else None), segments=(list(srv6_behavior.segments) if len(srv6_behavior.segments) > 0 else None), metric=(srv6_behavior.metric if srv6_behavior.metric != -1 else None), fwd_engine=fwd_engine if fwd_engine != '' else None, key=(srv6_behavior.key if srv6_behavior.key != '' else None), db_conn=self.db_conn ) # If an error occurred, return immediately if response.status != nb_commons_pb2.STATUS_SUCCESS: return response # Add the SRv6 behaviors to the response message if srv6_behaviors is not None: for behavior in srv6_behaviors: # Create a new behavior _srv6_behavior = response.srv6_behaviors.add() # Set gRPC address _srv6_behavior.grpc_address = '' if behavior['grpc_address'] is not None: _srv6_behavior.grpc_address = behavior['grpc_address'] # Set gRPC port _srv6_behavior.grpc_port = '' if behavior['grpc_port'] is not None: _srv6_behavior.grpc_port = behavior['grpc_port'] # Set segment _srv6_behavior.segment = '' if behavior['segment'] is not None: _srv6_behavior.segment = behavior['segment'] # Set SRv6 action (e.g. "End.DT6" or "End.DX4") _srv6_behavior.action = SRv6Action.UNSPEC.value if behavior['action'] is not None: _srv6_behavior.action = \ py_to_grpc_srv6_action[behavior['action']] # Set nexthop (required by "End.X", "End.DX4" and # "End.DX6") _srv6_behavior.nexthop = '' if behavior['nexthop'] is not None: _srv6_behavior.nexthop = behavior['nexthop'] # Set lookup table (required by "End.T", "End.DT4" and # "End.DT6") _srv6_behavior.lookup_table = -1 if behavior['lookup_table'] is not None: _srv6_behavior.lookup_table = behavior['lookup_table'] # Set interface (required by "End.DX2") _srv6_behavior.interface = '' if behavior['interface'] is not None: _srv6_behavior.interface = behavior['interface'] # Set segment list (required by "End.B6" and "End.B6.Encaps") if behavior['segments'] is not None: _srv6_behavior.segments.extend(behavior['segments']) # Set device _srv6_behavior.device = '' if behavior['device'] is not None: _srv6_behavior.device = behavior['device'] # Set table ID _srv6_behavior.table = -1 if behavior['table'] is not None: _srv6_behavior.table = behavior['table'] # Set metric _srv6_behavior.metric = -1 if behavior['metric'] is not None: _srv6_behavior.metric = behavior['metric'] # Set forwarding engine (e.g. "Linux" or "VPP") _srv6_behavior.fwd_engine = FwdEngine.UNSPEC.value if behavior['fwd_engine'] is not None: _srv6_behavior.fwd_engine = \ py_to_grpc_fwd_engine[behavior['fwd_engine']] # Set the key of the behavior if '_key' in behavior: _srv6_behavior.key = behavior['_key'] # Done, return the reply return response
def remove_tunnel_r1r7r8(): # +--------------------------------------------------------------------+ # | Remove a bidirectional tunnel between h11 and h83 | # | passing through router r7 (r1---r7---r8) | # +--------------------------------------------------------------------+ logger.info('*** Attempting to remove tunnel r1---r7---r8') # IP addresses r1 = 'fcff:1::1' r8 = 'fcff:8::1' # Open gRPC channels with get_grpc_session(r1, GRPC_PORT) as r1_chan, \ get_grpc_session(r8, GRPC_PORT) as r8_chan: # +---------------------------------------------------------------+ # | Remove tunnel from r1 to r8 for fd00:0:83::/64 | # +---------------------------------------------------------------+ logger.info('******* Removing tunnel from r1 to r8 for fd00:0:83::/64') # # Decap route on r8 # on r8: ip -6 route del fcff:8::100 dev r8-h83 metric 100 logger.info('*********** Removing decap route') res = handle_srv6_behavior(op='del', channel=r8_chan, segment='fcff:8::100', device='r8-h83', metric=200) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Decap route removed successfully') else: logger.error('*********** Error while removing decap route') # # Encap route on r1 # on r1: ip -6 route del fd00:0:83::/64 dev r1-h11 metric 100 logger.info('*********** Removing encap route') res = handle_srv6_path(op='del', channel=r1_chan, destination='fd00:0:83::/64', device='r1-h11', metric=200) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Encap route removed successfully') else: logger.error('*********** Error while removing encap route') # # # +---------------------------------------------------------------+ # | Remove tunnel from r8 to r1 for fd00:0:11::/64 | # +---------------------------------------------------------------+ logger.info('******* Removing tunnel from r8 to r1 for fd00:0:11::/64') # # Decap route on r1 # on r1: ip -6 route del fcff:1::100 dev r1-h11 metric 100 logger.info('*********** Removing decap route') res = handle_srv6_behavior(op='del', channel=r1_chan, segment='fcff:1::100', device='r1-h11', metric=200) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Decap route removed successfully') else: logger.error('*********** Error while removing decap route') # # Encap route on r8 # on r8: ip -6 route del fd00:0:11::/64 dev r8-h83 metric 200 logger.info('*********** Removing encap route') res = handle_srv6_path(op='del', channel=r8_chan, destination='fd00:0:11::/64', device='r8-h83', metric=200) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Encap route removed successfully') else: logger.error('*********** Error while removing encap route') # # # +---------------------------------------------------------------+ # | Done | # +---------------------------------------------------------------+ print()
def create_tunnel_r1r4r8(): # +--------------------------------------------------------------------+ # | Create a bidirectional tunnel between h11 and h83 | # | passing through router r4 (r1---r4---r8) | # +--------------------------------------------------------------------+ logger.info('*** Attempting to create tunnel r1---r4---r8') # IP addresses r1 = 'fcff:1::1' r8 = 'fcff:8::1' # Open gRPC channels with get_grpc_session(r1, GRPC_PORT) as r1_chan, \ get_grpc_session(r8, GRPC_PORT) as r8_chan: # +---------------------------------------------------------------+ # | Set tunnel from r1 to r8 for fd00:0:83::/64 | # +---------------------------------------------------------------+ logger.info('******* Set tunnel from r1 to r8 for fd00:0:83::/64') # # Encap route on r1 # on r1: ip -6 route add fd00:0:83::/64 encap seg6 mode encap segs # fcff:4::1,fcff:8::100 dev r1-h11 metric 200 logger.info('*********** Creating encap route') res = handle_srv6_path( op='add', channel=r1_chan, destination='fd00:0:83::/64', segments=['fcff:4::1', 'fcff:8::100'], device='r1-h11', metric=200 ) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Encap route created successfully') else: logger.error('*********** Error while creating encap route') # # Decap route on r8 # on r8: ip -6 route add fcff:8::100 encap seg6local action End.DT6 # table 254 dev r8-h83 metric 200 logger.info('*********** Creating decap route') res = handle_srv6_behavior( op='add', channel=r8_chan, segment='fcff:8::100', action='End.DT6', lookup_table=254, device='r8-h83', metric=200 ) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Decap route created successfully') else: logger.error('*********** Error while creating decap route') # # # +---------------------------------------------------------------+ # | Set tunnel from r8 to r1 for fd00:0:11::/64 | # +---------------------------------------------------------------+ logger.info('******* Set tunnel from r8 to r1 for fd00:0:11::/64') # # Encap route on r8 # on r8: ip -6 route add fd00:0:11::/64 encap seg6 mode encap segs # fcff:4::1,fcff:1::100 dev r8-h83 metric 200 logger.info('*********** Creating encap route') res = handle_srv6_path( op='add', channel=r8_chan, destination='fd00:0:11::/64', segments=['fcff:4::1', 'fcff:1::100'], device='r8-h83', metric=200 ) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Encap route created successfully') else: logger.error('*********** Error while creating encap route') # # Decap route on r1 # on r1: ip -6 route add fcff:1::100 encap seg6local action End.DT6 # table 254 dev r1-h11 metric 200 logger.info('*********** Creating decap route') res = handle_srv6_behavior( op='add', channel=r1_chan, segment='fcff:1::100', action='End.DT6', lookup_table=254, device='r1-h11', metric=200 ) if res == srv6_manager_pb2.StatusCode.STATUS_SUCCESS: logger.info('*********** Decap route created successfully') else: logger.error('*********** Error while creating decap route') # # # +---------------------------------------------------------------+ # | Done | # +---------------------------------------------------------------+ print()