-
Task
-
Resolution: Unresolved
-
Normal
-
None
For reference on OVN composable services, please see this document: https://docs.google.com/document/d/1GMyxUJbqTaCxCx3hbEGSu6xMRDriMWUK1dKNFpSWlXo/edit
For this task, you will be implementing the foundation work for standalone services, along with a null/noop service for testing.
- Northbound database changes
- Create a "Service_Chain" table as described in the document
- Add a "service_chain" column to the Logical_Router_Port and Logical_Switch_Port tables.
- northd changes
- Add logic to only allow service chains to be applied to gateway router ports and VIF logical switch ports.
- Create southbound Datapath_Binding rows for each logical_port-service combination, allocating a chassis-unique tunnel key to each datapath.
- Create two southbound Port_Binding rows for each Datapath_Binding, thus allowing the created Datapath_Bindings to link together. These port bindings should be of type "patch", and their "peer" setting should link them properly with each other, as well as with their attached logical ports.
- Place the services in the proper place in the chain so that packets are sent to the service chain where the service chain has been configured, honoring the direction of the configured services in the process.
- Ensure that all services start their pipelines with a stage that skips all processing on the service if is_chassis_resident(attached_logical_port) is false. This way, we don't have to add "&& is_chassis_resident(port)" to every flow in the table.
- ovn-controller changes:
- Ensure that datapath bindings relating to services are considered local to the same chassis as the port binding to which the service chain is applied.
- Create a "null" service for testing.
- In northd, the null service should create the following logical flows:
- Ingress: One stage, with one flow: match=1, action=next;
- Egress; One stage, with one flow: match=1, action=next;
- Create tests in the testsuite using the null service.
- Ensure that the service is inserted between datapaths where expected.
- Ensure that multiple instances of the service can be chained together.
- Ensure that the service chain direction is honored.
- Ensure that the service can only be attached to a gateway logical router port or a VIF type logical switch port.
- Ensure that the service is local to the chassis on which the attached logical port is bound. Ensure this works as expected on all services in a service chain.
- Ensure that packets pass through the null service where expected.
- In northd, the null service should create the following logical flows: