diff options
-rw-r--r-- | trafgen_l3.h | 4 | ||||
-rw-r--r-- | trafgen_proto.c | 11 |
2 files changed, 7 insertions, 8 deletions
diff --git a/trafgen_l3.h b/trafgen_l3.h index a1b1523..e0c9a1c 100644 --- a/trafgen_l3.h +++ b/trafgen_l3.h @@ -10,14 +10,14 @@ enum ip4_field { IP4_LEN, IP4_ID, IP4_FLAGS, + IP4_MF, + IP4_DF, IP4_FRAG_OFFS, IP4_TTL, IP4_PROTO, IP4_CSUM, IP4_SADDR, IP4_DADDR, - IP4_DF, - IP4_MF, }; enum ip6_field { diff --git a/trafgen_proto.c b/trafgen_proto.c index e08c9c2..212e968 100644 --- a/trafgen_proto.c +++ b/trafgen_proto.c @@ -107,13 +107,12 @@ void proto_header_fields_add(struct proto_hdr *hdr, static struct proto_field *proto_field_by_id(struct proto_hdr *hdr, uint32_t fid) { - int i; - - for (i = 0; i < hdr->fields_count; i++) - if (hdr->fields[i].id == fid) - return &hdr->fields[i]; + /* Assume the fields are stored in the same order as the respective + * enum, so the index can be used for faster lookup here. + */ + bug_on(hdr->fields[fid].id != fid); - panic("Failed lookup field id %u for proto id %u\n", fid, hdr->id); + return &hdr->fields[fid]; } bool proto_field_is_set(struct proto_hdr *hdr, uint32_t fid) |