From 58f62806db4c48090b9458c086425799eb00f2e3 Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 30 Sep 2024 00:22:43 +0000 Subject: [PATCH] Update OVN branch-24.03 manpages --- .../dist-docs-branch-24.03/ovn-appctl.8.pdf | Bin 29588 -> 29588 bytes .../ovn-architecture.7.pdf | Bin 136125 -> 136125 bytes .../ovn-controller-vtep.8.pdf | Bin 25731 -> 25731 bytes .../ovn-controller.8.pdf | Bin 60902 -> 60902 bytes .../dist-docs-branch-24.03/ovn-ctl.8.pdf | Bin 32346 -> 32346 bytes .../dist-docs-branch-24.03/ovn-debug.8.pdf | Bin 16477 -> 16477 bytes .../dist-docs-branch-24.03/ovn-detrace.1.pdf | Bin 21813 -> 21813 bytes .../dist-docs-branch-24.03/ovn-ic-nb.5.pdf | Bin 39132 -> 39132 bytes .../dist-docs-branch-24.03/ovn-ic-nbctl.8.pdf | Bin 55426 -> 55426 bytes .../dist-docs-branch-24.03/ovn-ic-sb.5.pdf | Bin 52644 -> 52644 bytes .../dist-docs-branch-24.03/ovn-ic-sbctl.8.pdf | Bin 53098 -> 53098 bytes .../dist-docs-branch-24.03/ovn-ic.8.pdf | Bin 38643 -> 38643 bytes .../dist-docs-branch-24.03/ovn-nb.5.pdf | Bin 217726 -> 217726 bytes .../dist-docs-branch-24.03/ovn-nbctl.8.pdf | Bin 111692 -> 111692 bytes .../dist-docs-branch-24.03/ovn-northd.8 | 18 +- .../dist-docs-branch-24.03/ovn-northd.8.html | 569 +++++++++--------- .../dist-docs-branch-24.03/ovn-northd.8.pdf | Bin 197955 -> 198153 bytes .../dist-docs-branch-24.03/ovn-northd.8.txt | 569 +++++++++--------- .../dist-docs-branch-24.03/ovn-sb.5.pdf | Bin 210049 -> 210049 bytes .../dist-docs-branch-24.03/ovn-sbctl.8.pdf | Bin 74054 -> 74054 bytes .../dist-docs-branch-24.03/ovn-trace.8.pdf | Bin 56101 -> 56101 bytes 21 files changed, 595 insertions(+), 561 deletions(-) diff --git a/src/static/support/dist-docs-branch-24.03/ovn-appctl.8.pdf b/src/static/support/dist-docs-branch-24.03/ovn-appctl.8.pdf index 00a22a9aca233322e853b20ec158a8a169979fc9..7af66e95c12b62f1ca4fcbc14ec9abcc83131ad9 100644 GIT binary patch delta 178 zcmbR8oN>x?#tmt?+{OkW1_o9}Mpnk=lM8dTQTWSq5AYHwanWbzl&il)# zWo%$zU}R)$9%W#l4n&$<`o8%oE{P?n8ZK5w21X_ZmM|5YXBEt0ax?#tmt?+(yPB1_o9}hE|3qlM8dTQTWSq5Ac{IrkW+Cr6%hp8Jcb`&il)# zWn^q%U}R`$5@leZ4n&$<`o8%oE{P?n8ZK5w21X_ZmM|5YXBEt0axykBHZ^xOH8D1K ib~ds!baZwzFfn#9G&3@^FmSbWHnX!Kq+)VKu?zs`886xZ diff --git a/src/static/support/dist-docs-branch-24.03/ovn-architecture.7.pdf b/src/static/support/dist-docs-branch-24.03/ovn-architecture.7.pdf index b83c1592e7a5a0950a78ab5b295b2409810fa6f5..ea4ae94b14a9749984ac2049ca0ca23cdad2fbbc 100644 GIT binary patch delta 187 zcmdnHoMZ2Dj)oS-Eldrp+{OkW1_o9}Mpnia)4N%jv{3{OvN9duNiW- z+1|^>^p{b~*ucQR$jI0t%D_M!h%~wMee+XX5=&AwT&#=?j7$tHVJfz7;b2||#{NX7I8!c4LNNh&WL delta 187 zcmdnHoMZ2Dj)oS-Eldrp+(yPB1_o9}hE|3q)4N%jv{3{OvN9duF-c4{OG-;k)=e@r z-QLT_^p{b~$k@QZ$k5Ov%D_M!h%~wMee+XX5=&AwT&#=?j7$tHVJfz7;b2T2oiWNvI^?Be3&;%08>YGP#JY+`ER>}u+2U}|SWNX7I8!c4LNZ`v>F diff --git a/src/static/support/dist-docs-branch-24.03/ovn-controller-vtep.8.pdf b/src/static/support/dist-docs-branch-24.03/ovn-controller-vtep.8.pdf index 07cc8265d78ca5ff7a0c67fdb802ab928bbaea19..be199ff2a688d67cc7a245d3d860012f4731041d 100644 GIT binary patch delta 202 zcmZoZ$=H07al^zoZexQG0|P4~BP(Nz$#degQTUhQ4)7$JrX-tNTBPVEnWb!=7yp-0 z%h|$nWZsF$a=wxYZ?&$33VrXhU00XZqod5s; delta 157 zcmcchhw;`Q#tjwa+(yPB1_o9}hE|5Albg%6QTRK{5Ac{InWveWnI-Ec8Jccxt@z8x zVPtGzU}OkX-c=<9=WJe66~OFd;%w+<>f-9`Z0uy@>?qca?WNPH-;^=H= LLrBGByE+*F(&sEo diff --git a/src/static/support/dist-docs-branch-24.03/ovn-debug.8.pdf b/src/static/support/dist-docs-branch-24.03/ovn-debug.8.pdf index fbf4143b298586e55172e796908ca916c9f607d5..e08a7b6b089b968a5f03ac87e9d7f8b0fedd3491 100644 GIT binary patch delta 157 zcmccHz<9TTal?5lZexQG0|P4~BP(Nz$+xVuQTPJZ2Y3=qQ(8b)+!qUmf)WzA^)y>Jp#M08t M&W4bR$&L;(011C8>;M1& diff --git a/src/static/support/dist-docs-branch-24.03/ovn-detrace.1.pdf b/src/static/support/dist-docs-branch-24.03/ovn-detrace.1.pdf index d416719e0b75280a79ca35f6e623a805b97c0089..8e28a9370f4982aa73bc669d99ca5146d12f3b76 100644 GIT binary patch delta 178 zcmdnGigD{I#tqK?+{OkW1_o9}Mpniall}a)QTQ$X2Y3?A%uNjq3{rHH%u+T71pH;x zGBz+UFfuZ>h%zux2O>=_ec${Pm&B4(4HqjT10xdyOPGqy~mL_h7 i#+F7-E{2BYMrKCNuBN62md>UYZgw_=R7{o(l>q?8=q*A3 delta 178 zcmdnGigD{I#tqK?+(yPB1_o9}hE|5All}a)QTQ$X2Y5`9%+pNG%#wAJ3{5u&1pH;x zGBP$WFfueWjWRG$2O>=_ec${Pm&B4(4HqjT10xdyOPGqyImIf9^PEJma i#^z?Gj;3y==4R%`7UpKICXUWdPIfkgR7{o(l>q?Q?JcOiE)rSF@c;*waBs^MZ~WME`sUOiE)rSF@c;*waBs^MZ~WME`sUfsv81Wt4$|IuL1c>HFrVxFnXOYPeV#85o%uSi)3no^p8tOPrarxq*?fiJ_UB zv8k)EtEH)_v4xAVv$>0jo12-li;JBNK^3uFc6MCFC5c5P6-B9OT&5;QhDKbfs;>TS FTmUXYHuC@g delta 202 zcmZqL$lSD%c|*blZX@Fm0|P4~Ln}km$=MgQQTPil9N;lYGEXx#GfUP@GBn+sd+{%$ zmXWc6fsvu1X_SG1IuL1c>HFrVxFnXOYPeV#85o%uSi)3no^p8tOPrgFv7@Dtk%^p^K@7siCQ>tAT-~nVFppK^3uFc6MCFC5c5P6-B9OT&5;QhDKbfs;>TS FTmU`qHv|9x diff --git a/src/static/support/dist-docs-branch-24.03/ovn-ic-sb.5.pdf b/src/static/support/dist-docs-branch-24.03/ovn-ic-sb.5.pdf index 725c95fbe047b49f760b75fdfea7c381f7548555..ee3b3eb496c5f3f40e12cd73a2349784ddba6e1c 100644 GIT binary patch delta 157 zcmZ27n|aA><_%IuxQz`$3=FJ{jI4|;C#xROM&U;vIlz->W^QU|V34AlWR|j7{pept z4r2oY10y4#a-HK+aL#7G<3CuP99@h|%}fm}98F!_oJ=i@j2%r(OdK68%*~99EDhZp N?Q96CnA~wz1^^G%D|Y|@ delta 157 zcmZ27n|aA><_%IuxQ&cM3=FJ{46O`JC#xROM&U;vIlyC*WS(YfW|pj*WN5ls{pept z4kKd&10zGAa-HK+aL#7G<3CuPObty<3|(DJ%}tGfdfY6H3=PZ-ObyJOO^wWr9nB2v MYzV2C+;LV00P!FyssI20 diff --git a/src/static/support/dist-docs-branch-24.03/ovn-ic-sbctl.8.pdf b/src/static/support/dist-docs-branch-24.03/ovn-ic-sbctl.8.pdf index 32df0d522faf532efb1f80404a2386ef4028e422..89b6b492a823975f286a575f76b08e8509e69312 100644 GIT binary patch delta 157 zcmaDgkNMR+<_$BBa~m6k7#LU?8Ce-yPF{Rm8-;)K_yL|oGjmfz1A`RZB(s#wOHce| zsNDft#g~iMg|>ld-Fj Oi=7Q26_fqW%K!k704{R? diff --git a/src/static/support/dist-docs-branch-24.03/ovn-ic.8.pdf b/src/static/support/dist-docs-branch-24.03/ovn-ic.8.pdf index a0214762ba422aa326af711c3d358e1d03de4ab2..8d2113a3db652e60065d7ce67b82c480003a722d 100644 GIT binary patch delta 202 zcmeyomg)0arVWA^eDsInL4C$=KM~(9GG* z&Dhz+(#6rp*xc02#KO(k#lXqY*wW61po&;7J3Fr8lEk8tilWpsE@N|Z6H6{tRabvE FE&vl`G|>P6 delta 202 zcmeyomg)0arVWA^eDsInLR@!pYFs(ZtZ) z+||^@z|7Lc*xcF0#Kg(i)Y;h5)YZ<0po&;7J3Fr8lEk8tilWpsE@N|Z6H6{tRabvE FE&w*DH0S^T diff --git a/src/static/support/dist-docs-branch-24.03/ovn-nb.5.pdf b/src/static/support/dist-docs-branch-24.03/ovn-nb.5.pdf index 894aa65e3b6212737cb4eddce6c0e79e7b1f9a63..64d86021e7763ba1d85d7cd5141b5e3b722d6e6b 100644 GIT binary patch delta 189 zcmeyjg!kVP-i8*&7N#xCjb_}&1|bFpRz^lv#+K82%$T)N1P+-oAK*zeGdDFfFi6o& zGE3RsXU_bWQOnrCz`)4J*fPq%KpluQx%7SWQ(O{DQZ-zxj0}uS3@l+Pwr{m$&XRC4 ta5gnJu`n<-G&MGKF|{x^G%|CtFfem+Gj?;dFgI|svmvBndSVc>EC5O0Fp2;G delta 189 zcmeyjg!kVP-i8*&7N#xCjb_|N#vujEC7uvF<$@x diff --git a/src/static/support/dist-docs-branch-24.03/ovn-nbctl.8.pdf b/src/static/support/dist-docs-branch-24.03/ovn-nbctl.8.pdf index 4f926f462d0fac7afec554c062fde202971bd8d1..7e42c786cd37b8ad6b309c9ed8363cab876e1bf7 100644 GIT binary patch delta 185 zcmX@}g6+%;wuUW?$Cq;(8-y4bSQ!~vnHWsJw46~JMSx=k;{l#TbAyybGm8}6B(s$5 zS5`3oWz;e@FfcGOGBJoUFi-~~O)h=k{1lhOl2i>BD*$`4OU4ILsEC5BFGn4=T delta 185 zcmX@}g6+%;wuUW?$Cq;(8HX4cSQ!~w8JbPMw46~JMSx=k;{hI%WJB}RBD>of=e diff --git a/src/static/support/dist-docs-branch-24.03/ovn-northd.8 b/src/static/support/dist-docs-branch-24.03/ovn-northd.8 index 013cd55d..4acc7775 100644 --- a/src/static/support/dist-docs-branch-24.03/ovn-northd.8 +++ b/src/static/support/dist-docs-branch-24.03/ovn-northd.8 @@ -2250,7 +2250,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-24.03/ovn-northd.8.html b/src/static/support/dist-docs-branch-24.03/ovn-northd.8.html index 836bd85a..623cbb8e 100644 --- a/src/static/support/dist-docs-branch-24.03/ovn-northd.8.html +++ b/src/static/support/dist-docs-branch-24.03/ovn-northd.8.html @@ -3031,35 +3031,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: @@ -3069,35 +3078,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; @@ -3108,30 +3117,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; @@ -3141,154 +3150,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; @@ -3299,20 +3308,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 { @@ -3341,66 +3350,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. @@ -3408,8 +3417,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 @@ -3425,10 +3434,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 { @@ -3440,7 +3449,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 @@ -3453,11 +3462,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‐ @@ -3465,20 +3474,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;. @@ -3488,177 +3497,177 @@ • 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-70 logical flow is added that initiates CT + • A priority-70 logical flow is added that initiates CT state for traffic that is configured to be SNATed on Dis‐ tributed routers. This allows the next table, lr_out_snat, to effectively match on various CT states. - • 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. - • An additional flow is added for traffic that goes in op‐ - posite direction (i.e. it enters a network with config‐ - ured SNAT). Where the flow above matched on ip4.src == A - &&&& outport == GW, this flow matches on ip4.dst == A &&&& + • An additional flow is added for traffic that goes in op‐ + posite direction (i.e. it enters a network with config‐ + ured SNAT). Where the flow above matched on ip4.src == A + &&&& outport == GW, this flow matches on ip4.dst == A &&&& inport == GW. A CT state is initiated for this traffic so - that the following table, lr_out_post_snat, can identify - whether the traffic flow was initiated from the internal + that the following table, lr_out_post_snat, can identify + whether the traffic flow was initiated from the internal or external network. • A priority-0 logical flow with match 1 has actions next;. @@ -3668,40 +3677,40 @@ Packets reaching this table are processed according to the flows below: • Traffic that goes directly into a network configured with - SNAT on Distributed routers, and was initiated from an - external network (i.e. it matches ct.new), is committed - to the SNAT CT zone. This ensures that replies returning - from the SNATed network do not have their source address - translated. For details about match rules and priority - see section "Egress Table 3: SNAT on Distributed + SNAT on Distributed routers, and was initiated from an + external network (i.e. it matches ct.new), is committed + to the SNAT CT zone. This ensures that replies returning + from the SNATed network do not have their source address + translated. For details about match rules and priority + see section "Egress Table 3: SNAT on Distributed Routers". - • 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 { @@ -3719,9 +3728,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. @@ -3731,33 +3740,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 24.03.4 ovn-northd ovn-northd(8) diff --git a/src/static/support/dist-docs-branch-24.03/ovn-northd.8.pdf b/src/static/support/dist-docs-branch-24.03/ovn-northd.8.pdf index d8b53f7fb629b71cf83a1a29053a23b1bd21ccdf..f26df7fbfeb47522b521ccbb2be7bf3b5551349d 100644 GIT binary patch delta 37100 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 Imy6MV0VWKf(EtDd delta 37180 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 QU~Fz`#HFh0>hHz{0JuRmApigX delta 213 zcmZpC$8HGDK3d6sTwX;Mg~SE29_`t+jmGaXGz2x zxSE=|SXdYsS{k_;I~o}qo4L9e8yYzoyBL_6m^wMz*$`9_%VlTBRa}x-R8motn#N^h QU~Fz`#HFh0>hHz{0E$C3-T(jq diff --git a/src/static/support/dist-docs-branch-24.03/ovn-sbctl.8.pdf b/src/static/support/dist-docs-branch-24.03/ovn-sbctl.8.pdf index 1b8de849adc62bc7cac0fd60456dfdf0220337db..da207026cfaee7d70c46ef11f7c2fc10fa3adbfb 100644 GIT binary patch delta 185 zcmX?hh~?NJmWC~iPsF*64MGeItc;ATOpK<#7iZK)5m1$2JiwD^VVs&`Y>}dyWR|l1 zqXgq$MlE9l0|O%?6Qd{t19c$Mc!AZ)$iU3l p(#_c1(ZI>b$jQvv*vZk!$jQXS#nsZ-)Y#R)&W4bR=~{}6G5~Y7FBJd) delta 185 zcmX?hh~?NJmWC~iPsF*6j6)0ztc(n;3@xU=7iZK)5m1$2Jiud;Vq$4%nVPJdWN5nm zqXgq$MlB;_0|O&NLyIT_19c$Mc!AZ)%-F!q p$im3Y($K}i)Wpo()y=@z$-vdn+0x9|($Un>&W4bR=~{}6G5|;uF1!E$ diff --git a/src/static/support/dist-docs-branch-24.03/ovn-trace.8.pdf b/src/static/support/dist-docs-branch-24.03/ovn-trace.8.pdf index 58205c541cf3c6a8b36a8e45799d6c398abb7f1d..2c77e2ac8e08d0d2d92ded68b8d38a134bc321e8 100644 GIT binary patch delta 178 zcmZ3wjd|%d<_*l3xs44%3=FJ{jI2zICi7j^M&Y|$KERV`VVs&`Y>}dyWR|j7;L2Y{ zEn@=%10y37qbLIdbs*B@()Z0zaY-ym)o`&gGB7eRu!O1DY<_J5i<7aVv$2tzsim8l jp_8$Nk(-mTv#XnnnX{vtrHh%Po2i`*Ar+H3Z_5Ax(c&