11 #include <libmnl/libmnl.h> 12 #include <libnftnl/batch.h> 18 uint32_t page_overrun_size;
19 struct list_head page_list;
23 struct list_head head;
24 struct mnl_nlmsg_batch *batch;
36 buf = malloc(batch->page_size + batch->page_overrun_size);
40 page->batch = mnl_nlmsg_batch_start(buf, batch->page_size);
41 if (page->batch == NULL)
55 batch->current_page = page;
57 list_add_tail(&page->head, &batch->page_list);
60 EXPORT_SYMBOL(nftnl_batch_alloc);
61 struct nftnl_batch *nftnl_batch_alloc(uint32_t pg_size, uint32_t pg_overrun_size)
70 batch->page_size = pg_size;
71 batch->page_overrun_size = pg_overrun_size;
72 INIT_LIST_HEAD(&batch->page_list);
74 page = nftnl_batch_page_alloc(batch);
78 nftnl_batch_add_page(page, batch);
85 EXPORT_SYMBOL(nftnl_batch_free);
90 list_for_each_entry_safe(page, next, &batch->page_list, head) {
91 free(mnl_nlmsg_batch_head(page->batch));
92 mnl_nlmsg_batch_stop(page->batch);
99 EXPORT_SYMBOL(nftnl_batch_update);
103 struct nlmsghdr *last_nlh;
105 if (mnl_nlmsg_batch_next(batch->current_page->batch))
108 last_nlh = nftnl_batch_buffer(batch);
110 page = nftnl_batch_page_alloc(batch);
114 nftnl_batch_add_page(page, batch);
116 memcpy(nftnl_batch_buffer(batch), last_nlh, last_nlh->nlmsg_len);
117 mnl_nlmsg_batch_next(batch->current_page->batch);
124 EXPORT_SYMBOL(nftnl_batch_buffer);
125 void *nftnl_batch_buffer(
struct nftnl_batch *batch)
127 return mnl_nlmsg_batch_current(batch->current_page->batch);
130 EXPORT_SYMBOL(nftnl_batch_buffer_len);
131 uint32_t nftnl_batch_buffer_len(
struct nftnl_batch *batch)
133 return mnl_nlmsg_batch_size(batch->current_page->batch);
136 EXPORT_SYMBOL(nftnl_batch_iovec_len);
137 int nftnl_batch_iovec_len(
struct nftnl_batch *batch)
139 int num_pages = batch->num_pages;
142 if (mnl_nlmsg_batch_is_empty(batch->current_page->batch))
148 EXPORT_SYMBOL(nftnl_batch_iovec);
149 void nftnl_batch_iovec(
struct nftnl_batch *batch,
struct iovec *iov,
155 list_for_each_entry(page, &batch->page_list, head) {
159 iov[i].iov_base = mnl_nlmsg_batch_head(page->batch);
160 iov[i].iov_len = mnl_nlmsg_batch_size(page->batch);