1
0
mirror of https://github.com/mfontanini/libtins synced 2026-01-28 04:34:27 +01:00

Added IPv4Address, IPv6Address and HWAddress<> 'is_multicast' member function.

This commit is contained in:
Matias Fontanini
2013-09-08 17:23:08 -03:00
parent a01fff411e
commit e21e34e194
12 changed files with 139 additions and 46 deletions

View File

@@ -12,12 +12,12 @@ using namespace Tins;
class AddressRangeTest : public testing::Test {
public:
void contain_tests24(const AddressRange<IPv4Address> &range);
void contain_tests24(const AddressRange<IPv6Address> &range);
void contain_tests26(const AddressRange<IPv4Address> &range);
void contain_tests24(const IPv4Range &range);
void contain_tests24(const IPv6Range &range);
void contain_tests26(const IPv4Range &range);
};
void AddressRangeTest::contain_tests24(const AddressRange<IPv4Address> &range) {
void AddressRangeTest::contain_tests24(const IPv4Range &range) {
EXPECT_TRUE(range.contains("192.168.0.0"));
EXPECT_TRUE(range.contains("192.168.0.1"));
EXPECT_TRUE(range.contains("192.168.0.254"));
@@ -26,14 +26,14 @@ void AddressRangeTest::contain_tests24(const AddressRange<IPv4Address> &range) {
EXPECT_FALSE(range.contains("192.168.1.1"));
}
void AddressRangeTest::contain_tests26(const AddressRange<IPv4Address> &range) {
void AddressRangeTest::contain_tests26(const IPv4Range &range) {
EXPECT_TRUE(range.contains("192.168.254.192"));
EXPECT_TRUE(range.contains("192.168.254.255"));
EXPECT_FALSE(range.contains("192.168.254.0"));
EXPECT_FALSE(range.contains("192.168.254.191"));
}
void AddressRangeTest::contain_tests24(const AddressRange<IPv6Address> &range) {
void AddressRangeTest::contain_tests24(const IPv6Range &range) {
EXPECT_TRUE(range.contains("dead::1"));
EXPECT_TRUE(range.contains("dead::1fee"));
EXPECT_TRUE(range.contains("dead::ffee"));
@@ -42,19 +42,25 @@ void AddressRangeTest::contain_tests24(const AddressRange<IPv6Address> &range) {
}
TEST_F(AddressRangeTest, Contains) {
contain_tests24(AddressRange<IPv4Address>("192.168.0.0", "192.168.0.255"));
contain_tests24(AddressRange<IPv4Address>::from_mask("192.168.0.0", "255.255.255.0"));
contain_tests26(AddressRange<IPv4Address>("192.168.254.192", "192.168.254.255"));
contain_tests26(AddressRange<IPv4Address>::from_mask("192.168.254.192", "255.255.255.192"));
contain_tests24(IPv4Range("192.168.0.0", "192.168.0.255"));
contain_tests24(IPv4Range::from_mask("192.168.0.0", "255.255.255.0"));
contain_tests26(IPv4Range("192.168.254.192", "192.168.254.255"));
contain_tests26(IPv4Range::from_mask("192.168.254.192", "255.255.255.192"));
contain_tests24(AddressRange<IPv6Address>("dead::0", "dead::ffff"));
contain_tests24(AddressRange<IPv6Address>::from_mask("dead::0", "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0"));
contain_tests24(IPv6Range("dead::0", "dead::ffff"));
contain_tests24(IPv6Range::from_mask("dead::0", "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0"));
AddressRange<HWAddress<6> > range("00:00:00:00:00:00", "00:00:00:00:00:ff");
EXPECT_TRUE(range.contains("00:00:00:00:00:00"));
EXPECT_TRUE(range.contains("00:00:00:00:00:10"));
EXPECT_TRUE(range.contains("00:00:00:00:00:ff"));
EXPECT_FALSE(range.contains("00:00:00:00:01:00"));
}
TEST_F(AddressRangeTest, Iterators) {
// v4
{
AddressRange<IPv4Address> addr = AddressRange<IPv4Address>::from_mask("192.168.0.0", "255.255.255.252");
IPv4Range addr = IPv4Range::from_mask("192.168.0.0", "255.255.255.252");
std::vector<IPv4Address> addresses;
addresses.push_back("192.168.0.1");
addresses.push_back("192.168.0.2");
@@ -62,7 +68,7 @@ TEST_F(AddressRangeTest, Iterators) {
EXPECT_TRUE(addr.is_iterable());
}
{
AddressRange<IPv4Address> addr = AddressRange<IPv4Address>::from_mask("255.255.255.252", "255.255.255.252");
IPv4Range addr = IPv4Range::from_mask("255.255.255.252", "255.255.255.252");
std::vector<IPv4Address> addresses;
addresses.push_back("255.255.255.253");
addresses.push_back("255.255.255.254");
@@ -72,7 +78,7 @@ TEST_F(AddressRangeTest, Iterators) {
// v6
{
AddressRange<IPv6Address> addr = AddressRange<IPv6Address>::from_mask("dead::0", "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffc");
IPv6Range addr = IPv6Range::from_mask("dead::0", "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffc");
std::vector<IPv6Address> addresses;
addresses.push_back("dead::1");
addresses.push_back("dead::2");
@@ -81,8 +87,8 @@ TEST_F(AddressRangeTest, Iterators) {
}
{
AddressRange<IPv6Address> addr =
AddressRange<IPv6Address>::from_mask(
IPv6Range addr =
IPv6Range::from_mask(
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffc",
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffc"
);
@@ -97,16 +103,16 @@ TEST_F(AddressRangeTest, Iterators) {
TEST_F(AddressRangeTest, Slash) {
// v4
{
AddressRange<IPv4Address> range1 = AddressRange<IPv4Address>::from_mask("192.168.0.0", "255.255.255.252");
AddressRange<IPv4Address> range2 = IPv4Address("192.168.0.0") / 30;
IPv4Range range1 = IPv4Range::from_mask("192.168.0.0", "255.255.255.252");
IPv4Range range2 = IPv4Address("192.168.0.0") / 30;
EXPECT_TRUE(std::equal(range1.begin(), range1.end(), range2.begin()));
EXPECT_TRUE(std::equal(range2.begin(), range2.end(), range1.begin()));
EXPECT_TRUE(range1.is_iterable());
EXPECT_TRUE(range2.is_iterable());
}
{
AddressRange<IPv4Address> range1 = AddressRange<IPv4Address>::from_mask("255.255.255.252", "255.255.255.252");
AddressRange<IPv4Address> range2 = IPv4Address("255.255.255.252") / 30;
IPv4Range range1 = IPv4Range::from_mask("255.255.255.252", "255.255.255.252");
IPv4Range range2 = IPv4Address("255.255.255.252") / 30;
EXPECT_TRUE(std::equal(range1.begin(), range1.end(), range2.begin()));
EXPECT_TRUE(std::equal(range2.begin(), range2.end(), range1.begin()));
EXPECT_TRUE(range1.is_iterable());
@@ -115,20 +121,20 @@ TEST_F(AddressRangeTest, Slash) {
// v6
{
AddressRange<IPv6Address> range1 = AddressRange<IPv6Address>::from_mask("dead::0", "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffc");
AddressRange<IPv6Address> range2 = IPv6Address("dead::0") / 126;
IPv6Range range1 = IPv6Range::from_mask("dead::0", "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffc");
IPv6Range range2 = IPv6Address("dead::0") / 126;
EXPECT_TRUE(std::equal(range1.begin(), range1.end(), range2.begin()));
EXPECT_TRUE(std::equal(range2.begin(), range2.end(), range1.begin()));
EXPECT_TRUE(range1.is_iterable());
EXPECT_TRUE(range2.is_iterable());
}
{
AddressRange<IPv6Address> range1 =
AddressRange<IPv6Address>::from_mask(
IPv6Range range1 =
IPv6Range::from_mask(
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffc",
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffc"
);
AddressRange<IPv6Address> range2 = IPv6Address("ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffc") / 126;
IPv6Range range2 = IPv6Address("ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffc") / 126;
EXPECT_TRUE(std::equal(range1.begin(), range1.end(), range2.begin()));
EXPECT_TRUE(std::equal(range2.begin(), range2.end(), range1.begin()));
EXPECT_TRUE(range1.is_iterable());