mirror of
				https://git.proxmox.com/git/mirror_frr
				synced 2025-10-31 04:57:38 +00:00 
			
		
		
		
	 3393afc990
			
		
	
	
		3393afc990
		
	
	
	
	
		
			
			Add user doc for setting protodown on an interface with sharpd. Signed-off-by: Stephen Worley <sworley@nvidia.com>
		
			
				
	
	
		
			303 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			303 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| .. _sharp:
 | |
| 
 | |
| *****
 | |
| SHARP
 | |
| *****
 | |
| 
 | |
| :abbr:`SHARP (Super Happy Advanced Routing Process)` is a daemon that provides
 | |
| miscellaneous functionality used for testing FRR and creating proof-of-concept
 | |
| labs.
 | |
| 
 | |
| .. _starting-sharp:
 | |
| 
 | |
| Starting SHARP
 | |
| ==============
 | |
| 
 | |
| Default configuration file for *sharpd* is :file:`sharpd.conf`.  The typical
 | |
| location of :file:`sharpd.conf` is |INSTALL_PREFIX_ETC|/sharpd.conf.
 | |
| 
 | |
| If the user is using integrated config, then :file:`sharpd.conf` need not be
 | |
| present and the :file:`frr.conf` is read instead.
 | |
| 
 | |
| .. program:: sharpd
 | |
| 
 | |
| :abbr:`SHARP` supports all the common FRR daemon start options which are
 | |
| documented elsewhere.
 | |
| 
 | |
| .. _using-sharp:
 | |
| 
 | |
| Using SHARP
 | |
| ===========
 | |
| 
 | |
| All sharp commands are under the enable node and preceded by the ``sharp``
 | |
| keyword. At present, no sharp commands will be preserved in the config.
 | |
| 
 | |
| .. clicmd:: sharp install routes A.B.C.D <nexthop <E.F.G.H|X:X::X:X>|nexthop-group NAME> (1-1000000) [instance (0-255)] [repeat (2-1000)] [opaque WORD]
 | |
| 
 | |
|    Install up to 1,000,000 (one million) /32 routes starting at ``A.B.C.D``
 | |
|    with specified nexthop ``E.F.G.H`` or ``X:X::X:X``. The nexthop is
 | |
|    a ``NEXTHOP_TYPE_IPV4`` or ``NEXTHOP_TYPE_IPV6`` and must be reachable
 | |
|    to be installed into the kernel. Alternatively a nexthop-group NAME
 | |
|    can be specified and used as the nexthops.  The routes are installed into
 | |
|    zebra as ``ZEBRA_ROUTE_SHARP`` and can be used as part of a normal route
 | |
|    redistribution. Route installation time is noted in the debug
 | |
|    log. When zebra successfully installs a route into the kernel and SHARP
 | |
|    receives success notifications for all routes this is logged as well.
 | |
|    Instance (0-255) if specified causes the routes to be installed in a different
 | |
|    instance. If repeat is used then we will install/uninstall the routes the
 | |
|    number of times specified.  If the keyword opaque is specified then the
 | |
|    next word is sent down to zebra as part of the route installation.
 | |
| 
 | |
| .. clicmd:: sharp remove routes A.B.C.D (1-1000000)
 | |
| 
 | |
|    Remove up to 1,000,000 (one million) /32 routes starting at ``A.B.C.D``. The
 | |
|    routes are removed from zebra. Route deletion start is noted in the debug
 | |
|    log and when all routes have been successfully deleted the debug log will be
 | |
|    updated with this information as well.
 | |
| 
 | |
| .. clicmd:: sharp data route
 | |
| 
 | |
|    Allow end user doing route install and deletion to get timing information
 | |
|    from the vty or vtysh instead of having to read the log file.  This command
 | |
|    is informational only and you should look at sharp_vty.c for explanation
 | |
|    of the output as that it may change.
 | |
| 
 | |
| .. clicmd:: sharp label <ipv4|ipv6> vrf NAME label (0-1000000)
 | |
| 
 | |
|    Install a label into the kernel that causes the specified vrf NAME table to
 | |
|    be used for pop and forward operations when the specified label is seen.
 | |
| 
 | |
| .. clicmd:: sharp watch <nexthop <A.B.C.D|X:X::X:X>|import <A.B.C.D/M:X:X::X:X/M> [connected]
 | |
| 
 | |
|    Instruct zebra to monitor and notify sharp when the specified nexthop is
 | |
|    changed. The notification from zebra is written into the debug log.
 | |
|    The nexthop or import choice chooses the type of nexthop we are asking
 | |
|    zebra to watch for us.  This choice affects zebra's decision on what
 | |
|    matches.  Connected tells zebra whether or not that we want the route
 | |
|    matched against to be a static or connected route for the nexthop keyword,
 | |
|    for the import keyword connected means exact match.  The no form of
 | |
|    the command obviously turns this watching off.
 | |
| 
 | |
| .. clicmd:: sharp data nexthop
 | |
| 
 | |
|    Allow end user to dump associated data with the nexthop tracking that
 | |
|    may have been turned on.
 | |
| 
 | |
| .. clicmd:: sharp watch [vrf NAME] redistribute ROUTETYPE
 | |
| 
 | |
|    Allow end user to monitor redistributed routes of ROUTETYPE
 | |
|    origin.
 | |
| 
 | |
| .. clicmd:: sharp lsp [update] (0-100000) nexthop-group NAME [prefix A.B.C.D/M TYPE [instance (0-255)]]
 | |
| 
 | |
|    Install an LSP using the specified in-label, with nexthops as
 | |
|    listed in nexthop-group ``NAME``. If ``update`` is included, the
 | |
|    update path is used. The LSP is installed as type ZEBRA_LSP_SHARP.
 | |
|    If ``prefix`` is specified, an existing route with type ``TYPE``
 | |
|    (and optional ``instance`` id) will be updated to use the LSP.
 | |
| 
 | |
| .. clicmd:: sharp remove lsp (0-100000) nexthop-group NAME [prefix A.B.C.D/M TYPE [instance (0-255)]]
 | |
| 
 | |
|    Remove a SHARPD LSP that uses the specified in-label, where the
 | |
|    nexthops are specified in nexthop-group ``NAME``. If ``prefix`` is
 | |
|    specified, remove label bindings from the route of type ``TYPE``
 | |
|    also.
 | |
| 
 | |
| .. clicmd:: sharp send opaque type (1-255) (1-1000)
 | |
| 
 | |
|    Send opaque ZAPI messages with subtype ``type``. Sharpd will send
 | |
|    a stream of messages if the count is greater than one.
 | |
| 
 | |
| .. clicmd:: sharp send opaque unicast type (1-255) PROTOCOL [{instance (0-1000) | session (1-1000)}] (1-1000)
 | |
| 
 | |
|    Send unicast opaque ZAPI messages with subtype ``type``. The
 | |
|    protocol, instance, and session_id identify a single target zapi
 | |
|    client. Sharpd will send a stream of messages if the count is
 | |
|    greater than one.
 | |
| 
 | |
| .. clicmd:: sharp send opaque <reg | unreg> PROTOCOL [{instance (0-1000) | session (1-1000)}] type (1-1000)
 | |
| 
 | |
|    Send opaque ZAPI registration and unregistration messages for a
 | |
|    single subtype. The messages must specify a protocol daemon by
 | |
|    name, and can include optional zapi ``instance`` and ``session``
 | |
|    values.
 | |
| 
 | |
| .. clicmd:: sharp create session (1-1024)
 | |
| 
 | |
|    Create an additional zapi client session for testing, using the
 | |
|    specified session id.
 | |
| 
 | |
| .. clicmd:: sharp remove session (1-1024)
 | |
| 
 | |
|    Remove a test zapi client session that was created with the
 | |
|    specified session id.
 | |
| 
 | |
| .. clicmd:: sharp neigh discover [vrf NAME] <A.B.C.D|X:X::X:X> IFNAME
 | |
| 
 | |
|    Send an ARP/NDP request to trigger the addition of a neighbor in the ARP
 | |
|    table.
 | |
| 
 | |
| .. clicmd:: sharp import-te
 | |
| 
 | |
|    Import Traffic Engineering Database produced by OSPF or IS-IS.
 | |
| 
 | |
| .. clicmd:: show sharp ted [verbose|json]
 | |
| 
 | |
| .. clicmd:: show sharp ted [<vertex [A.B.C.D]|edge [A.B.C.D]|subnet [A.B.C.D/M]>] [verbose|json]
 | |
| 
 | |
|    Show imported Traffic Engineering Data Base
 | |
| 
 | |
| .. clicmd:: show sharp cspf source <A.B.C.D|X:X:X:X> destination <A.B.C.D|X:X:X:X> <metric|te-metric|delay> (0-16777215) [rsv-bw (0-7) BANDWIDTH]
 | |
| 
 | |
|    Show the result of a call to the Constraint Shortest Path First (CSPF)
 | |
|    algorithm that allows to compute a path between a source and a
 | |
|    destination under various constraints. Standard Metric, TE Metric, Delay
 | |
|    and Bandwidth are supported constraints. Prior to use this function, it is
 | |
|    necessary to import a Traffic Engineering Database with `sharp import-te`
 | |
|    command (see above).
 | |
| 
 | |
| .. clicmd:: sharp install seg6-routes [vrf NAME] <A.B.C.D|X:X::X:X> nexthop-seg6 X:X::X:X encap X:X::X:X (1-1000000)
 | |
| 
 | |
|    This command installs a route for SRv6 Transit behavior (on Linux it is
 | |
|    known as seg6 route). The count, destination, vrf, etc. have the same
 | |
|    meaning as in the ``sharp install routes`` command.  With this command,
 | |
|    sharpd will request zebra to configure seg6 route via ZEBRA_ROUTE_ADD
 | |
|    ZAPI. As in the following example.
 | |
| 
 | |
| ::
 | |
| 
 | |
|    router# sharp install seg6-routes 1::A nexthop-seg6 2001::2 encap A:: 1
 | |
|    router# sharp install seg6-routes 1::B nexthop-seg6 2001::2 encap B:: 1
 | |
| 
 | |
|    router# show ipv6 route
 | |
|    D>* 1::A/128 [150/0] via 2001::2, dum0, seg6 a::, weight 1, 00:00:01
 | |
|    D>* 1::B/128 [150/0] via 2001::2, dum0, seg6 b::, weight 1, 00:00:01
 | |
| 
 | |
|    bash# ip -6 route list
 | |
|    1::A  encap seg6 mode encap segs 1 [ a:: ] via 2001::2 dev dum0 proto 194 metric 20 pref medium
 | |
|    1::B  encap seg6 mode encap segs 1 [ b:: ] via 2001::2 dev dum0 proto 194 metric 20 pref medium
 | |
| 
 | |
| .. clicmd:: sharp install seg6local-routes [vrf NAME] X:X::X:X nexthop-seg6local NAME ACTION ARGS.. (1-1000000)
 | |
| 
 | |
|    This command installs a route for SRv6 Endpoint behavior (on Linux it is
 | |
|    known as seg6local route). The count, destination, vrf, etc. have the same
 | |
|    meaning as in the ``sharp install routes`` command.  With this command,
 | |
|    sharpd will request zebra to configure seg6local route via ZEBRA_ROUTE_ADD
 | |
|    ZAPI. As in the following example.
 | |
| 
 | |
|    There are many End Functions defined in SRv6, which have been standardized
 | |
|    in RFC 8986. The current implementation supports End, End.X, End.T, End.DX4,
 | |
|    and End.DT6, which can be configured as follows.
 | |
| 
 | |
| ::
 | |
| 
 | |
|    router# sharp install seg6local-routes 1::1 nexthop-seg6local dum0 End 1
 | |
|    router# sharp install seg6local-routes 1::2 nexthop-seg6local dum0 End_X 2001::1 1
 | |
|    router# sharp install seg6local-routes 1::3 nexthop-seg6local dum0 End_T 10 1
 | |
|    router# sharp install seg6local-routes 1::4 nexthop-seg6local dum0 End_DX4 10.0.0.1 1
 | |
|    router# sharp install seg6local-routes 1::5 nexthop-seg6local dum0 End_DT6 10 1
 | |
| 
 | |
|    router# show ipv6 route
 | |
|    D>* 1::1/128 [150/0] is directly connected, dum0, seg6local End USP, weight 1, 00:00:05
 | |
|    D>* 1::2/128 [150/0] is directly connected, dum0, seg6local End.X nh6 2001::1, weight 1, 00:00:05
 | |
|    D>* 1::3/128 [150/0] is directly connected, dum0, seg6local End.T table 10, weight 1, 00:00:05
 | |
|    D>* 1::4/128 [150/0] is directly connected, dum0, seg6local End.DX4 nh4 10.0.0.1, weight 1, 00:00:05
 | |
|    D>* 1::5/128 [150/0] is directly connected, dum0, seg6local End.DT6 table 10, weight 1, 00:00:05
 | |
| 
 | |
|    bash# ip -6 route
 | |
|    1::1  encap seg6local action End dev dum0 proto 194 metric 20 pref medium
 | |
|    1::2  encap seg6local action End.X nh6 2001::1 dev dum0 proto 194 metric 20 pref medium
 | |
|    1::3  encap seg6local action End.T table 10 dev dum0 proto 194 metric 20 pref medium
 | |
|    1::4  encap seg6local action End.DX4 nh4 10.0.0.1 dev dum0 proto 194 metric 20 pref medium
 | |
|    1::5  encap seg6local action End.DT6 table 10 dev dum0 proto 194 metric 20 pref medium
 | |
| 
 | |
| .. clicmd:: show sharp segment-routing srv6
 | |
| 
 | |
|    This command shows us what SRv6 locator chunk, sharp is holding as zclient.
 | |
|    An SRv6 locator is defined for each SRv6 router, and a single locator may
 | |
|    be shared by multiple protocols.
 | |
| 
 | |
|    In the FRRouting implementation, the Locator chunk get request is executed
 | |
|    by a routing protocol daemon such as sharpd or bgpd, And then Zebra
 | |
|    allocates a Locator Chunk, which is a subset of the Locator Prefix, and
 | |
|    notifies the requesting protocol daemon of this information.
 | |
| 
 | |
|    This command example shows how the locator chunk of sharpd itself is
 | |
|    allocated.
 | |
| 
 | |
| ::
 | |
| 
 | |
|    router# show segment-routing srv6 locator
 | |
|    Locator:
 | |
|    Name                 ID            2 2001:db8:2:2::/64        Up
 | |
| 
 | |
|    router# show sharp segment-routing srv6
 | |
|    Locator loc1 has 1 prefix chunks
 | |
|      2001:db8:1:1::/64
 | |
| 
 | |
| .. clicmd:: sharp srv6-manager get-locator-chunk
 | |
| 
 | |
|    This command requests the SRv6 locator to allocate a locator chunk via ZAPI.
 | |
|    This chunk can be owned by the protocol daemon, and the chunk obtained by
 | |
|    sharpd will not be used by the SRv6 mechanism of another routing protocol.
 | |
| 
 | |
|    Since this request is made asynchronously, it can be issued before the SRv6
 | |
|    locator is configured on the zebra side, and as soon as it is ready on the
 | |
|    zebra side, sharpd can check the allocated locator chunk via zapi.
 | |
| 
 | |
| ::
 | |
| 
 | |
|    router# show segment-routing srv6 locator loc1 detail
 | |
|    Name: loc1
 | |
|    Prefix: 2001:db8:1:1::/64
 | |
|    Chunks:
 | |
|    - prefix: 2001:db8:1:1::/64, owner: system
 | |
| 
 | |
|    router# show sharp segment-routing srv6
 | |
|    (nothing)
 | |
| 
 | |
|    router# sharp srv6-manager get-locator-chunk loc1
 | |
| 
 | |
|    router# show segment-routing srv6 locator loc1 detail
 | |
|    Name: loc1
 | |
|    Prefix: 2001:db8:1:1::/64
 | |
|    Chunks:
 | |
|    - prefix: 2001:db8:1:1::/64, owner: sharp
 | |
| 
 | |
|    router# show sharp segment-routing srv6
 | |
|    Locator loc1 has 1 prefix chunks
 | |
|      2001:db8:1:1::/64
 | |
| 
 | |
| .. clicmd:: sharp srv6-manager release-locator-chunk
 | |
| 
 | |
|    This command releases a locator chunk that has already been allocated by
 | |
|    ZAPI. The freed chunk will have its owner returned to the system and will
 | |
|    be available to another protocol daemon.
 | |
| 
 | |
| ::
 | |
| 
 | |
|    router# show segment-routing srv6 locator loc1 detail
 | |
|    Name: loc1
 | |
|    Prefix: 2001:db8:1:1::/64
 | |
|    Chunks:
 | |
|    - prefix: 2001:db8:1:1::/64, owner: sharp
 | |
| 
 | |
|    router# show sharp segment-routing srv6
 | |
|    Locator loc1 has 1 prefix chunks
 | |
|      2001:db8:1:1::/64
 | |
| 
 | |
|    router# sharp srv6-manager release-locator-chunk loc1
 | |
| 
 | |
|    router# show segment-routing srv6 locator loc1 detail
 | |
|    Name: loc1
 | |
|    Prefix: 2001:db8:1:1::/64
 | |
|    Chunks:
 | |
|    - prefix: 2001:db8:1:1::/64, owner: system
 | |
| 
 | |
|    router# show sharp segment-routing srv6
 | |
|    (nothing)
 | |
| 
 | |
| .. clicmd:: sharp interface IFNAME protodown
 | |
| 
 | |
|    Set an interface protodown.
 |