Message ID | 20211102112916.3368168-3-frode.nordahl@canonical.com |
---|---|
State | Superseded |
Headers | show |
Series | Introduce infrastructure for VIF plug providers | expand |
Context | Check | Description |
---|---|---|
ovsrobot/apply-robot | success | apply and check: success |
ovsrobot/github-robot-_Build_and_Test | fail | github build: failed |
ovsrobot/github-robot-_ovn-kubernetes | fail | github build: failed |
On Tue, Nov 2, 2021 at 4:29 AM Frode Nordahl <frode.nordahl@canonical.com> wrote: > > Add port by interfaces index - To be able to effectively remove > ports previously plugged by us we need to look up ports by > interface records. > > Add Port_Binding by requested_chassis index - To be able to > effectively iterate over ports destined to our chassis we need to > look up Port_Binding records by requested_chassis. > > Add `enable-dummy-plug` option - To enable testing of the VIF plug > provider infrastructure without building OVN with an external VIF > plug provider we include a dummy implementation which can be > enabled using this command line option. > > Signed-off-by: Frode Nordahl <frode.nordahl@canonical.com> > --- > controller/ovn-controller.c | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c > index 92ba50d65..dd09d57e2 100644 > --- a/controller/ovn-controller.c > +++ b/controller/ovn-controller.c > @@ -56,6 +56,8 @@ > #include "lib/ovn-sb-idl.h" > #include "lib/ovn-util.h" > #include "patch.h" > +#include "vif-plug.h" > +#include "vif-plug-provider.h" > #include "physical.h" > #include "pinctrl.h" > #include "openvswitch/poll-loop.h" > @@ -3082,11 +3084,17 @@ main(int argc, char *argv[]) > patch_init(); > pinctrl_init(); > lflow_init(); > + vif_plug_provider_initialize(); > > /* Connect to OVS OVSDB instance. */ > struct ovsdb_idl_loop ovs_idl_loop = OVSDB_IDL_LOOP_INITIALIZER( > ovsdb_idl_create(ovs_remote, &ovsrec_idl_class, false, true)); > ctrl_register_ovs_idl(ovs_idl_loop.idl); > + > + struct ovsdb_idl_index *ovsrec_port_by_interfaces > + = ovsdb_idl_index_create1(ovs_idl_loop.idl, > + &ovsrec_port_col_interfaces); > + > ovsdb_idl_get_initial_snapshot(ovs_idl_loop.idl); > > /* Configure OVN SB database. */ > @@ -3122,6 +3130,9 @@ main(int argc, char *argv[]) > struct ovsdb_idl_index *sbrec_port_binding_by_type > = ovsdb_idl_index_create1(ovnsb_idl_loop.idl, > &sbrec_port_binding_col_type); > + struct ovsdb_idl_index *sbrec_port_binding_by_requested_chassis > + = ovsdb_idl_index_create1(ovnsb_idl_loop.idl, > + &sbrec_port_binding_col_requested_chassis); > struct ovsdb_idl_index *sbrec_datapath_binding_by_key > = ovsdb_idl_index_create1(ovnsb_idl_loop.idl, > &sbrec_datapath_binding_col_tunnel_key); > @@ -3348,8 +3359,12 @@ main(int argc, char *argv[]) > sbrec_port_binding_by_key); > engine_ovsdb_node_add_index(&en_sb_port_binding, "datapath", > sbrec_port_binding_by_datapath); > + engine_ovsdb_node_add_index(&en_sb_port_binding, "requested_chassis", > + sbrec_port_binding_by_requested_chassis); > engine_ovsdb_node_add_index(&en_sb_datapath_binding, "key", > sbrec_datapath_binding_by_key); > + engine_ovsdb_node_add_index(&en_ovs_port, "interfaces", > + ovsrec_port_by_interfaces); No need to add the index to engine nodes, since we don't use I-P now for the VIF plug. Thanks, Han > > struct ed_type_lflow_output *lflow_output_data = > engine_get_internal_data(&en_lflow_output); > @@ -3879,6 +3894,7 @@ loop_done: > pinctrl_destroy(); > patch_destroy(); > if_status_mgr_destroy(if_mgr); > + vif_plug_provider_destroy_all(); > > ovsdb_idl_loop_destroy(&ovs_idl_loop); > ovsdb_idl_loop_destroy(&ovnsb_idl_loop); > @@ -3899,6 +3915,7 @@ parse_options(int argc, char *argv[]) > VLOG_OPTION_ENUMS, > OVN_DAEMON_OPTION_ENUMS, > SSL_OPTION_ENUMS, > + OPT_ENABLE_DUMMY_VIF_PLUG, > }; > > static struct option long_options[] = { > @@ -3909,6 +3926,8 @@ parse_options(int argc, char *argv[]) > STREAM_SSL_LONG_OPTIONS, > {"peer-ca-cert", required_argument, NULL, OPT_PEER_CA_CERT}, > {"bootstrap-ca-cert", required_argument, NULL, OPT_BOOTSTRAP_CA_CERT}, > + {"enable-dummy-vif-plug", no_argument, NULL, > + OPT_ENABLE_DUMMY_VIF_PLUG}, > {NULL, 0, NULL, 0} > }; > char *short_options = ovs_cmdl_long_options_to_short_options(long_options); > @@ -3954,6 +3973,10 @@ parse_options(int argc, char *argv[]) > stream_ssl_set_ca_cert_file(optarg, true); > break; > > + case OPT_ENABLE_DUMMY_VIF_PLUG: > + vif_plug_dummy_enable(); > + break; > + > case '?': > exit(EXIT_FAILURE); > > -- > 2.32.0 >
On Fri, Nov 5, 2021 at 8:41 AM Han Zhou <hzhou@ovn.org> wrote: > > > > On Tue, Nov 2, 2021 at 4:29 AM Frode Nordahl <frode.nordahl@canonical.com> wrote: > > > > Add port by interfaces index - To be able to effectively remove > > ports previously plugged by us we need to look up ports by > > interface records. > > > > Add Port_Binding by requested_chassis index - To be able to > > effectively iterate over ports destined to our chassis we need to > > look up Port_Binding records by requested_chassis. > > > > Add `enable-dummy-plug` option - To enable testing of the VIF plug > > provider infrastructure without building OVN with an external VIF > > plug provider we include a dummy implementation which can be > > enabled using this command line option. > > > > Signed-off-by: Frode Nordahl <frode.nordahl@canonical.com> > > --- > > controller/ovn-controller.c | 23 +++++++++++++++++++++++ > > 1 file changed, 23 insertions(+) > > > > diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c > > index 92ba50d65..dd09d57e2 100644 > > --- a/controller/ovn-controller.c > > +++ b/controller/ovn-controller.c > > @@ -56,6 +56,8 @@ > > #include "lib/ovn-sb-idl.h" > > #include "lib/ovn-util.h" > > #include "patch.h" > > +#include "vif-plug.h" > > +#include "vif-plug-provider.h" > > #include "physical.h" > > #include "pinctrl.h" > > #include "openvswitch/poll-loop.h" > > @@ -3082,11 +3084,17 @@ main(int argc, char *argv[]) > > patch_init(); > > pinctrl_init(); > > lflow_init(); > > + vif_plug_provider_initialize(); > > > > /* Connect to OVS OVSDB instance. */ > > struct ovsdb_idl_loop ovs_idl_loop = OVSDB_IDL_LOOP_INITIALIZER( > > ovsdb_idl_create(ovs_remote, &ovsrec_idl_class, false, true)); > > ctrl_register_ovs_idl(ovs_idl_loop.idl); > > + > > + struct ovsdb_idl_index *ovsrec_port_by_interfaces > > + = ovsdb_idl_index_create1(ovs_idl_loop.idl, > > + &ovsrec_port_col_interfaces); > > + > > ovsdb_idl_get_initial_snapshot(ovs_idl_loop.idl); > > > > /* Configure OVN SB database. */ > > @@ -3122,6 +3130,9 @@ main(int argc, char *argv[]) > > struct ovsdb_idl_index *sbrec_port_binding_by_type > > = ovsdb_idl_index_create1(ovnsb_idl_loop.idl, > > &sbrec_port_binding_col_type); > > + struct ovsdb_idl_index *sbrec_port_binding_by_requested_chassis > > + = ovsdb_idl_index_create1(ovnsb_idl_loop.idl, > > + &sbrec_port_binding_col_requested_chassis); > > struct ovsdb_idl_index *sbrec_datapath_binding_by_key > > = ovsdb_idl_index_create1(ovnsb_idl_loop.idl, > > &sbrec_datapath_binding_col_tunnel_key); > > @@ -3348,8 +3359,12 @@ main(int argc, char *argv[]) > > sbrec_port_binding_by_key); > > engine_ovsdb_node_add_index(&en_sb_port_binding, "datapath", > > sbrec_port_binding_by_datapath); > > + engine_ovsdb_node_add_index(&en_sb_port_binding, "requested_chassis", > > + sbrec_port_binding_by_requested_chassis); > > engine_ovsdb_node_add_index(&en_sb_datapath_binding, "key", > > sbrec_datapath_binding_by_key); > > + engine_ovsdb_node_add_index(&en_ovs_port, "interfaces", > > + ovsrec_port_by_interfaces); > > No need to add the index to engine nodes, since we don't use I-P now for the VIF plug. Ack, that was an oversight, sorry about that!
diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c index 92ba50d65..dd09d57e2 100644 --- a/controller/ovn-controller.c +++ b/controller/ovn-controller.c @@ -56,6 +56,8 @@ #include "lib/ovn-sb-idl.h" #include "lib/ovn-util.h" #include "patch.h" +#include "vif-plug.h" +#include "vif-plug-provider.h" #include "physical.h" #include "pinctrl.h" #include "openvswitch/poll-loop.h" @@ -3082,11 +3084,17 @@ main(int argc, char *argv[]) patch_init(); pinctrl_init(); lflow_init(); + vif_plug_provider_initialize(); /* Connect to OVS OVSDB instance. */ struct ovsdb_idl_loop ovs_idl_loop = OVSDB_IDL_LOOP_INITIALIZER( ovsdb_idl_create(ovs_remote, &ovsrec_idl_class, false, true)); ctrl_register_ovs_idl(ovs_idl_loop.idl); + + struct ovsdb_idl_index *ovsrec_port_by_interfaces + = ovsdb_idl_index_create1(ovs_idl_loop.idl, + &ovsrec_port_col_interfaces); + ovsdb_idl_get_initial_snapshot(ovs_idl_loop.idl); /* Configure OVN SB database. */ @@ -3122,6 +3130,9 @@ main(int argc, char *argv[]) struct ovsdb_idl_index *sbrec_port_binding_by_type = ovsdb_idl_index_create1(ovnsb_idl_loop.idl, &sbrec_port_binding_col_type); + struct ovsdb_idl_index *sbrec_port_binding_by_requested_chassis + = ovsdb_idl_index_create1(ovnsb_idl_loop.idl, + &sbrec_port_binding_col_requested_chassis); struct ovsdb_idl_index *sbrec_datapath_binding_by_key = ovsdb_idl_index_create1(ovnsb_idl_loop.idl, &sbrec_datapath_binding_col_tunnel_key); @@ -3348,8 +3359,12 @@ main(int argc, char *argv[]) sbrec_port_binding_by_key); engine_ovsdb_node_add_index(&en_sb_port_binding, "datapath", sbrec_port_binding_by_datapath); + engine_ovsdb_node_add_index(&en_sb_port_binding, "requested_chassis", + sbrec_port_binding_by_requested_chassis); engine_ovsdb_node_add_index(&en_sb_datapath_binding, "key", sbrec_datapath_binding_by_key); + engine_ovsdb_node_add_index(&en_ovs_port, "interfaces", + ovsrec_port_by_interfaces); struct ed_type_lflow_output *lflow_output_data = engine_get_internal_data(&en_lflow_output); @@ -3879,6 +3894,7 @@ loop_done: pinctrl_destroy(); patch_destroy(); if_status_mgr_destroy(if_mgr); + vif_plug_provider_destroy_all(); ovsdb_idl_loop_destroy(&ovs_idl_loop); ovsdb_idl_loop_destroy(&ovnsb_idl_loop); @@ -3899,6 +3915,7 @@ parse_options(int argc, char *argv[]) VLOG_OPTION_ENUMS, OVN_DAEMON_OPTION_ENUMS, SSL_OPTION_ENUMS, + OPT_ENABLE_DUMMY_VIF_PLUG, }; static struct option long_options[] = { @@ -3909,6 +3926,8 @@ parse_options(int argc, char *argv[]) STREAM_SSL_LONG_OPTIONS, {"peer-ca-cert", required_argument, NULL, OPT_PEER_CA_CERT}, {"bootstrap-ca-cert", required_argument, NULL, OPT_BOOTSTRAP_CA_CERT}, + {"enable-dummy-vif-plug", no_argument, NULL, + OPT_ENABLE_DUMMY_VIF_PLUG}, {NULL, 0, NULL, 0} }; char *short_options = ovs_cmdl_long_options_to_short_options(long_options); @@ -3954,6 +3973,10 @@ parse_options(int argc, char *argv[]) stream_ssl_set_ca_cert_file(optarg, true); break; + case OPT_ENABLE_DUMMY_VIF_PLUG: + vif_plug_dummy_enable(); + break; + case '?': exit(EXIT_FAILURE);
Add port by interfaces index - To be able to effectively remove ports previously plugged by us we need to look up ports by interface records. Add Port_Binding by requested_chassis index - To be able to effectively iterate over ports destined to our chassis we need to look up Port_Binding records by requested_chassis. Add `enable-dummy-plug` option - To enable testing of the VIF plug provider infrastructure without building OVN with an external VIF plug provider we include a dummy implementation which can be enabled using this command line option. Signed-off-by: Frode Nordahl <frode.nordahl@canonical.com> --- controller/ovn-controller.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)