Convert stream memcaps to u64. Bug #332.

remotes/origin/master-1.1.x
Victor Julien 14 years ago
parent 4c641f0deb
commit 8208eacd79

@ -95,8 +95,8 @@ static uint16_t segment_pool_idx[65536]; /* O(1) lookups of the pool */
/* Memory use counters */
static SCSpinlock stream_reassembly_memuse_spinlock;
static uint32_t stream_reassembly_memuse;
static uint32_t stream_reassembly_memuse_max;
static uint64_t stream_reassembly_memuse;
static uint64_t stream_reassembly_memuse_max;
/* prototypes */
static int HandleSegmentStartsBeforeListSegment(ThreadVars *, TcpReassemblyThreadCtx *,
@ -117,7 +117,7 @@ void StreamTcpReassemblePseudoPacketCreate(TcpStream *, Packet *, PacketQueue *)
*
* \param size Size of the TCP segment and its payload length memory allocated
*/
void StreamTcpReassembleIncrMemuse(uint32_t size) {
void StreamTcpReassembleIncrMemuse(uint64_t size) {
SCSpinLock(&stream_reassembly_memuse_spinlock);
stream_reassembly_memuse += size;
@ -134,7 +134,7 @@ void StreamTcpReassembleIncrMemuse(uint32_t size) {
*
* \param size Size of the TCP segment and its payload length memory allocated
*/
void StreamTcpReassembleDecrMemuse(uint32_t size) {
void StreamTcpReassembleDecrMemuse(uint64_t size) {
SCSpinLock(&stream_reassembly_memuse_spinlock);
if (size <= stream_reassembly_memuse) {
@ -161,7 +161,7 @@ int StreamTcpReassembleCheckMemcap(uint32_t size) {
int ret = 0;
SCSpinLock(&stream_reassembly_memuse_spinlock);
if (size + stream_reassembly_memuse <= stream_config.reassembly_memcap)
if (stream_config.reassembly_memcap == 0 || size + stream_reassembly_memuse <= stream_config.reassembly_memcap)
ret = 1;
SCSpinUnlock(&stream_reassembly_memuse_spinlock);
@ -350,8 +350,8 @@ void StreamTcpReassembleFree(char quiet)
if (!quiet) {
SCSpinLock(&stream_reassembly_memuse_spinlock);
SCLogInfo("Max memuse of the stream reassembly engine %"PRIu32" (in use"
" %"PRIu32")", stream_reassembly_memuse_max,
SCLogInfo("Max memuse of the stream reassembly engine %"PRIu64" (in use"
" %"PRIu64")", stream_reassembly_memuse_max,
stream_reassembly_memuse);
SCSpinUnlock(&stream_reassembly_memuse_spinlock);
}

@ -109,8 +109,8 @@ static uint64_t ssn_pool_cnt = 0; /** counts ssns, protected by ssn_pool_mutex *
extern uint8_t engine_mode;
static SCSpinlock stream_memuse_spinlock;
static uint32_t stream_memuse;
static uint32_t stream_memuse_max;
static uint64_t stream_memuse = 0;
static uint64_t stream_memuse_max = 0;
/* stream engine running in "inline" mode. */
int stream_inline = 0;
@ -126,18 +126,18 @@ void TmModuleStreamTcpRegister (void)
tmm_modules[TMM_STREAMTCP].cap_flags = 0;
}
void StreamTcpIncrMemuse(uint32_t size) {
void StreamTcpIncrMemuse(uint64_t size) {
SCSpinLock(&stream_memuse_spinlock);
stream_memuse += size;
stream_memuse += (uint64_t)size;
if (stream_memuse > stream_memuse_max)
stream_memuse_max = stream_memuse;
SCSpinUnlock(&stream_memuse_spinlock);
}
void StreamTcpDecrMemuse(uint32_t size) {
void StreamTcpDecrMemuse(uint64_t size) {
SCSpinLock(&stream_memuse_spinlock);
if (size <= stream_memuse)
stream_memuse -= size;
if ((uint64_t)size <= stream_memuse)
stream_memuse -= (uint64_t)size;
else
stream_memuse = 0;
SCSpinUnlock(&stream_memuse_spinlock);
@ -149,12 +149,12 @@ void StreamTcpDecrMemuse(uint32_t size) {
* \retval 1 if in bounds
* \retval 0 if not in bounds
*/
int StreamTcpCheckMemcap(uint32_t size) {
int StreamTcpCheckMemcap(uint64_t size) {
SCEnter();
int ret = 0;
SCSpinLock(&stream_memuse_spinlock);
if (size + stream_memuse <= stream_config.memcap)
if (stream_config.memcap == 0 || (size + stream_memuse) <= stream_config.memcap)
ret = 1;
SCSpinUnlock(&stream_memuse_spinlock);
@ -263,7 +263,7 @@ void *StreamTcpSessionPoolAlloc(void *null)
memset(ptr, 0, sizeof(TcpSession));
StreamTcpIncrMemuse((uint32_t)sizeof(TcpSession));
StreamTcpIncrMemuse((uint64_t)sizeof(TcpSession));
return ptr;
}
@ -309,7 +309,7 @@ void StreamTcpSessionPoolFree(void *s)
SCFree(ssn);
StreamTcpDecrMemuse((uint32_t)sizeof(TcpSession));
StreamTcpDecrMemuse((uint64_t)sizeof(TcpSession));
}
@ -353,13 +353,13 @@ void StreamTcpInitConfig(char quiet)
}
if ((ConfGetInt("stream.memcap", &value)) == 1) {
stream_config.memcap = (uint32_t)value;
stream_config.memcap = (uint64_t)value;
} else {
stream_config.memcap = STREAMTCP_DEFAULT_MEMCAP;
}
if (!quiet) {
SCLogInfo("stream \"memcap\": %"PRIu32"", stream_config.memcap);
SCLogInfo("stream \"memcap\": %"PRIu64, stream_config.memcap);
}
ConfGetBool("stream.midstream", &stream_config.midstream);
@ -402,12 +402,12 @@ void StreamTcpInitConfig(char quiet)
}
if ((ConfGetInt("stream.reassembly.memcap", &value)) == 1) {
stream_config.reassembly_memcap = (uint32_t)value;
stream_config.reassembly_memcap = (uint64_t)value;
} else {
stream_config.reassembly_memcap = STREAMTCP_DEFAULT_REASSEMBLY_MEMCAP;
}
if (!quiet) {
SCLogInfo("stream.reassembly \"memcap\": %"PRIu32"", stream_config.reassembly_memcap);
SCLogInfo("stream.reassembly \"memcap\": %"PRIu64"", stream_config.reassembly_memcap);
}
if ((ConfGetInt("stream.reassembly.depth", &value)) == 1) {
@ -486,7 +486,7 @@ void StreamTcpFreeConfig(char quiet)
if (!quiet) {
SCSpinLock(&stream_memuse_spinlock);
SCLogInfo("Max memuse of stream engine %"PRIu32" (in use %"PRIu32")",
SCLogInfo("Max memuse of stream engine %"PRIu64" (in use %"PRIu64")",
stream_memuse_max, stream_memuse);
SCSpinUnlock(&stream_memuse_spinlock);
}
@ -7019,7 +7019,7 @@ end:
if (stream_memuse == 0) {
result &= 1;
} else {
printf("stream_memuse %"PRIu32"\n", stream_memuse);
printf("stream_memuse %"PRIu64"\n", stream_memuse);
}
SCFree(p);
return result;
@ -7107,7 +7107,7 @@ end:
if (stream_memuse == 0) {
result &= 1;
} else {
printf("stream_memuse %"PRIu32"\n", stream_memuse);
printf("stream_memuse %"PRIu64"\n", stream_memuse);
}
SCFree(p);
return result;

@ -45,13 +45,13 @@ typedef struct TcpStreamCnf_ {
*
* max stream mem usage
*/
uint32_t memcap;
uint64_t memcap;
uint64_t reassembly_memcap; /**< max memory usage for stream reassembly */
uint32_t max_sessions;
uint32_t prealloc_sessions;
int midstream;
int async_oneside;
uint32_t reassembly_memcap; /**< max memory usage for stream reassembly */
uint32_t reassembly_depth; /**< Depth until when we reassemble the stream */
uint16_t reassembly_toserver_chunk_size;
@ -91,9 +91,9 @@ void StreamTcpRegisterTests (void);
void StreamTcpSessionPktFree (Packet *);
void StreamTcpIncrMemuse(uint32_t);
void StreamTcpDecrMemuse(uint32_t);
int StreamTcpCheckMemcap(uint32_t);
void StreamTcpIncrMemuse(uint64_t);
void StreamTcpDecrMemuse(uint64_t);
int StreamTcpCheckMemcap(uint64_t);
void StreamTcpPseudoPacketSetupHeader(Packet *, Packet *);
Packet *StreamTcpPseudoSetup(Packet *, uint8_t *, uint32_t);

Loading…
Cancel
Save