diff options
Diffstat (limited to 'src/payload.c')
-rw-r--r-- | src/payload.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/payload.c b/src/payload.c index 3bf1ecc7..abd5339c 100644 --- a/src/payload.c +++ b/src/payload.c @@ -172,10 +172,33 @@ struct expr *payload_expr_alloc(const struct location *loc, void payload_init_raw(struct expr *expr, enum proto_bases base, unsigned int offset, unsigned int len) { + enum th_hdr_fields thf; + expr->payload.base = base; expr->payload.offset = offset; expr->len = len; expr->dtype = &integer_type; + + if (base != PROTO_BASE_TRANSPORT_HDR) + return; + if (len != 16) + return; + + switch (offset) { + case 0: + thf = THDR_SPORT; + /* fall through */ + case 16: + if (offset == 16) + thf = THDR_DPORT; + expr->payload.tmpl = &proto_th.templates[thf]; + expr->payload.desc = &proto_th; + expr->dtype = &inet_service_type; + expr->payload.desc = &proto_th; + break; + default: + break; + } } unsigned int payload_hdr_field(const struct expr *expr) |