PSAMPExporterCfg::PSAMPExporterCfg(XMLElement* elem) : CfgHelper<PSAMPExporterModule, PSAMPExporterCfg>(elem, "psampExporter"), templateRefreshTime(0), /* templateRefreshRate(0), */ maxPacketSize(0), exportDelay(0), reporting(NULL) { if (!elem) return; observationDomainId = getInt("observationDomainId", 0); // determine captureLen // FIXME: undocumented parameter, this value should come from observer int captureLen = getInt("captureLen", PCAP_DEFAULT_CAPTURE_LENGTH); XMLNode::XMLSet<XMLElement*> set = elem->getElementChildren(); for (XMLNode::XMLSet<XMLElement*>::iterator it = set.begin(); it != set.end(); it++) { XMLElement* e = *it; if (e->matches("ipfixPacketRestrictions")) { maxPacketSize = (uint16_t)getInt("maxPacketSize", 0, e); exportDelay = getTimeInUnit("maxExportDelay", mSEC, 0, e); } else if (e->matches("udpTemplateManagement")) { // use 0 as default values for both if the config entry isn't found templateRefreshTime = getTimeInUnit("templateRefreshTimeout", SEC, IS_DEFAULT_TEMPLATE_TIMEINTERVAL, e); /* templateRefreshRate = getInt("templateRefreshRate", IS_DEFAULT_TEMPLATE_RECORDINTERVAL, e); */ /* TODO */ } else if (e->matches("collector")) { collectors.push_back(new CollectorCfg(e)); } else if (e->matches("packetReporting")) { reporting = new PacketReportingCfg(e); } else if (e->matches("captureLen") || e->matches("observationDomainId")) { // ignore it, already handled } else { THROWEXCEPTION("Illegal PSAMPExporter config entry \"%s\"found", e->getName().c_str()); } } if (reporting == NULL) THROWEXCEPTION("No packetReporting found in psampExporter config"); // rough estimation of the maximum record length including variable length fields recordLength = reporting->getRecordLength() + reporting->getRecordsVariableLen() * captureLen; }
IpfixExporterCfg::IpfixExporterCfg(XMLElement* elem) : CfgHelper<IpfixSender, IpfixExporterCfg>(elem, "ipfixExporter"), templateRefreshTime(IS_DEFAULT_TEMPLATE_TIMEINTERVAL), templateRefreshRate(0), sctpDataLifetime(0), sctpReconnectInterval(0), maxPacketSize(0), exportDelay(0), recordRateLimit(0), observationDomainId(0) { if (!elem) { return; } recordRateLimit = getInt("maxRecordRate", IS_DEFAULT_MAXRECORDRATE); observationDomainId = getInt("observationDomainId", 0); msg(MSG_INFO, "Exporter: using maximum rate of %d records/second", recordRateLimit); sctpDataLifetime = getTimeInUnit("sctpDataLifetime", mSEC, IS_DEFAULT_SCTP_DATALIFETIME); sctpReconnectInterval = getTimeInUnit("sctpReconnectInterval", SEC, IS_DEFAULT_SCTP_RECONNECTINTERVAL); templateRefreshRate = getInt("templateRefreshRate", IS_DEFAULT_TEMPLATE_RECORDINTERVAL); templateRefreshTime = getTimeInUnit("templateRefreshInterval", SEC, IS_DEFAULT_TEMPLATE_TIMEINTERVAL); XMLNode::XMLSet<XMLElement*> set = elem->getElementChildren(); for (XMLNode::XMLSet<XMLElement*>::iterator it = set.begin(); it != set.end(); it++) { XMLElement* e = *it; if (e->matches("collector")) { collectors.push_back(new CollectorCfg(e)); } else if (e->matches("maxRecordRate") || e->matches("sctpDataLifetime") || e->matches("sctpReconnectInterval") || e->matches("templateRefreshRate")|| e->matches("templateRefreshInterval") || e->matches("observationDomainId")) { // already done! } else { THROWEXCEPTION("Illegal Exporter config entry \"%s\" found", e->getName().c_str()); } } }
AggregatorBaseCfg::AggregatorBaseCfg(XMLElement* elem) : CfgBase(elem), pollInterval(0) { if (!elem) return; rules = new Rules; htableBits = HT_DEFAULT_BITSIZE; baseTCP = NULL; XMLNode::XMLSet<XMLElement*> set = elem->getElementChildren(); for (XMLNode::XMLSet<XMLElement*>::iterator it = set.begin(); it != set.end(); it++) { XMLElement* e = *it; if (e->matches("rule")) { Rule* r = readRule(e); if (r) rules->rule[rules->count++] = r; } else if (e->matches("DosDefense")) { baseTCP = readDos(e); } else if (e->matches("expiration")) { // get the time values or set them to '0' if they are not specified maxBufferTime = getTimeInUnit("activeTimeout", SEC, 0, e); minBufferTime = getTimeInUnit("inactiveTimeout", SEC, 0, e); if (!maxBufferTime) THROWEXCEPTION("active timeout not set in configuration for aggregator"); if (!minBufferTime) THROWEXCEPTION("inactive timeout not set in configuration for aggregator"); } else if (e->matches("pollInterval")) { pollInterval = getTimeInUnit("pollInterval", mSEC, AGG_DEFAULT_POLLING_TIME); } else if (e->matches("hashtableBits")) { htableBits = getInt("hashtableBits", HT_DEFAULT_BITSIZE); } else if (e->matches("next")) { // ignore next } else { msg(MSG_FATAL, "Unkown Aggregator config entry %s\n", e->getName().c_str()); } } }