# ... and at the shell level, so Makefile.am can take action depending on this.
AM_CONDITIONAL(HAVE_PGSQL, test "$PG_CONFIG" != "")
+dsc_config="no"
+AC_ARG_WITH([dhcp-dscsql],
+ AC_HELP_STRING([--with-dhcp-dscsql=PATH],
+ [path to the DataStaxCassandraSQL 'dsc_config' script]),
+ [dsc_config="$withval"])
+
+if test "${dsc_config}" = "yes" ; then
+ DSC_CONFIG="/usr/bin/dsc_config"
+elif test "${dsc_config}" != "no" ; then
+ DSC_CONFIG="${withval}"
+fi
+
+if test "$DSC_CONFIG" != "" ; then
+ if test -d "$DSC_CONFIG" -o ! -x "$DSC_CONFIG" ; then
+ AC_MSG_ERROR([--with-dhcp-dscsql should point to a dsc_config program])
+ fi
+
+ DSCSQL_CPPFLAGS=`$DSC_CONFIG --cppflags`
+ DSCSQL_INCLUDEDIR=`$DSC_CONFIG --includedir`
+ DSCSQL_CPPFLAGS="$DSCSQL_CPPFLAGS -I$DSCSQL_INCLUDEDIR"
+ DSCSQL_LIBS=`$DSC_CONFIG --libdir`
+ DSCSQL_LIBS="-L$DSCSQL_LIBS -lcassandra_static -luv"
+ DSCSQL_VERSION=`$DSC_CONFIG --version`
+
+ AC_SUBST(DSCSQL_CPPFLAGS)
+ AC_SUBST(DSCSQL_LIBS)
+
+ # Check that a simple program using DSCSQL functions can compile and link.
+ CPPFLAGS_SAVED="$CPPFLAGS"
+ LIBS_SAVED="$LIBS"
+
+ CPPFLAGS="$DSCSQL_CPPFLAGS $CPPFLAGS"
+ LIBS="$DSCSQL_LIBS $LIBS"
+
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([#include <cassandra.h>],
+ [CassCluster* cluster = cass_cluster_new();
+ cass_cluster_free(cluster);])],
+ [AC_MSG_RESULT([checking for DataStax Cassandra SQL headers and library... yes])],
+ [AC_MSG_RESULT([checking for DataStax Cassandra SQL headers and library... no])
+ AC_MSG_ERROR([Needs DataStax Cassandra SQL library])]
+ )
+ CPPFLAGS=$CPPFLAGS_SAVED
+ LIBS=$LIBS_SAVED
+
+ # Note that DSCSQL is present in the config.h file
+ AC_DEFINE([HAVE_DSCSQL], [1], [DSCSQL is present])
+fi
+
+# ... and at the shell level, so Makefile.am can take action depending on this.
+AM_CONDITIONAL(HAVE_DSCSQL, test "$DSC_CONFIG" != "")
+
# Check for log4cplus
log4cplus_path="yes"
AC_ARG_WITH([log4cplus],
src/bin/admin/tests/memfile_tests.sh
src/bin/admin/tests/mysql_tests.sh
src/bin/admin/tests/pgsql_tests.sh
+ src/bin/admin/tests/dscsql_tests.sh
src/hooks/Makefile
src/hooks/dhcp/Makefile
src/hooks/dhcp/user_chk/Makefile
src/share/database/scripts/pgsql/Makefile
src/share/database/scripts/pgsql/upgrade_1.0_to_2.0.sh
src/share/database/scripts/pgsql/upgrade_2.0_to_3.0.sh
+ src/share/database/scripts/dscsql/Makefile
tools/Makefile
tools/path_replacer.sh
])
END
fi
+if test "$DSCSQL_CPPFLAGS" != "" ; then
+cat >> config.report << END
+
+DataStax Cassandra SQL:
+ DSCSQL_VERSION: ${DSCSQL_VERSION}
+ DSCSQL_CPPFLAGS: ${DSCSQL_CPPFLAGS}
+ DSCSQL_LIBS: ${DSCSQL_LIBS}
+END
+else
+cat >> config.report << END
+
+DataStax Cassandra SQL:
+ no
+END
+fi
+
if test "$enable_gtest" != "no"; then
cat >> config.report << END
pgsql_execute "SELECT version || '.' || minor FROM schema_version" "$@"
return $?
}
+
+dscsql_execute() {
+ QUERY=$1
+ shift
+ if [ $# -gt 1 ]; then
+ cqlsh $* -e "${QUERY}"
+ retcode=$?
+ else
+ cqlsh -u $db_user -p $db_password -e "${QUERY}" -k $db_name
+ retcode="$?"
+ fi
+
+ return $retcode
+}
+
+dscsql_version() {
+ version=`dscsql_execute "SELECT version, minor FROM schema_version" "$@"`
+ version=`echo "$version" | grep -A 1 "+" | grep -v "+" | tr -d ' ' | cut -d "|" -f 1-2 --output-delimiter="."`
+ echo $version
+ return $?
+}
printf " - lease-upgrade: Upgrades your lease database scheme\n"
printf " - lease-dump: Dump current leases to a CSV file\n"
printf "\n"
- printf "BACKEND - one of the supported backends: memfile|mysql|pgsql\n"
+ printf "BACKEND - one of the supported backends: memfile|mysql|pgsql|dscsql\n"
printf "\n"
printf "PARAMETERS: Parameters are optional in general, but may be required\n"
printf " for specific operation.\n"
if [ $COUNT -gt 0 ]; then
# Let't start with a new line. mysql could have printed something out.
printf "\n"
- log_error "Expected empty database $db_name, but there are $COUNT tables: \n$_RESULT. Aborting."
+ log_error "Expected empty database $db_name, but there are $COUNT tables: \n$RESULT. Aborting."
exit 1
fi
exit 0
}
+dscsql_init() {
+ printf "Checking if there is a database initialized already. Please ignore errors.\n"
+
+ # Let's try to count the number of tables. Anything above 0 means that there
+ # is some database in place. If there is anything, we abort. Note that
+ # dsc sql may spit out connection or access errors to stderr, we ignore those.
+ # We should not hide them as they may give hints to user what is wrong with
+ # his setup.
+ #
+ RESULT=`echo "DESCRIBE keyspaces;" | cqlsh`
+ ERRCODE=$?
+ if [ $ERRCODE -ne 0 ]
+ then
+ log_error "dscsql_init table query failed, cqlsh status = $ERRCODE"
+ exit 1
+ fi
+
+ COUNT=`echo $RESULT | grep $db_name | wc -w`
+ if [ $COUNT -gt 0 ]; then
+ # Let't start with a new line. cqlsh could have printed something out.
+ printf "\n"
+ log_error "Expected empty database $db_name, but there are $COUNT tables: \n$RESULT. Aborting."
+ exit 1
+ fi
+
+ printf "Initializing database using script %s\n" $scripts_dir/dscsql/dhcpdb_create.cql
+ cqlsh -u $db_user -p $db_password -e "CREATE KEYSPACE $db_name WITH replication = {'class' : 'SimpleStrategy','replication_factor' : 1};"
+ cqlsh -u $db_user -p $db_password -k $db_name -f $scripts_dir/dscsql/dhcpdb_create.cql
+ ERRCODE=$?
+
+ printf "cqlsh returned status code $ERRCODE\n"
+
+ if [ "$ERRCODE" -eq 0 ]; then
+ printf "Lease DB version reported after initialization: "
+ dscsql_version
+ printf "\n"
+ fi
+
+ exit $ERRCODE
+}
+
### Functions that implement database version checking commands
memfile_version() {
# @todo Implement this as part of #3601
exit 0
}
+dscsql_upgrade() {
+ version=`dscsql_version`
+ printf "Lease DB version reported before upgrade: $version\n"
+
+ # Check if the scripts directory exists at all.
+ if [ ! -d ${scripts_dir}/dscsql ]; then
+ log_error "Invalid scripts directory: ${scripts_dir}/dscsql"
+ exit 1
+ fi
+
+ # Check if there are any files in it
+ num_files=$(find ${scripts_dir}/dscsql/upgrade*.sh -type f | wc -l)
+ if [ $num_files -eq 0 ]; then
+ log_error "No scripts in ${scripts_dir}/dscsql or the directory is not readable or does not have any upgrade* scripts."
+ exit 1
+ fi
+
+ for script in ${scripts_dir}/dscsql/upgrade*.sh
+ do
+ echo "Processing $script file..."
+ sh ${script} -u ${db_user} -p ${db_password} -k ${db_name}
+ done
+
+ version=`dscsql_version`
+ printf "Lease DB version reported after upgrade: $version\n"
+ exit 0
+}
+
# Utility function which tests if the given file exists and
# if so notifies the user and provides them the opportunity
# to abort the current command.
pgsql)
invoke="select * from"
;;
+ dscsql)
+ invoke="select * from"
+ ;;
*)
log_error "unsupported backend ${backend}"
usage
exit 0
}
+dscsql_dump() {
+
+ # get the correct dump query
+ version=`dscsql_version`
+ retcode=$?
+ if [ $retcode -ne 0 ]
+ then
+ log_error "lease-dump: dscsql_version failed, exit code $retcode"
+ exit 1;
+ fi
+
+ # Fetch the correct SQL text. Note this function will exit
+ # if it fails.
+ get_dump_query $version
+
+ # Make sure they specified a file
+ if [ "$dump_file" = "" ]; then
+ log_error "you must specify an output file for lease-dump"
+ usage
+ exit 1
+
+ fi
+
+ # If output file exists, notify user, allow them a chance to bail
+ check_file_overwrite $dump_file
+
+ # Check the temp file too
+ tmp_file="$dump_file.tmp"
+ check_file_overwrite $tmp_file
+
+ # Run the sql to output tab-delimited lease data to a temp file.
+ # By using a temp file we can check for MySQL errors before using
+ # 'tr' to translate tabs to commas. We do not use MySQL's output
+ # to file as that requires linux superuser privileges to execute
+ # the select.
+ dscsql_execute "${dump_qry}" > $tmp_file
+ retcode=$?
+ if [ $retcode -ne 0 ]; then
+ log_error "lease-dump: dscsql_execute failed, exit code $retcode";
+ exit 1
+ fi
+
+ # Now translate tabs to commas.
+ cat $tmp_file | tr '\t' ',' >$dump_file
+ if [ $? -ne 0 ]; then
+ log_error "lease-dump: reformatting failed";
+ exit 1
+ fi
+
+ # delete the tmp file on success
+ rm $tmp_file
+ echo lease$dump_type successfully dumped to $dump_file
+ exit 0
+}
+
### Script starts here ###
# First, find what the command is
usage
exit 1
fi
-is_in_list "${backend}" "memfile mysql pgsql"
+is_in_list "${backend}" "memfile mysql pgsql dscsql"
if [ ${_inlist} -eq 0 ]; then
log_error "invalid backend: ${backend}"
exit 1
pgsql)
pgsql_init
;;
+ dscsql)
+ dscsql_init
+ ;;
esac
;;
lease-version)
pgsql)
pgsql_version
;;
+ dscsql)
+ dscsql_version
+ ;;
esac
;;
lease-upgrade)
pgsql)
pgsql_upgrade
;;
+ dscsql)
+ dscsql_upgrade
+ ;;
esac
;;
lease-dump)
pgsql)
pgsql_dump
;;
+ dscsql)
+ dscsql_dump
+ ;;
esac
;;
esac
SHTESTS += pgsql_tests.sh
endif
+if HAVE_DSCSQL
+SHTESTS += dscsql_tests.sh
+endif
noinst_SCRIPTS = $(SHTESTS)
EXTRA_DIST = dhcpdb_create_1.0.mysql
EXTRA_DIST += dhcpdb_create_1.0.pgsql
+EXTRA_DIST += dhcpdb_create_1.0.cql
CLEANFILES = *.log
-DISTCLEANFILES = memfile_tests.sh mysql_tests.sh pgsql_tests.sh
+DISTCLEANFILES = memfile_tests.sh mysql_tests.sh pgsql_tests.sh dscsql_tests.sh
# Execute all test scripts.
check-local:
EXTRA_DIST = mysql.lease4_dump_test.reference.csv \
mysql.lease6_dump_test.reference.csv \
pgsql.lease4_dump_test.reference.csv \
- pgsql.lease6_dump_test.reference.csv
+ pgsql.lease6_dump_test.reference.csv \
+ dscsql.lease4_dump_test.reference.csv \
+ dscsql.lease6_dump_test.reference.csv
if HAVE_PGSQL
AM_CPPFLAGS += $(PGSQL_CPPFLAGS)
endif
+if HAVE_DSCSQL
+AM_CPPFLAGS += $(DSCSQL_CPPFLAGS)
+endif
AM_CXXFLAGS = $(KEA_CXXFLAGS)
if USE_CLANGPP
if HAVE_PGSQL
kea_dhcp_ddns_LDFLAGS += $(PGSQL_LIBS)
endif
+if HAVE_DSCSQL
+kea_dhcp_ddns_LDFLAGS += $(DSCSQL_LIBS)
+endif
kea_dhcp_ddnsdir = $(pkgdatadir)
kea_dhcp_ddns_DATA = dhcp-ddns.spec
#ifdef HAVE_PGSQL
#include <dhcpsrv/pgsql_lease_mgr.h>
#endif
+#ifdef HAVE_DSCSQL
+#include <dhcpsrv/dscsql_lease_mgr.h>
+#endif
#include <dhcpsrv/memfile_lease_mgr.h>
#include <sstream>
#endif
#ifdef HAVE_PGSQL
tmp << isc::dhcp::PgSqlLeaseMgr::getDBVersion() << std::endl;
+#endif
+#ifdef HAVE_DSCSQL
+ tmp << isc::dhcp::DSCSqlLeaseMgr::getDBVersion() << std::endl;
#endif
tmp << isc::dhcp::Memfile_LeaseMgr::getDBVersion();
if HAVE_PGSQL
d2_unittests_LDFLAGS += $(PGSQL_LIBS)
endif
+if HAVE_DSCSQL
+d2_unittests_LDFLAGS += $(DSCSQL_LIBS)
+endif
d2_unittests_LDFLAGS += $(GTEST_LDFLAGS)
d2_unittests_LDADD = $(top_builddir)/src/bin/d2/libd2.la
if HAVE_PGSQL
AM_CPPFLAGS += $(PGSQL_CPPFLAGS)
endif
+if HAVE_DSCSQL
+AM_CPPFLAGS += $(DSCSQL_CPPFLAGS)
+endif
AM_CXXFLAGS = $(KEA_CXXFLAGS)
if USE_CLANGPP
if HAVE_PGSQL
kea_dhcp4_LDFLAGS += $(PGSQL_LIBS)
endif
+if HAVE_DSCSQL
+kea_dhcp4_LDFLAGS += $(DSCSQL_LIBS)
+endif
kea_dhcp4dir = $(pkgdatadir)
kea_dhcp4_DATA = dhcp4.spec
#ifdef HAVE_PGSQL
#include <dhcpsrv/pgsql_lease_mgr.h>
#endif
+#ifdef HAVE_DSCSQL
+#include <dhcpsrv/dscsql_lease_mgr.h>
+#endif
#include <dhcpsrv/memfile_lease_mgr.h>
#include <boost/bind.hpp>
#endif
#ifdef HAVE_PGSQL
tmp << PgSqlLeaseMgr::getDBVersion() << endl;
+#endif
+#ifdef HAVE_DSCSQL
+ tmp << DSCSqlLeaseMgr::getDBVersion() << endl;
#endif
tmp << Memfile_LeaseMgr::getDBVersion();
if HAVE_PGSQL
dhcp4_unittests_LDFLAGS += $(PGSQL_LIBS)
endif
+if HAVE_DSCSQL
+dhcp4_unittests_LDFLAGS += $(DSCSQL_LIBS)
+endif
dhcp4_unittests_LDFLAGS += $(GTEST_LDFLAGS)
dhcp4_unittests_LDADD = $(top_builddir)/src/bin/dhcp4/libdhcp4.la
if HAVE_PGSQL
AM_CPPFLAGS += $(PGSQL_CPPFLAGS)
endif
+if HAVE_DSCSQL
+AM_CPPFLAGS += $(DSCSQL_CPPFLAGS)
+endif
AM_CXXFLAGS = $(KEA_CXXFLAGS)
if USE_CLANGPP
if HAVE_PGSQL
kea_dhcp6_LDFLAGS += $(PGSQL_LIBS)
endif
+if HAVE_DSCSQL
+kea_dhcp6_LDFLAGS += $(DSCSQL_LIBS)
+endif
kea_dhcp6dir = $(pkgdatadir)
kea_dhcp6_DATA = dhcp6.spec
#ifdef HAVE_PGSQL
#include <dhcpsrv/pgsql_lease_mgr.h>
#endif
+#ifdef HAVE_DSCSQL
+#include <dhcpsrv/dscsql_lease_mgr.h>
+#endif
#include <dhcpsrv/memfile_lease_mgr.h>
#include <boost/bind.hpp>
#endif
#ifdef HAVE_PGSQL
tmp << PgSqlLeaseMgr::getDBVersion() << endl;
+#endif
+#ifdef HAVE_DSCSQL
+ tmp << DSCSqlLeaseMgr::getDBVersion() << endl;
#endif
tmp << Memfile_LeaseMgr::getDBVersion();
if HAVE_PGSQL
dhcp6_unittests_LDFLAGS += $(PGSQL_LIBS)
endif
+if HAVE_DSCSQL
+dhcp6_unittests_LDFLAGS += $(DSCSQL_LIBS)
+endif
dhcp6_unittests_LDFLAGS += $(GTEST_LDFLAGS)
dhcp6_unittests_LDADD = $(top_builddir)/src/bin/dhcp6/libdhcp6.la
if HAVE_PGSQL
kea_lfc_LDFLAGS += $(PGSQL_LIBS)
endif
+if HAVE_DSCSQL
+kea_lfc_LDFLAGS += $(DSCSQL_LIBS)
+endif
kea_lfcdir = $(pkgdatadir)
if HAVE_PGSQL
lfc_unittests_LDFLAGS += $(PGSQL_LIBS)
endif
+if HAVE_DSCSQL
+lfc_unittests_LDFLAGS += $(DSCSQL_LIBS)
+endif
lfc_unittests_LDFLAGS += $(GTEST_LDFLAGS)
lfc_unittests_LDADD = $(top_builddir)/src/bin/lfc/liblfc.la
if HAVE_PGSQL
AM_CPPFLAGS += $(PGSQL_CPPFLAGS)
endif
+if HAVE_DSCSQL
+AM_CPPFLAGS += $(DSCSQL_CPPFLAGS)
+endif
AM_CXXFLAGS = $(KEA_CXXFLAGS)
libkea_dhcpsrv_la_SOURCES += pgsql_exchange.cc pgsql_exchange.h
libkea_dhcpsrv_la_SOURCES += pgsql_lease_mgr.cc pgsql_lease_mgr.h
endif
+if HAVE_DSCSQL
+libkea_dhcpsrv_la_SOURCES += dscsql_lease_mgr.cc dscsql_lease_mgr.h
+libkea_dhcpsrv_la_SOURCES += dscsql_connection.cc dscsql_connection.h
+endif
libkea_dhcpsrv_la_SOURCES += pool.cc pool.h
libkea_dhcpsrv_la_SOURCES += srv_config.cc srv_config.h
libkea_dhcpsrv_la_SOURCES += subnet.cc subnet.h
if HAVE_PGSQL
libkea_dhcpsrv_la_LDFLAGS += $(PGSQL_LIBS)
endif
+if HAVE_DSCSQL
+libkea_dhcpsrv_la_LDFLAGS += $(DSCSQL_LIBS)
+endif
if USE_CLANGPP
# Disable unused parameter warning caused by some of the
% DHCPSRV_UNKNOWN_DB unknown database type: %1
The database access string specified a database type (given in the
message) that is unknown to the software. This is a configuration error.
+
+% DHCPSRV_DSCSQL_ADD_ADDR4 adding IPv4 lease with address %1
+A debug message issued when the server is about to add an IPv4 lease
+with the specified address to the DataStax Cassandra backend database.
+
+% DHCPSRV_DSCSQL_ADD_ADDR6 adding IPv6 lease with address %1
+A debug message issued when the server is about to add an IPv6 lease
+with the specified address to the DataStax Cassandra backend database.
+
+% DHCPSRV_DSCSQL_COMMIT committing to DataStax Cassandra database
+The code has issued a commit call.
+
+% DHCPSRV_DSCSQL_DB opening DataStax Cassandra lease database: %1
+This informational message is logged when a DHCP server (either V4 or
+V6) is about to open a DataStax Cassandra lease database. The parameters of
+the connection including database name and username needed to access it
+(but not the password if any) are logged.
+
+% DHCPSRV_DSCSQL_DELETE_ADDR deleting lease for address %1
+A debug message issued when the server is attempting to delete a lease
+for the specified address from the DataStax Cassandra database for the specified
+address.
+
+% DHCPSRV_DSCSQL_DELETE_EXPIRED_RECLAIMED4 deleting reclaimed IPv4 leases that expired more than %1 seconds ago
+A debug message issued when the server is removing reclaimed DHCPv4
+leases which have expired longer than a specified period of time.
+The argument is the amount of time Kea waits after a reclaimed
+lease expires before considering its removal.
+
+% DHCPSRV_DSCSQL_DELETE_EXPIRED_RECLAIMED6 deleting reclaimed IPv6 leases that expired more than %1 seconds ago
+A debug message issued when the server is removing reclaimed DHCPv6
+leases which have expired longer than a specified period of time.
+The argument is the amount of time Kea waits after a reclaimed
+lease expires before considering its removal.
+
+% DHCPSRV_DSCSQL_GET_ADDR4 obtaining IPv4 lease for address %1
+A debug message issued when the server is attempting to obtain an IPv4
+lease from the DataStax Cassandra database for the specified address.
+
+% DHCPSRV_DSCSQL_GET_ADDR6 obtaining IPv6 lease for address %1 and lease type %2
+A debug message issued when the server is attempting to obtain an IPv6
+lease from the DataStax Cassandra database for the specified address.
+
+% DHCPSRV_DSCSQL_GET_CLIENTID obtaining IPv4 leases for client ID %1
+A debug message issued when the server is attempting to obtain a set of
+IPv4 leases from the DataStax Cassandra database for a client with the specified
+client identification.
+
+% DHCPSRV_DSCSQL_GET_CLIENTID_HWADDR_SUBID obtaining IPv4 lease for client ID %1, hardware address %2 and subnet ID %3
+A debug message issued when the server is attempting to obtain an IPv4
+lease from the DataStax Cassandra database for a client with the specified
+client ID, hardware address and subnet ID.
+
+% DHCPSRV_DSCSQL_GET_EXPIRED4 obtaining maximum %1 of expired IPv4 leases
+A debug message issued when the server is attempting to obtain expired
+IPv4 leases to reclaim them. The maximum number of leases to be retrieved
+is logged in the message.
+
+% DHCPSRV_DSCSQL_GET_EXPIRED6 obtaining maximum %1 of expired IPv6 leases
+A debug message issued when the server is attempting to obtain expired
+IPv6 leases to reclaim them. The maximum number of leases to be retrieved
+is logged in the message.
+
+% DHCPSRV_DSCSQL_GET_HWADDR obtaining IPv4 leases for hardware address %1
+A debug message issued when the server is attempting to obtain a set of
+IPv4 leases from the DataStax Cassandra database for a client with the specified
+hardware address.
+
+% DHCPSRV_DSCSQL_GET_IAID_DUID obtaining IPv6 leases for IAID %1 and DUID %2 and lease type %3
+A debug message issued when the server is attempting to obtain a set of
+IPv6 lease from the DataStax Cassandra database for a client with the specified
+IAID (Identity Association ID) and DUID (DHCP Unique Identifier).
+
+% DHCPSRV_DSCSQL_GET_IAID_SUBID_DUID obtaining IPv6 leases for IAID %1, Subnet ID %2, DUID %3 and lease type %4
+A debug message issued when the server is attempting to obtain an IPv6
+lease from the DataStax Cassandra database for a client with the specified IAID
+(Identity Association ID), Subnet ID and DUID (DHCP Unique Identifier).
+
+% DHCPSRV_DSCSQL_GET_SUBID_CLIENTID obtaining IPv4 lease for subnet ID %1 and client ID %2
+A debug message issued when the server is attempting to obtain an IPv4
+lease from the DataStax Cassandra database for a client with the specified
+subnet ID and client ID.
+
+% DHCPSRV_DSCSQL_GET_SUBID_HWADDR obtaining IPv4 lease for subnet ID %1 and hardware address %2
+A debug message issued when the server is attempting to obtain an IPv4
+lease from the DataStax Cassandra database for a client with the specified
+subnet ID and hardware address.
+
+% DHCPSRV_DSCSQL_GET_VERSION obtaining schema version information
+A debug message issued when the server is about to obtain schema version
+information from the DataStax Cassandra database.
+
+% DHCPSRV_DSCSQL_ROLLBACK rolling back DataStax Cassandra database
+The code has issued a rollback call.
+
+% DHCPSRV_DSCSQL_UPDATE_ADDR4 updating IPv4 lease for address %1
+A debug message issued when the server is attempting to update IPv4
+lease from the DataStax Cassandra database for the specified address.
+
+% DHCPSRV_DSCSQL_UPDATE_ADDR6 updating IPv6 lease for address %1
+A debug message issued when the server is attempting to update IPv6
+lease from the DataStax Cassandra database for the specified address.
+
}
#endif
+#ifdef HAVE_DSCSQL
+ if (db_type == "dscsql") {
+ isc_throw(NotImplemented, "Sorry, DSCSQL backend for host reservations "
+ "is not implemented yet.");
+ }
+#endif
+
// Get here on no match.
isc_throw(InvalidType, "Hosts database access parameter 'type': " <<
db_type << " is invalid");
#ifdef HAVE_PGSQL
#include <dhcpsrv/pgsql_lease_mgr.h>
#endif
+#ifdef HAVE_DSCSQL
+#include <dhcpsrv/dscsql_lease_mgr.h>
+#endif
#include <boost/algorithm/string.hpp>
#include <boost/foreach.hpp>
getLeaseMgrPtr().reset(new PgSqlLeaseMgr(parameters));
return;
}
+#endif
+#ifdef HAVE_DSCSQL
+ if (parameters[type] == string("dscsql")) {
+ LOG_INFO(dhcpsrv_logger, DHCPSRV_DSCSQL_DB).arg(redacted);
+ getLeaseMgrPtr().reset(new DSCSqlLeaseMgr(parameters));
+ return;
+ }
#endif
if (parameters[type] == string("memfile")) {
LOG_INFO(dhcpsrv_logger, DHCPSRV_MEMFILE_DB).arg(redacted);
// b. Check if the 'type' keyword known and throw an exception if not.
string dbtype = type_ptr->second;
- if ((dbtype != "memfile") && (dbtype != "mysql") && (dbtype != "postgresql")) {
+ if ((dbtype != "memfile") && (dbtype != "mysql") && (dbtype != "postgresql") && (dbtype != "dscsql")) {
isc_throw(BadValue, "unknown backend database type: " << dbtype
<< " (" << config_value->getPosition() << ")");
}
libdhcpsrv_unittests_SOURCES += pgsql_exchange_unittest.cc
libdhcpsrv_unittests_SOURCES += pgsql_lease_mgr_unittest.cc
endif
+if HAVE_DSCSQL
+libdhcpsrv_unittests_SOURCES += dscsql_lease_mgr_unittest.cc
+endif
libdhcpsrv_unittests_SOURCES += pool_unittest.cc
libdhcpsrv_unittests_SOURCES += srv_config_unittest.cc
libdhcpsrv_unittests_SOURCES += subnet_unittest.cc
if HAVE_PGSQL
libdhcpsrv_unittests_CPPFLAGS += $(PGSQL_CPPFLAGS)
endif
+if HAVE_DSCSQL
+libdhcpsrv_unittests_CPPFLAGS += $(DSCSQL_CPPFLAGS)
+endif
libdhcpsrv_unittests_LDFLAGS = $(AM_LDFLAGS) $(CRYPTO_LDFLAGS) $(GTEST_LDFLAGS)
if HAVE_MYSQL
if HAVE_PGSQL
libdhcpsrv_unittests_LDFLAGS += $(PGSQL_LIBS)
endif
+if HAVE_DSCSQL
+libdhcpsrv_unittests_LDFLAGS += $(DSCSQL_LIBS)
+endif
libdhcpsrv_unittests_CXXFLAGS = $(AM_CXXFLAGS)
if USE_CLANGPP
-SUBDIRS = mysql pgsql
+SUBDIRS = mysql pgsql dscsql