X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fovsdb-idl.h;h=9179e380eb1bb0f99d1dc2f6a423771548a2ef4c;hb=c259baae45d76592eb14db5abde20aa72e7f2605;hp=31fae98427faa3ff1c09e0e44cd5a39a9fae8566;hpb=ce5a3e38dacd8042dd7c4de7be24aca9c2887103;p=openvswitch diff --git a/lib/ovsdb-idl.h b/lib/ovsdb-idl.h index 31fae984..9179e380 100644 --- a/lib/ovsdb-idl.h +++ b/lib/ovsdb-idl.h @@ -16,9 +16,24 @@ #ifndef OVSDB_IDL_H #define OVSDB_IDL_H 1 +/* Open vSwitch Database Interface Definition Language (OVSDB IDL). + * + * The OVSDB IDL maintains an in-memory replica of a database. It issues RPC + * requests to an OVSDB database server and parses the responses, converting + * raw JSON into data structures that are easier for clients to digest. Most + * notably, references to rows via UUID become C pointers. + * + * The IDL also assists with issuing database transactions. The client creates + * a transaction, manipulates the IDL data structures, and commits or aborts + * the transaction. The IDL then composes and issues the necessary JSON-RPC + * requests and reports to the client whether the transaction completed + * successfully. + */ + #include #include #include "compiler.h" +#include "ovsdb-types.h" struct json; struct ovsdb_datum; @@ -31,13 +46,17 @@ struct ovsdb_idl *ovsdb_idl_create(const char *remote, const struct ovsdb_idl_class *); void ovsdb_idl_destroy(struct ovsdb_idl *); -void ovsdb_idl_run(struct ovsdb_idl *); +bool ovsdb_idl_run(struct ovsdb_idl *); void ovsdb_idl_wait(struct ovsdb_idl *); unsigned int ovsdb_idl_get_seqno(const struct ovsdb_idl *); bool ovsdb_idl_has_ever_connected(const struct ovsdb_idl *); void ovsdb_idl_force_reconnect(struct ovsdb_idl *); +void ovsdb_idl_set_write_only(struct ovsdb_idl *, + const struct ovsdb_idl_column *); +void ovsdb_idl_omit(struct ovsdb_idl *, const struct ovsdb_idl_column *); + const struct ovsdb_idl_row *ovsdb_idl_get_row_for_uuid( const struct ovsdb_idl *, const struct ovsdb_idl_table_class *, const struct uuid *); @@ -45,6 +64,13 @@ const struct ovsdb_idl_row *ovsdb_idl_first_row( const struct ovsdb_idl *, const struct ovsdb_idl_table_class *); const struct ovsdb_idl_row *ovsdb_idl_next_row(const struct ovsdb_idl_row *); +const struct ovsdb_datum *ovsdb_idl_read(const struct ovsdb_idl_row *, + const struct ovsdb_idl_column *); +const struct ovsdb_datum *ovsdb_idl_get(const struct ovsdb_idl_row *, + const struct ovsdb_idl_column *, + enum ovsdb_atomic_type key_type, + enum ovsdb_atomic_type value_type); + enum ovsdb_idl_txn_status { TXN_UNCHANGED, /* Transaction didn't include any changes. */ TXN_INCOMPLETE, /* Commit in progress, please wait. */ @@ -76,9 +102,6 @@ int64_t ovsdb_idl_txn_get_increment_new_value(const struct ovsdb_idl_txn *); const struct uuid *ovsdb_idl_txn_get_insert_uuid(const struct ovsdb_idl_txn *, const struct uuid *); -void ovsdb_idl_txn_read(const struct ovsdb_idl_row *, - const struct ovsdb_idl_column *, - struct ovsdb_datum *); void ovsdb_idl_txn_write(const struct ovsdb_idl_row *, const struct ovsdb_idl_column *, struct ovsdb_datum *);