addr_unique_ = false;
mac_list_file_.clear();
mac_list_.clear();
- giaddr_list_file_.clear();
- giaddr_list_.clear();
+ relay_addr_list_file_.clear();
+ relay_addr_list_.clear();
multi_subnet_ = false;
num_request_.clear();
exit_wait_time_ = 0;
case 'J':
check(num_subnet_list_files >= 1, "only one -J option can be specified");
num_subnet_list_files++;
- giaddr_list_file_ = std::string(optarg);
- loadGiaddr();
+ relay_addr_list_file_ = std::string(optarg);
+ loadRelayAddr();
break;
case 'l':
} catch (const isc::asiolink::IOError& e) {
return (true);
}
- giaddr_list_.push_back(line);
+ relay_addr_list_.push_back(line);
multi_subnet_ = true;
return (false);
}
-void CommandOptions::loadGiaddr() {
+void CommandOptions::loadRelayAddr() {
std::string line;
- std::ifstream infile(giaddr_list_file_.c_str());
+ std::ifstream infile(relay_addr_list_file_.c_str());
size_t cnt = 0;
while (std::getline(infile, line)) {
cnt++;
tmp << "invalid address in line: "<< cnt;
check(validateIP(line), tmp.str());
}
+ check(cnt == 0, "file with addresses is empty!");
}
void CommandOptions::loadMacs() {
/// \return server name.
std::string getServerName() const { return server_name_; }
- /// \brief Returns giaddr file location.
+ /// \brief Returns file location with set of relay addresses.
///
- /// \return giaddr list file location.
- std::string getGiaddrListFile() const { return giaddr_list_file_; }
+ /// \return relay addresses list file location.
+ std::string getRelayAddrListFile() const { return relay_addr_list_file_; }
- /// \brief Returns list of giaddr addresses.
+ /// \brief Returns list of relay addresses.
///
- /// \return list of giaddr.
- std::vector<std::string> getGiaddrList() const { return giaddr_list_; }
+ /// \return list of relay addresses.
+ std::vector<std::string> getRelayAddrList() const { return relay_addr_list_; }
- /// \brief Returns random giaddr.
+ /// \brief Returns random relay address.
///
- /// \return single string containing giaddr.
- std::string getRandGiaddr() { return giaddr_list_[rand() % giaddr_list_.size()]; }
+ /// \return single string containing relay address.
+ std::string getRandRelayAddr() { return relay_addr_list_[rand() % relay_addr_list_.size()]; }
/// \brief Check if multi subnet mode is enabled.
///
bool decodeMacString(const std::string& line);
/// \brief Opens the text file containing list of addresses (one per line).
- void loadGiaddr();
+ void loadRelayAddr();
- /// \brief Checks if loaded giaddr from text file are correct,
- /// adds them to giaddr_list_.
+ /// \brief Checks if loaded relay addresses from text file are correct,
+ /// adds them to relay_addr_list_.
///
/// \return true if address is incorrect.
bool validateIP(const std::string& line);
std::vector<std::vector<uint8_t> > mac_list_;
/// Location of a file containing a list of subnet addresses, one per line.
- std::string giaddr_list_file_;
+ std::string relay_addr_list_file_;
/// List of validated subnet addresses.
- std::vector<std::string> giaddr_list_;
+ std::vector<std::string> relay_addr_list_;
/// Flag to indicate multiple subnets testing.
bool multi_subnet_;
if (!options_.checkMultiSubnet()) {
pkt->setGiaddr(IOAddress(socket_.addr_));
} else {
- pkt->setGiaddr(IOAddress(options_.getRandGiaddr()));
+ pkt->setGiaddr(IOAddress(options_.getRandRelayAddr()));
}
// Pretend that we have one relay (which is us).
pkt->setHops(1);
if (options_.isUseRelayedV6()) {
Pkt6::RelayInfo relay_info;
relay_info.msg_type_ = DHCPV6_RELAY_FORW;
- relay_info.hop_count_ = 1;
- relay_info.linkaddr_ = IOAddress(socket_.addr_);
+ relay_info.hop_count_ = 0;
+ if (options_.checkMultiSubnet()) {
+ relay_info.linkaddr_ = IOAddress(options_.getRandRelayAddr());
+ } else {
+ relay_info.linkaddr_ = IOAddress(socket_.addr_);
+ }
relay_info.peeraddr_ = IOAddress(socket_.addr_);
pkt->addRelayInfo(relay_info);
}
EXPECT_EQ(4, m.size());
}
-TEST_F(CommandOptionsTest, LoadGiaddrFromFile) {
+TEST_F(CommandOptionsTest, LoadRelayAddrFromFile) {
CommandOptions opt;
- std::string giaddr_list_full_path = getFullPath("giaddr-list.txt");
+ std::string relay_addr_list_full_path = getFullPath("relay-addr-list.txt");
std::ostringstream cmd;
- cmd << "perfdhcp -J " << giaddr_list_full_path << " abc";
+ cmd << "perfdhcp -J " << relay_addr_list_full_path << " abc";
EXPECT_NO_THROW(process(opt, cmd.str()));
- EXPECT_EQ(giaddr_list_full_path, opt.getGiaddrListFile());
+ EXPECT_EQ(relay_addr_list_full_path, opt.getRelayAddrListFile());
EXPECT_TRUE(opt.checkMultiSubnet());
- EXPECT_EQ(5, opt.getGiaddrList().size());
+ EXPECT_EQ(7, opt.getRelayAddrList().size());
}
TEST_F(CommandOptionsTest, LoadMacsFromFileNegativeCases) {
--- /dev/null
+100.95.0.1
+20.86.12.1
+101.64.4.1
+1.86.0.1
+92.86.238.1
+3000::1
+fe80::6e2b:59ff:fe94:19d1