Exemplo n.º 1
0
static int
nftnl_expr_payload_snprintf(char *buf, size_t len, uint32_t type,
			       uint32_t flags, struct nftnl_expr *e)
{
	struct nftnl_expr_payload *payload = nftnl_expr_data(e);

	switch (type) {
	case NFTNL_OUTPUT_DEFAULT:
		if (payload->sreg)
			return snprintf(buf, len, "write reg %u => %ub @ %s header + %u csum_type %u csum_off %u ",
					payload->sreg,
					payload->len, base2str(payload->base),
					payload->offset, payload->csum_type,
					payload->csum_offset);
		else
			return snprintf(buf, len, "load %ub @ %s header + %u => reg %u ",
					payload->len, base2str(payload->base),
					payload->offset, payload->dreg);
	case NFTNL_OUTPUT_XML:
	case NFTNL_OUTPUT_JSON:
		return nftnl_expr_payload_export(buf, len, flags, e, type);
	default:
		break;
	}
	return -1;
}
Exemplo n.º 2
0
static int nftnl_expr_payload_export(char *buf, size_t size, uint32_t flags,
					struct nftnl_expr *e, int type)
{
	struct nftnl_expr_payload *payload = nftnl_expr_data(e);
	NFTNL_BUF_INIT(b, buf, size);

	if (e->flags & (1 << NFTNL_EXPR_PAYLOAD_DREG))
		nftnl_buf_u32(&b, type, payload->dreg, DREG);
	if (e->flags & (1 << NFTNL_EXPR_PAYLOAD_OFFSET))
		nftnl_buf_u32(&b, type, payload->offset, OFFSET);
	if (e->flags & (1 << NFTNL_EXPR_PAYLOAD_LEN))
		nftnl_buf_u32(&b, type, payload->len, LEN);
	if (e->flags & (1 << NFTNL_EXPR_PAYLOAD_BASE))
		nftnl_buf_str(&b, type, base2str(payload->base), BASE);

	return nftnl_buf_done(&b);
}