• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/conntrack-tools/conntrack-tools-1.4.0/include/
1#ifndef _QUEUE_H_
2#define _QUEUE_H_
3
4#include <stdint.h>
5#include "linux_list.h"
6
7struct queue_node {
8	struct list_head	head;
9	uint32_t		type;
10	struct queue		*owner;
11	size_t 			size;
12};
13
14enum {
15	Q_ELEM_OBJ = 0,
16	Q_ELEM_CTL = 1,
17	Q_ELEM_ERR = 2,
18};
19
20void queue_node_init(struct queue_node *n, int type);
21void *queue_node_data(struct queue_node *n);
22
23struct queue_object {
24	struct queue_node	qnode;
25	char			data[0];
26};
27
28struct queue_object *queue_object_new(int type, size_t size);
29void queue_object_free(struct queue_object *obj);
30
31struct evfd;
32
33#define QUEUE_NAMELEN	16
34
35struct queue {
36	struct list_head	list;
37	unsigned int		max_elems;
38	unsigned int		num_elems;
39	uint32_t		enospc_err;
40	uint32_t		flags;
41	struct list_head	head;
42	struct evfd		*evfd;
43	char			name[QUEUE_NAMELEN];
44};
45
46#define QUEUE_F_EVFD (1U << 0)
47
48struct queue *queue_create(const char *name,
49			   int max_objects, unsigned int flags);
50void queue_destroy(struct queue *b);
51void queue_stats_show(int fd);
52unsigned int queue_len(const struct queue *b);
53int queue_add(struct queue *b, struct queue_node *n);
54int queue_del(struct queue_node *n);
55struct queue_node *queue_del_head(struct queue *b);
56int queue_in(struct queue *b, struct queue_node *n);
57void queue_iterate(struct queue *b,
58		   const void *data,
59		   int (*iterate)(struct queue_node *n, const void *data2));
60int queue_get_eventfd(struct queue *b);
61
62#endif
63