This series combines the two series submitted earlier since they became closely related in this iteration. Patch 1 fixes a basic problem with cache_flush() after Eric's cache_needs_more() change. Patches 2, 3, 5 and 6 are requirements for patches 4 and 7 which are the interesting ones: Patch 4 restores needed cache entries from command list after a cache update. Patch 7 enables referencing a rule added by the same transaction from another new rule by further exploiting the logic added by patch 4. Changes since v2 of "Resolve cache update woes" and v1 of "Support intra-transaction rule references": - Adjust cache_release() just like cache_flush(). - Split preparation work into separate patches. - Adjust cache_add_commands() for later reuse by rule reference code, also add error handling in case kernel ruleset changes incompatibly. - Finally drop that workaround in tests/json_echo. - Introduce rule_cache_update() as requested. - Avoid fetching a full cache if the new rule does not contain any reference. Phil Sutter (7): src: Fix cache_flush() in cache_needs_more() logic libnftables: Keep list of commands in nft context src: Make {table,chain}_not_found() public src: Restore local entries after cache update rule: Introduce rule_lookup_by_index() src: Make cache_is_complete() public src: Support intra-transaction rule references include/nftables.h | 1 + include/rule.h | 12 ++ src/evaluate.c | 107 +++++++----- src/libnftables.c | 21 ++- src/mnl.c | 4 + src/rule.c | 152 +++++++++++++++++- tests/json_echo/run-test.py | 6 +- .../shell/testcases/cache/0003_cache_update_0 | 7 + .../shell/testcases/nft-f/0006action_object_0 | 2 +- tests/shell/testcases/transactions/0024rule_0 | 17 ++ .../transactions/dumps/0024rule_0.nft | 8 + 11 files changed, 280 insertions(+), 57 deletions(-) create mode 100755 tests/shell/testcases/transactions/0024rule_0 create mode 100644 tests/shell/testcases/transactions/dumps/0024rule_0.nft -- 2.21.0