This repository has been archived on 2020-12-30. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
Marcel 67485f775a updated schema to check if oneOf length, reflength or data is set. 2016-09-18 18:18:22 +02:00
.idea updated schema to check if oneOf length, reflength or data is set. 2016-09-18 18:18:22 +02:00
protocols updated schema to check if oneOf length, reflength or data is set. 2016-09-18 18:18:22 +02:00
.project eclipse .project file (because of the great yaml plugin...) 2015-03-01 11:05:03 +01:00
README.md added clarification why this repository exists 2015-03-15 15:56:07 +01:00
example.yml first working jsonschema (written in yaml...) for the protocol part only. 2016-09-18 16:30:45 +02:00
schema.yml updated schema to check if oneOf length, reflength or data is set. 2016-09-18 18:18:22 +02:00
structure-schema.yml added field prop 'reflength' to reference another field as length info 2015-02-24 20:31:27 +01:00
transition-schema.yml made own schema for layer transition ids and updated protocols and lists 2015-01-04 22:34:34 +01:00
validate.py updated schema to check if oneOf length, reflength or data is set. 2016-09-18 18:18:22 +02:00

README.md

Network Protocol Dictionary

This is a YAML network protocol dictionary for all (binary based) OSI-Layer 1-4 protocols, eg. Ethernet, IP, TCP, UDP, etc.

  • What this dictionary should be:

    • A complete machine readable structure definition dictionary for all binary based network protocols
    • Addon: some protocol documentation from wikipedia or RFCs for display use.
    • A reference for building a network packet from scratch in an application, mostly for applications dealing with network packets.
  • What it is clearly NOT:

    • Currently: complete.
    • A replacement for reading RFCs: Dependencies and constraints are NOT defined in this dictionary
    • A source for implementing network stacks

Why?

I have a project where I want to use a non platform dependent source for network protocol structures so I want to avoid using the defined structures in the OS includes which depend on the operating system used at program execution. Simple, isn't it?

How to add a new protocol

  • Clone.
  • Install ruby+kwalify (gem install kwalify).
  • Check structure-schema.yml.
  • Write protocol file in ./protocols/osi[layer]/[protocolname].yml.
  • Validate structure with 'kwalify -lf structure-schema.yml [path/to/protocolname].yml' or validate all at once with 'kwalify -lf structure-schema.yml ./protocols/osi*/*.yml'.
  • Set up a merge request.
  • Be happy.

How to use this dictionary

Currently not recommended, because the project lacks deeper tests than just schema validation. ;)

  • Clone.
  • Get a YAML library for your program language. Or get a converter for JSON or XML, to use these markup languages.
  • Load desired protocol files, or all of them.
  • Use resulting data structures to build protocol packet structures.

This repository will provide examples or useable code snippets for specific programming languages in the future...