summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/bin/admin/tests/pgsql_tests.sh.in19
-rw-r--r--src/lib/dhcpsrv/pgsql_lease_mgr.cc96
-rw-r--r--src/share/database/scripts/pgsql/dhcpdb_create.pgsql12
-rw-r--r--src/share/database/scripts/pgsql/upgrade_018_to_019.sh.in15
4 files changed, 78 insertions, 64 deletions
diff --git a/src/bin/admin/tests/pgsql_tests.sh.in b/src/bin/admin/tests/pgsql_tests.sh.in
index 08d6b0deb0..32d37e6ba7 100644
--- a/src/bin/admin/tests/pgsql_tests.sh.in
+++ b/src/bin/admin/tests/pgsql_tests.sh.in
@@ -869,11 +869,26 @@ pgsql_upgrade_17_to_18_test() {
}
pgsql_upgrade_18_to_19_test() {
- # The function, pgsql_ddns_conflict_resolution_mode_update_test, is called explicitly
- # and tests conversion of ddns-use-conflict-resolution to ddns-conflict-resolution-mode.
+ # The function, pgsql_ddns_conflict_resolution_mode_update_test,
+ # is called explicitly and tests conversion of
+ # ddns-use-conflict-resolution to ddns-conflict-resolution-mode.
# For now this function only verifies version number.
version=$("${kea_admin}" db-version pgsql -u "${db_user}" -p "${db_password}" -n "${db_name}" -d "${db_scripts_dir}")
assert_str_eq "19.0" "${version}" 'Expected kea-admin to return %s, returned value was %s'
+
+ # Verify that lease6_relay_id lease_addr is binary.
+ qry="insert into lease6_relay_id(relay_id,lease_addr) values('18219',cast('3001::99' as inet));"
+ run_statement "lease6_relay_id_insert" "$qry"
+
+ qry="select host(lease_addr) from lease6_relay_id where relay_id = '18219';"
+ run_statement "lease6_relay_id_get" "$qry" "3001::99"
+
+ # Verify that lease6_remote_id lease_addr is binary.
+ qry="insert into lease6_remote_id(remote_id,lease_addr) values('18219',cast('3001::99' as inet));"
+ run_statement "lease6_remote_id_insert" "$qry"
+
+ qry="select host(lease_addr) from lease6_remote_id where remote_id = '18219';"
+ run_statement "lease6_remote_id_get" "$qry" "3001::99"
}
pgsql_upgrade_test() {
diff --git a/src/lib/dhcpsrv/pgsql_lease_mgr.cc b/src/lib/dhcpsrv/pgsql_lease_mgr.cc
index a52f5d7355..93d282fd73 100644
--- a/src/lib/dhcpsrv/pgsql_lease_mgr.cc
+++ b/src/lib/dhcpsrv/pgsql_lease_mgr.cc
@@ -576,56 +576,58 @@ PgSqlTaggedStatement tagged_statements[] = {
"DELETE FROM lease6_remote_id" },
// DELETE_RELAY_ID6
- { 1, { OID_BYTEA },
+ { 1, { OID_VARCHAR },
"delete_relay_id6",
- "DELETE FROM lease6_relay_id WHERE lease_addr = $1" },
+ "DELETE FROM lease6_relay_id WHERE lease_addr = cast($1 as inet)" },
// DELETE_REMOTE_ID6
- { 1, { OID_BYTEA },
+ { 1, { OID_VARCHAR },
"delete_remote_id6",
- "DELETE FROM lease6_remote_id WHERE lease_addr = $1" },
+ "DELETE FROM lease6_remote_id WHERE lease_addr = cast($1 as inet)" },
// ADD_RELAY_ID6
- { 2, { OID_BYTEA, OID_BYTEA },
+ { 2, { OID_BYTEA, OID_VARCHAR },
"add_relay_id6",
"INSERT INTO lease6_relay_id(relay_id, lease_addr) "
- "VALUES ($1, $2)" },
+ "VALUES ($1, cast($2 as inet))" },
// ADD_REMOTE_ID6
- { 2, { OID_BYTEA, OID_BYTEA },
+ { 2, { OID_BYTEA, OID_VARCHAR },
"add_remote_id6",
"INSERT INTO lease6_remote_id(remote_id, lease_addr) "
- "VALUES ($1, $2)" },
+ "VALUES ($1, cast($2 as inet))" },
// GET_RELAY_ID6
- { 3, { OID_BYTEA, OID_BYTEA, OID_INT8 },
+ { 3, { OID_BYTEA, OID_VARCHAR, OID_INT8 },
"get_relay_id6",
- "SELECT lease_addr FROM lease6_relay_id "
- "WHERE relay_id = $1 AND lease_addr > $2 "
+ "SELECT host(lease_addr) FROM lease6_relay_id "
+ "WHERE relay_id = $1 AND lease_addr > cast($2 as inet) "
"ORDER BY lease_addr "
"LIMIT $3" },
// GET_REMOTE_ID6
- { 3, { OID_BYTEA, OID_BYTEA, OID_INT8 },
+ { 3, { OID_BYTEA, OID_VARCHAR, OID_INT8 },
"get_remote_id6",
- "SELECT lease_addr FROM lease6_remote_id "
- "WHERE remote_id = $1 AND lease_addr > $2 "
+ "SELECT host(lease_addr) FROM lease6_remote_id "
+ "WHERE remote_id = $1 AND lease_addr > cast($2 as inet) "
"ORDER BY lease_addr "
"LIMIT $3" },
// GET_RELAY_ID6_LINK
- { 4, { OID_BYTEA, OID_BYTEA, OID_BYTEA, OID_INT8 },
+ { 4, { OID_BYTEA, OID_VARCHAR, OID_VARCHAR, OID_INT8 },
"get_relay_id6_link",
- "SELECT lease_addr FROM lease6_relay_id "
- "WHERE relay_id = $1 AND lease_addr BETWEEN $2 and $3 "
+ "SELECT host(lease_addr) FROM lease6_relay_id "
+ "WHERE relay_id = $1 AND lease_addr "
+ "BETWEEN cast($2 as inet) and cast($3 as inet) "
"ORDER BY lease_addr "
"LIMIT $4" },
// GET_REMOTE_ID6_LINK
- { 4, { OID_BYTEA, OID_BYTEA, OID_BYTEA, OID_INT8 },
+ { 4, { OID_BYTEA, OID_VARCHAR, OID_VARCHAR, OID_INT8 },
"get_remote_id6_link",
- "SELECT lease_addr FROM lease6_remote_id "
- "WHERE remote_id = $1 AND lease_addr BETWEEN $2 and $3 "
+ "SELECT host(lease_addr) FROM lease6_remote_id "
+ "WHERE remote_id = $1 AND lease_addr "
+ "BETWEEN cast($2 as inet) and cast($3 as inet) "
"ORDER BY lease_addr "
"LIMIT $4" },
@@ -3029,8 +3031,7 @@ PgSqlLeaseMgr::deleteRelayId6(const IOAddress& addr) {
// Set up the WHERE clause value.
PsqlBindArray bind_array;
- std::vector<uint8_t> addr_data = addr.toBytes();
- // Do not check the address length as it does not really matter.
+ std::string addr_data = addr.toText();
bind_array.add(addr_data);
// Get a context.
@@ -3058,8 +3059,7 @@ PgSqlLeaseMgr::deleteRemoteId6(const IOAddress& addr) {
// Set up the WHERE clause value.
PsqlBindArray bind_array;
- std::vector<uint8_t> addr_data = addr.toBytes();
- // Do not check the address length as it does not really matter.
+ std::string addr_data = addr.toText();
bind_array.add(addr_data);
// Get a context.
@@ -3095,10 +3095,7 @@ PgSqlLeaseMgr::addRelayId6(const IOAddress& lease_addr,
bind_array.add(relay_id);
// Bind the lease address.
- std::vector<uint8_t> lease_addr_data = lease_addr.toBytes();
- if (lease_addr_data.size() != 16) {
- isc_throw(DbOperationError, "lease6 address is not 16 bytes long");
- }
+ std::string lease_addr_data = lease_addr.toText();
bind_array.add(lease_addr_data);
// Get a context.
@@ -3134,10 +3131,7 @@ PgSqlLeaseMgr::addRemoteId6(const IOAddress& lease_addr,
bind_array.add(remote_id);
// Bind the lease address.
- std::vector<uint8_t> lease_addr_data = lease_addr.toBytes();
- if (lease_addr_data.size() != 16) {
- isc_throw(DbOperationError, "lease6 address is not 16 bytes long");
- }
+ std::string lease_addr_data = lease_addr.toText();
bind_array.add(lease_addr_data);
// Get a context.
@@ -3459,12 +3453,8 @@ PgSqlLeaseMgr::getExtendedInfo6Common(PgSqlLeaseContextPtr& ctx,
int rows = PQntuples(r);
std::list<IOAddress> result;
for (int i = 0; i < rows; ++i) {
- std::vector<uint8_t> addr_data;
- PgSqlLeaseExchange::convertFromBytea(r, i, 0, addr_data);
- if (addr_data.size() != 16) {
- isc_throw(BadValue, "received lease6 address is not 16 bytes long");
- }
- result.push_back(IOAddress::fromBytes(AF_INET6, &addr_data[0]));
+ IOAddress addr(PgSqlLeaseExchange::getIPv6Value(r, i, 0));
+ result.push_back(addr);
}
return (result);
}
@@ -3519,10 +3509,7 @@ PgSqlLeaseMgr::getLeases6ByRelayId(const DUID& relay_id,
bind_array.add(relay_id_data);
// Bind the lower bound address.
- std::vector<uint8_t> lb_addr_data = lower_bound_address.toBytes();
- if (lb_addr_data.size() != 16) {
- isc_throw(DbOperationError, "lower bound address is not 16 bytes long");
- }
+ std::string lb_addr_data = lower_bound_address.toText();
bind_array.add(lb_addr_data);
// Bind page size value.
@@ -3552,17 +3539,11 @@ PgSqlLeaseMgr::getLeases6ByRelayId(const DUID& relay_id,
bind_array.add(relay_id_data);
// Bind the start address.
- std::vector<uint8_t> start_addr_data = start_addr.toBytes();
- if (start_addr_data.size() != 16) {
- isc_throw(DbOperationError, "start address is not 16 bytes long");
- }
+ std::string start_addr_data = start_addr.toText();
bind_array.add(start_addr_data);
// Bind the last address.
- std::vector<uint8_t> last_addr_data = last_addr.toBytes();
- if (last_addr_data.size() != 16) {
- isc_throw(DbOperationError, "last address is not 16 bytes long");
- }
+ std::string last_addr_data = last_addr.toText();
bind_array.add(last_addr_data);
// Bind page size value.
@@ -3654,10 +3635,7 @@ PgSqlLeaseMgr::getLeases6ByRemoteId(const OptionBuffer& remote_id,
bind_array.add(remote_id);
// Bind the lower bound address.
- std::vector<uint8_t> lb_addr_data = lower_bound_address.toBytes();
- if (lb_addr_data.size() != 16) {
- isc_throw(DbOperationError, "lower bound address is not 16 bytes long");
- }
+ std::string lb_addr_data = lower_bound_address.toText();
bind_array.add(lb_addr_data);
// Bind page size value.
@@ -3687,17 +3665,11 @@ PgSqlLeaseMgr::getLeases6ByRemoteId(const OptionBuffer& remote_id,
bind_array.add(remote_id);
// Bind the start address.
- std::vector<uint8_t> start_addr_data = start_addr.toBytes();
- if (start_addr_data.size() != 16) {
- isc_throw(DbOperationError, "start address is not 16 bytes long");
- }
+ std::string start_addr_data = start_addr.toText();
bind_array.add(start_addr_data);
// Bind the last address.
- std::vector<uint8_t> last_addr_data = last_addr.toBytes();
- if (last_addr_data.size() != 16) {
- isc_throw(DbOperationError, "last address is not 16 bytes long");
- }
+ std::string last_addr_data = last_addr.toText();
bind_array.add(last_addr_data);
// Bind page size value.
diff --git a/src/share/database/scripts/pgsql/dhcpdb_create.pgsql b/src/share/database/scripts/pgsql/dhcpdb_create.pgsql
index c5f488329b..8438937412 100644
--- a/src/share/database/scripts/pgsql/dhcpdb_create.pgsql
+++ b/src/share/database/scripts/pgsql/dhcpdb_create.pgsql
@@ -6284,6 +6284,18 @@ UPDATE dhcp6_global_parameter
SET name = 'ddns-conflict-resolution-mode', value = 'no-check-with-dhcid', parameter_type = 4
WHERE name = 'ddns-use-conflict-resolution' and value = 'false';
+-- Clear lease6_relay_id table.
+DELETE FROM lease6_relay_id;
+
+-- Change lease6_relay_id:lease_addr to INET.
+ALTER TABLE lease6_relay_id ALTER COLUMN lease_addr TYPE INET USING '::';
+
+-- Clear lease6_remote_id table.
+DELETE FROM lease6_remote_id;
+
+-- Change lease6_remote_id:lease_addr to INET.
+ALTER TABLE lease6_remote_id ALTER COLUMN lease_addr TYPE INET USING '::';
+
-- Update the schema version number.
UPDATE schema_version
SET version = '19', minor = '0';
diff --git a/src/share/database/scripts/pgsql/upgrade_018_to_019.sh.in b/src/share/database/scripts/pgsql/upgrade_018_to_019.sh.in
index 088fcd2cf6..8f5ded834a 100644
--- a/src/share/database/scripts/pgsql/upgrade_018_to_019.sh.in
+++ b/src/share/database/scripts/pgsql/upgrade_018_to_019.sh.in
@@ -34,6 +34,7 @@ if [ "$VERSION" != "18.0" ]; then
fi
psql "$@" >/dev/null <<EOF
+START TRANSACTION;
-- This line starts the schema upgrade to version 19.0.
@@ -55,6 +56,20 @@ UPDATE dhcp6_global_parameter
SET name = 'ddns-conflict-resolution-mode', value = 'no-check-with-dhcid', parameter_type = 4
WHERE name = 'ddns-use-conflict-resolution' and value = 'false';
+-- This line starts the schema upgrade to version 19.0.
+
+-- Clear lease6_relay_id table.
+DELETE FROM lease6_relay_id;
+
+-- Change lease6_relay_id:lease_addr to INET.
+ALTER TABLE lease6_relay_id ALTER COLUMN lease_addr TYPE INET USING '::';
+
+-- Clear lease6_remote_id table.
+DELETE FROM lease6_remote_id;
+
+-- Change lease6_remote_id:lease_addr to INET.
+ALTER TABLE lease6_remote_id ALTER COLUMN lease_addr TYPE INET USING '::';
+
-- Update the schema version number.
UPDATE schema_version
SET version = '19', minor = '0';