}
# Verifies inetToBytea function
pgsql_inetToBytea() {
- test_start "pgsql.pgsql_sflqPickFreeLease6"
+ test_start "pgsql.pgsql_initToBytea"
# Let's wipe the whole database
pgsql_wipe
run_statement "case 1" "$sql" "::1"
sql="select byteaToInet(inetToBytea('::2222:1'::inet))"
- run_statement "case 1" "$sql" "::34.34.0.1"
+ run_statement "case 2" "$sql" "::34.34.0.1"
sql="select byteaToInet(inetToBytea('::'::inet))"
- run_statement "case 1" "$sql" "::"
+ run_statement "case 3" "$sql" "::"
sql="select byteaToInet(inetToBytea('3001::'::inet))"
- run_statement "case 1" "$sql" "3001::"
+ run_statement "case 4" "$sql" "3001::"
sql="select byteaToInet(inetToBytea('3001::ff'::inet))"
- run_statement "case 1" "$sql" "3001::ff"
+ run_statement "case 5" "$sql" "3001::ff"
sql="select byteaToInet(inetToBytea('2:dead:beef::ff'::inet))"
- run_statement "case 1" "$sql" "2:dead:beef::ff"
+ run_statement "case 6" "$sql" "2:dead:beef::ff"
sql="select byteaToInet(inetToBytea('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff'::inet))"
- run_statement "case 1" "$sql" "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"
+ run_statement "case 7" "$sql" "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"
-# pgsql_wipe
+ sql="select byteaToInet(inetToBytea('00FF:0000:0000:0000:0000:0000:2222:1'))"
+ run_statement "case 8" "$sql" "ff::2222:1"
+
+
+ pgsql_wipe
test_finish 0
}
}
ASSERT_EQ(picked.size(), 6);
- ASSERT_TRUE(picked.contains(IOAddress("192.0.1.0")));
- ASSERT_TRUE(picked.contains(IOAddress("192.0.1.1")));
- ASSERT_TRUE(picked.contains(IOAddress("192.0.2.0")));
- ASSERT_TRUE(picked.contains(IOAddress("192.0.2.1")));
- ASSERT_TRUE(picked.contains(IOAddress("192.0.3.0")));
- ASSERT_TRUE(picked.contains(IOAddress("192.0.3.1")));
+ ASSERT_TRUE(picked.count(IOAddress("192.0.1.0")));
+ ASSERT_TRUE(picked.count(IOAddress("192.0.1.1")));
+ ASSERT_TRUE(picked.count(IOAddress("192.0.2.0")));
+ ASSERT_TRUE(picked.count(IOAddress("192.0.2.1")));
+ ASSERT_TRUE(picked.count(IOAddress("192.0.3.0")));
+ ASSERT_TRUE(picked.count(IOAddress("192.0.3.1")));
// Verify an additional pick returns zero address.
ASSERT_EQ(alloc.pickAddress(client_classes, IdentifierBaseTypePtr(), zero_address),
}
ASSERT_EQ(picked.size(), 2);
- ASSERT_TRUE(picked.contains(IOAddress("192.0.2.0")));
- ASSERT_TRUE(picked.contains(IOAddress("192.0.2.1")));
+ ASSERT_TRUE(picked.count(IOAddress("192.0.2.0")));
+ ASSERT_TRUE(picked.count(IOAddress("192.0.2.1")));
// Verify an additional pick returns zero address.
ASSERT_EQ(alloc.pickAddress(client_classes, IdentifierBaseTypePtr(), zero_address),
}
ASSERT_EQ(picked.size(), 4);
- ASSERT_TRUE(picked.contains(IOAddress("192.0.1.0")));
- ASSERT_TRUE(picked.contains(IOAddress("192.0.1.1")));
- ASSERT_TRUE(picked.contains(IOAddress("192.0.3.0")));
- ASSERT_TRUE(picked.contains(IOAddress("192.0.3.1")));
+ ASSERT_TRUE(picked.count(IOAddress("192.0.1.0")));
+ ASSERT_TRUE(picked.count(IOAddress("192.0.1.1")));
+ ASSERT_TRUE(picked.count(IOAddress("192.0.3.0")));
+ ASSERT_TRUE(picked.count(IOAddress("192.0.3.1")));
// Verify an additional pick returns zero address.
ASSERT_EQ(alloc.pickAddress(client_classes, IdentifierBaseTypePtr(), zero_address),
}
ASSERT_EQ(picked.size(), 6);
- ASSERT_TRUE(picked.contains(IOAddress("3001::10")));
- ASSERT_TRUE(picked.contains(IOAddress("3001::11")));
- ASSERT_TRUE(picked.contains(IOAddress("3001::20")));
- ASSERT_TRUE(picked.contains(IOAddress("3001::21")));
- ASSERT_TRUE(picked.contains(IOAddress("3001::30")));
- ASSERT_TRUE(picked.contains(IOAddress("3001::31")));
+ ASSERT_TRUE(picked.count(IOAddress("3001::10")));
+ ASSERT_TRUE(picked.count(IOAddress("3001::11")));
+ ASSERT_TRUE(picked.count(IOAddress("3001::20")));
+ ASSERT_TRUE(picked.count(IOAddress("3001::21")));
+ ASSERT_TRUE(picked.count(IOAddress("3001::30")));
+ ASSERT_TRUE(picked.count(IOAddress("3001::31")));
// Verify an additional pick returns zero address.
ASSERT_EQ(alloc.pickAddress(client_classes, IdentifierBaseTypePtr(), zero_address),
}
ASSERT_EQ(picked.size(), 2);
- ASSERT_TRUE(picked.contains(IOAddress("3001::20")));
- ASSERT_TRUE(picked.contains(IOAddress("3001::21")));
+ ASSERT_TRUE(picked.count(IOAddress("3001::20")));
+ ASSERT_TRUE(picked.count(IOAddress("3001::21")));
// Verify an additional pick returns zero address.
ASSERT_EQ(alloc.pickAddress(client_classes, IdentifierBaseTypePtr(), zero_address),
}
ASSERT_EQ(picked.size(), 4);
- ASSERT_TRUE(picked.contains(IOAddress("3001::10")));
- ASSERT_TRUE(picked.contains(IOAddress("3001::11")));
- ASSERT_TRUE(picked.contains(IOAddress("3001::30")));
- ASSERT_TRUE(picked.contains(IOAddress("3001::31")));
+ ASSERT_TRUE(picked.count(IOAddress("3001::10")));
+ ASSERT_TRUE(picked.count(IOAddress("3001::11")));
+ ASSERT_TRUE(picked.count(IOAddress("3001::30")));
+ ASSERT_TRUE(picked.count(IOAddress("3001::31")));
// Verify an additional pick returns zero address.
ASSERT_EQ(alloc.pickAddress(client_classes, IdentifierBaseTypePtr(), zero_address),
}
ASSERT_EQ(picked.size(), 6);
- ASSERT_TRUE(picked.contains(IOAddress("2001::10")));
- ASSERT_TRUE(picked.contains(IOAddress("2001::11")));
- ASSERT_TRUE(picked.contains(IOAddress("2001::20")));
- ASSERT_TRUE(picked.contains(IOAddress("2001::21")));
- ASSERT_TRUE(picked.contains(IOAddress("2001::30")));
- ASSERT_TRUE(picked.contains(IOAddress("2001::31")));
+ ASSERT_TRUE(picked.count(IOAddress("2001::10")));
+ ASSERT_TRUE(picked.count(IOAddress("2001::11")));
+ ASSERT_TRUE(picked.count(IOAddress("2001::20")));
+ ASSERT_TRUE(picked.count(IOAddress("2001::21")));
+ ASSERT_TRUE(picked.count(IOAddress("2001::30")));
+ ASSERT_TRUE(picked.count(IOAddress("2001::31")));
// Verify an additional pick returns zero address.
ASSERT_EQ(alloc.pickPrefix(client_classes, dummy, IdentifierBaseTypePtr(),
}
ASSERT_EQ(picked.size(), 2);
- ASSERT_TRUE(picked.contains(IOAddress("2001::20")));
- ASSERT_TRUE(picked.contains(IOAddress("2001::21")));
+ ASSERT_TRUE(picked.count(IOAddress("2001::20")));
+ ASSERT_TRUE(picked.count(IOAddress("2001::21")));
// Verify an additional pick returns zero address.
ASSERT_EQ(alloc.pickPrefix(client_classes, dummy, IdentifierBaseTypePtr(),
}
ASSERT_EQ(picked.size(), 4);
- ASSERT_TRUE(picked.contains(IOAddress("2001::10")));
- ASSERT_TRUE(picked.contains(IOAddress("2001::11")));
- ASSERT_TRUE(picked.contains(IOAddress("2001::30")));
- ASSERT_TRUE(picked.contains(IOAddress("2001::31")));
+ ASSERT_TRUE(picked.count(IOAddress("2001::10")));
+ ASSERT_TRUE(picked.count(IOAddress("2001::11")));
+ ASSERT_TRUE(picked.count(IOAddress("2001::30")));
+ ASSERT_TRUE(picked.count(IOAddress("2001::31")));
// Verify an additional pick returns zero address.
ASSERT_EQ(alloc.pickPrefix(client_classes, dummy, IdentifierBaseTypePtr(),
/// @return True if the pool is (re)created, false it if already exists.
virtual bool sflqCreateFlqPool4(asiolink::IOAddress start_address,
asiolink::IOAddress end_address,
- SubnetID subnet_id, bool recreate = false);
+ SubnetID subnet_id, bool recreate = false)
+ override;
/// @brief Finds a free V4 address within the given pool range.
///
///
/// @return A free V4 address or IOAddress::IPV4_ZERO_ADDRESS().
virtual asiolink::IOAddress sflqPickFreeLease4(asiolink::IOAddress start_address,
- asiolink::IOAddress end_address);
+ asiolink::IOAddress end_address)
+ override;
/// @brief Calls stored procedure to create an SFLQ pool for v6.
///
virtual bool sflqCreateFlqPool6(asiolink::IOAddress start_address,
asiolink::IOAddress end_address,
Lease::Type lease_type, uint8_t delegated_len,
- SubnetID subnet_id, bool recreate = false);
+ SubnetID subnet_id, bool recreate = false)
+ override;
/// @brief Finds a free V6 address/prefix within the given pool range.
///
///
/// @return A free V6 address/prefix or IOAddress::IPV6_ZERO_ADDRESS().
virtual asiolink::IOAddress sflqPickFreeLease6(asiolink::IOAddress start_address,
- asiolink::IOAddress end_address);
+ asiolink::IOAddress end_address)
+ override;
/// @brief Finds an SflqPool in the list of SflqPools
///
RETURNS bytea
AS $$
DECLARE
- octets TEXT[];
- num_octets SMALLINT;
- octet_idx SMALLINT;
- octet_len SMALLINT;
- octet TEXT;
+ hextets TEXT[];
+ num_hextets SMALLINT;
+ hextet_idx SMALLINT;
+ hextet_len SMALLINT;
+ hextet TEXT;
dummy VARCHAR(256);
bin_address bytea;
bin_idx SMALLINT;
digit_place SMALLINT;
cur_byte SMALLINT;
num_pad SMALLINT;
- first_octet_zero BOOLEAN := false;
+ first_hextet_zero BOOLEAN := false;
BEGIN
bin_address = '\x00000000000000000000000000000000'::bytea;
IF (inet_address < '0000:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF'::inet)
THEN
inet_address = inet_address | ('FFFF::'::inet);
- first_octet_zero = true;
+ first_hextet_zero = true;
END IF;
- octets = string_to_array(host(inet_address), ':');
- num_octets = array_length(octets, 1);
+ hextets = string_to_array(host(inet_address), ':');
+ num_hextets = array_length(hextets, 1);
- -- Skip first octet if we faked above.
- IF (first_octet_zero = true)
+ -- Skip first hextet if we faked above.
+ IF (first_hextet_zero = true)
THEN
- octet_idx = 2;
+ hextet_idx = 2;
bin_idx = 2;
ELSE
- octet_idx = 1;
+ hextet_idx = 1;
bin_idx = 0;
END IF;
dummy = '';
- WHILE (octet_idx <= num_octets) LOOP
- octet = octets[octet_idx];
- octet_len = char_length(octet);
- IF (octet_len = 0)
+ WHILE (hextet_idx <= num_hextets) LOOP
+ hextet = hextets[hextet_idx];
+ hextet_len = char_length(hextet);
+ IF (hextet_len = 0)
THEN
- -- Skip over omitted octets.
- num_pad = 8 - num_octets + 1;
+ -- Skip over omitted hextets.
+ num_pad = 8 - num_hextets + 1;
bin_idx = bin_idx + (num_pad * 2);
ELSE
- num_pad = 4 - octet_len;
+ num_pad = 4 - hextet_len;
digit_idx = 1;
digit_place = 1;
WHILE (digit_place <= 4) LOOP
digit = 0;
num_pad = num_pad - 1;
ELSE
- digit = hexToBin(ascii(substring(octet from digit_idx for 1))::smallint);
+ digit = hexToBin(ascii(substring(hextet from digit_idx for 1))::smallint);
digit_idx = digit_idx + 1;
END IF;
END IF;
digit_place = digit_place + 1;
END LOOP;
- dummy = dummy || octet || '+';
+ dummy = dummy || hextet || '+';
END IF;
- octet_idx = octet_idx + 1;
+ hextet_idx = hextet_idx + 1;
END LOOP;
RETURN (bin_address);
RETURNS bytea
AS \$\$
DECLARE
- octets TEXT[];
- num_octets SMALLINT;
- octet_idx SMALLINT;
- octet_len SMALLINT;
- octet TEXT;
+ hextets TEXT[];
+ num_hextets SMALLINT;
+ hextet_idx SMALLINT;
+ hextet_len SMALLINT;
+ hextet TEXT;
dummy VARCHAR(256);
bin_address bytea;
bin_idx SMALLINT;
digit_place SMALLINT;
cur_byte SMALLINT;
num_pad SMALLINT;
- first_octet_zero BOOLEAN := false;
+ first_hextet_zero BOOLEAN := false;
BEGIN
bin_address = '\x00000000000000000000000000000000'::bytea;
IF (inet_address < '0000:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF'::inet)
THEN
inet_address = inet_address | ('FFFF::'::inet);
- first_octet_zero = true;
+ first_hextet_zero = true;
END IF;
- octets = string_to_array(host(inet_address), ':');
- num_octets = array_length(octets, 1);
+ hextets = string_to_array(host(inet_address), ':');
+ num_hextets = array_length(hextets, 1);
- -- Skip first octet if we faked above.
- IF (first_octet_zero = true)
+ -- Skip first hextet if we faked above.
+ IF (first_hextet_zero = true)
THEN
- octet_idx = 2;
+ hextet_idx = 2;
bin_idx = 2;
ELSE
- octet_idx = 1;
+ hextet_idx = 1;
bin_idx = 0;
END IF;
dummy = '';
- WHILE (octet_idx <= num_octets) LOOP
- octet = octets[octet_idx];
- octet_len = char_length(octet);
- IF (octet_len = 0)
+ WHILE (hextet_idx <= num_hextets) LOOP
+ hextet = hextets[hextet_idx];
+ hextet_len = char_length(hextet);
+ IF (hextet_len = 0)
THEN
- -- Skip over omitted octets.
- num_pad = 8 - num_octets + 1;
+ -- Skip over omitted hextets.
+ num_pad = 8 - num_hextets + 1;
bin_idx = bin_idx + (num_pad * 2);
ELSE
- num_pad = 4 - octet_len;
+ num_pad = 4 - hextet_len;
digit_idx = 1;
digit_place = 1;
WHILE (digit_place <= 4) LOOP
digit = 0;
num_pad = num_pad - 1;
ELSE
- digit = hexToBin(ascii(substring(octet from digit_idx for 1))::smallint);
+ digit = hexToBin(ascii(substring(hextet from digit_idx for 1))::smallint);
digit_idx = digit_idx + 1;
END IF;
END IF;
digit_place = digit_place + 1;
END LOOP;
- dummy = dummy || octet || '+';
+ dummy = dummy || hextet || '+';
END IF;
- octet_idx = octet_idx + 1;
+ hextet_idx = hextet_idx + 1;
END LOOP;
RETURN (bin_address);