Esempio n. 1
0
static int nftnl_expr_queue_snprintf_default(char *buf, size_t len,
						struct nftnl_expr *e)
{
	struct nftnl_expr_queue *queue = nftnl_expr_data(e);
	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 << NFTNL_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)) {
			ret = snprintf(buf + offset, len, " fanout");
			SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
		}
	}
	return offset;
}
Esempio n. 2
0
static int
nft_expr_ct_snprintf_default(char *buf, size_t size, struct nft_rule_expr *e)
{
	int ret, len = size, offset = 0;
	struct nft_expr_ct *ct = nft_expr_data(e);

	if (e->flags & (1 << NFT_EXPR_CT_SREG)) {
		ret = snprintf(buf, size, "set %s with reg %u ",
				ctkey2str(ct->key), ct->sreg);
		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
	}

	if (e->flags & (1 << NFT_EXPR_CT_DREG)) {
		ret = snprintf(buf, len, "load %s => reg %u ",
			       ctkey2str(ct->key), ct->dreg);
		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
	}

	if (nft_rule_expr_is_set(e, NFT_EXPR_CT_DIR)) {
		ret = snprintf(buf+offset, len, ", dir %s ",
			       ctdir2str(ct->dir));
		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
	}

	return offset;
}
Esempio n. 3
0
File: nat.c Progetto: bazsi/libnftnl
static int
nft_rule_expr_nat_snprintf_default(char *buf, size_t size,
				   struct nft_rule_expr *e)
{
	struct nft_expr_nat *nat = nft_expr_data(e);
	int len = size, offset = 0, ret = 0;

	ret = snprintf(buf, len, "%s ", nat2str(nat->type));
	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);

	ret = snprintf(buf+offset, len, "%s ", nft_family2str(nat->family));
	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);

	if (e->flags & (1 << NFT_EXPR_NAT_REG_ADDR_MIN)) {
		ret = snprintf(buf+offset, len,
			       "addr_min reg %u addr_max reg %u ",
			       nat->sreg_addr_min, nat->sreg_addr_max);
		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
	}

	if (e->flags & (1 << NFT_EXPR_NAT_REG_PROTO_MIN)) {
		ret = snprintf(buf+offset, len,
			       "proto_min reg %u proto_max reg %u ",
			       nat->sreg_proto_min, nat->sreg_proto_max);
		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
	}

	if (e->flags & (1 << NFT_EXPR_NAT_FLAGS)) {
		ret = snprintf(buf+offset, len, "flags %u", nat->flags);
		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
	}

	return offset;
}
Esempio n. 4
0
static int
nftnl_expr_lookup_snprintf_default(char *buf, size_t size,
				      struct nftnl_expr *e)
{
	int len = size, offset = 0, ret;
	struct nftnl_expr_lookup *l = nftnl_expr_data(e);

	ret = snprintf(buf, len, "reg %u set %s ", l->sreg, l->set_name);
	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);


	if (e->flags & (1 << NFTNL_EXPR_LOOKUP_DREG)) {
		ret = snprintf(buf+offset, len, "dreg %u ", l->dreg);
		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
	}

	return offset;
}
Esempio n. 5
0
File: cmp.c Progetto: alvneiayu/task
static int
nft_rule_expr_cmp_snprintf_json(char *buf, size_t size, struct nft_expr_cmp *cmp)
{
	int len = size, offset = 0, ret;

	ret = snprintf(buf, len, "\"sreg\" : %u ,\"op\" : \"%s\", \"cmpdata\" : \"",
		       cmp->sreg, expr_cmp_str[cmp->op]);
	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);

	ret = nft_data_reg_snprintf(buf+offset, len, &cmp->data,
				    NFT_RULE_O_XML, 0, DATA_VALUE);
	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);

	ret = snprintf(buf+offset, len, "\"");
	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);

	return offset;
}
Esempio n. 6
0
File: nat.c Progetto: alvneiayu/task
static int
nft_rule_expr_nat_snprintf_json(char *buf, size_t size,
				struct nft_rule_expr *e)
{
	struct nft_expr_nat *nat = (struct nft_expr_nat *)e->data;
	int len = size, offset = 0, ret = 0;

	switch (nat->type) {
	case NFT_NAT_SNAT:
		ret = snprintf(buf, len,
			"\"type\" : \"NFT_NAT_SNAT\",");
		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
		break;
	case NFT_NAT_DNAT:
		ret = snprintf(buf, len,
			"\"type\" : \"NFT_NAT_DNAT\",");
		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
		break;
	}

	ret = snprintf(buf, len, "\"family\" : \"%s\",",
		       nat->family == AF_INET ? "AF_INET" : "AF_INET6");
	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);

	if (e->flags & (1 << NFT_EXPR_NAT_REG_ADDR_MIN)) {
		ret = snprintf(buf, len, "\"sreg_addr_min_v4\" : %u,"
				" \"sreg_addr_max_v4\" : %u,",
			       nat->sreg_addr_min, nat->sreg_addr_max);
		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
	}

	if (e->flags & (1 << NFT_EXPR_NAT_REG_PROTO_MIN)) {
		ret = snprintf(buf, len, "\"sreg_proto_min\" : %u,"
				"\"sreg_proto_max\" : %u",
		       nat->sreg_proto_min, nat->sreg_proto_max);
		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
	}

	return offset;
}
Esempio n. 7
0
static int nft_rule_expr_log_snprintf_default(char *buf, size_t size,
					      struct nft_rule_expr *e)
{
	struct nft_expr_log *log = nft_expr_data(e);
	int ret, offset = 0, len = size;

	ret = snprintf(buf, len, "prefix %s ", log->prefix);
	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);

	if (e->flags & (1 << NFT_EXPR_LOG_GROUP)) {
		ret = snprintf(buf + offset, len,
			       "group %u snaplen %u qthreshold %u",
			       log->group, log->snaplen, log->qthreshold);
		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
	} else if (e->flags & (1 << NFT_EXPR_LOG_LEVEL)) {
		ret = snprintf(buf + offset, len, "level %u flags %u",
			       log->level, log->flags);
		SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
	}

	return offset;
}
Esempio n. 8
0
static int nft_rule_expr_byteorder_snprintf_default(char *buf, size_t size,
						    struct nft_rule_expr *e)
{
	struct nft_expr_byteorder *byteorder = nft_expr_data(e);
	int len = size, offset = 0, ret;

	ret = snprintf(buf, len, "reg %u = %s(reg %u, %u, %u) ",
		       byteorder->dreg, bo2str(byteorder->op),
		       byteorder->sreg, byteorder->size, byteorder->len);
	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);

	return offset;
}
Esempio n. 9
0
static int nft_rule_expr_bitwise_snprintf_default(char *buf, size_t size,
						  struct nft_rule_expr *e)
{
	struct nft_expr_bitwise *bitwise = nft_expr_data(e);
	int len = size, offset = 0, ret;

	ret = snprintf(buf, len, "reg %u = (reg=%u & ",
		       bitwise->dreg, bitwise->sreg);
	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);

	ret = nft_data_reg_snprintf(buf+offset, len, &bitwise->mask,
				    NFT_OUTPUT_DEFAULT, 0, DATA_VALUE);
	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);

	ret = snprintf(buf+offset, len, ") ^ ");
	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);

	ret = nft_data_reg_snprintf(buf+offset, len, &bitwise->xor,
				    NFT_OUTPUT_DEFAULT, 0, DATA_VALUE);
	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);

	return offset;
}
Esempio n. 10
0
static int nftnl_gen_cmd_snprintf(char *buf, size_t size,
				  const struct nftnl_gen *gen, uint32_t cmd,
				  uint32_t type, uint32_t flags)
{
	int ret, len = size, offset = 0;

	ret = nftnl_cmd_header_snprintf(buf + offset, len, cmd, type, flags);
	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);

	switch(type) {
	case NFTNL_OUTPUT_DEFAULT:
		ret = nftnl_gen_snprintf_default(buf + offset, len, gen);
		break;
	default:
		return -1;
	}
	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);

	ret = nftnl_cmd_footer_snprintf(buf + offset, len, cmd, type, flags);
	SNPRINTF_BUFFER_SIZE(ret, size, len, offset);

	return offset;
}