type: map mapping: "protocol": type: map required: yes mapping: "name": type: str required: yes "shortname": type: str "fields": type: seq required: yes sequence: &fieldsseq - type: map mapping: "field": #field name (best if only one word, for easier referencing) type: str required: yes "desc": #short description type: str "length": #length in bytes, except bitfield is set to true! type: int "bitfield": #if this is true length is in BITS! type: bool "optional": type: bool "repeatable": type: bool "nextlayer": #identifies this field as nextlayer field (see nextlayer definition below) type: bool "data": #data placeholder for next layer type: bool "reference": #reference another protocol directly (e.g. ethpacket->ethframe) type: str "subfields": type: seq sequence: *fieldsseq "osilayer": type: int range: { max: 7, min: 1 } required: yes "nextlayer": #identifier list for next layer protocols type: seq sequence: - type: map mapping: "protocol": type: str required: yes "identifier": type: int required: yes "extension": type: bool "extensions": type: seq sequence: - type: map mapping: "extension": type: map mapping: "name": type: str required: yes "referencedfrom": #referencing field of protocol definition type: str required: yes "referenceid": #reference id used in protocol definition or extension itself type: int required: yes "before": # standard is after the normal protocol structure, but could be used for vlan in ethernet for example. type: str "after": type: str "fields": type: seq sequence: *fieldsseq #"documentation": #todo!