From 787bf5a86e122765d7594151e32a891aed7361ac Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Sat, 20 Apr 2013 11:51:40 +0200 Subject: payload: accept ethertype in hexadecimal You can use the symbols ip, ip6, arp and vlan, or alternatively the ethertype protocol number. Signed-off-by: Pablo Neira Ayuso --- src/payload.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src/payload.c') diff --git a/src/payload.c b/src/payload.c index bcbc0d43..942bc857 100644 --- a/src/payload.c +++ b/src/payload.c @@ -930,6 +930,24 @@ static const struct symbol_table ethertype_tbl = { }, }; +static struct error_record *ethertype_parse(const struct expr *sym, + struct expr **res) +{ + struct error_record *erec; + + erec = sym->dtype->basetype->parse(sym, res); + if (erec != NULL) + return erec; + if (*res) + return NULL; + return symbolic_constant_parse(sym, ðertype_tbl, res); +} + +static void ethertype_print(const struct expr *expr) +{ + return symbolic_constant_print(ðertype_tbl, expr); +} + const struct datatype ethertype_type = { .type = TYPE_ETHERTYPE, .name = "ethertype", @@ -937,7 +955,9 @@ const struct datatype ethertype_type = { .byteorder = BYTEORDER_HOST_ENDIAN, .size = 2 * BITS_PER_BYTE, .basetype = &integer_type, - .sym_tbl = ðertype_tbl, + .basefmt = "0x%.4Zx", + .print = ethertype_print, + .parse = ethertype_parse, }; #define ETHHDR_TEMPLATE(__name, __dtype, __member) \ -- cgit v1.2.3