summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--trafgen_l3.h4
-rw-r--r--trafgen_proto.c11
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)