Makes sense, but Numan is right https://github.com/openvswitch/ovs/blob/master/ovn/ovn-sb.ovsschema#L64
On Mon, May 15, 2017 at 12:07 PM, Numan Siddique <[email protected]> wrote: > On Fri, May 12, 2017 at 12:06 AM, Mickey Spiegel <[email protected]> > wrote: > > > The OVN ingress pipeline for a logical switch is maxed out at 16 stages. > > > > This patch takes the simple approach of starting the ingress pipeline at > > table 8 rather than table 16, and starting the egress pipeline at > > table 40 rather than table 48. > > > > > You also need to increase the range of the Logical_Flow.table_id column in > south bound db [1]. > The present range is 0 to 15. > > [1]- https://github.com/openvswitch/ovs/blob/master/ > ovn/ovn-sb.ovsschema#L66 > > > Numan > > > Signed-off-by: Mickey Spiegel <[email protected]> > > --- > > ovn/controller/lflow.h | 6 +++--- > > ovn/ovn-architecture.7.xml | 27 ++++++++++++++------------- > > ovn/utilities/ovn-trace.c | 2 +- > > tests/ovn.at | 40 ++++++++++++++++++++---------- > ---------- > > tests/test-ovn.c | 6 +++--- > > 5 files changed, 41 insertions(+), 40 deletions(-) > > > > diff --git a/ovn/controller/lflow.h b/ovn/controller/lflow.h > > index 8761b1e..a23cde0 100644 > > --- a/ovn/controller/lflow.h > > +++ b/ovn/controller/lflow.h > > @@ -49,17 +49,17 @@ struct uuid; > > * These are heavily documented in ovn-architecture(7), please update it > > if > > * you make any changes. */ > > #define OFTABLE_PHY_TO_LOG 0 > > -#define OFTABLE_LOG_INGRESS_PIPELINE 16 /* First of LOG_PIPELINE_LEN > > tables. */ > > +#define OFTABLE_LOG_INGRESS_PIPELINE 8 /* First of LOG_PIPELINE_LEN > > tables. */ > > #define OFTABLE_REMOTE_OUTPUT 32 > > #define OFTABLE_LOCAL_OUTPUT 33 > > #define OFTABLE_CHECK_LOOPBACK 34 > > -#define OFTABLE_LOG_EGRESS_PIPELINE 48 /* First of LOG_PIPELINE_LEN > > tables. */ > > +#define OFTABLE_LOG_EGRESS_PIPELINE 40 /* First of LOG_PIPELINE_LEN > > tables. */ > > #define OFTABLE_SAVE_INPORT 64 > > #define OFTABLE_LOG_TO_PHY 65 > > #define OFTABLE_MAC_BINDING 66 > > > > /* The number of tables for the ingress and egress pipelines. */ > > -#define LOG_PIPELINE_LEN 16 > > +#define LOG_PIPELINE_LEN 24 > > > > void lflow_init(void); > > void lflow_run(struct controller_ctx *, > > diff --git a/ovn/ovn-architecture.7.xml b/ovn/ovn-architecture.7.xml > > index d8114f1..eb6744b 100644 > > --- a/ovn/ovn-architecture.7.xml > > +++ b/ovn/ovn-architecture.7.xml > > @@ -774,7 +774,7 @@ > > VXLAN tunnels do not transmit the logical output port field. > > Since VXLAN tunnels do not carry a logical output port field in > > the tunnel key, when a packet is received from VXLAN tunnel by > > - an OVN hypervisor, the packet is resubmitted to table 16 to > > + an OVN hypervisor, the packet is resubmitted to table 8 to > > determine the output port(s); when the packet reaches table 32, > > these packets are resubmitted to table 33 for local delivery by > > checking a MLF_RCV_FROM_VXLAN flag, which is set when the packet > > @@ -835,7 +835,7 @@ > > the packet's ingress port. Its actions annotate the packet with > > logical metadata, by setting the logical datapath field to > > identify the > > logical datapath that the packet is traversing and the logical > > input > > - port field to identify the ingress port. Then it resubmits to > > table 16 > > + port field to identify the ingress port. Then it resubmits to > > table 8 > > to enter the logical ingress pipeline. > > </p> > > > > @@ -864,13 +864,13 @@ > > > > <li> > > <p> > > - OpenFlow tables 16 through 31 execute the logical ingress > > pipeline from > > + OpenFlow tables 8 through 31 execute the logical ingress > pipeline > > from > > the <code>Logical_Flow</code> table in the OVN Southbound > > database. > > These tables are expressed entirely in terms of logical concepts > > like > > logical ports and logical datapaths. A big part of > > <code>ovn-controller</code>'s job is to translate them into > > equivalent > > OpenFlow (in particular it translates the table numbers: > > - <code>Logical_Flow</code> tables 0 through 15 become OpenFlow > > tables 16 > > + <code>Logical_Flow</code> tables 0 through 23 become OpenFlow > > tables 8 > > through 31). > > </p> > > > > @@ -999,7 +999,7 @@ > > and resubmit these packets to table 33 for local delivery. > Packets > > received from VXLAN tunnels reach here because of a lack of > > logical > > output port field in the tunnel key and thus these packets > needed > > to > > - be submitted to table 16 to determine the output port. > > + be submitted to table 8 to determine the output port. > > </p> > > > > <p> > > @@ -1024,13 +1024,13 @@ > > <p> > > Table 34 matches and drops packets for which the logical input > and > > output ports are the same and the MLF_ALLOW_LOOPBACK flag is not > > - set. It resubmits other packets to table 48. > > + set. It resubmits other packets to table 40. > > </p> > > </li> > > > > <li> > > <p> > > - OpenFlow tables 48 through 63 execute the logical egress > pipeline > > from > > + OpenFlow tables 40 through 63 execute the logical egress > pipeline > > from > > the <code>Logical_Flow</code> table in the OVN Southbound > > database. > > The egress pipeline can perform a final stage of validation > before > > packet delivery. Eventually, it may execute an > > <code>output</code> > > @@ -1110,27 +1110,28 @@ > > > > <li> > > In OVS versions 2.7 and later, the packet is cloned and > resubmitted > > - directly to OpenFlow flow table 16, setting the logical ingress > > - port to the peer logical patch port, and using the peer logical > > - patch port's logical datapath (that represents the logical > router). > > + directly to the first OpenFlow flow table in the ingress pipeline, > > + setting the logical ingress port to the peer logical patch port, > and > > + using the peer logical patch port's logical datapath (that > > + represents the logical router). > > </li> > > </ul> > > > > <p> > > The packet re-enters the ingress pipeline in order to traverse > tables > > - 16 to 65 again, this time using the logical datapath representing > the > > + 8 to 65 again, this time using the logical datapath representing the > > logical router. The processing continues as described in the > previous > > section <code>Architectural Physical Life Cycle of a Packet</code>. > > When the packet reachs table 65, the logical egress port will once > > again be a logical patch port. In the same manner as described > above, > > this logical patch port will cause the packet to be resubmitted to > > - OpenFlow tables 16 to 65, this time using the logical datapath > > + OpenFlow tables 8 to 65, this time using the logical datapath > > representing the logical switch that the destination VM or container > > is attached to. > > </p> > > > > <p> > > - The packet traverses tables 16 to 65 a third and final time. If the > > + The packet traverses tables 8 to 65 a third and final time. If the > > destination VM or container resides on a remote hypervisor, then > table > > 32 will send the packet on a tunnel port from the sender's > hypervisor > > to the remote hypervisor. Finally table 65 will output the packet > > diff --git a/ovn/utilities/ovn-trace.c b/ovn/utilities/ovn-trace.c > > index a9970af..149f70d 100644 > > --- a/ovn/utilities/ovn-trace.c > > +++ b/ovn/utilities/ovn-trace.c > > @@ -826,7 +826,7 @@ read_flows(void) > > .pipeline = (!strcmp(sblf->pipeline, "ingress") > > ? OVNACT_P_INGRESS > > : OVNACT_P_EGRESS), > > - .n_tables = 16, > > + .n_tables = 24, > > .cur_ltable = sblf->table_id, > > }; > > uint64_t stub[1024 / 8]; > > diff --git a/tests/ovn.at b/tests/ovn.at > > index b30315e..61661c3 100644 > > --- a/tests/ovn.at > > +++ b/tests/ovn.at > > @@ -643,41 +643,41 @@ output; > > > > # next > > next; > > - encodes as resubmit(,27) > > + encodes as resubmit(,19) > > next(11); > > formats as next; > > - encodes as resubmit(,27) > > + encodes as resubmit(,19) > > next(0); > > - encodes as resubmit(,16) > > -next(15); > > + encodes as resubmit(,8) > > +next(23); > > encodes as resubmit(,31) > > > > next(); > > Syntax error at `)' expecting "pipeline" or "table". > > next(10; > > Syntax error at `;' expecting `)'. > > -next(16); > > - "next" action cannot advance beyond table 15. > > +next(24); > > + "next" action cannot advance beyond table 23. > > > > next(table=11); > > formats as next; > > - encodes as resubmit(,27) > > + encodes as resubmit(,19) > > next(pipeline=ingress); > > formats as next; > > - encodes as resubmit(,27) > > + encodes as resubmit(,19) > > next(table=11, pipeline=ingress); > > formats as next; > > - encodes as resubmit(,27) > > + encodes as resubmit(,19) > > next(pipeline=ingress, table=11); > > formats as next; > > - encodes as resubmit(,27) > > + encodes as resubmit(,19) > > > > next(pipeline=egress); > > "next" action cannot advance from ingress to egress pipeline (use > > "output" action instead) > > > > next(table=10); > > formats as next(10); > > - encodes as resubmit(,26) > > + encodes as resubmit(,18) > > > > # Loading a constant value. > > tcp.dst=80; > > @@ -699,7 +699,7 @@ ip.ttl=4; > > has prereqs eth.type == 0x800 || eth.type == 0x86dd > > outport="eth0"; next; outport="LOCAL"; next; > > formats as outport = "eth0"; next; outport = "LOCAL"; next; > > - encodes as set_field:0x5->reg15,resubmit( > > ,27),set_field:0xfffe->reg15,resubmit(,27) > > + encodes as set_field:0x5->reg15,resubmit( > > ,19),set_field:0xfffe->reg15,resubmit(,19) > > > > inport[1] = 1; > > Cannot select subfield of string field inport. > > @@ -780,11 +780,11 @@ ip.ttl > > > > # load balancing. > > ct_lb; > > - encodes as ct(table=27,zone=NXM_NX_REG13[0..15],nat) > > + encodes as ct(table=19,zone=NXM_NX_REG13[0..15],nat) > > has prereqs ip > > ct_lb(); > > formats as ct_lb; > > - encodes as ct(table=27,zone=NXM_NX_REG13[0..15],nat) > > + encodes as ct(table=19,zone=NXM_NX_REG13[0..15],nat) > > has prereqs ip > > ct_lb(192.168.1.2:80, 192.168.1.3:80); > > encodes as group:1 > > @@ -803,7 +803,7 @@ ct_lb(foo); > > > > # ct_next > > ct_next; > > - encodes as ct(table=27,zone=NXM_NX_REG13[0..15]) > > + encodes as ct(table=19,zone=NXM_NX_REG13[0..15]) > > has prereqs ip > > > > # ct_commit > > @@ -855,10 +855,10 @@ ct_commit(ct_label=18446744073709551616); > > > > # ct_dnat > > ct_dnat; > > - encodes as ct(table=27,zone=NXM_NX_REG11[0..15],nat) > > + encodes as ct(table=19,zone=NXM_NX_REG11[0..15],nat) > > has prereqs ip > > ct_dnat(192.168.1.2); > > - encodes as ct(commit,table=27,zone=NXM_NX_REG11[0..15],nat(dst=192. > > 168.1.2)) > > + encodes as ct(commit,table=19,zone=NXM_NX_REG11[0..15],nat(dst=192. > > 168.1.2)) > > has prereqs ip > > > > ct_dnat(192.168.1.2, 192.168.1.3); > > @@ -872,10 +872,10 @@ ct_dnat(); > > > > # ct_snat > > ct_snat; > > - encodes as ct(table=27,zone=NXM_NX_REG12[0..15],nat) > > + encodes as ct(table=19,zone=NXM_NX_REG12[0..15],nat) > > has prereqs ip > > ct_snat(192.168.1.2); > > - encodes as ct(commit,table=27,zone=NXM_NX_REG12[0..15],nat(src=192. > > 168.1.2)) > > + encodes as ct(commit,table=19,zone=NXM_NX_REG12[0..15],nat(src=192. > > 168.1.2)) > > has prereqs ip > > > > ct_snat(192.168.1.2, 192.168.1.3); > > @@ -893,7 +893,7 @@ ct_clear; > > > > # clone > > clone { ip4.dst = 255.255.255.255; output; }; next; > > - encodes as clone(set_field:255.255.255.255->ip_dst,resubmit(,64)), > > resubmit(,27) > > + encodes as clone(set_field:255.255.255.255->ip_dst,resubmit(,64)), > > resubmit(,19) > > has prereqs eth.type == 0x800 > > > > # arp > > diff --git a/tests/test-ovn.c b/tests/test-ovn.c > > index 18860ae..32efac4 100644 > > --- a/tests/test-ovn.c > > +++ b/tests/test-ovn.c > > @@ -1224,7 +1224,7 @@ test_parse_actions(struct ovs_cmdl_context *ctx > > OVS_UNUSED) > > .symtab = &symtab, > > .dhcp_opts = &dhcp_opts, > > .dhcpv6_opts = &dhcpv6_opts, > > - .n_tables = 16, > > + .n_tables = 24, > > .cur_ltable = 10, > > }; > > error = ovnacts_parse_string(ds_cstr(&input), &pp, &ovnacts, > > &prereqs); > > @@ -1245,8 +1245,8 @@ test_parse_actions(struct ovs_cmdl_context *ctx > > OVS_UNUSED) > > .group_table = &group_table, > > > > .pipeline = OVNACT_P_INGRESS, > > - .ingress_ptable = 16, > > - .egress_ptable = 48, > > + .ingress_ptable = 8, > > + .egress_ptable = 40, > > .output_ptable = 64, > > .mac_bind_ptable = 65, > > }; > > -- > > 1.9.1 > > > > _______________________________________________ > > dev mailing list > > [email protected] > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > > _______________________________________________ > dev mailing list > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
