Skip to content

Commit 1355fe1

Browse files
committed
Merge branch 'tools-ynl-handful-of-forward-looking-updates'
Jakub Kicinski says: ==================== tools: ynl: handful of forward looking updates Small YNL improvements, mostly for work-in-progress families. ==================== Link: https://lore.kernel.org/r/20230824003056.1436637-1-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2 parents 10ea77e + e83d4e9 commit 1355fe1

File tree

5 files changed

+38
-13
lines changed

5 files changed

+38
-13
lines changed

Documentation/netlink/specs/fou.yaml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -107,16 +107,16 @@ operations:
107107
flags: [ admin-perm ]
108108

109109
do:
110-
request: &select_attrs
110+
request: &select_attrs
111111
attributes:
112-
- af
113-
- ifindex
114-
- port
115-
- peer_port
116-
- local_v4
117-
- peer_v4
118-
- local_v6
119-
- peer_v6
112+
- af
113+
- ifindex
114+
- port
115+
- peer_port
116+
- local_v4
117+
- peer_v4
118+
- local_v6
119+
- peer_v6
120120

121121
-
122122
name: get

tools/net/ynl/generated/ethtool-user.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1422,6 +1422,7 @@ ethtool_wol_set_req_set_sopass(struct ethtool_wol_set_req *req,
14221422
const void *sopass, size_t len)
14231423
{
14241424
free(req->sopass);
1425+
req->_present.sopass_len = len;
14251426
req->sopass = malloc(req->_present.sopass_len);
14261427
memcpy(req->sopass, sopass, req->_present.sopass_len);
14271428
}
@@ -4071,6 +4072,7 @@ ethtool_fec_set_req_set_stats_corrected(struct ethtool_fec_set_req *req,
40714072
const void *corrected, size_t len)
40724073
{
40734074
free(req->stats.corrected);
4075+
req->stats._present.corrected_len = len;
40744076
req->stats.corrected = malloc(req->stats._present.corrected_len);
40754077
memcpy(req->stats.corrected, corrected, req->stats._present.corrected_len);
40764078
}
@@ -4079,6 +4081,7 @@ ethtool_fec_set_req_set_stats_uncorr(struct ethtool_fec_set_req *req,
40794081
const void *uncorr, size_t len)
40804082
{
40814083
free(req->stats.uncorr);
4084+
req->stats._present.uncorr_len = len;
40824085
req->stats.uncorr = malloc(req->stats._present.uncorr_len);
40834086
memcpy(req->stats.uncorr, uncorr, req->stats._present.uncorr_len);
40844087
}
@@ -4087,6 +4090,7 @@ ethtool_fec_set_req_set_stats_corr_bits(struct ethtool_fec_set_req *req,
40874090
const void *corr_bits, size_t len)
40884091
{
40894092
free(req->stats.corr_bits);
4093+
req->stats._present.corr_bits_len = len;
40904094
req->stats.corr_bits = malloc(req->stats._present.corr_bits_len);
40914095
memcpy(req->stats.corr_bits, corr_bits, req->stats._present.corr_bits_len);
40924096
}

tools/net/ynl/generated/fou-user.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ fou_add_req_set_local_v6(struct fou_add_req *req, const void *local_v6,
9191
size_t len)
9292
{
9393
free(req->local_v6);
94+
req->_present.local_v6_len = len;
9495
req->local_v6 = malloc(req->_present.local_v6_len);
9596
memcpy(req->local_v6, local_v6, req->_present.local_v6_len);
9697
}
@@ -99,6 +100,7 @@ fou_add_req_set_peer_v6(struct fou_add_req *req, const void *peer_v6,
99100
size_t len)
100101
{
101102
free(req->peer_v6);
103+
req->_present.peer_v6_len = len;
102104
req->peer_v6 = malloc(req->_present.peer_v6_len);
103105
memcpy(req->peer_v6, peer_v6, req->_present.peer_v6_len);
104106
}
@@ -192,6 +194,7 @@ fou_del_req_set_local_v6(struct fou_del_req *req, const void *local_v6,
192194
size_t len)
193195
{
194196
free(req->local_v6);
197+
req->_present.local_v6_len = len;
195198
req->local_v6 = malloc(req->_present.local_v6_len);
196199
memcpy(req->local_v6, local_v6, req->_present.local_v6_len);
197200
}
@@ -200,6 +203,7 @@ fou_del_req_set_peer_v6(struct fou_del_req *req, const void *peer_v6,
200203
size_t len)
201204
{
202205
free(req->peer_v6);
206+
req->_present.peer_v6_len = len;
203207
req->peer_v6 = malloc(req->_present.peer_v6_len);
204208
memcpy(req->peer_v6, peer_v6, req->_present.peer_v6_len);
205209
}
@@ -280,6 +284,7 @@ fou_get_req_set_local_v6(struct fou_get_req *req, const void *local_v6,
280284
size_t len)
281285
{
282286
free(req->local_v6);
287+
req->_present.local_v6_len = len;
283288
req->local_v6 = malloc(req->_present.local_v6_len);
284289
memcpy(req->local_v6, local_v6, req->_present.local_v6_len);
285290
}
@@ -288,6 +293,7 @@ fou_get_req_set_peer_v6(struct fou_get_req *req, const void *peer_v6,
288293
size_t len)
289294
{
290295
free(req->peer_v6);
296+
req->_present.peer_v6_len = len;
291297
req->peer_v6 = malloc(req->_present.peer_v6_len);
292298
memcpy(req->peer_v6, peer_v6, req->_present.peer_v6_len);
293299
}

tools/net/ynl/lib/ynl.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,12 @@ def _add_attr(self, space, name, value):
410410
elif attr["type"] == 'string':
411411
attr_payload = str(value).encode('ascii') + b'\x00'
412412
elif attr["type"] == 'binary':
413-
attr_payload = bytes.fromhex(value)
413+
if isinstance(value, bytes):
414+
attr_payload = value
415+
elif isinstance(value, str):
416+
attr_payload = bytes.fromhex(value)
417+
else:
418+
raise Exception(f'Unknown type for binary attribute, value: {value}')
414419
elif attr['type'] in NlAttr.type_formats:
415420
format = NlAttr.get_format(attr['type'], attr.byte_order)
416421
attr_payload = format.pack(int(value))

tools/net/ynl/ynl-gen-c.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,7 @@ def _attr_get(self, ri, var):
428428

429429
def _setter_lines(self, ri, member, presence):
430430
return [f"free({member});",
431+
f"{presence}_len = len;",
431432
f"{member} = malloc({presence}_len);",
432433
f'memcpy({member}, {self.c_name}, {presence}_len);']
433434

@@ -614,7 +615,7 @@ def __init__(self, family, space_name, type_list=None, inherited=None):
614615

615616
self.attr_list = []
616617
self.attrs = dict()
617-
if type_list:
618+
if type_list is not None:
618619
for t in type_list:
619620
self.attr_list.append((t, self.attr_set[t]),)
620621
else:
@@ -977,7 +978,9 @@ def _load_global_policy(self):
977978

978979
for op_mode in ['do', 'dump']:
979980
if op_mode in op:
980-
global_set.update(op[op_mode].get('request', []))
981+
req = op[op_mode].get('request')
982+
if req:
983+
global_set.update(req.get('attributes', []))
981984

982985
self.global_policy = []
983986
self.global_policy_set = attr_set_name
@@ -1540,7 +1543,14 @@ def parse_rsp_msg(ri, deref=False):
15401543

15411544
ri.cw.write_func_prot('int', f'{op_prefix(ri, "reply", deref=deref)}_parse', func_args)
15421545

1543-
_multi_parse(ri, ri.struct["reply"], init_lines, local_vars)
1546+
if ri.struct["reply"].member_list():
1547+
_multi_parse(ri, ri.struct["reply"], init_lines, local_vars)
1548+
else:
1549+
# Empty reply
1550+
ri.cw.block_start()
1551+
ri.cw.p('return MNL_CB_OK;')
1552+
ri.cw.block_end()
1553+
ri.cw.nl()
15441554

15451555

15461556
def print_req(ri):

0 commit comments

Comments
 (0)