All of lore.kernel.org
 help / color / mirror / Atom feed
* [libnftnl PATCH] expr: queue: Use snprintf and SNPRINTF_BUFFER_SIZE in snprintf_default functions.
@ 2014-06-16  9:06 Ana Rey
  2014-06-16  9:06 ` [libnftnl PATCH] tests: Add json and xml test file for queue Ana Rey
  2014-06-16 10:15 ` [libnftnl PATCH] expr: queue: Use snprintf and SNPRINTF_BUFFER_SIZE in snprintf_default functions Pablo Neira Ayuso
  0 siblings, 2 replies; 4+ messages in thread
From: Ana Rey @ 2014-06-16  9:06 UTC (permalink / raw)
  To: netfilter-devel; +Cc: Ana Rey

Code refactoring to use snprintf and SNPRINTF_BUFFER_SIZE in
snprintf_default functions. Also, It adapts to the next syntax in queue
(Added in
http://git.netfilter.org/nftables/commit/?id=27619ffbe503ed4d9e59a02e81db9a7ac49d37af)

Here, some examples:

ip test input 31
  [ queue num 3-5 bypass fanout]

ip test input 32 31
  [ queue num 0]

ip test input 33 32
  [ queue num 4]

ip test input 34 33
  [ queue num 2-6 bypass]

table ip test {
	chain input {
		 type filter hook input priority 0;
		 queue num 3-5 bypass fanout
		 queue num 0
		 queue num 4
		 queue num 2-6 bypass
	}
}

Signed-off-by: Ana Rey <anarey@gmail.com>
---
 src/expr/queue.c | 38 ++++++++++++++++++++++----------------
 1 file changed, 22 insertions(+), 16 deletions(-)

diff --git a/src/expr/queue.c b/src/expr/queue.c
index 78540b6..282dc8b 100644
--- a/src/expr/queue.c
+++ b/src/expr/queue.c
@@ -187,24 +187,31 @@ static int nft_rule_expr_queue_snprintf_default(char *buf, size_t len,
 						struct nft_rule_expr *e)
 {
 	struct nft_expr_queue *queue = nft_expr_data(e);
-	int ret;
-	int one = 0;
-
-	ret = snprintf(buf, len, "num %u total %u", queue->queuenum,
-		       queue->queues_total);
-	if (queue->flags) {
-		ret += snprintf(buf + ret, len - ret, " options ");
-		if (queue->flags & NFT_QUEUE_FLAG_BYPASS) {
-			ret += snprintf(buf + ret, len - ret, "bypass");
-			one = 1;
+	int ret, size = len, offset = 0;
+	uint16_t total_queues;
+
+	total_queues = queue->queuenum + queue->queues_total -1;
+
+	ret = snprintf(buf + offset, len, "num %u", queue->queuenum);
+
+	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+
+	if (queue->queues_total && total_queues != queue->queuenum) {
+		ret = snprintf(buf + offset, len, "-%u", total_queues);
+		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+	}
+
+	if (e->flags & (1 << NFT_EXPR_QUEUE_FLAGS)) {
+		if (queue->flags & (NFT_QUEUE_FLAG_BYPASS)) {
+			ret = snprintf(buf + offset, len, " bypass");
+			SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 		}
-		if (queue->flags & NFT_QUEUE_FLAG_CPU_FANOUT) {
-			if (one)
-				ret += snprintf(buf + ret, len - ret, ",");
-			ret += snprintf(buf + ret, len - ret, "fanout");
+		if (queue->flags & (NFT_QUEUE_FLAG_CPU_FANOUT)) {
+			ret = snprintf(buf + offset, len, " fanout");
+			SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
 		}
 	}
-	return ret;
+	return offset;
 }
 
 static int nft_rule_expr_queue_snprintf_xml(char *buf, size_t len,
@@ -213,7 +220,6 @@ static int nft_rule_expr_queue_snprintf_xml(char *buf, size_t len,
 	int ret, size = len, offset = 0;
 	struct nft_expr_queue *queue = nft_expr_data(e);
 
-
 	if (e->flags & (1 << NFT_EXPR_QUEUE_NUM)) {
 		ret = snprintf(buf + offset, len, "<num>%u</num>",
 			       queue->queuenum);
-- 
2.0.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-06-16 10:18 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-16  9:06 [libnftnl PATCH] expr: queue: Use snprintf and SNPRINTF_BUFFER_SIZE in snprintf_default functions Ana Rey
2014-06-16  9:06 ` [libnftnl PATCH] tests: Add json and xml test file for queue Ana Rey
2014-06-16 10:17   ` Pablo Neira Ayuso
2014-06-16 10:15 ` [libnftnl PATCH] expr: queue: Use snprintf and SNPRINTF_BUFFER_SIZE in snprintf_default functions Pablo Neira Ayuso

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.