On Fri, May 05, 2023 at 02:06:12PM -0400, Laine Stump wrote: > On 5/4/23 6:44 AM, Daniel P. Berrangé wrote: > > On Sun, Apr 30, 2023 at 11:19:33PM -0400, Laine Stump wrote: > > > In the past virFirewall required all rollback rules for a group (those > > > commands necessary to "undo" any rules that had been added in that > > > group in case of a later failure) to be manually added by switching > > > into "rollback mode" and then re-calling the inverse of the exact > > > virFirewallAddRule*() APIs that had been called to add the original > > > rules (ie. for each --insert command, for rollback we would need to > > > add a rule with all arguments identical except that "--insert" would > > > be replaced by "--delete"). > > > > > > Because nftables can't search for rules to remove by comparing all the > > > arguments (it instead expects *only* a handle that was issued when the > > > rule was originally added), we want for the backends' vir*ApplyRule() > > > functions to be able to automatically add a single rollback rule to > > > the virFirewall object while applying its existing rules (this > > > automatically added rule would then be able to include the handle > > > returned by "nft add rule"). > > > > I think the mistake here is that we're trying to replicate the > > iptables approach for rules 1:1. > > Well, my idea was to *initially* replicate it 1:1 so that we could more > easily verify we haven't changed behavior in some way that we might miss > during any testing, but in a way that we could also easily change it later. > > > > > This was required in iptables world because there was only a single > > global set of tables. libvirt's rules were mixed in with rules from > > non-libvirt apps. Libvirt's rules for different virtual networks also > > had to be mixed together, as we needed special ordering for the > > forward rules. > > > > With nft we can drastically simplify this all with two changes to > > our approach > > > > * Each virtual network should have a top level chain > > ie instead of > > > > table ip libvirt > > > > we should have > > > > table ip libvirt_net_default > > My understanding has always been that each packet must get an ACCEPT result > from *all* of the tables, and if this was the case, then what you're > suggesting wouldn't work. Hmmm, actually, you might be right. I'll have to think about this some more, as I sure would love to have the vnet rules independant of each other. With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|