struct list_head expr_list;
char *set_name;
uint32_t set_id;
+ uint32_t dynset_flags;
};
static int
expr = (void *)data;
list_add(&expr->head, &dynset->expr_list);
break;
+ case NFTNL_EXPR_DYNSET_FLAGS:
+ memcpy(&dynset->dynset_flags, data, sizeof(dynset->dynset_flags));
+ break;
default:
return -1;
}
list_for_each_entry(expr, &dynset->expr_list, head)
break;
return expr;
+ case NFTNL_EXPR_DYNSET_FLAGS:
+ *data_len = sizeof(dynset->dynset_flags);
+ return &dynset->dynset_flags;
}
return NULL;
}
case NFTA_DYNSET_SREG_DATA:
case NFTA_DYNSET_SET_ID:
case NFTA_DYNSET_OP:
+ case NFTA_DYNSET_FLAGS:
if (mnl_attr_validate(attr, MNL_TYPE_U32) < 0)
abi_breakage();
break;
mnl_attr_nest_end(nlh, nest1);
}
}
+ if (e->flags & (1 << NFTNL_EXPR_DYNSET_FLAGS))
+ mnl_attr_put_u32(nlh, NFTA_DYNSET_FLAGS,
+ htonl(dynset->dynset_flags));
}
EXPORT_SYMBOL(nftnl_expr_add_expr);
}
e->flags |= (1 << NFTNL_EXPR_DYNSET_EXPRESSIONS);
}
+ if (tb[NFTA_DYNSET_FLAGS]) {
+ dynset->dynset_flags = ntohl(mnl_attr_get_u32(tb[NFTA_DYNSET_FLAGS]));
+ e->flags |= (1 << NFTNL_EXPR_DYNSET_FLAGS);
+ }
return ret;
out_dynset_expr: