aconf->iface);
aconf->flags |= AFP_RING_MODE;
}
+ (void)ConfGetChildValueBoolWithDefault(if_root, if_default, "mmap-locked", (int *)&boolval);
+ if (boolval) {
+ SCLogInfo("Enabling locked memory for mmap on iface %s",
+ aconf->iface);
+ aconf->flags |= AFP_MMAP_LOCKED;
+ }
(void)ConfGetChildValueBoolWithDefault(if_root, if_default, "tpacket-v3", (int *)&boolval);
if (boolval) {
if (strcasecmp(RunmodeGetActive(), "workers") == 0) {
unsigned int ring_buflen;
uint8_t * ring_buf;
int order;
- int r;
+ int r, mmap_flag;
if (ptv->flags & AFP_TPACKET_V3) {
val = TPACKET_V3;
} else {
ring_buflen = ptv->req.tp_block_nr * ptv->req.tp_block_size;
}
+ mmap_flag = MAP_SHARED;
+ if (ptv->flags & AFP_MMAP_LOCKED)
+ mmap_flag |= MAP_LOCKED;
ring_buf = mmap(0, ring_buflen, PROT_READ|PROT_WRITE,
- MAP_SHARED, ptv->socket, 0);
+ mmap_flag, ptv->socket, 0);
if (ring_buf == MAP_FAILED) {
SCLogError(SC_ERR_MEM_ALLOC, "Unable to mmap");
goto mmap_err;
#define AFP_EMERGENCY_MODE (1<<3)
#define AFP_TPACKET_V3 (1<<4)
#define AFP_VLAN_DISABLED (1<<5)
+#define AFP_MMAP_LOCKED (1<<6)
#define AFP_COPY_MODE_NONE 0
#define AFP_COPY_MODE_TAP 1
#rollover: yes
# To use the ring feature of AF_PACKET, set 'use-mmap' to yes
use-mmap: yes
+ # Lock memory map to avoid it goes to swap. Be careful that over suscribing could lock
+ # your system
+ #mmap-locked: yes
# Use tpacket_v3, capture mode, only active if user-mmap is true
#tpacket-v3: yes
# Ring size will be computed with respect to max_pending_packets and number