mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
tools: ynl-gen: add support for exact-len validation
add support for 'exact-len' validation on netlink attributes. Link: https://github.com/multipath-tcp/mptcp_net-next/issues/340 Acked-by: Matthieu Baerts <matttbe@kernel.org> Signed-off-by: Davide Caratti <dcaratti@redhat.com> Signed-off-by: Mat Martineau <martineau@kernel.org> Link: https://lore.kernel.org/r/20231023-send-net-next-20231023-1-v2-2-16b1f701f900@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
52c121f4bf
commit
0c63ad3795
@ -199,6 +199,9 @@ properties:
|
||||
max-len:
|
||||
description: Max length for a string or a binary attribute.
|
||||
$ref: '#/$defs/len-or-define'
|
||||
exact-len:
|
||||
description: Exact length for a string or a binary attribute.
|
||||
$ref: '#/$defs/len-or-define'
|
||||
sub-type: *attr-type
|
||||
display-hint: &display-hint
|
||||
description: |
|
||||
|
@ -242,6 +242,9 @@ properties:
|
||||
max-len:
|
||||
description: Max length for a string or a binary attribute.
|
||||
$ref: '#/$defs/len-or-define'
|
||||
exact-len:
|
||||
description: Exact length for a string or a binary attribute.
|
||||
$ref: '#/$defs/len-or-define'
|
||||
sub-type: *attr-type
|
||||
display-hint: *display-hint
|
||||
# Start genetlink-c
|
||||
|
@ -172,6 +172,9 @@ properties:
|
||||
max-len:
|
||||
description: Max length for a string or a binary attribute.
|
||||
$ref: '#/$defs/len-or-define'
|
||||
exact-len:
|
||||
description: Exact length for a string or a binary attribute.
|
||||
$ref: '#/$defs/len-or-define'
|
||||
sub-type: *attr-type
|
||||
display-hint: &display-hint
|
||||
description: |
|
||||
|
@ -240,6 +240,9 @@ properties:
|
||||
max-len:
|
||||
description: Max length for a string or a binary attribute.
|
||||
$ref: '#/$defs/len-or-define'
|
||||
exact-len:
|
||||
description: Exact length for a string or a binary attribute.
|
||||
$ref: '#/$defs/len-or-define'
|
||||
sub-type: *attr-type
|
||||
display-hint: *display-hint
|
||||
# Start genetlink-c
|
||||
|
@ -410,10 +410,13 @@ class TypeString(Type):
|
||||
return f'.type = YNL_PT_NUL_STR, '
|
||||
|
||||
def _attr_policy(self, policy):
|
||||
mem = '{ .type = ' + policy
|
||||
if 'max-len' in self.checks:
|
||||
mem += ', .len = ' + str(self.get_limit('max-len'))
|
||||
mem += ', }'
|
||||
if 'exact-len' in self.checks:
|
||||
mem = 'NLA_POLICY_EXACT_LEN(' + str(self.checks['exact-len']) + ')'
|
||||
else:
|
||||
mem = '{ .type = ' + policy
|
||||
if 'max-len' in self.checks:
|
||||
mem += ', .len = ' + str(self.get_limit('max-len'))
|
||||
mem += ', }'
|
||||
return mem
|
||||
|
||||
def attr_policy(self, cw):
|
||||
@ -459,14 +462,17 @@ class TypeBinary(Type):
|
||||
return f'.type = YNL_PT_BINARY,'
|
||||
|
||||
def _attr_policy(self, policy):
|
||||
mem = '{ '
|
||||
if len(self.checks) == 1 and 'min-len' in self.checks:
|
||||
mem += '.len = ' + str(self.get_limit('min-len'))
|
||||
elif len(self.checks) == 0:
|
||||
mem += '.type = NLA_BINARY'
|
||||
if 'exact-len' in self.checks:
|
||||
mem = 'NLA_POLICY_EXACT_LEN(' + str(self.checks['exact-len']) + ')'
|
||||
else:
|
||||
raise Exception('One or more of binary type checks not implemented, yet')
|
||||
mem += ', }'
|
||||
mem = '{ '
|
||||
if len(self.checks) == 1 and 'min-len' in self.checks:
|
||||
mem += '.len = ' + str(self.get_limit('min-len'))
|
||||
elif len(self.checks) == 0:
|
||||
mem += '.type = NLA_BINARY'
|
||||
else:
|
||||
raise Exception('One or more of binary type checks not implemented, yet')
|
||||
mem += ', }'
|
||||
return mem
|
||||
|
||||
def attr_put(self, ri, var):
|
||||
|
Loading…
Reference in New Issue
Block a user