On Thu, Dec 05, 2024 at 02:08:37PM +0100, [email protected] wrote:
> Hi Felix and Dumitru,
> Thanks for posting this standalone change Felix. I'm going to take it
> for a spin and try to integrate it to Frode's original "route leaking"
> RFC.
> I have one question/suggestion for the schema that I'll leave below.
>
> On Thu, 2024-12-05 at 14:00 +0100, Felix Huettner via dev wrote:
> > The Route table will be used in the future to coordinate routing
> > information between northd and ovn-controller.
> > Northd will insert routes that should be advertised to the outside
> > fabric.
> > Ovn-controller will insert routes that have been learned from the
> > outside fabric.
> >
> > Signed-off-by: Felix Huettner <[email protected]>
> > ---
> > v2->v3:
> > * refType is now strong
> > * fixed typos
> >
> >
> > ovn-sb.ovsschema | 29 ++++++++++++++++--
> > ovn-sb.xml | 80
> > ++++++++++++++++++++++++++++++++++++++++++++++++
> > 2 files changed, 107 insertions(+), 2 deletions(-)
> >
> > diff --git a/ovn-sb.ovsschema b/ovn-sb.ovsschema
> > index 73abf2c8d..88763f429 100644
> > --- a/ovn-sb.ovsschema
> > +++ b/ovn-sb.ovsschema
> > @@ -1,7 +1,7 @@
> > {
> > "name": "OVN_Southbound",
> > - "version": "20.37.0",
> > - "cksum": "1950136776 31493",
> > + "version": "20.38.0",
> > + "cksum": "1392903395 32893",
> > "tables": {
> > "SB_Global": {
> > "columns": {
> > @@ -617,6 +617,31 @@
> > "type": {"key": "string", "value": "string",
> > "min": 0, "max": "unlimited"}}},
> > "indexes": [["chassis"]],
> > + "isRoot": true},
> > + "Route": {
> > + "columns": {
> > + "datapath":
> > + {"type": {"key": {"type": "uuid",
> > + "refTable":
> > "Datapath_Binding"}}},
> > + "logical_port": {"type": {"key": {"type": "uuid",
> > + "refTable":
> > "Port_Binding",
> > + "refType":
> > "strong"}}},
> > + "ip_prefix": {"type": "string"},
> > + "nexthop": {"type": "string"},
> > + "tracked_port": {"type": {"key": {"type": "uuid",
> > + "refTable":
> > "Port_Binding",
> > + "refType":
> > "strong"},
> > + "min": 0,
> > + "max": 1}},
> > + "type": {"type": {"key": {"type": "string",
> > + "enum": ["set",
> > ["advertise",
> > +
> > "receive"]]},
> > + "min": 1, "max": 1}},
>
> I wonder if this field is necessary. We could use presence or absence
> of "nexthop" value to determine whether the route is being learned or
> advertised. I'm not sure if ovsdb is doing something clever with enums
> or stores them as raw values in each row, but removing this could save
> us some space. What do you think?
Hi Martin,
i think generally we could use the information in the "nexthop" column
for this. However i would find this rather surprising if i am not deeply
in the implementation. For debugging at least it is not obvious.
I am not sure how much space saving we would get out of this, but i
don't think that it is worth the cost of less debuggability. Especially
since each learned/announced route will cause additionally once or
multiple logical flows to be created which are significantly larger than
this type field.
But i am open to other opinions as well.
Thanks a lot
Felix
>
> Martin.
>
> > + "external_ids": {
> > + "type": {"key": "string", "value": "string",
> > + "min": 0, "max": "unlimited"}}},
> > + "indexes": [["datapath", "logical_port", "ip_prefix",
> > "nexthop",
> > + "type"]],
> > "isRoot": true}
> > }
> > }
> > diff --git a/ovn-sb.xml b/ovn-sb.xml
> > index ea4adc1c3..e435cf243 100644
> > --- a/ovn-sb.xml
> > +++ b/ovn-sb.xml
> > @@ -5217,4 +5217,84 @@ tcp.flags = RST;
> > The set of variable values for a given chassis.
> > </column>
> > </table>
> > +
> > + <table name="Route">
> > + <p>
> > + Each record represents a route that is exported from ovn or
> > imported to
> > + ovn using some dynamic routing logic outside of ovn.
> > + It is populated on the one hand by <code>ovn-northd</code>
> > based on the
> > + addresses, routes and NAT Entries of a
> > + <code>OVN_Northbound.Logical_Router_Port</code>.
> > + On the other hand <code>ovn-controller</code> populates it
> > with routes
> > + learned from outside of OVN.
> > + </p>
> > +
> > + <column name="datapath">
> > + The datapath belonging to the
> > + <code>OVN_Northbound.Logical_Router</code> that this route is
> > valid
> > + for.
> > + </column>
> > +
> > + <column name="logical_port">
> > + <p>
> > + If the type is <code>advertise</code> then this is the
> > logical_port
> > + the router will send packets out.
> > + </p>
> > +
> > + <p>
> > + If the type is <code>receive</code> then this is the
> > logical_port
> > + the route was learned on.
> > + </p>
> > + </column>
> > +
> > + <column name="ip_prefix">
> > + <p>
> > + IP prefix of this route (e.g. 192.168.100.0/24).
> > + </p>
> > + </column>
> > +
> > + <column name="nexthop">
> > + <p>
> > + If the type is <code>advertise</code> then this is empty.
> > + </p>
> > +
> > + <p>
> > + If the type is <code>receive</code> then this is the nexthop
> > ip we
> > + from the outside.
> > + </p>
> > + </column>
> > +
> > + <column name="tracked_port">
> > + <p>
> > + Only relevant for type <code>advertise</code>.
> > +
> > + In combination with a host <code>ip_prefix</code> this
> > tracks the port
> > + OVN will forward the packets for this destination to.
> > +
> > + An announcing chassis can use this information to check if
> > this
> > + destination is local and adjust the route priorities based
> > on that.
> > + </p>
> > + </column>
> > +
> > + <column name="type">
> > + <p>
> > + If the route is to be exported from OVN to the outside
> > network or if
> > + it is imported from the outside network.
> > + </p>
> > + <ul>
> > + <li>
> > + <code>advertise</code>: This route should be advertised to
> > the
> > + outside network.
> > + </li>
> > + <li>
> > + <code>receive</code>: This route has been learned from the
> > outside
> > + network.
> > + </li>
> > + </ul>
> > + </column>
> > +
> > + <column name="external_ids">
> > + See <em>External IDs</em> at the beginning of this document.
> > + </column>
> > + </table>
> > </database>
>
> _______________________________________________
> 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