FD.io VPP
v17.04.2-2-ga8f93f8
Vector Packet Processing
|
Anycast is often used to have a client choose one out of multiple servers. This might be due to performance, scale, or availability reasons. If a client initiates a TCP connection in an anycast scenario, the TCP session is usually established with the server which answers the quickest.
There are cases where it is desirable to:
M-anycast combines IOAM and Segment Routing v6 (SRv6) to provide for a solution:
Introduce M-Anycast Server as a solution component to leverage Segment Routing to steer traffic, IOAM for optimized service selection. M-Anycast Server:
VPP can function as an M-Anycast server. VPP can also be used as a IOAM and SRv6 decapsulating node at the application server edge. This allows for caching of IOAM and reattaching it to correlate the path performance across request-response (SYN/SYN-ACK) forwarding path.
Example: Highly redundant video-caches as micro-services hosted in multiple public clouds. All Services have an IPv6 address allocated from anycast IPv6 prefix (db06::/64). Here configuration to enable VPP as an M-Anycast server and IOAM caching/reattach node is provided.
set ioam ip6 sr-tunnel-select [disable] [oneway|rtt] [wait_for_responses <n|default 3>] sr_localsid <IPv6 address>
Example:
set ioam ip6 sr-tunnel-select oneway sr_localsid db0a::2
classify table acl-miss-next ip6-node ip6-lookup mask hex 000000000000ffffffffffffffff0000 buckets 2 skip 2 match 1 classify session acl-hit-next ip6-node ip6-add-syn-hop-by-hop table-index 0 match hex 0000000000000000000000000000000000000000000000000000000000000000000000000000db060000000000000000 ioam-encap anycast classify session acl-hit-next ip6-node ip6-lookup table-index 0 match hex 0000000000000000000000000000000000000000000000000000000000000000000000000000db0a0000000000000000 ioam-decap anycast set int input acl intfc GigabitEthernet0/4/0 ip6-table 0 set int input acl intfc GigabitEthernet0/5/0 ip6-table 0 set ioam-trace profile trace-type 0x09 trace-elts 3 trace-tsp 1 node-id 0x1 set ioam rewrite trace
sr policy add bsid db11::2 next db07::1 insert spray sr policy mod add sl bsid db11::2 next db08::1 sr policy mod add sl bsid db11::2 next db09::1 sr steer l3 db06::/64 via sr policy bsid db11::2 sr localsid address db0a::2 behavior end
set ioam ip6 cache sr_localsid <ip6 address> [disable]
Example:
set ioam ip6 cache sr_localsid db07::1
classify table acl-miss-next ip6-node ip6-lookup mask hex 000000000000ffffffffffffffff0000 buckets 2 skip 2 match 1 classify session acl-hit-next ip6-node ip6-lookup table-index 0 match hex 0000000000000000000000000000000000000000000000000000000000000000000000000000db060000000000000000 ioam-decap anycast classify session acl-hit-next ip6-node ip6-lookup table-index 0 match hex 0000000000000000000000000000000000000000000000000000000000000000000000000000db070000000000000000 ioam-decap anycast classify session acl-hit-next ip6-node ip6-add-from-cache-hop-by-hop table-index 0 match hex 0000000000000000000000000000000000000000000000000000000000000000000000000000db040000000000000000 ioam-encap anycast-response set int input acl intfc GigabitEthernet0/4/0 ip6-table 0 set ioam-trace profile trace-type 0x1f trace-elts 4 trace-tsp 1 node-id 0x3 app-data 0x1234
sr localsid address db07::1 behavior end psp