Add expr_set_reg_val_u16 for network port num.
This commit is contained in:
parent
7f57e686d0
commit
c2af2650d9
|
@ -283,15 +283,16 @@ parse_rule_meta(struct nft_rule_expr *e, rule_t *r)
|
||||||
static inline void
|
static inline void
|
||||||
parse_rule_nat(struct nft_rule_expr *e, rule_t *r)
|
parse_rule_nat(struct nft_rule_expr *e, rule_t *r)
|
||||||
{
|
{
|
||||||
uint32_t addr_min_reg, addr_max_reg, proto_min_reg, proto_max_reg;
|
uint32_t addr_min_reg, addr_max_reg;
|
||||||
|
uint16_t proto_min_reg, proto_max_reg;
|
||||||
r->type = RULE_NAT;
|
r->type = RULE_NAT;
|
||||||
|
|
||||||
r->nat_type = nft_rule_expr_get_u32(e, NFT_EXPR_NAT_TYPE);
|
r->nat_type = nft_rule_expr_get_u32(e, NFT_EXPR_NAT_TYPE);
|
||||||
r->family = nft_rule_expr_get_u32(e, NFT_EXPR_NAT_FAMILY);
|
r->family = nft_rule_expr_get_u32(e, NFT_EXPR_NAT_FAMILY);
|
||||||
addr_min_reg = nft_rule_expr_get_u32(e, NFT_EXPR_NAT_REG_ADDR_MIN);
|
addr_min_reg = nft_rule_expr_get_u32(e, NFT_EXPR_NAT_REG_ADDR_MIN);
|
||||||
addr_max_reg = nft_rule_expr_get_u32(e, NFT_EXPR_NAT_REG_ADDR_MAX);
|
addr_max_reg = nft_rule_expr_get_u32(e, NFT_EXPR_NAT_REG_ADDR_MAX);
|
||||||
proto_min_reg = nft_rule_expr_get_u32(e, NFT_EXPR_NAT_REG_PROTO_MIN);
|
proto_min_reg = nft_rule_expr_get_u16(e, NFT_EXPR_NAT_REG_PROTO_MIN);
|
||||||
proto_max_reg = nft_rule_expr_get_u32(e, NFT_EXPR_NAT_REG_PROTO_MAX);
|
proto_max_reg = nft_rule_expr_get_u16(e, NFT_EXPR_NAT_REG_PROTO_MAX);
|
||||||
|
|
||||||
if (addr_min_reg != addr_max_reg ||
|
if (addr_min_reg != addr_max_reg ||
|
||||||
proto_min_reg != proto_max_reg) {
|
proto_min_reg != proto_max_reg) {
|
||||||
|
@ -730,7 +731,7 @@ expr_add_meta(struct nft_rule *r, uint32_t meta_key, uint32_t dreg)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
expr_set_reg_val(struct nft_rule *r, enum nft_registers dreg, uint32_t val)
|
expr_set_reg_val_u32(struct nft_rule *r, enum nft_registers dreg, uint32_t val)
|
||||||
{
|
{
|
||||||
struct nft_rule_expr *e;
|
struct nft_rule_expr *e;
|
||||||
e = nft_rule_expr_alloc("immediate");
|
e = nft_rule_expr_alloc("immediate");
|
||||||
|
@ -743,6 +744,20 @@ expr_set_reg_val(struct nft_rule *r, enum nft_registers dreg, uint32_t val)
|
||||||
nft_rule_add_expr(r, e);
|
nft_rule_add_expr(r, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
expr_set_reg_val_u16(struct nft_rule *r, enum nft_registers dreg, uint32_t val)
|
||||||
|
{
|
||||||
|
struct nft_rule_expr *e;
|
||||||
|
e = nft_rule_expr_alloc("immediate");
|
||||||
|
if (e == NULL) {
|
||||||
|
perror("expr dreg oom");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
nft_rule_expr_set_u32(e, NFT_EXPR_IMM_DREG, dreg);
|
||||||
|
nft_rule_expr_set_u16(e, NFT_EXPR_IMM_DATA, val);
|
||||||
|
nft_rule_add_expr(r, e);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
expr_set_reg_verdict(struct nft_rule *r, uint32_t val)
|
expr_set_reg_verdict(struct nft_rule *r, uint32_t val)
|
||||||
{
|
{
|
||||||
|
@ -773,10 +788,10 @@ expr_add_nat(struct nft_rule *r, uint32_t t, uint32_t family,
|
||||||
nft_rule_expr_set_u32(e, NFT_EXPR_NAT_TYPE, t);
|
nft_rule_expr_set_u32(e, NFT_EXPR_NAT_TYPE, t);
|
||||||
nft_rule_expr_set_u32(e, NFT_EXPR_NAT_FAMILY, family);
|
nft_rule_expr_set_u32(e, NFT_EXPR_NAT_FAMILY, family);
|
||||||
|
|
||||||
expr_set_reg_val(r, NFT_REG_1, (uint32_t)addr_min);
|
expr_set_reg_val_u32(r, NFT_REG_1, (uint32_t)addr_min);
|
||||||
nft_rule_expr_set_u32(e, NFT_EXPR_NAT_REG_ADDR_MIN, NFT_REG_1);
|
nft_rule_expr_set_u32(e, NFT_EXPR_NAT_REG_ADDR_MIN, NFT_REG_1);
|
||||||
nft_rule_expr_set_u32(e, NFT_EXPR_NAT_REG_ADDR_MAX, NFT_REG_1);
|
nft_rule_expr_set_u32(e, NFT_EXPR_NAT_REG_ADDR_MAX, NFT_REG_1);
|
||||||
expr_set_reg_val(r, NFT_REG_2, proto_min);
|
expr_set_reg_val_u16(r, NFT_REG_2, proto_min);
|
||||||
nft_rule_expr_set_u16(e, NFT_EXPR_NAT_REG_PROTO_MIN, NFT_REG_2);
|
nft_rule_expr_set_u16(e, NFT_EXPR_NAT_REG_PROTO_MIN, NFT_REG_2);
|
||||||
nft_rule_expr_set_u16(e, NFT_EXPR_NAT_REG_PROTO_MAX, NFT_REG_2);
|
nft_rule_expr_set_u16(e, NFT_EXPR_NAT_REG_PROTO_MAX, NFT_REG_2);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue