int VBoxNetLwipNAT::natServiceProcessRegisteredPf(VECNATSERVICEPF& vecRules) { ITERATORNATSERVICEPF it; for (it = vecRules.begin(); it != vecRules.end(); ++it) { NATSEVICEPORTFORWARDRULE &natPf = *it; LogRel(("Loading %s port-forwarding rule \"%s\": %s %s%s%s:%d -> %s%s%s:%d\n", natPf.Pfr.fPfrIPv6 ? "IPv6" : "IPv4", natPf.Pfr.szPfrName, natPf.Pfr.iPfrProto == IPPROTO_TCP ? "TCP" : "UDP", /* from */ natPf.Pfr.fPfrIPv6 ? "[" : "", natPf.Pfr.szPfrHostAddr, natPf.Pfr.fPfrIPv6 ? "]" : "", natPf.Pfr.u16PfrHostPort, /* to */ natPf.Pfr.fPfrIPv6 ? "[" : "", natPf.Pfr.szPfrGuestAddr, natPf.Pfr.fPfrIPv6 ? "]" : "", natPf.Pfr.u16PfrGuestPort)); natServicePfRegister(natPf); } return VINF_SUCCESS; }
int VBoxNetLwipNAT::run() { /* Father starts receiving thread and enter event loop. */ VBoxNetBaseService::run(); vboxLwipCoreFinalize(VBoxNetLwipNAT::onLwipTcpIpFini, this); m_vecPortForwardRule4.clear(); m_vecPortForwardRule6.clear(); return VINF_SUCCESS; }
static int fetchNatPortForwardRules(const ComNatPtr& nat, bool fIsIPv6, VECNATSERVICEPF& vec) { HRESULT hrc; com::SafeArray<BSTR> rules; if (fIsIPv6) hrc = nat->COMGETTER(PortForwardRules6)(ComSafeArrayAsOutParam(rules)); else hrc = nat->COMGETTER(PortForwardRules4)(ComSafeArrayAsOutParam(rules)); AssertComRCReturn(hrc, VERR_INTERNAL_ERROR); NATSEVICEPORTFORWARDRULE Rule; for (size_t idxRules = 0; idxRules < rules.size(); ++idxRules) { Log(("%d-%s rule: %ls\n", idxRules, (fIsIPv6 ? "IPv6" : "IPv4"), rules[idxRules])); RT_ZERO(Rule); int rc = netPfStrToPf(com::Utf8Str(rules[idxRules]).c_str(), fIsIPv6, &Rule.Pfr); if (RT_FAILURE(rc)) continue; vec.push_back(Rule); } return VINF_SUCCESS; }
int VBoxNetLwipNAT::run() { /* Father starts receiving thread and enter event loop. */ VBoxNetBaseService::run(); vboxLwipCoreFinalize(VBoxNetLwipNAT::onLwipTcpIpFini, this); m_vecPortForwardRule4.clear(); m_vecPortForwardRule6.clear(); destroyNatListener(m_NatListener, virtualbox); destroyNatListener(m_VBoxListener, virtualbox); destroyClientListener(m_VBoxClientListener, virtualboxClient); return VINF_SUCCESS; }