-
Notifications
You must be signed in to change notification settings - Fork 390
firewall: T7781: Firewall chains are created when unneeded #4757
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: current
Are you sure you want to change the base?
Conversation
❌ |
CI integration ❌ failed! Details
|
<regex>(drop|accept)</regex> | ||
</constraint> | ||
</properties> | ||
<defaultValue>accept</defaultValue> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The defaultValue
not only serves internally as the default for the code, but also for our documentation. defaultValues
will be automatically attached to the <help>
message during CLI completion.
The is only one "better/ugly/you name it" solution to the problem you identified:
Mangling the dict and removing defaults if required.
vyos-1x/python/vyos/frrender.py
Lines 78 to 83 in 5845c4b
def dict_helper_ospf_defaults(ospf, path): | |
# We have gathered the dict representation of the CLI, but there are default | |
# options which we need to update into the dictionary retrived. | |
default_values = conf.get_config_defaults(path, key_mangling=('-', '_'), | |
get_first_key=True, recursive=True) | |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Generating unnecessary config, just to turn around and delete it so it doesn't cause unintended behavior seems a little backwards to me. It's treating a symptom rather than solving the problem.
Is the only additional concern the help string? I can just manually update it to:
Default-action for rule-set (default: accept)
The defaultValue
has a lot of value within the code, (like for the firewall global settings), but to enable a default value of accept
in python, all that is required was this change (along with deleting the defaultValue
):
default_action = fw_conf.get('default_action', 'accept')
All of the other changes (smoketests, verify(), Jinja2, etc...) would be required regardless of the solution. Does keeping the default value in the XML really buy anything at that point?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the only additional concern the help string? I can just manually update it to:
Currently this is true - but it will (unfortunately until we find a generic solution to this issue) decouple the CLI help string from the internal implementation. I am a fan of a generic solution but yet have no proper idea how to handle this in the firewall context. Thus I tend to agree we go with your implementation.
Please add a <!-- XML COMMENT -->
to the XML help string indicating that the default you define here in the help string is implemented in a different file, so we have a future reference by comment in case anyone starts wondering.
Change summary
This fixes incorrect behavior where the
input/output/forward/prerouting/etc...
chains were created regardless if a user configured them or not. The checks to prevent this were already present in thenftables.j2
Jinja2 template, but it was being skipped due to the<defaultValue>
field fordefault-action
making the checks always pass.This behavior would cause filtering to occur on traffic when there was no intention to filter, effectively slowing down processing.
Types of changes
Related Task(s)
https://vyos.dev/T7781
Related PR(s)
How to test / Smoketest result
Configure a single chain:
Check the chains that are created:
Before fix:
After fix:
Smoketest results:
Checklist: