mirror of
https://github.com/zeek/zeek.git
synced 2025-10-16 21:48:21 +00:00
Merge branch 'topic/bernhard/log-threads' into topic/bernhard/input-threads
Seems to work -- all test pass. But there are thread-safety issues at the moment, because the constructors of IPAddr and IPPrefix are not thread-safe, but needed by workers. Conflicts: src/logging/Manager.cc
This commit is contained in:
commit
417542f283
148 changed files with 2635 additions and 2186 deletions
|
@ -16,7 +16,7 @@
|
|||
|
||||
#include "CompHash.h"
|
||||
|
||||
#include "../threading/SerializationTypes.h"
|
||||
#include "../threading/SerialTypes.h"
|
||||
|
||||
using namespace input;
|
||||
using threading::Value;
|
||||
|
@ -1427,12 +1427,35 @@ int Manager::GetValueLength(const Value* val) {
|
|||
}
|
||||
|
||||
case TYPE_ADDR:
|
||||
length += NUM_ADDR_WORDS*sizeof(uint32_t);
|
||||
{
|
||||
switch ( val->val.addr_val->GetFamily() ) {
|
||||
case IPAddr::IPv4:
|
||||
length += 1*sizeof(uint32_t);
|
||||
break;
|
||||
case IPAddr::IPv6:
|
||||
length += 4*sizeof(uint32_t);
|
||||
break;
|
||||
default:
|
||||
assert(false);
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case TYPE_SUBNET:
|
||||
length += sizeof(val->val.subnet_val.width);
|
||||
length += sizeof(val->val.subnet_val.net);
|
||||
{
|
||||
switch ( val->val.addr_val->GetFamily() ) {
|
||||
case IPAddr::IPv4:
|
||||
length += 1*sizeof(uint32_t)+sizeof(uint8_t);
|
||||
break;
|
||||
case IPAddr::IPv6:
|
||||
length += 4*sizeof(uint32_t)+sizeof(uint8_t);
|
||||
break;
|
||||
default:
|
||||
assert(false);
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case TYPE_TABLE: {
|
||||
|
@ -1503,17 +1526,22 @@ int Manager::CopyValue(char *data, const int startpos, const Value* val) {
|
|||
}
|
||||
|
||||
case TYPE_ADDR:
|
||||
memcpy(data+startpos, val->val.addr_val, NUM_ADDR_WORDS*sizeof(uint32_t));
|
||||
return NUM_ADDR_WORDS*sizeof(uint32_t);
|
||||
{
|
||||
const uint32_t* bytes;
|
||||
int len = val->val.addr_val->GetBytes(&bytes) * sizeof(uint32_t);
|
||||
memcpy(data+startpos, (const char*) bytes, len);
|
||||
return len;
|
||||
break;
|
||||
}
|
||||
|
||||
case TYPE_SUBNET: {
|
||||
int length = 0;
|
||||
memcpy(data+startpos,(const char*) &(val->val.subnet_val.width), sizeof(val->val.subnet_val.width) );
|
||||
length += sizeof(val->val.subnet_val.width);
|
||||
memcpy(data+startpos+length, (const char*) &(val->val.subnet_val.net), sizeof(val->val.subnet_val.net) );
|
||||
length += sizeof(val->val.subnet_val.net);
|
||||
return length;
|
||||
const uint32_t* bytes;
|
||||
int len = val->val.subnet_val->Prefix().GetBytes(&bytes) * sizeof(uint32_t);
|
||||
memcpy(data+startpos, (const char*) bytes, len);
|
||||
uint8_t prefixlen = val->val.subnet_val->Length();
|
||||
memcpy(data+startpos+len, (const char*) &(prefixlen), sizeof(uint8_t) );
|
||||
len += sizeof(uint8_t);
|
||||
return len;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1620,11 +1648,11 @@ Val* Manager::ValueToVal(const Value* val, BroType* request_type) {
|
|||
break;
|
||||
|
||||
case TYPE_ADDR:
|
||||
return new AddrVal(val->val.addr_val);
|
||||
return new AddrVal(*(val->val.addr_val));
|
||||
break;
|
||||
|
||||
case TYPE_SUBNET:
|
||||
return new SubNetVal(val->val.subnet_val.net, val->val.subnet_val.width);
|
||||
return new SubNetVal(*(val->val.subnet_val));
|
||||
break;
|
||||
|
||||
case TYPE_TABLE: {
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#define INPUT_READERBACKEND_H
|
||||
|
||||
#include "BroString.h"
|
||||
#include "../threading/SerializationTypes.h"
|
||||
#include "../threading/SerialTypes.h"
|
||||
#include "threading/MsgThread.h"
|
||||
|
||||
namespace input {
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#define INPUT_READERFRONTEND_H
|
||||
|
||||
#include "../threading/MsgThread.h"
|
||||
#include "../threading/SerializationTypes.h"
|
||||
#include "../threading/SerialTypes.h"
|
||||
|
||||
namespace input {
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#include <fstream>
|
||||
#include <sstream>
|
||||
|
||||
#include "../../threading/SerializationTypes.h"
|
||||
#include "../../threading/SerialTypes.h"
|
||||
|
||||
#define MANUAL 0
|
||||
#define REREAD 1
|
||||
|
@ -310,51 +310,17 @@ Value* Ascii::EntryToVal(string s, FieldMapping field) {
|
|||
|
||||
case TYPE_SUBNET: {
|
||||
int pos = s.find("/");
|
||||
string width = s.substr(pos+1);
|
||||
val->val.subnet_val.width = atoi(width.c_str());
|
||||
int width = atoi(s.substr(pos+1).c_str());
|
||||
string addr = s.substr(0, pos);
|
||||
s = addr;
|
||||
#ifdef BROv6
|
||||
if ( s.find(':') != s.npos ) {
|
||||
uint32* addr = new uint32[4];
|
||||
if ( inet_pton(AF_INET6, s.c_str(), addr) <= 0 ) {
|
||||
Error(Fmt("Bad IPv6 address: %s", s.c_str()));
|
||||
val->val.subnet_val.net[0] = val->val.subnet_val.net[1] = val->val.subnet_val.net[2] = val->val.subnet_val.net[3] = 0;
|
||||
}
|
||||
copy_addr(val->val.subnet_val.net, addr);
|
||||
delete addr;
|
||||
} else {
|
||||
val->val.subnet_val.net[0] = val->val.subnet_val.net[1] = val->val.subnet_val.net[2] = 0;
|
||||
if ( inet_aton(s.c_str(), &(val->val.subnet_val.net[3])) <= 0 ) {
|
||||
Error(Fmt("Bad addres: %s", s.c_str()));
|
||||
val->val.subnet_val.net[3] = 0;
|
||||
}
|
||||
}
|
||||
#else
|
||||
if ( inet_aton(s.c_str(), (in_addr*) &(val->val.subnet_val.net)) <= 0 ) {
|
||||
Error(Fmt("Bad addres: %s", s.c_str()));
|
||||
val->val.subnet_val.net = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
IPAddr a(addr);
|
||||
val->val.subnet_val = new IPPrefix(a, width);
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
case TYPE_ADDR: {
|
||||
// NOTE: dottet_to_addr BREAKS THREAD SAFETY! it uses reporter.
|
||||
// Solve this some other time....
|
||||
#ifdef BROv6
|
||||
if ( s.find(':') != s.npos ) {
|
||||
uint32* addr = dotted_to_addr6(s.c_str());
|
||||
copy_addr(val->val.addr_val, addr);
|
||||
delete addr;
|
||||
} else {
|
||||
val->val.addr_val[0] = val->val.addr_val[1] = val->val.addr_val[2] = 0;
|
||||
val->val.addr_val[3] = dotted_to_addr(s.c_str());
|
||||
}
|
||||
#else
|
||||
uint32 t = dotted_to_addr(s.c_str());
|
||||
copy_addr(&t, val->val.addr_val);
|
||||
#endif
|
||||
val->val.addr_val = new IPAddr(s);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#include <fstream>
|
||||
#include <sstream>
|
||||
|
||||
#include "../../threading/SerializationTypes.h"
|
||||
#include "../../threading/SerialTypes.h"
|
||||
|
||||
#define MANUAL 0
|
||||
#define REREAD 1
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue