From 59dbdfa9f269e8861604cbc21d2aeb98a1bfb5e2 Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 30 Sep 2024 00:20:51 +0000 Subject: [PATCH] Update OVN branch-23.09 manpages --- .../dist-docs-branch-23.09/ovn-appctl.8.pdf | Bin 29701 -> 29701 bytes .../ovn-architecture.7.pdf | Bin 135784 -> 135784 bytes .../ovn-controller-vtep.8.pdf | Bin 25847 -> 25847 bytes .../ovn-controller.8.pdf | Bin 59610 -> 59610 bytes .../dist-docs-branch-23.09/ovn-ctl.8.pdf | Bin 31969 -> 31969 bytes .../dist-docs-branch-23.09/ovn-debug.8.pdf | Bin 16638 -> 16638 bytes .../dist-docs-branch-23.09/ovn-detrace.1.pdf | Bin 21957 -> 21969 bytes .../dist-docs-branch-23.09/ovn-ic-nb.5.pdf | Bin 38784 -> 38784 bytes .../dist-docs-branch-23.09/ovn-ic-nbctl.8.pdf | Bin 53512 -> 53512 bytes .../dist-docs-branch-23.09/ovn-ic-sb.5.pdf | Bin 52038 -> 52038 bytes .../dist-docs-branch-23.09/ovn-ic-sbctl.8.pdf | Bin 53216 -> 53216 bytes .../dist-docs-branch-23.09/ovn-ic.8.pdf | Bin 38868 -> 38868 bytes .../dist-docs-branch-23.09/ovn-nb.5.pdf | Bin 212728 -> 212728 bytes .../dist-docs-branch-23.09/ovn-nbctl.8.pdf | Bin 110872 -> 110872 bytes .../dist-docs-branch-23.09/ovn-northd.8 | 18 +- .../dist-docs-branch-23.09/ovn-northd.8.html | 543 +++++++++--------- .../dist-docs-branch-23.09/ovn-northd.8.pdf | Bin 198623 -> 198718 bytes .../dist-docs-branch-23.09/ovn-northd.8.txt | 543 +++++++++--------- .../dist-docs-branch-23.09/ovn-sb.5.pdf | Bin 209702 -> 209702 bytes .../dist-docs-branch-23.09/ovn-sbctl.8.pdf | Bin 74054 -> 74054 bytes .../dist-docs-branch-23.09/ovn-trace.8.pdf | Bin 56102 -> 56102 bytes 21 files changed, 569 insertions(+), 535 deletions(-) diff --git a/src/static/support/dist-docs-branch-23.09/ovn-appctl.8.pdf b/src/static/support/dist-docs-branch-23.09/ovn-appctl.8.pdf index 6feb376d2970c58941d4ab2e2fd990fb319feea2..674c3eccddb3526893873ea94e2482bd2d64bb6c 100644 GIT binary patch delta 178 zcmZpD!PxqOal`doZexQG0|P4~11l5L$&YfiQTP&h2YAekEQ}1243c$|%u+T#$@|Nw zWo%$zU}Ruo8f9Rh4n&$<`o8%oE{P?n8ZJO{j7$tHVJbFr7tUdFGBkH~b2fH%HgYsE hv~Y5Ebh5CtFn2U`Gu(KhgV)Dyk836GlFjD{k delta 178 zcmZpD!PxqOal`doZX@Fm0|P5VODiM8$&YfiQTP&h2Y3w3Es{+Q&60GJ3{5vb$@|Nw zWn^q%U}$M%7-e9f4n&$<`o8%oE{P?n8ZK5w21X_ZmM|5YxeMnoIXPRJ8#_Chx)>Nb io4T5r8Jd|I8kstqn;02e7+RV*8`;?qQZe~uu?zst$uFh= diff --git a/src/static/support/dist-docs-branch-23.09/ovn-architecture.7.pdf b/src/static/support/dist-docs-branch-23.09/ovn-architecture.7.pdf index 2f83d9db3bc82ec389f68c6086718f7ea8e918f1..7fe534c90833526db6e5fba12422e3c4c1b10d07 100644 GIT binary patch delta 167 zcmaE{gyY2$j)oS-Elk=h+{OkW1_o9}2397f)6H0zv{3|dSeOp*m>F3Z86+7b>n53{ zY`0)#`pd{+Y+ztuWB}A*%g!VP=WUN?XIjPOWN2t==4RnyVQ64s>gw!jX6R<*>S${0 WWM*t`Zfa>^Zf8SC#dL2WCRqTy-zUoe delta 167 zcmaE{gyY2$j)oS-Elk=h+(yPB1_oA!mR3fF)6H0zv{3|dSeOp*7?@imn;M!W=_VPP zZnt1%`pd{+WNctyXbIF|%g!VP=WUN?XIjPO=_ec${Pm&B4(4Huv}MkWT9Fcq6ElMiZU=z2O>=_ec${Pm&B4(4HqjT10xdyOPGqymPrXrPG**-<`yo-2F7k? iE`|oiM$QJtW-cbCCdL-7rluw?7Irp-R7}2|A_D-^{4Kfw diff --git a/src/static/support/dist-docs-branch-23.09/ovn-controller.8.pdf b/src/static/support/dist-docs-branch-23.09/ovn-controller.8.pdf index 8b9bc0b8f1520cd76030b298f52889311fe1a889..9513f3996f05c436a13584be5f40b54c46753659 100644 GIT binary patch delta 157 zcmcb0k@?m|<_#GSxQz`$3=FJ{46IDdCKo@@M&Yk~aDd0m*f25C&>~qk$t-1a>BGN_ z9L5F)21W)zBGN_ z97e_l28NbEV~ jvmvM=mdnnLtGFbwsHCDOHI2*I(7@c3OI6j?-;E0ZfS535 delta 181 zcmaF(lkwqC#tr{Vxs8lN3=FIcEv<}Q9 z85hHz{ E06@nzGynhq delta 202 zcmey@$oQ|3aYKPMw~=v(fq|8wrInG<Q9 z85tWG7+M+`MHv{V1Cb_|zHfetOJYf?hKrSvfsu)UB}~QUC3b%p<1EZvos7+0&CD%a zEiDZVoy;v=ER0=TObiUnOkEA!Ozdn3s)*&Xv*Ri*Nh~UmaL(p)lR{YH%+1UVTwR=v%}q^A9SzNmElkZ!Of8Jf4IPc09o<}w k?Q96Dh~=`g<0>vmEGnreN=@T3Ha9ai;8Im}^>^a}00;&#)c^nh delta 181 zcmZoz&(yGmaL(p)lR{YH3{71uTntPNEnJ+<&CD$v-7HKEjh#*0oGqN(OiWyy k>}&|Ch~=`g<0>vmEGnreN=@T3Ha9ai;8Im}^>^a}02ysELI3~& diff --git a/src/static/support/dist-docs-branch-23.09/ovn-ic-nbctl.8.pdf b/src/static/support/dist-docs-branch-23.09/ovn-ic-nbctl.8.pdf index 8d42ddab6ddd43ed4aea5e109eff6287ed76a4e2..091537473633c67df1948cc78dae9ef7d7e042dc 100644 GIT binary patch delta 178 zcmeBJ#N4rnd4t(WZexQG0|P4~11l4=$&M$rQTXL25Ac{78zv?iS|sZxnWb!YKJ}MT z%h|$bK;^bs$;%4e>VQJ!OWMXFFVrN50#pE{^WB{p~FmC_= delta 178 zcmeBJ#N4rnd4t(WZX@Fm0|P5VODiLz$&M$rQTXL25AYaR7@4G+rzYtp8Jcc(KJ}MT z%gETkz|hjjD9XS<9f&l!^nLSFToOxCHC(KW42(<+EMY1(XPt3iadL7tb2T=zG&OKD iFm^PxG%_`HbTl+KvvhJaHL|cUw6wD!q+;@$3o-zmy)ZNY diff --git a/src/static/support/dist-docs-branch-23.09/ovn-ic-sb.5.pdf b/src/static/support/dist-docs-branch-23.09/ovn-ic-sb.5.pdf index 3bab2bf6fc39119f7f0eff42980732451a42c71b..b33470fd3c8ca221dd10cabcdc57bb7f02a00891 100644 GIT binary patch delta 157 zcmX>$jrrI#<_&ueavK|j7#LU?8CaQ^Pdp<0NBa3xj0cB(s#wClCE) z$jrrI#<_&ueavK?k7#LU?T3Q(yPd3i=-6uRI?=ABtz59ClCE) zl6yMi!Y{o`x327N#xCvz57x4MGeItc(n-Ow6Y*Q)bpi5xAqwe1ONyILX-9!XQ~U z$t-323KizRj2y-W1_nk3KpktY{o`x327N#xCvz57xj6)0ztPCx!jEtu*Q)bpi5xAqwe1ONmA}Pf@)htOj z$4_=&^G(AnA0 q(ZbEm#Kh9g$;{Hx(!$cw&B@f&$kfru!p+&h&W4bR>AyEH$^rlm8Z=-4 delta 185 zcmbR7h;7CrwuUW?lb3KC8HX4cSQ%Pc8JSFMucWbEu_Zeii(WM@N2#q{4B7-a#b?lU0( diff --git a/src/static/support/dist-docs-branch-23.09/ovn-northd.8 b/src/static/support/dist-docs-branch-23.09/ovn-northd.8 index 6f8f733b..4c63597a 100644 --- a/src/static/support/dist-docs-branch-23.09/ovn-northd.8 +++ b/src/static/support/dist-docs-branch-23.09/ovn-northd.8 @@ -2271,7 +2271,23 @@ For each IPv4/IPv6 ECMP group with group id \fIGID\fR and member ids \fIMID1\fR, .br \fBreg8[0\[char46]\[char46]15] = \fR\fIGID\fB\fR; .br -\fBselect(reg8[16\[char46]\[char46]31], \fR\fIMID1\fB\fR, \fR\fIMID2\fB\fR, \[char46]\[char46]\[char46]); +\fBreg8[16\[char46]\[char46]31] = select(\fR\fIMID1\fB\fR, \fR\fIMID2\fB\fR, \[char46]\[char46]\[char46]); +.br +\fB \fR +.fi +.IP +However, when there is only one route in an ECMP group, group actions will be: +.IP +.nf +\fB +.br +\fBip\[char46]ttl\-\-; +.br +\fBflags\[char46]loopback = 1; +.br +\fBreg8[0\[char46]\[char46]15] = \fR\fIGID\fB\fR; +.br +\fBreg8[16\[char46]\[char46]31] = \fR\fIMID1\fB\fR); .br \fB \fR .fi diff --git a/src/static/support/dist-docs-branch-23.09/ovn-northd.8.html b/src/static/support/dist-docs-branch-23.09/ovn-northd.8.html index c247bed9..8f0f6e0b 100644 --- a/src/static/support/dist-docs-branch-23.09/ovn-northd.8.html +++ b/src/static/support/dist-docs-branch-23.09/ovn-northd.8.html @@ -3064,35 +3064,44 @@ ip.ttl--; flags.loopback = 1; reg8[0..15] = GID; - select(reg8[16..31], MID1, MID2, ...); + reg8[16..31] = select(MID1, MID2, ...); - • A priority-0 logical flow that matches all packets not + However, when there is only one route in an ECMP group, + group actions will be: + + ip.ttl--; + flags.loopback = 1; + reg8[0..15] = GID; + reg8[16..31] = MID1); + + + • A priority-0 logical flow that matches all packets not already handled (match 1) and drops them (action drop;). Ingress Table 14: IP_ROUTING_ECMP - This table implements the second part of IP routing for ECMP routes - following the previous table. If a packet matched a ECMP group in the - previous table, this table matches the group id and member id stored + This table implements the second part of IP routing for ECMP routes + following the previous table. If a packet matched a ECMP group in the + previous table, this table matches the group id and member id stored from the previous table, setting reg0 (or xxreg0 for IPv6) to the next- hop IP address (leaving ip4.dst or ip6.dst, the packet’s final destina‐ - tion, unchanged) and advances to the next table for ARP resolution. It - also sets reg1 (or xxreg1) to the IP address owned by the selected + tion, unchanged) and advances to the next table for ARP resolution. It + also sets reg1 (or xxreg1) to the IP address owned by the selected router port (ingress table ARP Request will generate an ARP request, if needed, with reg0 as the target protocol address and reg1 as the source protocol address). - This processing is skipped for reply traffic being sent out of an ECMP + This processing is skipped for reply traffic being sent out of an ECMP route if the route was configured to use symmetric replies. This table contains the following logical flows: - • A priority-150 flow that matches reg8[0..15] == 0 with - action next; directly bypasses packets of non-ECMP + • A priority-150 flow that matches reg8[0..15] == 0 with + action next; directly bypasses packets of non-ECMP routes. - • For each member with ID MID in each ECMP group with ID + • For each member with ID MID in each ECMP group with ID GID, a priority-100 flow with match reg8[0..15] == GID &&&& reg8[16..31] == MID has following actions: @@ -3102,35 +3111,35 @@ outport = P; - • A priority-0 logical flow that matches all packets not + • A priority-0 logical flow that matches all packets not already handled (match 1) and drops them (action drop;). Ingress Table 15: Router policies This table adds flows for the logical router policies configured on the - logical router. Please see the OVN_Northbound database Logi‐‐ + logical router. Please see the OVN_Northbound database Logi‐‐ cal_Router_Policy table documentation in ovn-nb for supported actions. - • For each router policy configured on the logical router, - a logical flow is added with specified priority, match + • For each router policy configured on the logical router, + a logical flow is added with specified priority, match and actions. - • If the policy action is reroute with 2 or more nexthops - defined, then the logical flow is added with the follow‐ + • If the policy action is reroute with 2 or more nexthops + defined, then the logical flow is added with the follow‐ ing actions: reg8[0..15] = GID; reg8[16..31] = select(1,..n); - where GID is the ECMP group id generated by ovn-northd - for this policy and n is the number of nexthops. select + where GID is the ECMP group id generated by ovn-northd + for this policy and n is the number of nexthops. select action selects one of the nexthop member id, stores it in - the register reg8[16..31] and advances the packet to the + the register reg8[16..31] and advances the packet to the next stage. - • If the policy action is reroute with just one nexhop, - then the logical flow is added with the following ac‐ + • If the policy action is reroute with just one nexhop, + then the logical flow is added with the following ac‐ tions: [xx]reg0 = H; @@ -3141,30 +3150,30 @@ next; - where H is the nexthop defined in the router policy, E - is the ethernet address of the logical router port from - which the nexthop is reachable and P is the logical + where H is the nexthop defined in the router policy, E + is the ethernet address of the logical router port from + which the nexthop is reachable and P is the logical router port from which the nexthop is reachable. - • If a router policy has the option pkt_mark=m set and if - the action is not drop, then the action also includes + • If a router policy has the option pkt_mark=m set and if + the action is not drop, then the action also includes pkt.mark = m to mark the packet with the marker m. Ingress Table 16: ECMP handling for router policies - This table handles the ECMP for the router policies configured with + This table handles the ECMP for the router policies configured with multiple nexthops. • A priority-150 flow is added to advance the packet to the - next stage if the ECMP group id register reg8[0..15] is + next stage if the ECMP group id register reg8[0..15] is 0. - • For each ECMP reroute router policy with multiple nex‐ - thops, a priority-100 flow is added for each nexthop H - with the match reg8[0..15] == GID &&&& reg8[16..31] == M - where GID is the router policy group id generated by + • For each ECMP reroute router policy with multiple nex‐ + thops, a priority-100 flow is added for each nexthop H + with the match reg8[0..15] == GID &&&& reg8[16..31] == M + where GID is the router policy group id generated by ovn-northd and M is the member id of the nexthop H gener‐ - ated by ovn-northd. The following actions are added to + ated by ovn-northd. The following actions are added to the flow: [xx]reg0 = H; @@ -3174,154 +3183,154 @@ "next;" - where H is the nexthop defined in the router policy, E - is the ethernet address of the logical router port from - which the nexthop is reachable and P is the logical + where H is the nexthop defined in the router policy, E + is the ethernet address of the logical router port from + which the nexthop is reachable and P is the logical router port from which the nexthop is reachable. - • A priority-0 logical flow that matches all packets not + • A priority-0 logical flow that matches all packets not already handled (match 1) and drops them (action drop;). Ingress Table 17: ARP/ND Resolution - Any packet that reaches this table is an IP packet whose next-hop IPv4 - address is in reg0 or IPv6 address is in xxreg0. (ip4.dst or ip6.dst - contains the final destination.) This table resolves the IP address in + Any packet that reaches this table is an IP packet whose next-hop IPv4 + address is in reg0 or IPv6 address is in xxreg0. (ip4.dst or ip6.dst + contains the final destination.) This table resolves the IP address in reg0 (or xxreg0) into an output port in outport and an Ethernet address in eth.dst, using the following flows: - • A priority-500 flow that matches IP multicast traffic - that was allowed in the routing pipeline. For this kind - of traffic the outport was already set so the flow just + • A priority-500 flow that matches IP multicast traffic + that was allowed in the routing pipeline. For this kind + of traffic the outport was already set so the flow just advances to the next table. - • Priority-200 flows that match ECMP reply traffic for the - routes configured to use symmetric replies, with actions + • Priority-200 flows that match ECMP reply traffic for the + routes configured to use symmetric replies, with actions push(xxreg1); xxreg1 = ct_label; eth.dst = - xxreg1[32..79]; pop(xxreg1); next;. xxreg1 is used here - to avoid masked access to ct_label, to make the flow HW- + xxreg1[32..79]; pop(xxreg1); next;. xxreg1 is used here + to avoid masked access to ct_label, to make the flow HW- offloading friendly. • Static MAC bindings. MAC bindings can be known statically - based on data in the OVN_Northbound database. For router - ports connected to logical switches, MAC bindings can be - known statically from the addresses column in the Logi‐‐ - cal_Switch_Port table. (Note: the flow is not installed - for IPs of logical switch ports of type virtual, and dy‐ - namic MAC binding is used for those IPs instead, so that + based on data in the OVN_Northbound database. For router + ports connected to logical switches, MAC bindings can be + known statically from the addresses column in the Logi‐‐ + cal_Switch_Port table. (Note: the flow is not installed + for IPs of logical switch ports of type virtual, and dy‐ + namic MAC binding is used for those IPs instead, so that virtual parent failover does not depend on ovn-northd, to - achieve better failover performance.) For router ports - connected to other logical routers, MAC bindings can be - known statically from the mac and networks column in the - Logical_Router_Port table. (Note: the flow is NOT in‐ - stalled for the IP addresses that belong to a neighbor - logical router port if the current router has the op‐‐ + achieve better failover performance.) For router ports + connected to other logical routers, MAC bindings can be + known statically from the mac and networks column in the + Logical_Router_Port table. (Note: the flow is NOT in‐ + stalled for the IP addresses that belong to a neighbor + logical router port if the current router has the op‐‐ tions:dynamic_neigh_routers set to true) - For each IPv4 address A whose host is known to have Eth‐ - ernet address E on router port P, a priority-100 flow + For each IPv4 address A whose host is known to have Eth‐ + ernet address E on router port P, a priority-100 flow with match outport === P &&&& reg0 == A has actions eth.dst = E; next;. - For each IPv6 address A whose host is known to have Eth‐ - ernet address E on router port P, a priority-100 flow - with match outport === P &&&& xxreg0 == A has actions + For each IPv6 address A whose host is known to have Eth‐ + ernet address E on router port P, a priority-100 flow + with match outport === P &&&& xxreg0 == A has actions eth.dst = E; next;. For each logical router port with an IPv4 address A and a - mac address of E that is reachable via a different logi‐ + mac address of E that is reachable via a different logi‐ cal router port P, a priority-100 flow with match outport === P &&&& reg0 == A has actions eth.dst = E; next;. For each logical router port with an IPv6 address A and a - mac address of E that is reachable via a different logi‐ + mac address of E that is reachable via a different logi‐ cal router port P, a priority-100 flow with match outport === P &&&& xxreg0 == A has actions eth.dst = E; next;. - • Static MAC bindings from NAT entries. MAC bindings can - also be known for the entries in the NAT table. Below - flows are programmed for distributed logical routers i.e + • Static MAC bindings from NAT entries. MAC bindings can + also be known for the entries in the NAT table. Below + flows are programmed for distributed logical routers i.e with a distributed router port. - For each row in the NAT table with IPv4 address A in the + For each row in the NAT table with IPv4 address A in the external_ip column of NAT table, below two flows are pro‐ grammed: - A priority-100 flow with the match outport == P &&&& reg0 - == A has actions eth.dst = E; next;, where P is the dis‐ - tributed logical router port, E is the Ethernet address - if set in the external_mac column of NAT table for of + A priority-100 flow with the match outport == P &&&& reg0 + == A has actions eth.dst = E; next;, where P is the dis‐ + tributed logical router port, E is the Ethernet address + if set in the external_mac column of NAT table for of type dnat_and_snat, otherwise the Ethernet address of the - distributed logical router port. Note that if the exter‐‐ - nal_ip is not within a subnet on the owning logical + distributed logical router port. Note that if the exter‐‐ + nal_ip is not within a subnet on the owning logical router, then OVN will only create ARP resolution flows if - the options:add_route is set to true. Otherwise, no ARP + the options:add_route is set to true. Otherwise, no ARP resolution flows will be added. Corresponding to the above flow, a priority-150 flow with the match inport == P &&&& outport == P &&&& ip4.dst == A has - actions drop; to exclude packets that have gone through - DNAT/unSNAT stage but failed to convert the destination, + actions drop; to exclude packets that have gone through + DNAT/unSNAT stage but failed to convert the destination, to avoid loop. For IPv6 NAT entries, same flows are added, but using the register xxreg0 and field ip6 for the match. • If the router datapath runs a port with redirect-type set - to bridged, for each distributed NAT rule with IP A in - the logical_ip column and logical port P in the logi‐‐ + to bridged, for each distributed NAT rule with IP A in + the logical_ip column and logical port P in the logi‐‐ cal_port column of NAT table, a priority-90 flow with the - match outport == Q &&&& ip.src === A &&&& is_chassis_resi‐‐ - dent(P), where Q is the distributed logical router port - and action get_arp(outport, reg0); next; for IPv4 and + match outport == Q &&&& ip.src === A &&&& is_chassis_resi‐‐ + dent(P), where Q is the distributed logical router port + and action get_arp(outport, reg0); next; for IPv4 and get_nd(outport, xxreg0); next; for IPv6. - • Traffic with IP destination an address owned by the + • Traffic with IP destination an address owned by the router should be dropped. Such traffic is normally dropped in ingress table IP Input except for IPs that are also shared with SNAT rules. However, if there was no un‐ - SNAT operation that happened successfully until this - point in the pipeline and the destination IP of the - packet is still a router owned IP, the packets can be + SNAT operation that happened successfully until this + point in the pipeline and the destination IP of the + packet is still a router owned IP, the packets can be safely dropped. - A priority-2 logical flow with match ip4.dst = {..} - matches on traffic destined to router owned IPv4 ad‐ - dresses which are also SNAT IPs. This flow has action + A priority-2 logical flow with match ip4.dst = {..} + matches on traffic destined to router owned IPv4 ad‐ + dresses which are also SNAT IPs. This flow has action drop;. - A priority-2 logical flow with match ip6.dst = {..} - matches on traffic destined to router owned IPv6 ad‐ - dresses which are also SNAT IPs. This flow has action + A priority-2 logical flow with match ip6.dst = {..} + matches on traffic destined to router owned IPv6 ad‐ + dresses which are also SNAT IPs. This flow has action drop;. - A priority-0 logical that flow matches all packets not + A priority-0 logical that flow matches all packets not already handled (match 1) and drops them (action drop;). • Dynamic MAC bindings. These flows resolve MAC-to-IP bind‐ - ings that have become known dynamically through ARP or - neighbor discovery. (The ingress table ARP Request will - issue an ARP or neighbor solicitation request for cases + ings that have become known dynamically through ARP or + neighbor discovery. (The ingress table ARP Request will + issue an ARP or neighbor solicitation request for cases where the binding is not yet known.) - A priority-0 logical flow with match ip4 has actions + A priority-0 logical flow with match ip4 has actions get_arp(outport, reg0); next;. - A priority-0 logical flow with match ip6 has actions + A priority-0 logical flow with match ip6 has actions get_nd(outport, xxreg0); next;. - • For a distributed gateway LRP with redirect-type set to - bridged, a priority-50 flow will match outport == + • For a distributed gateway LRP with redirect-type set to + bridged, a priority-50 flow will match outport == "ROUTER_PORT" and !is_chassis_resident ("cr-ROUTER_PORT") - has actions eth.dst = E; next;, where E is the ethernet + has actions eth.dst = E; next;, where E is the ethernet address of the logical router port. Ingress Table 18: Check packet length - For distributed logical routers or gateway routers with gateway port - configured with options:gateway_mtu to a valid integer value, this ta‐ - ble adds a priority-50 logical flow with the match outport == GW_PORT - where GW_PORT is the gateway router port and applies the action + For distributed logical routers or gateway routers with gateway port + configured with options:gateway_mtu to a valid integer value, this ta‐ + ble adds a priority-50 logical flow with the match outport == GW_PORT + where GW_PORT is the gateway router port and applies the action check_pkt_larger and advances the packet to the next table. REGBIT_PKT_LARGER = check_pkt_larger(L); next; @@ -3332,20 +3341,20 @@ taken from options:gateway_mtu column of Logical_Router_Port row. If the port is also configured with options:gateway_mtu_bypass then an‐ - other flow is added, with priority-55, to bypass the check_pkt_larger + other flow is added, with priority-55, to bypass the check_pkt_larger flow. - This table adds one priority-0 fallback flow that matches all packets + This table adds one priority-0 fallback flow that matches all packets and advances to the next table. Ingress Table 19: Handle larger packets - For distributed logical routers or gateway routers with gateway port - configured with options:gateway_mtu to a valid integer value, this ta‐ - ble adds the following priority-150 logical flow for each logical - router port with the match inport == LRP &&&& outport == GW_PORT &&&& REG‐‐ - BIT_PKT_LARGER &&&& !REGBIT_EGRESS_LOOPBACK, where LRP is the logical - router port and GW_PORT is the gateway port and applies the following + For distributed logical routers or gateway routers with gateway port + configured with options:gateway_mtu to a valid integer value, this ta‐ + ble adds the following priority-150 logical flow for each logical + router port with the match inport == LRP &&&& outport == GW_PORT &&&& REG‐‐ + BIT_PKT_LARGER &&&& !REGBIT_EGRESS_LOOPBACK, where LRP is the logical + router port and GW_PORT is the gateway port and applies the following action for ipv4 and ipv6 respectively: icmp4 { @@ -3374,66 +3383,66 @@ }; - • Where M is the (fragment MTU - 58) whose value is taken - from options:gateway_mtu column of Logical_Router_Port + • Where M is the (fragment MTU - 58) whose value is taken + from options:gateway_mtu column of Logical_Router_Port row. • E is the Ethernet address of the logical router port. • I is the IPv4/IPv6 address of the logical router port. - This table adds one priority-0 fallback flow that matches all packets + This table adds one priority-0 fallback flow that matches all packets and advances to the next table. Ingress Table 20: Gateway Redirect For distributed logical routers where one or more of the logical router ports specifies a gateway chassis, this table redirects certain packets - to the distributed gateway port instances on the gateway chassises. + to the distributed gateway port instances on the gateway chassises. This table has the following flows: - • For all the configured load balancing rules that include + • For all the configured load balancing rules that include an IPv4 address VIP, and a list of IPv4 backend addresses - B0, B1 .. Bn defined for the VIP a priority-200 flow is + B0, B1 .. Bn defined for the VIP a priority-200 flow is added that matches ip4 &&&& (ip4.src == B0 || ip4.src == B1 - || ... || ip4.src == Bn) with an action outport = CR; - next; where CR is the chassisredirect port representing - the instance of the logical router distributed gateway - port on the gateway chassis. If the backend IPv4 address - Bx is also configured with L4 port PORT of protocol P, + || ... || ip4.src == Bn) with an action outport = CR; + next; where CR is the chassisredirect port representing + the instance of the logical router distributed gateway + port on the gateway chassis. If the backend IPv4 address + Bx is also configured with L4 port PORT of protocol P, then the match also includes P.src == PORT. Similar flows are added for IPv6. • For each NAT rule in the OVN Northbound database that can - be handled in a distributed manner, a priority-100 logi‐ - cal flow with match ip4.src == B &&&& outport == GW && + be handled in a distributed manner, a priority-100 logi‐ + cal flow with match ip4.src == B &&&& outport == GW && is_chassis_resident(P), where GW is the distributed gate‐ way port specified in the NAT rule and P is the NAT logi‐ cal port. IP traffic matching the above rule will be man‐ - aged locally setting reg1 to C and eth.src to D, where C + aged locally setting reg1 to C and eth.src to D, where C is NAT external ip and D is NAT external mac. - • For each dnat_and_snat NAT rule with stateless=true and - allowed_ext_ips configured, a priority-75 flow is pro‐ - grammed with match ip4.dst == B and action outport = CR; - next; where B is the NAT rule external IP and CR is the - chassisredirect port representing the instance of the - logical router distributed gateway port on the gateway - chassis. Moreover a priority-70 flow is programmed with - same match and action drop;. For each dnat_and_snat NAT + • For each dnat_and_snat NAT rule with stateless=true and + allowed_ext_ips configured, a priority-75 flow is pro‐ + grammed with match ip4.dst == B and action outport = CR; + next; where B is the NAT rule external IP and CR is the + chassisredirect port representing the instance of the + logical router distributed gateway port on the gateway + chassis. Moreover a priority-70 flow is programmed with + same match and action drop;. For each dnat_and_snat NAT rule with stateless=true and exempted_ext_ips configured, - a priority-75 flow is programmed with match ip4.dst == B - and action drop; where B is the NAT rule external IP. A + a priority-75 flow is programmed with match ip4.dst == B + and action drop; where B is the NAT rule external IP. A similar flow is added for IPv6 traffic. • For each NAT rule in the OVN Northbound database that can be handled in a distributed manner, a priority-80 logical - flow with drop action if the NAT logical port is a vir‐ + flow with drop action if the NAT logical port is a vir‐ tual port not claimed by any chassis yet. - • A priority-50 logical flow with match outport == GW has - actions outport = CR; next;, where GW is the logical - router distributed gateway port and CR is the chas‐‐ + • A priority-50 logical flow with match outport == GW has + actions outport = CR; next;, where GW is the logical + router distributed gateway port and CR is the chas‐‐ sisredirect port representing the instance of the logical router distributed gateway port on the gateway chassis. @@ -3441,8 +3450,8 @@ Ingress Table 21: ARP Request - In the common case where the Ethernet destination has been resolved, - this table outputs the packet. Otherwise, it composes and sends an ARP + In the common case where the Ethernet destination has been resolved, + this table outputs the packet. Otherwise, it composes and sends an ARP or IPv6 Neighbor Solicitation request. It holds the following flows: • Unknown MAC address. A priority-100 flow for IPv4 packets @@ -3458,10 +3467,10 @@ }; - Unknown MAC address. For each IPv6 static route associ‐ - ated with the router with the nexthop IP: G, a prior‐ - ity-200 flow for IPv6 packets with match eth.dst == - 00:00:00:00:00:00 &&&& xxreg0 == G with the following ac‐ + Unknown MAC address. For each IPv6 static route associ‐ + ated with the router with the nexthop IP: G, a prior‐ + ity-200 flow for IPv6 packets with match eth.dst == + 00:00:00:00:00:00 &&&& xxreg0 == G with the following ac‐ tions is added: nd_ns { @@ -3473,7 +3482,7 @@ Where E is the multicast mac derived from the Gateway IP, - I is the solicited-node multicast address corresponding + I is the solicited-node multicast address corresponding to the target address G. Unknown MAC address. A priority-100 flow for IPv6 packets @@ -3486,11 +3495,11 @@ }; - (Ingress table IP Routing initialized reg1 with the IP - address owned by outport and (xx)reg0 with the next-hop + (Ingress table IP Routing initialized reg1 with the IP + address owned by outport and (xx)reg0 with the next-hop IP address) - The IP packet that triggers the ARP/IPv6 NS request is + The IP packet that triggers the ARP/IPv6 NS request is dropped. • Known MAC address. A priority-0 flow with match 1 has ac‐ @@ -3498,20 +3507,20 @@ Egress Table 0: Check DNAT local - This table checks if the packet needs to be DNATed in the router - ingress table lr_in_dnat after it is SNATed and looped back to the - ingress pipeline. This check is done only for routers configured with - distributed gateway ports and NAT entries. This check is done so that + This table checks if the packet needs to be DNATed in the router + ingress table lr_in_dnat after it is SNATed and looped back to the + ingress pipeline. This check is done only for routers configured with + distributed gateway ports and NAT entries. This check is done so that SNAT and DNAT is done in different zones instead of a common zone. - • A priority-0 logical flow with match 1 has actions REG‐‐ + • A priority-0 logical flow with match 1 has actions REG‐‐ BIT_DST_NAT_IP_LOCAL = 0; next;. Egress Table 1: UNDNAT - This is for already established connections’ reverse traffic. i.e., - DNAT has already been done in ingress pipeline and now the packet has - entered the egress pipeline as part of a reply. This traffic is unD‐ + This is for already established connections’ reverse traffic. i.e., + DNAT has already been done in ingress pipeline and now the packet has + entered the egress pipeline as part of a reply. This traffic is unD‐ NATed here. • A priority-0 logical flow with match 1 has actions next;. @@ -3521,163 +3530,163 @@ • For IPv6 Neighbor Discovery or Router Solicitation/Adver‐ tisement traffic, a priority-100 flow with action next;. - • For all IP packets, a priority-50 flow with an action + • For all IP packets, a priority-50 flow with an action flags.loopback = 1; ct_dnat;. Egress Table 1: UNDNAT on Distributed Routers - • For all the configured load balancing rules for a router - with gateway port in OVN_Northbound database that in‐ - cludes an IPv4 address VIP, for every backend IPv4 ad‐ - dress B defined for the VIP a priority-120 flow is pro‐ - grammed on gateway chassis that matches ip &&&& ip4.src == - B &&&& outport == GW, where GW is the logical router gate‐ + • For all the configured load balancing rules for a router + with gateway port in OVN_Northbound database that in‐ + cludes an IPv4 address VIP, for every backend IPv4 ad‐ + dress B defined for the VIP a priority-120 flow is pro‐ + grammed on gateway chassis that matches ip &&&& ip4.src == + B &&&& outport == GW, where GW is the logical router gate‐ way port with an action ct_dnat;. If the backend IPv4 ad‐ - dress B is also configured with L4 port PORT of protocol - P, then the match also includes P.src == PORT. These + dress B is also configured with L4 port PORT of protocol + P, then the match also includes P.src == PORT. These flows are not added for load balancers with IPv6 VIPs. - If the router is configured to force SNAT any load-bal‐ - anced packets, above action will be replaced by + If the router is configured to force SNAT any load-bal‐ + anced packets, above action will be replaced by flags.force_snat_for_lb = 1; ct_dnat;. - • For each configuration in the OVN Northbound database - that asks to change the destination IP address of a - packet from an IP address of A to B, a priority-100 flow - matches ip &&&& ip4.src == B &&&& outport == GW, where GW is + • For each configuration in the OVN Northbound database + that asks to change the destination IP address of a + packet from an IP address of A to B, a priority-100 flow + matches ip &&&& ip4.src == B &&&& outport == GW, where GW is the logical router gateway port, with an action ct_dnat;. - If the NAT rule is of type dnat_and_snat and has state‐‐ + If the NAT rule is of type dnat_and_snat and has state‐‐ less=true in the options, then the action would be next;. - If the NAT rule cannot be handled in a distributed man‐ - ner, then the priority-100 flow above is only programmed + If the NAT rule cannot be handled in a distributed man‐ + ner, then the priority-100 flow above is only programmed on the gateway chassis with the action ct_dnat. - If the NAT rule can be handled in a distributed manner, - then there is an additional action eth.src = EA;, where + If the NAT rule can be handled in a distributed manner, + then there is an additional action eth.src = EA;, where EA is the ethernet address associated with the IP address - A in the NAT rule. This allows upstream MAC learning to + A in the NAT rule. This allows upstream MAC learning to point to the correct chassis. Egress Table 2: Post UNDNAT - • A priority-50 logical flow is added that commits any un‐ - tracked flows from the previous table lr_out_undnat for - Gateway routers. This flow matches on ct.new &&&& ip with + • A priority-50 logical flow is added that commits any un‐ + tracked flows from the previous table lr_out_undnat for + Gateway routers. This flow matches on ct.new &&&& ip with action ct_commit { } ; next; . • A priority-0 logical flow with match 1 has actions next;. Egress Table 3: SNAT - Packets that are configured to be SNATed get their source IP address + Packets that are configured to be SNATed get their source IP address changed based on the configuration in the OVN Northbound database. - • A priority-120 flow to advance the IPv6 Neighbor solici‐ - tation packet to next table to skip SNAT. In the case - where ovn-controller injects an IPv6 Neighbor Solicita‐ - tion packet (for nd_ns action) we don’t want the packet + • A priority-120 flow to advance the IPv6 Neighbor solici‐ + tation packet to next table to skip SNAT. In the case + where ovn-controller injects an IPv6 Neighbor Solicita‐ + tion packet (for nd_ns action) we don’t want the packet to go through conntrack. Egress Table 3: SNAT on Gateway Routers - • If the Gateway router in the OVN Northbound database has - been configured to force SNAT a packet (that has been - previously DNATted) to B, a priority-100 flow matches - flags.force_snat_for_dnat == 1 &&&& ip with an action + • If the Gateway router in the OVN Northbound database has + been configured to force SNAT a packet (that has been + previously DNATted) to B, a priority-100 flow matches + flags.force_snat_for_dnat == 1 &&&& ip with an action ct_snat(B);. - • If a load balancer configured to skip snat has been ap‐ + • If a load balancer configured to skip snat has been ap‐ plied to the Gateway router pipeline, a priority-120 flow - matches flags.skip_snat_for_lb == 1 &&&& ip with an action + matches flags.skip_snat_for_lb == 1 &&&& ip with an action next;. - • If the Gateway router in the OVN Northbound database has - been configured to force SNAT a packet (that has been - previously load-balanced) using router IP (i.e op‐‐ - tions:lb_force_snat_ip=router_ip), then for each logical - router port P attached to the Gateway router, a prior‐ + • If the Gateway router in the OVN Northbound database has + been configured to force SNAT a packet (that has been + previously load-balanced) using router IP (i.e op‐‐ + tions:lb_force_snat_ip=router_ip), then for each logical + router port P attached to the Gateway router, a prior‐ ity-110 flow matches flags.force_snat_for_lb == 1 &&&& out‐‐ port == P - with an action ct_snat(R); where R is the IP configured - on the router port. If R is an IPv4 address then the + with an action ct_snat(R); where R is the IP configured + on the router port. If R is an IPv4 address then the match will also include ip4 and if it is an IPv6 address, then the match will also include ip6. - If the logical router port P is configured with multiple + If the logical router port P is configured with multiple IPv4 and multiple IPv6 addresses, only the first IPv4 and first IPv6 address is considered. - • If the Gateway router in the OVN Northbound database has - been configured to force SNAT a packet (that has been + • If the Gateway router in the OVN Northbound database has + been configured to force SNAT a packet (that has been previously load-balanced) to B, a priority-100 flow matches flags.force_snat_for_lb == 1 &&&& ip with an action ct_snat(B);. - • For each configuration in the OVN Northbound database, - that asks to change the source IP address of a packet - from an IP address of A or to change the source IP ad‐ - dress of a packet that belongs to network A to B, a flow - matches ip &&&& ip4.src == A &&&& (!ct.trk || !ct.rpl) with + • For each configuration in the OVN Northbound database, + that asks to change the source IP address of a packet + from an IP address of A or to change the source IP ad‐ + dress of a packet that belongs to network A to B, a flow + matches ip &&&& ip4.src == A &&&& (!ct.trk || !ct.rpl) with an action ct_snat(B);. The priority of the flow is calcu‐ - lated based on the mask of A, with matches having larger - masks getting higher priorities. If the NAT rule is of + lated based on the mask of A, with matches having larger + masks getting higher priorities. If the NAT rule is of type dnat_and_snat and has stateless=true in the options, then the action would be ip4/6.src= (B). - • If the NAT rule has allowed_ext_ips configured, then + • If the NAT rule has allowed_ext_ips configured, then there is an additional match ip4.dst == allowed_ext_ips . - Similarly, for IPV6, match would be ip6.dst == al + Similarly, for IPV6, match would be ip6.dst == al lowed_ext_ips. - • If the NAT rule has exempted_ext_ips set, then there is + • If the NAT rule has exempted_ext_ips set, then there is an additional flow configured at the priority + 1 of cor‐ - responding NAT rule. The flow matches if destination ip + responding NAT rule. The flow matches if destination ip is an exempted_ext_ip and the action is next; . This flow - is used to bypass the ct_snat action for a packet which + is used to bypass the ct_snat action for a packet which is destinted to exempted_ext_ips. • A priority-0 logical flow with match 1 has actions next;. Egress Table 3: SNAT on Distributed Routers - • For each configuration in the OVN Northbound database, - that asks to change the source IP address of a packet - from an IP address of A or to change the source IP ad‐ - dress of a packet that belongs to network A to B, two + • For each configuration in the OVN Northbound database, + that asks to change the source IP address of a packet + from an IP address of A or to change the source IP ad‐ + dress of a packet that belongs to network A to B, two flows are added. The priority P of these flows are calcu‐ - lated based on the mask of A, with matches having larger + lated based on the mask of A, with matches having larger masks getting higher priorities. - If the NAT rule cannot be handled in a distributed man‐ - ner, then the below flows are only programmed on the - gateway chassis increasing flow priority by 128 in order + If the NAT rule cannot be handled in a distributed man‐ + ner, then the below flows are only programmed on the + gateway chassis increasing flow priority by 128 in order to be run first. • The first flow is added with the calculated prior‐ - ity P and match ip &&&& ip4.src == A &&&& outport == - GW, where GW is the logical router gateway port, + ity P and match ip &&&& ip4.src == A &&&& outport == + GW, where GW is the logical router gateway port, with an action ct_snat(B); to SNATed in the common zone. If the NAT rule is of type dnat_and_snat and has stateless=true in the options, then the action would be ip4/6.src=(B). - If the NAT rule can be handled in a distributed manner, - then there is an additional action (for both the flows) - eth.src = EA;, where EA is the ethernet address associ‐ - ated with the IP address A in the NAT rule. This allows + If the NAT rule can be handled in a distributed manner, + then there is an additional action (for both the flows) + eth.src = EA;, where EA is the ethernet address associ‐ + ated with the IP address A in the NAT rule. This allows upstream MAC learning to point to the correct chassis. - If the NAT rule has allowed_ext_ips configured, then + If the NAT rule has allowed_ext_ips configured, then there is an additional match ip4.dst == allowed_ext_ips . - Similarly, for IPV6, match would be ip6.dst == al + Similarly, for IPV6, match would be ip6.dst == al lowed_ext_ips. - If the NAT rule has exempted_ext_ips set, then there is - an additional flow configured at the priority P + 2 of - corresponding NAT rule. The flow matches if destination - ip is an exempted_ext_ip and the action is next; . This - flow is used to bypass the ct_snat action for a flow + If the NAT rule has exempted_ext_ips set, then there is + an additional flow configured at the priority P + 2 of + corresponding NAT rule. The flow matches if destination + ip is an exempted_ext_ip and the action is next; . This + flow is used to bypass the ct_snat action for a flow which is destinted to exempted_ext_ips. • A priority-0 logical flow with match 1 has actions next;. @@ -3686,32 +3695,32 @@ Packets reaching this table are processed according to the flows below: - • A priority-0 logical flow that matches all packets not + • A priority-0 logical flow that matches all packets not already handled (match 1) and action next;. Egress Table 5: Egress Loopback - For distributed logical routers where one of the logical router ports + For distributed logical routers where one of the logical router ports specifies a gateway chassis. - While UNDNAT and SNAT processing have already occurred by this point, - this traffic needs to be forced through egress loopback on this dis‐ + While UNDNAT and SNAT processing have already occurred by this point, + this traffic needs to be forced through egress loopback on this dis‐ tributed gateway port instance, in order for UNSNAT and DNAT processing - to be applied, and also for IP routing and ARP resolution after all of + to be applied, and also for IP routing and ARP resolution after all of the NAT processing, so that the packet can be forwarded to the destina‐ tion. This table has the following flows: - • For each NAT rule in the OVN Northbound database on a - distributed router, a priority-100 logical flow with - match ip4.dst == E &&&& outport == GW &&&& is_chassis_resi‐‐ - dent(P), where E is the external IP address specified in - the NAT rule, GW is the distributed gateway port corre‐ - sponding to the NAT rule (specified or inferred). For - dnat_and_snat NAT rule, P is the logical port specified - in the NAT rule. If logical_port column of NAT table is - NOT set, then P is the chassisredirect port of GW with + • For each NAT rule in the OVN Northbound database on a + distributed router, a priority-100 logical flow with + match ip4.dst == E &&&& outport == GW &&&& is_chassis_resi‐‐ + dent(P), where E is the external IP address specified in + the NAT rule, GW is the distributed gateway port corre‐ + sponding to the NAT rule (specified or inferred). For + dnat_and_snat NAT rule, P is the logical port specified + in the NAT rule. If logical_port column of NAT table is + NOT set, then P is the chassisredirect port of GW with the following actions: clone { @@ -3729,9 +3738,9 @@ }; - flags.loopback is set since in_port is unchanged and the + flags.loopback is set since in_port is unchanged and the packet may return back to that port after NAT processing. - REGBIT_EGRESS_LOOPBACK is set to indicate that egress + REGBIT_EGRESS_LOOPBACK is set to indicate that egress loopback has occurred, in order to skip the source IP ad‐ dress check against the router address. @@ -3741,33 +3750,33 @@ Packets that reach this table are ready for delivery. It contains: - • Priority-110 logical flows that match IP multicast pack‐ - ets on each enabled logical router port and modify the - Ethernet source address of the packets to the Ethernet + • Priority-110 logical flows that match IP multicast pack‐ + ets on each enabled logical router port and modify the + Ethernet source address of the packets to the Ethernet address of the port and then execute action output;. • Priority-100 logical flows that match packets on each en‐ abled logical router port, with action output;. - • A priority-0 logical flow that matches all packets not + • A priority-0 logical flow that matches all packets not already handled (match 1) and drops them (action drop;). DROP SAMPLING - As described in the previous section, there are several places where + As described in the previous section, there are several places where ovn-northd might decided to drop a packet by explicitly creating a Log‐‐ ical_Flow with the drop; action. When debug drop-sampling has been cofigured in the OVN Northbound data‐ - base, the ovn-northd will replace all the drop; actions with a sam‐‐ - ple(priority=65535, collector_set=id, obs_domain=obs_id, + base, the ovn-northd will replace all the drop; actions with a sam‐‐ + ple(priority=65535, collector_set=id, obs_domain=obs_id, obs_point=@cookie) action, where: - • id is the value the debug_drop_collector_set option con‐ + • id is the value the debug_drop_collector_set option con‐ figured in the OVN Northbound. - • obs_id has it’s 8 most significant bits equal to the - value of the debug_drop_domain_id option in the OVN - Northbound and it’s 24 least significant bits equal to + • obs_id has it’s 8 most significant bits equal to the + value of the debug_drop_domain_id option in the OVN + Northbound and it’s 24 least significant bits equal to the datapath’s tunnel key. OVN 23.09.6 ovn-northd ovn-northd(8) diff --git a/src/static/support/dist-docs-branch-23.09/ovn-northd.8.pdf b/src/static/support/dist-docs-branch-23.09/ovn-northd.8.pdf index 19e890541e09abed68344e074408c05665317da6..4d04b71137990b25c29c9cb9aeea9079d2f46e35 100644 GIT binary patch delta 33672 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 z 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 delta 185 zcmX?hh~?NJmWC~iPsF*6j6)0ztPCx!jLfFL7iZK)5m1$2Jiud+Xkl(*n3|-UWN5nm zqXgq$MlB;_0|P@#BeN(219c$Mc!AZ)(b34o p#nR2(+}Om@*vZh`!r08%!qL*y)Y!np!raK&&W4bR=~{}6G5}8^E}H-V diff --git a/src/static/support/dist-docs-branch-23.09/ovn-trace.8.pdf b/src/static/support/dist-docs-branch-23.09/ovn-trace.8.pdf index c64d8e74806a7c983db57c47603d067dd91fc48e..3073901b6f7f2e09925570ac86e08b84ec7e98f2 100644 GIT binary patch delta 178 zcmZ3sjd|HN<_#>Dxs44%3=FJ{46IBICi7p`M&Y|&KEPvUYMz{yWRa|!WR|j7@XB9C zEn@=%10w@dgD3+7bs*B@()Z0zaY-ym)o=ltV`O4r2~)Az;@SijCnHlQHzN}h6Bi>h iH%CWPXLD0WGb0NVH%C`<14BzkLpvKnDkgK?mH_~|fG^Sj delta 178 zcmZ3sjd|HN<_#>Dxs8lN3=FIcEv<~qCi7p`M&Y|&KEPv;Xkl(*n3|-UWN5ls@XB9C zEhA$C14BzAvnT@tbs*B@()Z0zaY-ym)o`&gGB7eRu!O1DY;kP@i<6V7xwEOcp{b>d jiJ^Ar+IkZp#1wp=&SJ