Lines Matching refs:ring
52 struct packet_ring *ring = &tunnel->ring; in ring_create() local
53 ring->numblocks = TP_NUM_BLOCKS; in ring_create()
55 int total_frames = TP_FRAMES * ring->numblocks; in ring_create()
60 .tp_block_nr = ring->numblocks, // Number of blocks. in ring_create()
69 size_t buflen = TP_BLOCK_SIZE * ring->numblocks; in ring_create()
70 ring->base = mmap(NULL, buflen, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_LOCKED | MAP_POPULATE, in ring_create()
72 if (ring->base == MAP_FAILED) { in ring_create()
77 ring->block = 0; in ring_create()
78 ring->slot = 0; in ring_create()
79 ring->numslots = TP_BLOCK_SIZE / TP_FRAME_SIZE; in ring_create()
80 ring->next = (struct tpacket2_hdr *)ring->base; in ring_create()
83 buflen, ring->base); in ring_create()
92 static struct tpacket2_hdr *ring_advance(struct packet_ring *ring) { in ring_advance() argument
93 uint8_t *next = (uint8_t *)ring->next; in ring_advance()
95 ring->slot++; in ring_advance()
98 if (ring->slot == ring->numslots) { in ring_advance()
99 ring->slot = 0; in ring_advance()
100 ring->block++; in ring_advance()
102 if (ring->block < ring->numblocks) { in ring_advance()
105 ring->block = 0; in ring_advance()
106 next = (uint8_t *)ring->base; in ring_advance()
110 ring->next = (struct tpacket2_hdr *)next; in ring_advance()
111 return ring->next; in ring_advance()
120 void ring_read(struct packet_ring *ring, int write_fd, int to_ipv6) { in ring_read() argument
121 struct tpacket2_hdr *tp = ring->next; in ring_read()
126 tp = ring_advance(ring); in ring_read()