Needed for upcoming decoder of ethernet proto which is stored in the
host order and has to be converted to the network order before printing
as an xval constant. This change also adds ability to provide
prefix/suffix in order to enclose the printed value in something that
describes the performed conversion.
* nlattr.h (struct decode_nla_xlat_opts): Add prefix, suffix, and
process_fn fields.
* nlattr.c (decode_nla_xval, decode_nla_flags): Handle process_fn,
prefix, snd uffix parameters.
if (len > sizeof(data))
return false;
else if (!umoven_or_printaddr(tcp, addr, len, data.bytes + bytes_offs))
+ {
+ if (opts->process_fn)
+ data.val = opts->process_fn(data.val);
+ if (opts->prefix)
+ tprints(opts->prefix);
printxval_dispatch_ex(opts->xlat, opts->xlat_size, data.val,
opts->dflt, opts->xt, opts->style);
+ if (opts->suffix)
+ tprints(opts->suffix);
+ }
return true;
}
if (len > sizeof(data))
return false;
else if (!umoven_or_printaddr(tcp, addr, len, data.bytes + bytes_offs))
+ {
+ if (opts->process_fn)
+ data.flags = opts->process_fn(data.flags);
+ if (opts->prefix)
+ tprints(opts->prefix);
printflags_ex(data.flags, opts->dflt, opts->style, opts->xlat,
NULL);
+ if (opts->suffix)
+ tprints(opts->suffix);
+ }
return true;
}
const char *dflt;
enum xlat_type xt;
enum xlat_style style;
+ const char *prefix;
+ const char *suffix;
+ uint64_t (*process_fn)(uint64_t val);
};
typedef bool (*nla_decoder_t)(struct tcb *, kernel_ulong_t addr,