# Check lease6Dump*().
run_command \
- mysql_execute "INSERT INTO lease6 VALUES('::10',20,30,(SELECT FROM_UNIXTIME(1678900000)),40,50,1,60,70,1,1,'one,example,com',80,90,16,0,'{ \"a\": 1, \"b\": 2 }',NULL,0)"
+ mysql_execute "INSERT INTO lease6 VALUES('::10',20,30,(SELECT FROM_UNIXTIME(1678900000)),40,50,1,60,70,1,1,'one,example,com',80,90,16,0,'{ \"a\": 1, \"b\": 2 }',0, NULL)"
assert_eq 0 "${EXIT_CODE}" 'INSERT INTO lease6 failed, expected exit code %d, actual %d'
assert_str_eq '' "${OUTPUT}"
run_statement "hosts_255_long_dhcp_identifier" "$qry"
#lease6 duid should support 130 long strings.
- qry="insert into lease6 values('::10',12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890,30,(SELECT FROM_UNIXTIME(1642000000)),40,50,1,60,70,1,1,'one.example.com',80,90,16,0,NULL,NULL,0)"
+ qry="insert into lease6 values('::10',12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890,30,(SELECT FROM_UNIXTIME(1642000000)),40,50,1,60,70,1,1,'one.example.com',80,90,16,0,NULL,0,NULL)"
run_statement "lease6_130_long_duid" "$qry"
+ #lease4_pool_stat new table.
+ run_command \
+ mysql -u"${db_user}" -p"${db_password}" "${db_name}" -e \
+ 'SELECT subnet_id, pool_id, state, leases FROM lease4_pool_stat'
+ assert_eq 0 "${EXIT_CODE}" "lease4_pool_stat table is missing or broken. (expected status code %d, returned %d)"
+
+ #lease6_pool_stat new table.
+ run_command \
+ mysql -u"${db_user}" -p"${db_password}" "${db_name}" -e \
+ 'SELECT subnet_id, pool_id, lease_type, state, leases FROM lease6_pool_stat'
+ assert_eq 0 "${EXIT_CODE}" "lease6_pool_stat table is missing or broken. (expected status code %d, returned %d)"
+
#lease6 new binaddr column.
qry="select binaddr from lease6"
run_statement "lease6" "$qry"
mysql -u"${db_user}" -p"${db_password}" "${db_name}" -e \
'SELECT extended_info_id, remote_id, lease_addr FROM lease6_remote_id'
assert_eq 0 "${EXIT_CODE}" "lease6_remote_id table is missing or broken. (expected status code %d, returned %d)"
-
- #lease4_pool_stat new table.
- run_command \
- mysql -u"${db_user}" -p"${db_password}" "${db_name}" -e \
- 'SELECT subnet_id, pool_id, state, leases FROM lease4_pool_stat'
- assert_eq 0 "${EXIT_CODE}" "lease4_pool_stat table is missing or broken. (expected status code %d, returned %d)"
-
- #lease6_pool_stat new table.
- run_command \
- mysql -u"${db_user}" -p"${db_password}" "${db_name}" -e \
- 'SELECT subnet_id, pool_id, lease_type, state, leases FROM lease6_pool_stat'
- assert_eq 0 "${EXIT_CODE}" "lease6_pool_stat table is missing or broken. (expected status code %d, returned %d)"
}
mysql_upgrade_test() {
# Insert the reference record
insert_sql="\
-insert into lease6 values('::10',203,30,(SELECT FROM_UNIXTIME(1642000000)),40,50,1,60,70,1,1,'one.example.com',80,90,16,0,NULL,NULL,0);\
-insert into lease6 values('::11',213,30,(SELECT FROM_UNIXTIME(1643210000)),40,50,1,60,70,1,1,'',80,90,1,1,'{ }',NULL,0);\
-insert into lease6 values('::12',223,30,(SELECT FROM_UNIXTIME(1643212345)),40,50,1,60,70,1,1,'three,example,com',80,90,4,2,'{ \"a\": 1, \"b\": \"c\" }',NULL,0)"
+insert into lease6 values('::10',203,30,(SELECT FROM_UNIXTIME(1642000000)),40,50,1,60,70,1,1,'one.example.com',80,90,16,0,NULL,0,NULL);\
+insert into lease6 values('::11',213,30,(SELECT FROM_UNIXTIME(1643210000)),40,50,1,60,70,1,1,'',80,90,1,1,'{ }',0,NULL);\
+insert into lease6 values('::12',223,30,(SELECT FROM_UNIXTIME(1643212345)),40,50,1,60,70,1,1,'three,example,com',80,90,4,2,'{ \"a\": 1, \"b\": \"c\" }',0,NULL)"
run_command \
mysql_execute "$insert_sql"
# Assigned state count should be 1
qry="select leases from lease4_pool_stat where subnet_id = 1 and pool_id = 2 and state = 0"
- run_statement "#18" "$qry" 1
+ run_statement "#19" "$qry" 1
# Let's wipe the whole database
mysql_wipe
# Check lease6Dump*().
run_command \
- pgsql_execute "INSERT INTO lease6 VALUES('::10',E'\\\\x3230',30,TO_TIMESTAMP(1678900000),40,50,1,60,70,'t','t','one,example,com',0,E'\\\\x3830',16,0,'{ \"a\": 1, \"b\": 2 }',NULL)"
+ pgsql_execute "INSERT INTO lease6 VALUES('::10',E'\\\\x3230',30,TO_TIMESTAMP(1678900000),40,50,1,60,70,'t','t','one,example,com',0,E'\\\\x3830',16,0,'{ \"a\": 1, \"b\": 2 }',0,NULL)"
assert_eq 0 "${EXIT_CODE}" 'INSERT INTO lease6 failed, expected exit code %d, actual %d'
assert_str_eq '' "${OUTPUT}"
}
pgsql_upgrade_16_to_17_test() {
+ # Added lease4_pool_stat table
+ run_command \
+ pgsql_execute "SELECT subnet_id, pool_id, state, leases FROM lease4_pool_stat"
+ assert_eq 0 "${EXIT_CODE}" "lease4_pool_stat table is missing or broken. (expected status code %d, returned %d)"
+
+ # Added lease6_pool_stat table
+ run_command \
+ pgsql_execute "SELECT subnet_id, pool_id, lease_type, state, leases FROM lease6_pool_stat"
+ assert_eq 0 "${EXIT_CODE}" "lease6_pool_stat table is missing or broken. (expected status code %d, returned %d)"
+
# Added binaddr column to lease6
run_command \
pgsql_execute "select binaddr from lease6"
run_command \
pgsql_execute "select extended_info_id, remote_id, lease_addr from lease6_remote_id"
assert_eq 0 "${EXIT_CODE}" "lease6_remote_id table is missing or broken. (expected status code %d, returned %d)"
-
- # Added lease4_pool_stat table
- run_command \
- pgsql_execute "SELECT subnet_id, pool_id, state, leases FROM lease4_pool_stat"
- assert_eq 0 "${EXIT_CODE}" "lease4_pool_stat table is missing or broken. (expected status code %d, returned %d)"
-
- # Added lease6_pool_stat table
- run_command \
- pgsql_execute "SELECT subnet_id, pool_id, lease_type, state, leases FROM lease6_pool_stat"
- assert_eq 0 "${EXIT_CODE}" "lease6_pool_stat table is missing or broken. (expected status code %d, returned %d)"
}
pgsql_upgrade_test() {
# Because shell evaluates the double quoted string one more time, they need to be doubled.
# Otherwise, the value is interpreted as ASCII instead of raw bytes.
insert_sql="\
-insert into lease6 values('::10',E'\\\\x323033',30,TO_TIMESTAMP(1642000000),40,50,1,60,70,'t','t','one.example.com',0,decode(encode('80','hex'),'hex'),90,16,'',NULL); \
-insert into lease6 values('::11',E'\\\\x323133',30,TO_TIMESTAMP(1643210000),40,50,1,60,70,'t','t','',1,decode(encode('80','hex'),'hex'),90,1,'{ }',NULL); \
-insert into lease6 values('::12',E'\\\\x323233',30,TO_TIMESTAMP(1643212345),40,50,1,60,70,'t','t','three,example,com',2,decode(encode('80','hex'),'hex'),90,4,'{ \"a\": 1, \"b\": \"c\" }',NULL)"
+insert into lease6 values('::10',E'\\\\x323033',30,TO_TIMESTAMP(1642000000),40,50,1,60,70,'t','t','one.example.com',0,decode(encode('80','hex'),'hex'),90,16,'',0,NULL); \
+insert into lease6 values('::11',E'\\\\x323133',30,TO_TIMESTAMP(1643210000),40,50,1,60,70,'t','t','',1,decode(encode('80','hex'),'hex'),90,1,'{ }',0,NULL); \
+insert into lease6 values('::12',E'\\\\x323233',30,TO_TIMESTAMP(1643212345),40,50,1,60,70,'t','t','three,example,com',2,decode(encode('80','hex'),'hex'),90,4,'{ \"a\": 1, \"b\": \"c\" }',0,NULL)"
run_command \
pgsql_execute "$insert_sql"
"pool" : "pd-pool", pool->getID(),
ctx.currentIA().type_ == Lease::TYPE_NA ?
"assigned-nas" : "assigned-pds")),
- static_cast<int64_t>(1));
+ static_cast<int64_t>(-1));
}
// Add it to the removed leases list.
stats_mgr.addValue(StatsMgr::generateName("subnet", subnet->getID(),
StatsMgr::generateName("pool" , pool->getID(),
"reclaimed-declined-addresses")),
- static_cast<int64_t>(-1));
+ static_cast<int64_t>(1));
}
}
return(ss.str());
}
-
} // namespace dhcp
} // namespace isc
return (offer_lft.unspecified() ? 0 : offer_lft.get());
}
-
uint32_t
AllocEngine::getValidLft(const ClientContext4& ctx) {
// If it's BOOTP, use infinite valid lifetime.
return (pool_type_ == Lease::TYPE_V4 ? IOAddress::IPV4_ZERO_ADDRESS() : IOAddress::IPV6_ZERO_ADDRESS());
}
// Get a random pool from the available ones.
- auto pool = pools[available[getRandomNumber(available.size() - 1)]];
+ auto const& pool = pools[available[getRandomNumber(available.size() - 1)]];
// Get or create the pool state.
auto pool_state = getPoolState(pool);
return (IOAddress::IPV6_ZERO_ADDRESS());
}
// Get a random pool from the available ones.
- auto pool = pools[available[getRandomNumber(available.size() - 1)]];
+ auto const& pool = pools[available[getRandomNumber(available.size() - 1)]];
pool6 = boost::dynamic_pointer_cast<Pool6>(pool);
if (!pool6) {
// Something is gravely wrong here
// Set lower and upper bounds based on select mode
Lease4StorageSubnetIdPoolIdIndex::const_iterator lower;
Lease4StorageSubnetIdPoolIdIndex::const_iterator upper;
-
switch (getSelectMode()) {
case ALL_SUBNET_POOLS:
lower = idx.begin();
/// - Lease::STATE_DEFAULT (i.e. assigned)
/// - Lease::STATE_DECLINED
virtual void startSubnets() {
- // Get the subnet_id index
const Lease6StorageSubnetIdIndex& idx
= storage6_.get<SubnetIdIndexTag>();
/// - Lease::STATE_DEFAULT (i.e. assigned)
/// - Lease::STATE_DECLINED
virtual void startSubnetPools() {
- // Get the subnet_id index
const Lease6StorageSubnetIdPoolIdIndex& idx
= storage6_.get<SubnetIdPoolIdIndexTag>();
UPDATE lease6 SET duid = UNHEX('000000') WHERE duid = UNHEX('00');
--- Add the binary version of the IPv6 address for v6 BLQ prefix filter.
-ALTER TABLE lease6
- ADD COLUMN binaddr BINARY(16) DEFAULT NULL;
-CREATE INDEX lease6_by_binaddr ON lease6 (binaddr ASC);
-
--- Create table for v6 BLQ by-relay-id.
-CREATE TABLE lease6_relay_id (
- extended_info_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
- relay_id VARBINARY(130) NOT NULL,
- lease_addr BINARY(16) NOT NULL,
- PRIMARY KEY (extended_info_id),
- INDEX key_lease6_relay_id_by_id (relay_id, lease_addr ASC),
- INDEX key_lease6_relay_id_by_address (lease_addr)
-) ENGINE = INNODB;
-
--- Create table for v6 BLQ by-remote-id.
-CREATE TABLE lease6_remote_id (
- extended_info_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
- remote_id VARBINARY(255) NOT NULL,
- lease_addr BINARY(16) NOT NULL,
- PRIMARY KEY (extended_info_id),
- INDEX key_lease6_remote_id_by_id (remote_id, lease_addr ASC),
- INDEX key_lease6_remote_id_by_address (lease_addr)
-) ENGINE = INNODB;
-
# Add pool_id column to the lease4 table.
ALTER TABLE lease4
ADD COLUMN pool_id INT UNSIGNED NOT NULL DEFAULT 0;
SELECT subnet_id, pool_id, lease_type, state, count(*) FROM lease6
WHERE state = 0 OR state = 1 GROUP BY subnet_id, pool_id, lease_type, state;
+-- Add the binary version of the IPv6 address for v6 BLQ prefix filter.
+ALTER TABLE lease6
+ ADD COLUMN binaddr BINARY(16) DEFAULT NULL;
+CREATE INDEX lease6_by_binaddr ON lease6 (binaddr ASC);
+
+-- Create table for v6 BLQ by-relay-id.
+CREATE TABLE lease6_relay_id (
+ extended_info_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ relay_id VARBINARY(130) NOT NULL,
+ lease_addr BINARY(16) NOT NULL,
+ PRIMARY KEY (extended_info_id),
+ INDEX key_lease6_relay_id_by_id (relay_id, lease_addr ASC),
+ INDEX key_lease6_relay_id_by_address (lease_addr)
+) ENGINE = INNODB;
+
+-- Create table for v6 BLQ by-remote-id.
+CREATE TABLE lease6_remote_id (
+ extended_info_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ remote_id VARBINARY(255) NOT NULL,
+ lease_addr BINARY(16) NOT NULL,
+ PRIMARY KEY (extended_info_id),
+ INDEX key_lease6_remote_id_by_id (remote_id, lease_addr ASC),
+ INDEX key_lease6_remote_id_by_address (lease_addr)
+) ENGINE = INNODB;
+
-- Update the schema version number.
UPDATE schema_version
SET version = '18', minor = '0';
UPDATE lease6 SET duid = UNHEX('000000') WHERE duid = UNHEX('00');
--- Add the binary version of the IPv6 address for v6 BLQ prefix filter.
-ALTER TABLE lease6
- ADD COLUMN binaddr BINARY(16) DEFAULT NULL;
-CREATE INDEX lease6_by_binaddr ON lease6 (binaddr ASC);
-
--- Create table for v6 BLQ by-relay-id.
-CREATE TABLE lease6_relay_id (
- extended_info_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
- relay_id VARBINARY(130) NOT NULL,
- lease_addr BINARY(16) NOT NULL,
- PRIMARY KEY (extended_info_id),
- INDEX key_lease6_relay_id_by_id (relay_id, lease_addr ASC),
- INDEX key_lease6_relay_id_by_address (lease_addr)
-) ENGINE = INNODB;
-
--- Create table for v6 BLQ by-remote-id.
-CREATE TABLE lease6_remote_id (
- extended_info_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
- remote_id VARBINARY(255) NOT NULL,
- lease_addr BINARY(16) NOT NULL,
- PRIMARY KEY (extended_info_id),
- INDEX key_lease6_remote_id_by_id (remote_id, lease_addr ASC),
- INDEX key_lease6_remote_id_by_address (lease_addr)
-) ENGINE = INNODB;
-
# Add pool_id column to the lease4 table.
ALTER TABLE lease4
ADD COLUMN pool_id INT UNSIGNED NOT NULL DEFAULT 0;
SELECT subnet_id, pool_id, lease_type, state, count(*) FROM lease6
WHERE state = 0 OR state = 1 GROUP BY subnet_id, pool_id, lease_type, state;
+-- Add the binary version of the IPv6 address for v6 BLQ prefix filter.
+ALTER TABLE lease6
+ ADD COLUMN binaddr BINARY(16) DEFAULT NULL;
+CREATE INDEX lease6_by_binaddr ON lease6 (binaddr ASC);
+
+-- Create table for v6 BLQ by-relay-id.
+CREATE TABLE lease6_relay_id (
+ extended_info_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ relay_id VARBINARY(130) NOT NULL,
+ lease_addr BINARY(16) NOT NULL,
+ PRIMARY KEY (extended_info_id),
+ INDEX key_lease6_relay_id_by_id (relay_id, lease_addr ASC),
+ INDEX key_lease6_relay_id_by_address (lease_addr)
+) ENGINE = INNODB;
+
+-- Create table for v6 BLQ by-remote-id.
+CREATE TABLE lease6_remote_id (
+ extended_info_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ remote_id VARBINARY(255) NOT NULL,
+ lease_addr BINARY(16) NOT NULL,
+ PRIMARY KEY (extended_info_id),
+ INDEX key_lease6_remote_id_by_id (remote_id, lease_addr ASC),
+ INDEX key_lease6_remote_id_by_address (lease_addr)
+) ENGINE = INNODB;
+
-- Update the schema version number.
UPDATE schema_version
SET version = '18', minor = '0';
UPDATE lease6 SET duid = E'\\x000000' WHERE duid = E'\\x00';
--- Add the binary version of the IPv6 address for v6 BLQ prefix filter.
-ALTER TABLE lease6
- ADD COLUMN binaddr BYTEA DEFAULT NULL;
-CREATE INDEX lease6_by_binaddr ON lease6 (binaddr ASC);
-
--- Create table for v6 BLQ by-relay-id.
-CREATE TABLE lease6_relay_id (
- extended_info_id SERIAL PRIMARY KEY NOT NULL,
- relay_id BYTEA NOT NULL,
- lease_addr BYTEA NOT NULL);
-CREATE INDEX lease6_relay_id_by_id ON lease6_relay_id (relay_id, lease_addr ASC);
-CREATE INDEX lease6_relay_id_by_address ON lease6_relay_id (lease_addr);
-
--- Create table for v6 BLQ by-remote-id.
-CREATE TABLE lease6_remote_id (
- extended_info_id SERIAL PRIMARY KEY NOT NULL,
- remote_id BYTEA NOT NULL,
- lease_addr BYTEA NOT NULL);
-CREATE INDEX lease6_remote_id_by_id ON lease6_remote_id (remote_id, lease_addr ASC);
-CREATE INDEX lease6_remote_id_by_address ON lease6_remote_id (lease_addr);
-
-- Add pool_id column to the lease4 table.
ALTER TABLE lease4
ADD COLUMN pool_id BIGINT NOT NULL DEFAULT 0;
SELECT subnet_id, pool_id, lease_type, state, count(*) FROM lease6
WHERE state = 0 OR state = 1 GROUP BY subnet_id, pool_id, lease_type, state;
+-- Add the binary version of the IPv6 address for v6 BLQ prefix filter.
+ALTER TABLE lease6
+ ADD COLUMN binaddr BYTEA DEFAULT NULL;
+CREATE INDEX lease6_by_binaddr ON lease6 (binaddr ASC);
+
+-- Create table for v6 BLQ by-relay-id.
+CREATE TABLE lease6_relay_id (
+ extended_info_id SERIAL PRIMARY KEY NOT NULL,
+ relay_id BYTEA NOT NULL,
+ lease_addr BYTEA NOT NULL);
+CREATE INDEX lease6_relay_id_by_id ON lease6_relay_id (relay_id, lease_addr ASC);
+CREATE INDEX lease6_relay_id_by_address ON lease6_relay_id (lease_addr);
+
+-- Create table for v6 BLQ by-remote-id.
+CREATE TABLE lease6_remote_id (
+ extended_info_id SERIAL PRIMARY KEY NOT NULL,
+ remote_id BYTEA NOT NULL,
+ lease_addr BYTEA NOT NULL);
+CREATE INDEX lease6_remote_id_by_id ON lease6_remote_id (remote_id, lease_addr ASC);
+CREATE INDEX lease6_remote_id_by_address ON lease6_remote_id (lease_addr);
+
-- Update the schema version number.
UPDATE schema_version
SET version = '17', minor = '0';
UPDATE lease6 SET duid = E'\\\\x000000' WHERE duid = E'\\\\x00';
--- Add the binary version of the IPv6 address for v6 BLQ prefix filter.
-ALTER TABLE lease6
- ADD COLUMN binaddr BYTEA DEFAULT NULL;
-CREATE INDEX lease6_by_binaddr ON lease6 (binaddr ASC);
-
--- Create table for v6 BLQ by-relay-id.
-CREATE TABLE lease6_relay_id (
- extended_info_id SERIAL PRIMARY KEY NOT NULL,
- relay_id BYTEA NOT NULL,
- lease_addr BYTEA NOT NULL);
-CREATE INDEX lease6_relay_id_by_id ON lease6_relay_id (relay_id, lease_addr ASC);
-CREATE INDEX lease6_relay_id_by_address ON lease6_relay_id (lease_addr);
-
--- Create table for v6 BLQ by-remote-id.
-CREATE TABLE lease6_remote_id (
- extended_info_id SERIAL PRIMARY KEY NOT NULL,
- remote_id BYTEA NOT NULL,
- lease_addr BYTEA NOT NULL);
-CREATE INDEX lease6_remote_id_by_id ON lease6_remote_id (remote_id, lease_addr ASC);
-CREATE INDEX lease6_remote_id_by_address ON lease6_remote_id (lease_addr);
-
-- Add pool_id column to the lease4 table.
ALTER TABLE lease4
ADD COLUMN pool_id BIGINT NOT NULL DEFAULT 0;
SELECT subnet_id, pool_id, lease_type, state, count(*) FROM lease6
WHERE state = 0 OR state = 1 GROUP BY subnet_id, pool_id, lease_type, state;
+-- Add the binary version of the IPv6 address for v6 BLQ prefix filter.
+ALTER TABLE lease6
+ ADD COLUMN binaddr BYTEA DEFAULT NULL;
+CREATE INDEX lease6_by_binaddr ON lease6 (binaddr ASC);
+
+-- Create table for v6 BLQ by-relay-id.
+CREATE TABLE lease6_relay_id (
+ extended_info_id SERIAL PRIMARY KEY NOT NULL,
+ relay_id BYTEA NOT NULL,
+ lease_addr BYTEA NOT NULL);
+CREATE INDEX lease6_relay_id_by_id ON lease6_relay_id (relay_id, lease_addr ASC);
+CREATE INDEX lease6_relay_id_by_address ON lease6_relay_id (lease_addr);
+
+-- Create table for v6 BLQ by-remote-id.
+CREATE TABLE lease6_remote_id (
+ extended_info_id SERIAL PRIMARY KEY NOT NULL,
+ remote_id BYTEA NOT NULL,
+ lease_addr BYTEA NOT NULL);
+CREATE INDEX lease6_remote_id_by_id ON lease6_remote_id (remote_id, lease_addr ASC);
+CREATE INDEX lease6_remote_id_by_address ON lease6_remote_id (lease_addr);
+
-- Update the schema version number.
UPDATE schema_version
SET version = '17', minor = '0';