diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2015-10-29 14:18:03 +0100 |
---|---|---|
committer | Tobias Klauser <tklauser@distanz.ch> | 2015-10-29 14:20:46 +0100 |
commit | dbd83f04dfb4b4265a290bad6a1813825f7ab3c6 (patch) | |
tree | 7565751ab618dcb5b130e990c1336614d878cdad /ring.c | |
parent | a81b515484828e0cff848fb7689d4a4b77f020d8 (diff) |
ring: Move generic code for ring layout setup to own function
Initialization of the ring->layout members is the same for RX and TX
rings. Instead of duplicating the code in setup_rx_ring_layout() and
setup_tx_ring_layout(), create a new function
setup_ring_layout_generic() which is called from the former two.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Diffstat (limited to 'ring.c')
-rw-r--r-- | ring.c | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -1,6 +1,7 @@ /* * netsniff-ng - the packet sniffing beast * Copyright 2009, 2010 Daniel Borkmann. + * Copyright 2014, 2015 Tobias Klauser * Subject to the GPL, version 2. */ @@ -19,6 +20,26 @@ #include "ring.h" #include "built_in.h" +void setup_ring_layout_generic(int sock, struct ring *ring, size_t size, + bool jumbo_support) +{ + fmemset(&ring->layout, 0, sizeof(ring->layout)); + + ring->layout.tp_block_size = (jumbo_support ? + RUNTIME_PAGE_SIZE << 4 : + RUNTIME_PAGE_SIZE << 2); + + ring->layout.tp_frame_size = (jumbo_support ? + TPACKET_ALIGNMENT << 12 : + TPACKET_ALIGNMENT << 7); + + ring->layout.tp_block_nr = size / ring->layout.tp_block_size; + ring->layout.tp_frame_nr = ring->layout.tp_block_size / + ring->layout.tp_frame_size * + ring->layout.tp_block_nr; + +} + void mmap_ring_generic(int sock, struct ring *ring) { ring->mm_space = mmap(NULL, ring->mm_len, PROT_READ | PROT_WRITE, |