diff --git a/core/AmConfig.cpp b/core/AmConfig.cpp index 58a8b627..e32b3a18 100644 --- a/core/AmConfig.cpp +++ b/core/AmConfig.cpp @@ -67,7 +67,8 @@ vector AmConfig::RTP_Ifs; map AmConfig::SIP_If_names; map AmConfig::RTP_If_names; map AmConfig::LocalSIPIP2If; -vector AmConfig::SysIfs; +vector AmConfig::SysIfs; +map AmConfig::IfName2IP; #ifndef DISABLE_DAEMON_MODE bool AmConfig::DaemonMode = DEFAULT_DAEMON_MODE; @@ -1026,6 +1027,7 @@ static bool fillSysIntfList() DBG("iface='%s';ip='%s';flags=0x%x\n",p_if->ifa_name,host,p_if->ifa_flags); intf_it->addrs.push_back(AmConfig::IPAddr(host,p_if->ifa_addr->sa_family)); + AmConfig::IfName2IP[p_if->ifa_name] = host; } freeifaddrs(ifap); @@ -1077,20 +1079,10 @@ string fixIface2IP(const string& dev_name, bool v6_for_sip) return dev_name; } - for(vector::iterator intf_it = AmConfig::SysIfs.begin(); - intf_it != AmConfig::SysIfs.end(); ++intf_it) { - - if(intf_it->name != dev_name) - continue; - - if(intf_it->addrs.empty()){ - ERROR("No IP address for interface '%s'\n",intf_it->name.c_str()); - return ""; - } - - DBG("dev_name = '%s'\n",dev_name.c_str()); - return intf_it->addrs.front().addr; - } + if (!AmConfig::IfName2IP[dev_name].empty()) { + DBG("dev_name = '%s, ip=%s'\n", dev_name.c_str(), AmConfig::IfName2IP[dev_name].c_str()); + return AmConfig::IfName2IP[dev_name]; + } return ""; } diff --git a/core/AmConfig.h b/core/AmConfig.h index eb29b62a..93db08b1 100644 --- a/core/AmConfig.h +++ b/core/AmConfig.h @@ -160,6 +160,7 @@ struct AmConfig unsigned int mtu; }; + static map IfName2IP; static vector SysIfs; static int insert_SIP_interface(const SIP_interface& intf);