2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-22 18:07:40 +00:00
ovs/ovsdb/jsonrpc-server.h

97 lines
3.6 KiB
C
Raw Normal View History

/* Copyright (c) 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
2009-11-04 15:11:44 -08:00
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef OVSDB_JSONRPC_SERVER_H
#define OVSDB_JSONRPC_SERVER_H 1
#include <stdbool.h>
#include "openvswitch/types.h"
#include "jsonrpc.h"
2009-11-04 15:11:44 -08:00
struct ovsdb;
struct shash;
struct simap;
struct uuid;
2009-11-04 15:11:44 -08:00
struct ovsdb_jsonrpc_server *ovsdb_jsonrpc_server_create(bool read_only);
bool ovsdb_jsonrpc_server_add_db(struct ovsdb_jsonrpc_server *,
struct ovsdb *);
void ovsdb_jsonrpc_server_remove_db(struct ovsdb_jsonrpc_server *,
struct ovsdb *, char *comment);
void ovsdb_jsonrpc_server_destroy(struct ovsdb_jsonrpc_server *);
/* Options for a remote. */
struct ovsdb_jsonrpc_options {
struct jsonrpc_session_options rpc; /* JSON-RPC options. */
bool read_only; /* Only read-only transactions are allowed. */
char *role; /* Role, for role-based access controls */
};
struct ovsdb_jsonrpc_options *ovsdb_jsonrpc_default_options(
const char *target);
struct ovsdb_jsonrpc_options *ovsdb_jsonrpc_options_clone(
const struct ovsdb_jsonrpc_options *);
ovsdb-server: Database config isolation. Add a new structure 'db_config' that holds the user-provided configuration of the database. And attach this configuration to each of the databases on the server. Each database has a service model: standalone, clustered, relay or active-backup. Relays and A-B databases have a source, each source has its own set of JSON-RPC session options. A-B also have an indicator of it being active or backup and an optional list of tables to exclude from replication. All of that should be stored per database in the temporary configuration file that is used in order to restore the config after the OVSDB crash. For that, the save/load functions are also updates. This change is written in generic way assuming all the databases can have different configuration including service model. The only user-visible change here is a slight modification of the ovsdb-server/sync-status appctl, since it now needs to skip databases that are not active-backup and also should report active-backup databases that are currently active, i.e. not added to the replication module. If the service model is not defined in the configuration, it is assumed to be standalone or clustered, and determined from the storage type while opening the database. If the service model is defined, but doesn't match the actual storage type in the database file, ovsdb-server will fail to open the database. This should never happen with internally generated config file, but may happen in the future with user-provided configuration files. In this case the service model is used for verification purposes only, if administrator wants to assert a particular model. Since the database 'source' connections can't use 'role' or 'read-only' options, a new flag added to corresponding JSON parsing functions to skip these fields. Acked-by: Dumitru Ceara <dceara@redhat.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
2024-01-09 23:49:07 +01:00
void ovsdb_jsonrpc_options_free(struct ovsdb_jsonrpc_options *);
struct json *ovsdb_jsonrpc_options_to_json(
ovsdb-server: Database config isolation. Add a new structure 'db_config' that holds the user-provided configuration of the database. And attach this configuration to each of the databases on the server. Each database has a service model: standalone, clustered, relay or active-backup. Relays and A-B databases have a source, each source has its own set of JSON-RPC session options. A-B also have an indicator of it being active or backup and an optional list of tables to exclude from replication. All of that should be stored per database in the temporary configuration file that is used in order to restore the config after the OVSDB crash. For that, the save/load functions are also updates. This change is written in generic way assuming all the databases can have different configuration including service model. The only user-visible change here is a slight modification of the ovsdb-server/sync-status appctl, since it now needs to skip databases that are not active-backup and also should report active-backup databases that are currently active, i.e. not added to the replication module. If the service model is not defined in the configuration, it is assumed to be standalone or clustered, and determined from the storage type while opening the database. If the service model is defined, but doesn't match the actual storage type in the database file, ovsdb-server will fail to open the database. This should never happen with internally generated config file, but may happen in the future with user-provided configuration files. In this case the service model is used for verification purposes only, if administrator wants to assert a particular model. Since the database 'source' connections can't use 'role' or 'read-only' options, a new flag added to corresponding JSON parsing functions to skip these fields. Acked-by: Dumitru Ceara <dceara@redhat.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
2024-01-09 23:49:07 +01:00
const struct ovsdb_jsonrpc_options *, bool jsonrpc_session_only)
OVS_WARN_UNUSED_RESULT;
void ovsdb_jsonrpc_options_update_from_json(struct ovsdb_jsonrpc_options *,
ovsdb-server: Database config isolation. Add a new structure 'db_config' that holds the user-provided configuration of the database. And attach this configuration to each of the databases on the server. Each database has a service model: standalone, clustered, relay or active-backup. Relays and A-B databases have a source, each source has its own set of JSON-RPC session options. A-B also have an indicator of it being active or backup and an optional list of tables to exclude from replication. All of that should be stored per database in the temporary configuration file that is used in order to restore the config after the OVSDB crash. For that, the save/load functions are also updates. This change is written in generic way assuming all the databases can have different configuration including service model. The only user-visible change here is a slight modification of the ovsdb-server/sync-status appctl, since it now needs to skip databases that are not active-backup and also should report active-backup databases that are currently active, i.e. not added to the replication module. If the service model is not defined in the configuration, it is assumed to be standalone or clustered, and determined from the storage type while opening the database. If the service model is defined, but doesn't match the actual storage type in the database file, ovsdb-server will fail to open the database. This should never happen with internally generated config file, but may happen in the future with user-provided configuration files. In this case the service model is used for verification purposes only, if administrator wants to assert a particular model. Since the database 'source' connections can't use 'role' or 'read-only' options, a new flag added to corresponding JSON parsing functions to skip these fields. Acked-by: Dumitru Ceara <dceara@redhat.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
2024-01-09 23:49:07 +01:00
const struct json *,
bool jsonrpc_session_only);
void ovsdb_jsonrpc_server_set_remotes(struct ovsdb_jsonrpc_server *,
const struct shash *);
/* Status of a single remote connection. */
struct ovsdb_jsonrpc_remote_status {
const char *state;
int last_error;
unsigned int sec_since_connect;
unsigned int sec_since_disconnect;
bool is_connected;
char *locks_held;
char *locks_waiting;
char *locks_lost;
int n_connections;
ovs_be16 bound_port;
};
bool ovsdb_jsonrpc_server_get_remote_status(
const struct ovsdb_jsonrpc_server *, const char *target,
struct ovsdb_jsonrpc_remote_status *);
void ovsdb_jsonrpc_server_free_remote_status(
struct ovsdb_jsonrpc_remote_status *);
void ovsdb_jsonrpc_server_reconnect(struct ovsdb_jsonrpc_server *, bool force,
char *comment);
2009-11-04 15:11:44 -08:00
void ovsdb_jsonrpc_server_run(struct ovsdb_jsonrpc_server *);
void ovsdb_jsonrpc_server_wait(struct ovsdb_jsonrpc_server *);
void ovsdb_jsonrpc_server_set_read_only(struct ovsdb_jsonrpc_server *,
bool read_only);
2009-11-04 15:11:44 -08:00
void ovsdb_jsonrpc_server_get_memory_usage(const struct ovsdb_jsonrpc_server *,
struct simap *usage);
const struct uuid *ovsdb_jsonrpc_server_get_uuid(
const struct ovsdb_jsonrpc_server *);
struct ovsdb_jsonrpc_monitor;
void ovsdb_jsonrpc_monitor_destroy(struct ovsdb_jsonrpc_monitor *,
bool notify_cancellation);
void ovsdb_jsonrpc_disable_monitor_cond(void);
2009-11-04 15:11:44 -08:00
#endif /* ovsdb/jsonrpc-server.h */