#ifndef OVN_CONTROLLER_H
#define OVN_CONTROLLER_H 1
+#include "simap.h"
+#include "ovn/lib/ovn-sb-idl.h"
+
+/* Linux supports a maximum of 64K zones, which seems like a fine default. */
+#define MAX_CT_ZONES 65535
+
struct controller_ctx {
- char *chassis_id; /* ID for this chassis. */
- char *br_int_name; /* Name of local integration bridge. */
struct ovsdb_idl *ovnsb_idl;
+ struct ovsdb_idl_txn *ovnsb_idl_txn;
+
struct ovsdb_idl *ovs_idl;
+ struct ovsdb_idl_txn *ovs_idl_txn;
+};
+
+/* Contains hmap_node whose hash values are the tunnel_key of datapaths
+ * with at least one local port binding. It also stores the port binding of
+ * "localnet" port if such a port exists on the datapath, which indicates
+ * physical network should be used for inter-chassis communication through
+ * the localnet port */
+struct local_datapath {
+ struct hmap_node hmap_node;
+ const struct sbrec_port_binding *localnet_port;
+};
+
+const struct ovsrec_bridge *get_bridge(struct ovsdb_idl *,
+ const char *br_name);
+
+const struct sbrec_chassis *get_chassis(struct ovsdb_idl *,
+ const char *chassis_id);
- const struct ovsrec_bridge *br_int;
+/* Must be a bit-field ordered from most-preferred (higher number) to
+ * least-preferred (lower number). */
+enum chassis_tunnel_type {
+ GENEVE = 1 << 2,
+ STT = 1 << 1,
+ VXLAN = 1 << 0
};
+uint32_t get_tunnel_type(const char *name);
+
+
#endif /* ovn/ovn-controller.h */