af-packet: add option to use memory locked mmap

pull/2091/head
Eric Leblond 9 years ago committed by Victor Julien
parent 234aefdff9
commit f5c2019167

@ -222,6 +222,12 @@ void *ParseAFPConfig(const char *iface)
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) {

@ -1600,7 +1600,7 @@ static int AFPSetupRing(AFPThreadVars *ptv, char *devname)
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;
@ -1688,8 +1688,11 @@ static int AFPSetupRing(AFPThreadVars *ptv, char *devname)
} 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;

@ -50,6 +50,7 @@
#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

@ -470,6 +470,9 @@ af-packet:
#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

Loading…
Cancel
Save